Розгортання вашої першої програми 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?

Зміст

Редагувати сторінку