Schreiben ins Netzwerk

Im vorherigen Abschnitt hast du gelernt, wie man Daten aus dem Solana-Netzwerk liest. Jetzt lernst du, wie man Daten in das Netzwerk schreibt. Das Schreiben ins Solana-Netzwerk beinhaltet das Senden von Transaktionen, die eine oder mehrere Anweisungen enthalten.

Programme definieren die Geschäftslogik für das, was jede Anweisung tut. Wenn du eine Transaktion übermittelst, führt die Solana-Laufzeitumgebung jede Anweisung sequentiell und atomar aus. Die Beispiele in diesem Abschnitt zeigen, wie man Transaktionen erstellt und sendet, um Solana-Programme aufzurufen, darunter:

  1. Übertragen von SOL zwischen Konten
  2. Erstellen eines neuen Tokens

SOL übertragen

Das folgende Beispiel überträgt SOL zwischen zwei Konten. Jedes Konto hat ein Eigentümer- Programm, welches das einzige Programm ist, das den SOL-Kontostand des Kontos verringern kann.

Alle Wallet-Konten gehören dem System Program. Um SOL zu übertragen, musst du die transfer-Anweisung des System Programs aufrufen.

Transfer SOL
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}`);
const senderBalance = await connection.getBalance(sender.publicKey);
const receiverBalance = await connection.getBalance(receiver.publicKey);
console.log("Sender Balance:", `${senderBalance}`);
console.log("Receiver Balance:", `${receiverBalance}`);
Console
Click to execute the code.

Erstelle einen Connection, um das Senden von Transaktionen und das Abrufen von Kontendaten zu verwalten.

In diesem Beispiel verbinden wir uns mit dem lokalen Test-Validator, der auf localhost:8899 läuft.

Connection
const connection = new Connection("http://localhost:8899", "confirmed");

Generiere neue Schlüsselpaare, die als Sender- und Empfängerkonten verwendet werden sollen.

Generate keypairs
const sender = new Keypair();
const receiver = new Keypair();

Füge SOL zum Senderkonto hinzu. Auf anderen Netzwerken als dem Mainnet kannst du die requestAirdropMethode verwenden, um SOL für Tests zu erhalten.

Airdrop
const signature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

Die SystemProgram.transfer()Methode erstellt eine Anweisung, die SOL vom fromPubkey-Konto zum toPubkey- Konto für die angegebene Anzahl von lamports überträgt.

Transfer instruction
const transferInstruction = SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: receiver.publicKey,
lamports: 0.01 * LAMPORTS_PER_SOL
});

Erstelle eine Transaktion und füge die Anweisung zur Transaktion hinzu. In diesem Beispiel erstellen wir eine Transaktion mit einer einzelnen Anweisung. Du kannst jedoch mehrere Anweisungen zu einer Transaktion hinzufügen.

Transaction
const transaction = new Transaction().add(transferInstruction);

Signiere und sende die Transaktion an das Netzwerk. Das Sender keypair wird im signers-Array benötigt, um die Überweisung von SOL von seinem Konto zu autorisieren.

Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender]
);

Die Transaktionssignatur ist eine eindeutige Kennung, die verwendet werden kann, um die Transaktion im Solana Explorer nachzuschlagen.

Erstelle einen Connection, um das Senden von Transaktionen und das Abrufen von Kontendaten zu verwalten.

In diesem Beispiel verbinden wir uns mit dem lokalen Test-Validator, der auf localhost:8899 läuft.

Connection
const connection = new Connection("http://localhost:8899", "confirmed");

Generiere neue Schlüsselpaare, die als Sender- und Empfängerkonten verwendet werden sollen.

Generate keypairs
const sender = new Keypair();
const receiver = new Keypair();

Füge SOL zum Senderkonto hinzu. Auf anderen Netzwerken als dem Mainnet kannst du die requestAirdropMethode verwenden, um SOL für Tests zu erhalten.

Airdrop
const signature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

Die SystemProgram.transfer()Methode erstellt eine Anweisung, die SOL vom fromPubkey-Konto zum toPubkey- Konto für die angegebene Anzahl von lamports überträgt.

Transfer instruction
const transferInstruction = SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: receiver.publicKey,
lamports: 0.01 * LAMPORTS_PER_SOL
});

Erstelle eine Transaktion und füge die Anweisung zur Transaktion hinzu. In diesem Beispiel erstellen wir eine Transaktion mit einer einzelnen Anweisung. Du kannst jedoch mehrere Anweisungen zu einer Transaktion hinzufügen.

Transaction
const transaction = new Transaction().add(transferInstruction);

Signiere und sende die Transaktion an das Netzwerk. Das Sender keypair wird im signers-Array benötigt, um die Überweisung von SOL von seinem Konto zu autorisieren.

Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender]
);

Die Transaktionssignatur ist eine eindeutige Kennung, die verwendet werden kann, um die Transaktion im Solana Explorer nachzuschlagen.

Transfer SOL
import {
LAMPORTS_PER_SOL,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
Keypair,
Connection
} from "@solana/web3.js";
const connection = new Connection("http://localhost:8899", "confirmed");

Einen Token erstellen

Das folgende Beispiel erstellt einen neuen Token auf Solana mit dem Token Extensions Program. Dies erfordert zwei Anweisungen:

  1. Aufruf des System Programs, um ein neues Konto zu erstellen.
  2. Aufruf des Token Extensions Programs, um dieses Konto als Mint zu initialisieren.
Create mint account
import {
Connection,
Keypair,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
LAMPORTS_PER_SOL
} from "@solana/web3.js";
import {
MINT_SIZE,
TOKEN_2022_PROGRAM_ID,
createInitializeMint2Instruction,
getMinimumBalanceForRentExemptMint,
getMint
} from "@solana/spl-token";
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
// Fund the wallet with SOL
const signature = await connection.requestAirdrop(
wallet.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");
// Generate keypair to use as address of mint account
const mint = new Keypair();
// Calculate lamports required for rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);
// Instruction to create new account with space for new mint account
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});
// Instruction to initialize mint account
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2, // decimals
wallet.publicKey, // mint authority
wallet.publicKey, // freeze authority
TOKEN_2022_PROGRAM_ID
);
// Build transaction with instructions to create new account and initialize mint account
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet, // payer
mint // mint address keypair
]
);
console.log("Transaction Signature:", `${transactionSignature}`);
const mintData = await getMint(
connection,
mint.publicKey,
"confirmed",
TOKEN_2022_PROGRAM_ID
);
);
Console
Click to execute the code.

Die Erstellung eines Tokens erfordert die Verwendung der @solana/web3.js und @solana/spl-token Bibliotheken. Der Code im folgenden Beispiel wird:

  • Eine Verbindung erstellen
  • Ein keypair generieren, um die Transaktion zu bezahlen
  • Einen Airdrop anfordern, um das keypair zu finanzieren
Connection & wallet setup
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. Der öffentliche Schlüssel wird als Adresse des mint accounts verwendet.

Mint keypair
const mint = new Keypair();

Berechne die minimalen lamports, die für ein mint account erforderlich sind. Die getMinimumBalanceForRentExemptMint Funktion berechnet, wie viele lamport für die Daten auf einem mint account zugewiesen werden müssen.

Rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

Die erste Anweisung ruft die createAccount Anweisung des System Programs auf, um:

  1. Anzahl der Bytes zuweisen, die zum Speichern der Mint-Daten benötigt werden.
  2. Lamports übertragen vom Wallet, um das neue Konto zu finanzieren.
  3. Eigentümerschaft zuweisen des Kontos an das Token Extensions Program.
Create account instruction
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});

Die zweite Anweisung ruft die createInitializeMint2Instruction Anweisung des Token Extensions Program auf, um das Mint-Konto mit folgenden Daten zu initialisieren:

  • 2 Dezimalstellen
  • Wallet sowohl als Mint-Autorität als auch als Freeze-Autorität
Initialize mint instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2,
wallet.publicKey,
wallet.publicKey,
TOKEN_2022_PROGRAM_ID
);

Füge beide Anweisungen zu einer einzigen Transaktion hinzu. Dies stellt sicher, dass die Kontoerstellung und -initialisierung atomar erfolgen. (Entweder sind beide Anweisungen erfolgreich oder keine.)

Dieser Ansatz ist üblich beim Erstellen komplexer Solana-Transaktionen, da er garantiert, dass alle Anweisungen zusammen ausgeführt werden.

Transaction
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);

Signiere und sende die Transaktion. Zwei Signaturen sind erforderlich:

  • Das Wallet Konto signiert als Zahler für Transaktionsgebühren und Kontoerstellung
  • Das Mint Konto signiert, um die Verwendung seiner Adresse für das neue Konto zu autorisieren
Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

Die zurückgegebene Transaktionssignatur kann verwendet werden, um die Transaktion im Solana Explorer zu überprüfen.

Die Erstellung eines Tokens erfordert die Verwendung der @solana/web3.js und @solana/spl-token Bibliotheken. Der Code im folgenden Beispiel wird:

  • Eine Verbindung erstellen
  • Ein keypair generieren, um die Transaktion zu bezahlen
  • Einen Airdrop anfordern, um das keypair zu finanzieren
Connection & wallet setup
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. Der öffentliche Schlüssel wird als Adresse des mint accounts verwendet.

Mint keypair
const mint = new Keypair();

Berechne die minimalen lamports, die für ein mint account erforderlich sind. Die getMinimumBalanceForRentExemptMint Funktion berechnet, wie viele lamport für die Daten auf einem mint account zugewiesen werden müssen.

Rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

Die erste Anweisung ruft die createAccount Anweisung des System Programs auf, um:

  1. Anzahl der Bytes zuweisen, die zum Speichern der Mint-Daten benötigt werden.
  2. Lamports übertragen vom Wallet, um das neue Konto zu finanzieren.
  3. Eigentümerschaft zuweisen des Kontos an das Token Extensions Program.
Create account instruction
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});

Die zweite Anweisung ruft die createInitializeMint2Instruction Anweisung des Token Extensions Program auf, um das Mint-Konto mit folgenden Daten zu initialisieren:

  • 2 Dezimalstellen
  • Wallet sowohl als Mint-Autorität als auch als Freeze-Autorität
Initialize mint instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2,
wallet.publicKey,
wallet.publicKey,
TOKEN_2022_PROGRAM_ID
);

Füge beide Anweisungen zu einer einzigen Transaktion hinzu. Dies stellt sicher, dass die Kontoerstellung und -initialisierung atomar erfolgen. (Entweder sind beide Anweisungen erfolgreich oder keine.)

Dieser Ansatz ist üblich beim Erstellen komplexer Solana-Transaktionen, da er garantiert, dass alle Anweisungen zusammen ausgeführt werden.

Transaction
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);

Signiere und sende die Transaktion. Zwei Signaturen sind erforderlich:

  • Das Wallet Konto signiert als Zahler für Transaktionsgebühren und Kontoerstellung
  • Das Mint Konto signiert, um die Verwendung seiner Adresse für das neue Konto zu autorisieren
Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

Die zurückgegebene Transaktionssignatur kann verwendet werden, um die Transaktion im Solana Explorer zu überprüfen.

Create mint account
import {
Connection,
Keypair,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
LAMPORTS_PER_SOL
} from "@solana/web3.js";
import {
MINT_SIZE,
TOKEN_2022_PROGRAM_ID,
createInitializeMint2Instruction,
getMinimumBalanceForRentExemptMint,
getMint
} from "@solana/spl-token";
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");

Is this page helpful?

Inhaltsverzeichnis

Seite bearbeiten

Verwaltet von

© 2025 Solana Foundation.
Alle Rechte vorbehalten.
Verbinden Sie sich