Разверните вашу первую программу Solana

Создайте, разверните и протестируйте вашу первую программу на блокчейне Solana с использованием фреймворка Anchor. Это руководство поможет вам лучше ознакомиться с Solana Playground и подготовит вас к использованию Program Derived Addresses (PDA) и Cross Program Invocation (CPI).

Создание проекта Anchor

  1. Откройте Solana Playground в вашем веб-браузере
  2. В левой панели нажмите + Создать новый проект
  3. Введите Имя проекта
  4. Выберите Anchor (Rust) в качестве фреймворка
  5. Нажмите Создать

Новый проектНовый проект

Исходный файл src/lib.rs откроется. Он содержит одну структуру под названием 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
}

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

  1. Скомпилируйте код программы
Terminal
$
build

Ваш идентификатор программы, определённый в declare_id!(), теперь будет обновлён.

  1. Добавьте SOL в ваш кошелёк (опционально)

Развертывание программы требует наличия SOL в ончейн-аккаунте программы. При необходимости добавьте SOL в ваш кошелёк перед переходом к шагу 3.

  1. Разверните программу в сети
Terminal
$
deploy

После развертывания байт-код программы сохраняется в исполняемом аккаунте программы.

Примечание: Если вы предпочитаете, вы можете использовать кнопки Сборка и Развертывание на левой панели, как показано на скриншоте ниже.

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

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

  1. Откройте тестовый файл под названием 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));
});
});
  1. Запустите тестовый файл
Terminal
$
test
  1. Сохраните хэш транзакции (TxHash), указанный в выводе

(В приведённом выше примере хэш транзакции — это 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc.)

Примечание: Если вам удобнее, вы можете использовать кнопку Test на левой панели.

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

  1. Запустите solana confirm -v [TxHash], чтобы просмотреть журналы транзакций
Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
  1. Просмотрите детали транзакции

Откройте либо SolanaFM, либо Solana Explorer и найдите хэш транзакции.

Solana Explorer: Установите кластер сети на devnet, чтобы он соответствовал кластеру Solana Playground.

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

Закройте программу, чтобы вернуть SOL, выделенные для программы в блокчейне. Для этого выполните solana program close [ProgramID], используя адрес программы, сохранённый в макросе declare_id!().

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

Программы могут быть только закрыты или обновлены аккаунтом с полномочиями на обновление. Ваш кошелёк Playground автоматически становится владельцем полномочий на обновление для каждой программы при её развертывании. Если полномочия на обновление отозваны, программа становится неизменяемой.

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

Следующие шаги

Теперь, когда вы развернули свою первую программу, вы готовы изучить адреса, производные от программ и вызов между программами.

Is this page helpful?

Содержание

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