Развертывание вашей первой программы Solana
В этом разделе вы создадите, развернете и протестируете простую программу Solana (смарт-контракт) с использованием фреймворка Anchor. К концу вы развернете свою первую программу в блокчейне Solana.
Цель этого раздела — познакомить вас с Solana Playground. Руководство рассматривает более подробный пример в разделах Program Derived Address (PDA) и Cross Program Invocation (CPI). Для получения дополнительной информации обратитесь к странице Программы на Solana.
Создание проекта Anchor
Сначала откройте https://beta.solpg.io в новой вкладке браузера.
-
Нажмите кнопку "Create a new project" на левой панели.
-
Введите название проекта, выберите Anchor в качестве фреймворка, затем нажмите кнопку "Create".
Новый проект
Вы увидите созданный новый проект с кодом программы в файле src/lib.rs
.
Эта базовая программа Solana создает новый аккаунт и сохраняет в нем число.
Программа содержит одну инструкцию (initialize
), которая:
- Требует параметр
data: u64
в качестве входных данных - Создает новый аккаунт
- Сохраняет значение параметра
data: u64
в данных аккаунта - Записывает сообщение в программные логи транзакции
use anchor_lang::prelude::*;// This is your program's public key and it will update// automatically when you build the project.declare_id!("11111111111111111111111111111111");#[program]mod hello_anchor {use super::*;pub fn initialize(ctx: Context<Initialize>, data: u64) -> Result<()> {ctx.accounts.new_account.data = data;msg!("Changed data to: {}!", data); // Message will show up in the tx logsOk(())}}#[derive(Accounts)]pub struct Initialize<'info> {// We must specify the space in order to initialize an account.// First 8 bytes are default account discriminator,// next 8 bytes come from NewAccount.data being type u64.// (u64 = 64 bits unsigned integer = 8 bytes)#[account(init,payer = signer,space = 8 + 8)]pub new_account: Account<'info, NewAccount>,#[account(mut)]pub signer: Signer<'info>,pub system_program: Program<'info, System>,}#[account]pub struct NewAccount {data: u64}
Сборка и развертывание программы
Для сборки программы просто выполните build
в терминале. Команда build
компилирует программу. Байт-код программы затем сохраняется в исполняемом
аккаунте программы при развертывании.
$build
Solana Playground обновляет адрес в declare_id!()
. Этот адрес представляет
адрес вашей программы в сети (идентификатор программы).
После сборки программы выполните deploy
в терминале для развертывания
программы в сети (devnet по умолчанию). Развертывание программы требует
выделения SOL для аккаунта в сети, который хранит программу.
Перед развертыванием убедитесь, что у вас достаточно SOL. Вы можете получить SOL
для devnet, либо выполнив solana airdrop 5
в терминале Playground, либо
используя Веб-кран.
$deploy
Вы также можете использовать кнопки Build
и Deploy
на левой панели.
Сборка и развертывание
После развертывания программы вы можете вызывать её инструкции.
Тестирование программы
Стартовый код включает тестовый файл, расположенный в tests/anchor.test.ts
.
Этот файл демонстрирует, как вызвать инструкцию initialize
программы со стороны клиента.
// No imports needed: web3, anchor, pg and more are globally availabledescribe("Test", () => {it("initialize", async () => {// Generate keypair for the new accountconst newAccountKp = new web3.Keypair();// Send transactionconst data = new BN(42);const txHash = await pg.program.methods.initialize(data).accounts({newAccount: newAccountKp.publicKey,signer: pg.wallet.publicKey,systemProgram: web3.SystemProgram.programId}).signers([newAccountKp]).rpc();console.log(`Use 'solana confirm -v ${txHash}' to see the logs`);// Confirm transactionawait pg.connection.confirmTransaction(txHash);// Fetch the created accountconst newAccount = await pg.program.account.newAccount.fetch(newAccountKp.publicKey);console.log("On-chain data is:", newAccount.data.toString());// Check whether the data on-chain is equal to local 'data'assert(data.eq(newAccount.data));});});
Чтобы запустить тестовый файл после развертывания программы, выполните
test
в терминале.
$test
Ищите вывод, подтверждающий успешное прохождение теста.
Вы также можете использовать кнопку Test
на левой панели.
Запуск теста
Затем вы можете просмотреть логи транзакции, выполнив команду
solana confirm -v
и указав хеш транзакции (подпись) из вывода теста:
$solana confirm -v [TxHash]
Например:
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
Вы также можете просмотреть детали транзакции на SolanaFM или Solana Explorer, выполнив поиск по подписи транзакции (хешу).
Не забудьте обновить подключение к кластеру (сети) в используемом Explorer, чтобы оно соответствовало Solana Playground. Solana Playground по умолчанию использует кластер devnet.
Закрытие программы
Наконец, закрытие программы позволяет полностью вернуть SOL, выделенный для программы в сети.
Вы можете закрыть программу, выполнив следующую команду и указав адрес
программы, который находится в declare_id!()
:
$solana program close [ProgramID]
Например:
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
Поздравляем. Вы только что создали и развернули свою первую программу Solana с использованием фреймворка Anchor.
Is this page helpful?