Je eerste Solana-programma implementeren
In dit gedeelte ga je een eenvoudig Solana-programma (smart contract) bouwen, implementeren en testen met behulp van het Anchor-framework. Aan het einde heb je je eerste programma op de Solana-blockchain geïmplementeerd.
Het doel van dit gedeelte is om je vertrouwd te maken met de Solana Playground. De gids behandelt een gedetailleerder voorbeeld in de secties over Program Derived Address (PDA) en Cross-Program Invocation (CPI). Voor meer details, raadpleeg de pagina Programma's op Solana.
Anchor-project aanmaken
Open eerst https://beta.solpg.io in een nieuw browsertabblad.
-
Klik op de knop "Create a new project" in het linkerpaneel.
-
Voer een projectnaam in, selecteer Anchor als framework en klik vervolgens op de knop "Create".
Nieuw project
Je ziet dat er een nieuw project is aangemaakt met de programmacode in het
bestand src/lib.rs
.
Dit basale Solana-programma maakt een nieuw account aan en slaat er een getal in
op. Het programma bevat één instructie (initialize
) die:
- Een
data: u64
parameter als invoer vereist - Een nieuw account aanmaakt
- De waarde van de
data: u64
parameter opslaat in de gegevens van het account - Een bericht logt naar de programmalogs van de transactie
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}
Programma bouwen en implementeren
Om het programma te bouwen, voer je eenvoudig build
uit in de terminal. Het
build
commando compileert het programma. De programma bytecode wordt
vervolgens opgeslagen in een uitvoerbaar programma-account wanneer het wordt
geïmplementeerd.
$build
Solana Playground werkt het adres bij in declare_id!()
. Dit adres
vertegenwoordigt het on-chain adres van je programma (program ID).
Na het bouwen van het programma, voer deploy
uit in de terminal om het
programma naar het netwerk te deployen (standaard naar devnet). Voor
programma-deployment is het nodig om SOL toe te wijzen aan het on-chain account
dat het programma opslaat.
Zorg voor voldoende SOL vóór deployment. Je kunt devnet SOL krijgen door
solana airdrop 5
uit te voeren in de Playground terminal of door de
Web Faucet te gebruiken.
$deploy
Je kunt ook de knoppen Build
en Deploy
gebruiken in het linkerzijpaneel.
Build and Deploy
Na het deployen van het programma kun je de instructies ervan aanroepen.
Programma testen
De starterscode bevat een testbestand in tests/anchor.test.ts
. Dit bestand
laat zien hoe je de initialize
instructie van het programma
kunt aanroepen vanaf de 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));});});
Om het testbestand uit te voeren na het deployen van het programma, voer
test
uit in de terminal.
$test
Zoek naar output die bevestigt dat de test succesvol is geslaagd.
Je kunt ook de knop Test
gebruiken in het linkerzijpaneel.
Run Test
Je kunt vervolgens de transactielogs bekijken door het commando
solana confirm -v
uit te voeren en de transactiehash (handtekening) uit de
testoutput op te geven:
$solana confirm -v [TxHash]
Bijvoorbeeld:
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
Je kunt de transactiedetails ook bekijken op SolanaFM of Solana Explorer door te zoeken naar de transactiehandtekening (hash).
Vergeet niet om de cluster (netwerk) verbinding op de Explorer die je gebruikt aan te passen zodat deze overeenkomt met Solana Playground. Solana Playground gebruikt standaard de devnet cluster.
Programma sluiten
Ten slotte maakt het sluiten van het programma volledige terugwinning mogelijk van de SOL die is toegewezen aan het on-chain programma.
Je kunt een programma sluiten door het volgende commando uit te voeren en het
programma-adres op te geven dat je vindt in declare_id!()
:
$solana program close [ProgramID]
Bijvoorbeeld:
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
Gefeliciteerd. Je hebt zojuist je eerste Solana-programma gebouwd en gedeployed met behulp van het Anchor-framework.
Is this page helpful?