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 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
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}
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.
$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.
$deploy
Możesz również użyć przycisków Build
i Deploy
na panelu po lewej stronie.
Build 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.
// 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));});});
Aby uruchomić plik testowy po wdrożeniu programu, uruchom test
w
terminalu.
$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 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:
$solana confirm -v [TxHash]
Na przykład:
$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!()
:
$solana program close [ProgramID]
Na przykład:
$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?