Развертывание вашей первой программы 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 в данных аккаунта
  • Записывает сообщение в программные логи транзакции
lib.rs
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 logs
Ok(())
}
}
#[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 компилирует программу. Байт-код программы затем сохраняется в исполняемом аккаунте программы при развертывании.

Terminal
$
build

Solana Playground обновляет адрес в declare_id!(). Этот адрес представляет адрес вашей программы в сети (идентификатор программы).

После сборки программы выполните deploy в терминале для развертывания программы в сети (devnet по умолчанию). Развертывание программы требует выделения SOL для аккаунта в сети, который хранит программу.

Перед развертыванием убедитесь, что у вас достаточно SOL. Вы можете получить SOL для devnet, либо выполнив solana airdrop 5 в терминале Playground, либо используя Веб-кран.

Terminal
$
deploy

Вы также можете использовать кнопки Build и Deploy на левой панели.

Сборка и развертываниеСборка и развертывание

После развертывания программы вы можете вызывать её инструкции.

Тестирование программы

Стартовый код включает тестовый файл, расположенный в tests/anchor.test.ts. Этот файл демонстрирует, как вызвать инструкцию initialize программы со стороны клиента.

anchor.test.ts
// No imports needed: web3, anchor, pg and more are globally available
describe("Test", () => {
it("initialize", async () => {
// Generate keypair for the new account
const newAccountKp = new web3.Keypair();
// Send transaction
const 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 transaction
await pg.connection.confirmTransaction(txHash);
// Fetch the created account
const 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 в терминале.

Terminal
$
test

Ищите вывод, подтверждающий успешное прохождение теста.

Вы также можете использовать кнопку Test на левой панели.

Запуск тестаЗапуск теста

Затем вы можете просмотреть логи транзакции, выполнив команду solana confirm -v и указав хеш транзакции (подпись) из вывода теста:

Terminal
$
solana confirm -v [TxHash]

Например:

Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc

Вы также можете просмотреть детали транзакции на SolanaFM или Solana Explorer, выполнив поиск по подписи транзакции (хешу).

Не забудьте обновить подключение к кластеру (сети) в используемом Explorer, чтобы оно соответствовало Solana Playground. Solana Playground по умолчанию использует кластер devnet.

Закрытие программы

Наконец, закрытие программы позволяет полностью вернуть SOL, выделенный для программы в сети.

Вы можете закрыть программу, выполнив следующую команду и указав адрес программы, который находится в declare_id!():

Terminal
$
solana program close [ProgramID]

Например:

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

Поздравляем. Вы только что создали и развернули свою первую программу Solana с использованием фреймворка Anchor.

Is this page helpful?

Содержание

Редактировать страницу