Distribuisci il tuo primo programma Solana

Costruisci, distribuisci e testa il tuo primo programma sulla blockchain Solana utilizzando il framework Anchor. Questa guida ti aiuterà a familiarizzare con Solana Playground e ti preparerà all'utilizzo dei Program Derived Address (PDA) e delle Cross Program Invocation (CPI).

Crea un progetto Anchor

  1. Apri Solana Playground nel tuo browser web
  2. Nel pannello di sinistra, clicca su + Crea un nuovo progetto
  3. Inserisci un Nome progetto
  4. Seleziona Anchor (Rust) come framework
  5. Clicca su Crea

Nuovo ProgettoNuovo Progetto

Il file sorgente src/lib.rs si aprirà. Contiene una struct chiamata Initialize, che fa quanto segue:

  • Riceve un parametro obbligatorio chiamato data: u64
  • Crea un nuovo account
  • Salva il valore di data: u64 nel nuovo account
  • Aggiunge un messaggio ai log del programma della transazione
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
}

Compila e distribuisci il programma

  1. Compila il codice del programma
Terminal
$
build

Il tuo ID del programma, definito in declare_id!(), sarà ora aggiornato.

  1. Aggiungi SOL al tuo wallet (Opzionale)

La distribuzione di un programma richiede SOL nell'account on-chain del programma. Se necessario, aggiungi SOL al tuo wallet prima di procedere al passaggio 3.

  1. Distribuisci il programma sulla rete
Terminal
$
deploy

Quando viene distribuito, il bytecode del programma viene memorizzato in un program account eseguibile.

Nota: Se preferisci, puoi utilizzare i pulsanti Build e Deploy nel pannello laterale sinistro, come mostrato nello screenshot qui sotto.

Build e DeployBuild e Deploy

Testa il programma

  1. Apri il file di test chiamato tests/anchor.test.ts. Questo file dimostra come invocare la struct initialize del programma dal client.
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. Esegui il file di test
Terminal
$
test
  1. Salva l'hash della transazione (TxHash) incluso nell'output

(Nell'esempio sopra, l'hash della transazione è 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc.)

Nota: Se preferisci, puoi utilizzare il pulsante Test nel pannello laterale sinistro.

Esegui TestEsegui Test

  1. Esegui solana confirm -v [TxHash] per visualizzare i log della transazione
Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
  1. Visualizza i dettagli della transazione

Apri SolanaFM oppure Solana Explorer e cerca l'hash della transazione.

Solana Explorer: Imposta il cluster di rete su devnet, per corrispondere a quello di Solana Playground.

Chiudi il programma

Chiudi il programma per recuperare il SOL allocato al programma on-chain. Per farlo, esegui solana program close [ProgramID], utilizzando l'indirizzo del programma memorizzato nella macro declare_id!().

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

I programmi possono essere solo chiusi o aggiornati da un account con autorità di aggiornamento. Il tuo wallet Playground diventa automaticamente l'autorità di aggiornamento per ogni programma quando viene distribuito. Se l'autorità di aggiornamento viene revocata, il programma diventa immutabile.

Congratulazioni! Hai creato e distribuito il tuo primo programma Solana utilizzando Anchor.

Prossimi passi

Ora che hai distribuito il tuo primo programma, sei pronto per esplorare indirizzi derivati dal programma e invocazione tra programmi.

Is this page helpful?

Indice

Modifica Pagina