Wdrażanie pierwszego programu Solana

W tej sekcji zbudujesz, wdrożysz i przetestujesz prosty program Solana (smart contract) za pomocą frameworka Anchor. Na końcu wdrożysz swój pierwszy program na blockchainie Solana.

Celem tej sekcji jest zapoznanie Cię z Solana Playground. Przewodnik przeprowadza przez bardziej szczegółowy przykład w sekcjach dotyczących Program Derived Address (PDA) i Cross-Program Invocation (CPI). Więcej szczegółów znajdziesz na stronie Programy na Solanie.

Utwórz projekt Anchor

Najpierw otwórz https://beta.solpg.io w nowej karcie przeglądarki.

  • Kliknij przycisk "Create a new project" w panelu po lewej stronie.

  • Wprowadź nazwę projektu, wybierz Anchor jako framework, a następnie kliknij przycisk "Create".

Nowy projektNowy projekt

Zobaczysz nowy projekt utworzony z kodem programu w pliku src/lib.rs.

Ten podstawowy program Solana tworzy nowe konto i zapisuje w nim liczbę. Program zawiera jedną instrukcję (initialize), która:

  • Wymaga parametru data: u64 jako wejścia
  • Tworzy nowe konto
  • Zapisuje wartość parametru data: u64 w danych konta
  • Loguje wiadomość w logach programu transakcji
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
}

Budowanie i wdrażanie programu

Aby zbudować program, wystarczy uruchomić build w terminalu. Polecenie build kompiluje program. Kod bajtowy programu jest następnie przechowywany w koncie programu wykonywalnego po wdrożeniu.

Terminal
$
build

Solana Playground aktualizuje adres w declare_id!(). Ten adres reprezentuje adres programu w łańcuchu bloków (program ID).

Po zbudowaniu programu uruchom deploy w terminalu, aby wdrożyć program do sieci (domyślnie devnet). Wdrożenie programu wymaga alokacji SOL na konto on-chain, które przechowuje program.

Przed wdrożeniem upewnij się, że masz wystarczającą ilość SOL. Możesz zdobyć SOL na devnet, uruchamiając solana airdrop 5 w terminalu Playground lub korzystając z Web Faucet.

Terminal
$
deploy

Możesz również użyć przycisków Build i Deploy na panelu po lewej stronie.

Build and DeployBuild and Deploy

Po wdrożeniu programu możesz wywoływać jego instrukcje.

Testuj program

Kod początkowy zawiera plik testowy znajdujący się w tests/anchor.test.ts. Ten plik demonstruje, jak wywołać instrukcję initialize w programie z poziomu klienta.

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));
});
});

Aby uruchomić plik testowy po wdrożeniu programu, uruchom test w terminalu.

Terminal
$
test

Szukaj wyników, które potwierdzają, że test zakończył się pomyślnie.

Możesz również użyć przycisku Test na panelu po lewej stronie.

Run TestRun Test

Następnie możesz wyświetlić logi transakcji, uruchamiając polecenie solana confirm -v i podając hash (sygnaturę) transakcji z wyników testu:

Terminal
$
solana confirm -v [TxHash]

Na przykład:

Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc

Możesz również wyświetlić szczegóły transakcji na SolanaFM lub Solana Explorer, wyszukując sygnaturę (hash) transakcji.

Pamiętaj, aby zaktualizować połączenie z klastrem (siecią) w Explorerze, którego używasz, aby pasowało do Solana Playground. Solana Playground domyślnie korzysta z klastra devnet.

Zamknij program

Na koniec zamknięcie programu pozwala na pełne odzyskanie SOL przydzielonych do programu on-chain.

Możesz zamknąć program, uruchamiając następujące polecenie i podając adres programu znaleziony w declare_id!():

Terminal
$
solana program close [ProgramID]

Na przykład:

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

Gratulacje. Właśnie stworzyłeś i wdrożyłeś swój pierwszy program Solana, korzystając z frameworka Anchor.

Is this page helpful?

Spis treści

Edytuj stronę