Je eerste Solana-programma implementeren
Bouw, implementeer en test je eerste programma op de Solana Blockchain met behulp van het Anchor-framework. Deze gids helpt je vertrouwd te raken met de Solana Playground en bereidt je voor op het gebruik van Program Derived Addresses (PDA) en Cross Program Invocation (CPI).
Anchor-project aanmaken
- Open de Solana Playground in je webbrowser
- Klik in het linkerpaneel op + Create a new project
- Voer een Project name in
- Selecteer Anchor (Rust) als framework
- Klik op Create
Nieuw project
Het bronbestand src/lib.rs
wordt geopend. Het bevat één struct genaamd
Initialize
, die het volgende doet:
- Ontvangt een vereiste parameter genaamd
data: u64
- Maakt een nieuw account aan
- Slaat de waarde van
data: u64
op in het nieuwe account - Voegt een bericht toe aan 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}
Het programma bouwen en implementeren
- Compileer de programmacode
$build
Je programma-ID, gedefinieerd in
declare_id!()
, zal nu worden bijgewerkt.
- Voeg SOL toe aan je wallet (Optioneel)
Het implementeren van een programma vereist SOL in het on-chain account van het programma. Indien nodig, voeg SOL toe aan je wallet voordat je verdergaat naar stap 3.
- Implementeer het programma op het netwerk
$deploy
Wanneer het programma wordt geïmplementeerd, wordt de bytecode van het programma opgeslagen in een uitvoerbaar program account.
Opmerking: Indien gewenst, kun je ook de knoppen Build en Deploy gebruiken in het paneel aan de linkerkant, zoals weergegeven in de onderstaande schermafbeelding.
Build en Deploy
Het programma testen
- Open het testbestand genaamd
tests/anchor.test.ts
. Dit bestand laat zien hoe je deinitialize
struct 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));});});
- Voer het testbestand uit
$test
- Bewaar de transactie-hash (
TxHash
) die in de output is opgenomen
(In het bovenstaande voorbeeld is de transactie-hash
3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
.)
Opmerking: Indien gewenst kun je de knop Test
in het linkerpaneel
gebruiken.
Test uitvoeren
- Voer
solana confirm -v [TxHash]
uit om de transactielogs te bekijken
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
- Bekijk de transactiedetails
Open ofwel SolanaFM of Solana Explorer en zoek naar de transactie-hash.
Solana Explorer: Stel de netwerkcluster in op devnet
, zodat deze
overeenkomt met die van de Solana Playground.
Sluit het programma
Sluit het programma om de SOL terug te krijgen die is toegewezen aan het
on-chain programma. Voer solana program close [ProgramID]
uit, met het
programma-adres dat is opgeslagen in de declare_id!()
macro.
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
Programma's kunnen alleen worden gesloten of bijgewerkt door een account met upgrade authority. Je Playground-wallet wordt automatisch de upgrade authority voor elk programma wanneer het wordt geïmplementeerd. Als de upgrade authority wordt ingetrokken, wordt het programma onveranderlijk.
Gefeliciteerd! Je hebt je eerste Solana-programma gebouwd en geïmplementeerd met Anchor.
Volgende stappen
Nu je je eerste programma hebt geïmplementeerd, ben je klaar om program-derived addresses en cross-program invocation te verkennen.
Is this page helpful?