Разверните вашу первую программу Solana
Создайте, разверните и протестируйте вашу первую программу на блокчейне Solana с использованием фреймворка Anchor. Это руководство поможет вам лучше ознакомиться с Solana Playground и подготовит вас к использованию Program Derived Addresses (PDA) и Cross Program Invocation (CPI).
Создание проекта Anchor
- Откройте Solana Playground в вашем веб-браузере
- В левой панели нажмите + Создать новый проект
- Введите Имя проекта
- Выберите Anchor (Rust) в качестве фреймворка
- Нажмите Создать
Новый проект
Исходный файл src/lib.rs
откроется. Он содержит одну структуру под названием
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
Ваш идентификатор программы,
определённый в declare_id!()
, теперь будет обновлён.
- Добавьте SOL в ваш кошелёк (опционально)
Развертывание программы требует наличия SOL в ончейн-аккаунте программы. При необходимости добавьте SOL в ваш кошелёк перед переходом к шагу 3.
- Разверните программу в сети
$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
- Сохраните хэш транзакции (
TxHash
), указанный в выводе
(В приведённом выше примере хэш транзакции — это
3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
.)
Примечание: Если вам удобнее, вы можете использовать кнопку Test
на левой
панели.
Запуск теста
- Запустите
solana confirm -v [TxHash]
, чтобы просмотреть журналы транзакций
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
- Просмотрите детали транзакции
Откройте либо SolanaFM, либо Solana Explorer и найдите хэш транзакции.
Solana Explorer: Установите кластер сети на devnet
, чтобы он
соответствовал кластеру Solana Playground.
Закрытие программы
Закройте программу, чтобы вернуть SOL, выделенные для программы в блокчейне. Для
этого выполните solana program close [ProgramID]
, используя адрес программы,
сохранённый в макросе declare_id!()
.
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
Программы могут быть только закрыты или обновлены аккаунтом с полномочиями на обновление. Ваш кошелёк Playground автоматически становится владельцем полномочий на обновление для каждой программы при её развертывании. Если полномочия на обновление отозваны, программа становится неизменяемой.
Поздравляем! Вы создали и развернули свою первую программу Solana с использованием Anchor.
Следующие шаги
Теперь, когда вы развернули свою первую программу, вы готовы изучить адреса, производные от программ и вызов между программами.
Is this page helpful?