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 ProjektNeues 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
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
}

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.

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

Terminal
$
deploy

Du kannst auch die Schaltflächen Build und Deploy im linken Seitenbereich verwenden.

Build and DeployBuild 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.

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));
});
});

Um die Testdatei nach dem Deployment des Programms auszuführen, führe test im Terminal aus.

Terminal
$
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 TestRun 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:

Terminal
$
solana confirm -v [TxHash]

Zum Beispiel:

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

Terminal
$
solana program close [ProgramID]

Zum Beispiel:

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

Inhaltsverzeichnis

Seite bearbeiten