Bereitstellung Ihres ersten Solana-Programms
In diesem Abschnitt werden Sie ein einfaches Solana-Programm (Smart Contract) mit dem Anchor-Framework erstellen, bereitstellen und testen. Am Ende haben Sie Ihr erstes Programm auf der Solana-Blockchain bereitgestellt.
Der Zweck dieses Abschnitts konzentriert sich darauf, Sie mit dem Solana Playground vertraut zu machen. Die Anleitung führt durch ein detaillierteres Beispiel in den Abschnitten Program Derived Address (PDA) und Cross Program Invocation (CPI). Weitere Details finden Sie auf der Seite Programme auf Solana.
Anchor-Projekt erstellen
Öffnen Sie zunächst https://beta.solpg.io in einem neuen Browser-Tab.
-
Klicken Sie auf die Schaltfläche "Create a new project" im linken Seitenbereich.
-
Geben Sie einen Projektnamen ein, wählen Sie Anchor als Framework und klicken Sie dann auf die Schaltfläche "Create".
Neues Projekt
Sie sehen ein neues Projekt, das mit dem Programmcode in der Datei src/lib.rs
erstellt wurde.
Dieses grundlegende Solana-Programm erstellt ein neues Konto und speichert eine
Zahl darin. Das Programm enthält eine Anweisung (initialize
), die:
- Einen Parameter
data: u64
als Eingabe erfordert - Ein neues Konto erstellt
- Den Wert des Parameters
data: u64
in den Daten des Kontos speichert - Eine Nachricht in den Programmlogs der Transaktion protokolliert
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}
Programm bauen und bereitstellen
Um das Programm zu bauen, führe einfach build
im Terminal aus. Der Befehl
build
kompiliert das Programm. Der Programm-Bytecode wird dann bei der
Bereitstellung in einem ausführbaren Programmkonto gespeichert.
$build
Solana Playground aktualisiert die Adresse in declare_id!()
. Diese Adresse
repräsentiert die On-Chain-Adresse deines Programms (Programm-ID).
Nach dem Erstellen des Programms führe deploy
im Terminal aus, um das
Programm im Netzwerk zu deployen (standardmäßig auf devnet). Das Deployment
eines Programms erfordert die Zuweisung von SOL zum On-Chain-Konto, das das
Programm speichert.
Stelle vor dem Deployment sicher, dass du genügend SOL hast. Du kannst devnet
SOL entweder durch Ausführen von solana airdrop 5
im
Playground-Terminal oder über den Web Faucet
erhalten.
$deploy
Du kannst auch die Schaltflächen Build
und Deploy
im linken Seitenbereich
verwenden.
Build and Deploy
Nach dem Deployment des Programms kannst du dessen Anweisungen aufrufen.
Programm testen
Der Starter-Code enthält eine Testdatei in tests/anchor.test.ts
. Diese Datei
zeigt, wie man die initialize
Anweisung des Programms vom
Client aus aufruft.
// 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));});});
Um die Testdatei nach dem Deployment des Programms auszuführen, führe
test
im Terminal aus.
$test
Achte auf eine Ausgabe, die bestätigt, dass der Test erfolgreich bestanden wurde.
Du kannst auch die Schaltfläche Test
im linken Seitenbereich verwenden.
Run Test
Du kannst dann die Transaktionslogs anzeigen, indem du den Befehl
solana confirm -v
ausführst und den Transaktions-Hash (Signatur) aus der
Testausgabe angibst:
$solana confirm -v [TxHash]
Zum Beispiel:
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
Du kannst die Transaktionsdetails auch auf SolanaFM oder Solana Explorer einsehen, indem du nach der Transaktionssignatur (Hash) suchst.
Denke daran, die Cluster-Verbindung (Netzwerk) im verwendeten Explorer an Solana Playground anzupassen. Solana Playground verwendet standardmäßig den devnet-Cluster.
Programm schließen
Schließlich ermöglicht das Schließen des Programms die vollständige Rückgewinnung des SOL, das dem On-Chain-Programm zugewiesen wurde.
Sie können ein Programm schließen, indem Sie den folgenden Befehl ausführen und
die Programmadresse angeben, die in declare_id!()
zu finden ist:
$solana program close [ProgramID]
Zum Beispiel:
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
Herzlichen Glückwunsch. Sie haben gerade Ihr erstes Solana-Programm mit dem Anchor-Framework erstellt und deployed.
Is this page helpful?