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

  1. Open de Solana Playground in je webbrowser
  2. Klik in het linkerpaneel op + Create a new project
  3. Voer een Project name in
  4. Selecteer Anchor (Rust) als framework
  5. Klik op Create

Nieuw projectNieuw 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
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
}

Het programma bouwen en implementeren

  1. Compileer de programmacode
Terminal
$
build

Je programma-ID, gedefinieerd in declare_id!(), zal nu worden bijgewerkt.

  1. 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.

  1. Implementeer het programma op het netwerk
Terminal
$
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 DeployBuild en Deploy

Het programma testen

  1. Open het testbestand genaamd tests/anchor.test.ts. Dit bestand laat zien hoe je de initialize struct van het programma kunt aanroepen vanaf de 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. Voer het testbestand uit
Terminal
$
test
  1. 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 uitvoerenTest uitvoeren

  1. Voer solana confirm -v [TxHash] uit om de transactielogs te bekijken
Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
  1. 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.

Terminal
$
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?

Inhoudsopgave

Pagina Bewerken