Distribuzione del tuo primo programma Solana
In questa sezione, costruirai, distribuirai e testerai un semplice programma Solana (smart contract) utilizzando il framework Anchor. Alla fine, avrai distribuito il tuo primo programma sulla blockchain Solana.
Lo scopo di questa sezione è familiarizzare con Solana Playground. La guida illustra un esempio più dettagliato nelle sezioni Program Derived Address (PDA) e Cross Program Invocation (CPI). Per maggiori dettagli, consulta la pagina Programmi su Solana.
Crea un progetto Anchor
Prima, apri https://beta.solpg.io in una nuova scheda del browser.
-
Clicca sul pulsante "Create a new project" nel pannello laterale sinistro.
-
Inserisci un nome per il progetto, seleziona Anchor come framework, quindi clicca sul pulsante "Create".
Nuovo progetto
Vedrai un nuovo progetto creato con il codice del programma nel file
src/lib.rs
.
Questo programma Solana di base crea un nuovo account e memorizza un numero al
suo interno. Il programma contiene un'istruzione (initialize
) che:
- Richiede un parametro
data: u64
come input - Crea un nuovo account
- Salva il valore del parametro
data: u64
nei dati dell'account - Registra un messaggio nei log del programma della transazione
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}
Compilare e distribuire il programma
Per compilare il programma, esegui semplicemente build
nel terminale. Il
comando build
compila il programma. Il bytecode del programma viene quindi
memorizzato in un account di programma eseguibile quando viene distribuito.
$build
Solana Playground aggiorna l'indirizzo in declare_id!()
. Questo indirizzo
rappresenta l'indirizzo on-chain del tuo programma (program ID).
Dopo aver compilato il programma, esegui deploy
nel terminale per
distribuire il programma sulla rete (devnet per impostazione predefinita). La
distribuzione del programma richiede l'allocazione di SOL all'account on-chain
che memorizza il programma.
Prima della distribuzione, assicurati di avere abbastanza SOL. Puoi ottenere SOL
sulla devnet eseguendo solana airdrop 5
nel terminale di Playground
oppure utilizzando il Web Faucet.
$deploy
Puoi anche utilizzare i pulsanti Build
e Deploy
nel pannello laterale
sinistro.
Build and Deploy
Dopo aver distribuito il programma, puoi chiamare le sue istruzioni.
Test del programma
Il codice iniziale include un file di test situato in tests/anchor.test.ts
.
Questo file dimostra come invocare l'istruzione initialize
sul
programma dal client.
// 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));});});
Per eseguire il file di test dopo aver distribuito il programma, esegui
test
nel terminale.
$test
Cerca nell'output la conferma che il test sia stato superato con successo.
Puoi anche utilizzare il pulsante Test
nel pannello laterale sinistro.
Run Test
Puoi quindi visualizzare i log delle transazioni eseguendo il comando
solana confirm -v
e specificando l'hash della transazione (firma) dall'output
del test:
$solana confirm -v [TxHash]
Per esempio:
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
Puoi anche visualizzare i dettagli della transazione su SolanaFM o Solana Explorer cercando la firma della transazione (hash).
Ricordati di aggiornare la connessione al cluster (rete) sull'Explorer che utilizzi per farla corrispondere a Solana Playground. Solana Playground utilizza il cluster devnet per impostazione predefinita.
Chiusura del programma
Infine, chiudere il programma consente il recupero completo del SOL allocato al programma on-chain.
Puoi chiudere un programma eseguendo il seguente comando e specificando
l'indirizzo del programma trovato in declare_id!()
:
$solana program close [ProgramID]
Per esempio:
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
Congratulazioni. Hai appena creato e distribuito il tuo primo programma Solana utilizzando il framework Anchor.
Is this page helpful?