Schreiben ins Netzwerk
Im vorherigen Abschnitt haben Sie gelernt, wie man Daten aus dem Solana-Netzwerk liest. Jetzt erkunden Sie, wie man Daten darin schreibt. Das Schreiben in das Solana-Netzwerk umfasst das Senden von Transaktionen, die eine oder mehrere Anweisungen enthalten.
Programme (Smart Contracts) verarbeiten diese Anweisungen gemäß ihrer Geschäftslogik für jede entsprechende Anweisung. Wenn Sie eine Transaktion einreichen, führt die Solana-Laufzeit jede Anweisung der Reihe nach und atomar aus (das bedeutet, entweder alle Anweisungen sind erfolgreich oder die gesamte Transaktion schlägt fehl).
In diesem Abschnitt werden Sie zwei grundlegende Beispiele sehen:
- Übertragen von SOL zwischen Konten
- Erstellen eines neuen Tokens
Diese Beispiele zeigen, wie man Transaktionen erstellt und sendet, um Solana- Programme aufzurufen. Weitere Details finden Sie auf den Seiten Transaktionen und Anweisungen und Fee auf Solana.
SOL übertragen
In diesem Beispiel lernen Sie, wie man SOL zwischen zwei Konten überträgt.
Auf Solana hat jedes Konto ein bestimmtes Programm als Eigentümer. Nur der Programm- Eigentümer kann das SOL-Guthaben (Lamport) eines Kontos verringern.
Das System Program ist der Eigentümer aller "Wallet"-Konten. Um SOL zu übertragen, müssen Sie die transfer Anweisung des System Programs aufrufen.
import {LAMPORTS_PER_SOL,SystemProgram,Transaction,sendAndConfirmTransaction,Keypair,Connection} from "@solana/web3.js";const connection = new Connection("http://localhost:8899", "confirmed");const sender = new Keypair();const receiver = new Keypair();const signature = await connection.requestAirdrop(sender.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: receiver.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});const transaction = new Transaction().add(transferInstruction);const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[sender]);console.log("Transaction Signature:", `${transactionSignature}`);
Dies sind die Schritte zum Erstellen von Transaktionen für die Interaktion mit jedem Programm auf Solana.
Erstelle die Anweisung, die du aufrufen möchtest.
const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: receiver.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});
Füge die Anweisung zu einer Transaktion hinzu:
const transaction = new Transaction().add(transferInstruction);
Signiere und sende die Transaktion:
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[sender] // signer keypair);
Token erstellen
In diesem Beispiel lernst du, wie man mit dem Token Extensions Program einen neuen Token auf Solana erstellt. Dies erfordert zwei Anweisungen:
- Rufe das System-Programm auf, um ein neues Konto zu erstellen.
- Rufe das Token Extensions Program auf, um dieses Konto als Mint zu initialisieren.
import {Connection,Keypair,SystemProgram,Transaction,sendAndConfirmTransaction,LAMPORTS_PER_SOL} from "@solana/web3.js";import {MINT_SIZE,TOKEN_2022_PROGRAM_ID,createInitializeMint2Instruction,getMinimumBalanceForRentExemptMint} from "@solana/spl-token";const connection = new Connection("http://localhost:8899", "confirmed");const wallet = new Keypair();// Fund the wallet with SOLconst signature = await connection.requestAirdrop(wallet.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");// Generate keypair to use as address of mint accountconst mint = new Keypair();// Calculate lamports required for rent exemptionconst rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);// Instruction to create new account with space for new mint accountconst createAccountInstruction = SystemProgram.createAccount({fromPubkey: wallet.publicKey,newAccountPubkey: mint.publicKey,space: MINT_SIZE,lamports: rentExemptionLamports,programId: TOKEN_2022_PROGRAM_ID});// Instruction to initialize mint accountconst initializeMintInstruction = createInitializeMint2Instruction(mint.publicKey,2, // decimalswallet.publicKey, // mint authoritywallet.publicKey, // freeze authorityTOKEN_2022_PROGRAM_ID);// Build transaction with instructions to create new account and initialize mint accountconst transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet, // payermint // mint address keypair]);console.log("Mint Account:", `${mint.publicKey}`);console.log("Transaction Signature:", `${transactionSignature}`);
Hier ist eine schrittweise Aufschlüsselung dessen, was das Beispiel macht:
Erstelle eine Verbindung und finanziere die Wallet
const connection = new Connection("http://localhost:8899", "confirmed");const wallet = new Keypair();const signature = await connection.requestAirdrop(wallet.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");
Generiere ein keypair für das Mint account
const mint = new Keypair();
Berechne die minimalen lamports für die Mietbefreiung
const rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);
Erstelle eine Anweisung zum Erstellen eines neuen Kontos
- Reserviere den erforderlichen Speicherplatz für die Speicherung von Mint-Daten
- Übertrage lamports vom Wallet, um das neue Konto zu finanzieren
- Weise den Besitz des Kontos dem Token Extensions Programm zu
(
TOKEN_2022_PROGRAM_ID
)
const createAccountInstruction = SystemProgram.createAccount({fromPubkey: wallet.publicKey,newAccountPubkey: mint.publicKey,space: MINT_SIZE,lamports: rentExemptionLamports,programId: TOKEN_2022_PROGRAM_ID});
Erstelle eine Anweisung zur Initialisierung des Mint account
const initializeMintInstruction = createInitializeMint2Instruction(mint.publicKey,2, // decimalswallet.publicKey, // mint authoritywallet.publicKey, // freeze authorityTOKEN_2022_PROGRAM_ID);
Füge beide Anweisungen zu einer Transaktion hinzu
const transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);
Sende und bestätige die Transaktion mit beiden erforderlichen Signern
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet, mint]);
Gib das Mint account und die Transaktionssignatur aus
console.log("Mint Account:", `${mint.publicKey}`);console.log("Transaction Signature:", `${transactionSignature}`);
Durch die Kombination beider Anweisungen in einer einzigen Transaktion wird sichergestellt, dass die Kontoerstellung und -initialisierung atomar erfolgen. Entweder beide Anweisungen sind erfolgreich oder keine. Dieser Ansatz ist üblich beim Erstellen komplexerer Solana-Transaktionen, da er garantiert, dass alle Anweisungen zusammen ausgeführt werden.
Is this page helpful?