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: u64op 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 deinitializestruct 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?