Schrijven naar het netwerk

In de vorige sectie heb je geleerd hoe je gegevens van het Solana-netwerk kunt lezen. Nu ga je leren hoe je er gegevens naar kunt schrijven. Schrijven naar het Solana-netwerk houdt in dat je transacties verstuurt die één of meer instructies bevatten.

Programma's definiëren de bedrijfslogica voor wat elke instructie doet. Wanneer je een transactie indient, voert de Solana-runtime elke instructie in volgorde en atomisch uit. De voorbeelden in deze sectie laten zien hoe je transacties kunt bouwen en versturen om Solana-programma's aan te roepen, waaronder:

  1. SOL overmaken tussen accounts
  2. Een nieuw token aanmaken

SOL overmaken

Het onderstaande voorbeeld maakt SOL over tussen twee accounts. Elk account heeft een eigenaar- programma, wat het enige programma is dat het SOL-saldo van het account kan verminderen.

Alle wallet-accounts zijn eigendom van het System Program. Om SOL over te maken, moet je de transfer instructie van het System Program aanroepen.

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.

Maak een Connection om het verzenden van transacties en het ophalen van accountgegevens af te handelen.

In dit voorbeeld maken we verbinding met de lokale testvalidator die draait op localhost:8899.

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

Genereer nieuwe keypairs om te gebruiken als verzender- en ontvanger-accounts.

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

Voeg SOL toe aan het verzender-account. Op andere netwerken dan mainnet kun je de requestAirdrop methode gebruiken om SOL te krijgen voor testen.

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

De SystemProgram.transfer() methode maakt een instructie die SOL overboekt van het fromPubkey account naar het toPubkey account voor het opgegeven aantal lamports.

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

Maak een transactie en voeg de instructie toe aan de transactie. In dit voorbeeld maken we een transactie met een enkele instructie. Je kunt echter meerdere instructies aan een transactie toevoegen.

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

Onderteken en verzend de transactie naar het netwerk. De verzender keypair is vereist in de signers array om de overdracht van SOL vanuit hun account te autoriseren.

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

De transactiehandtekening is een unieke identificatie die kan worden gebruikt om de transactie op te zoeken in Solana Explorer.

Maak een Connection om het verzenden van transacties en het ophalen van accountgegevens af te handelen.

In dit voorbeeld maken we verbinding met de lokale testvalidator die draait op localhost:8899.

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

Genereer nieuwe keypairs om te gebruiken als verzender- en ontvanger-accounts.

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

Voeg SOL toe aan het verzender-account. Op andere netwerken dan mainnet kun je de requestAirdrop methode gebruiken om SOL te krijgen voor testen.

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

De SystemProgram.transfer() methode maakt een instructie die SOL overboekt van het fromPubkey account naar het toPubkey account voor het opgegeven aantal lamports.

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

Maak een transactie en voeg de instructie toe aan de transactie. In dit voorbeeld maken we een transactie met een enkele instructie. Je kunt echter meerdere instructies aan een transactie toevoegen.

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

Onderteken en verzend de transactie naar het netwerk. De verzender keypair is vereist in de signers array om de overdracht van SOL vanuit hun account te autoriseren.

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

De transactiehandtekening is een unieke identificatie die kan worden gebruikt om de transactie op te zoeken in Solana Explorer.

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

Een token maken

Het onderstaande voorbeeld maakt een nieuw token op Solana met behulp van het Token Extensions Program. Dit vereist twee instructies:

  1. Roep het System Program aan om een nieuwe account te maken.
  2. Roep het Token Extensions Program aan om die account te initialiseren als een Mint.
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.

Het creëren van een token vereist het gebruik van zowel de @solana/web3.js als de @solana/spl-token bibliotheken. De code in het onderstaande voorbeeld zal:

  • Een verbinding maken
  • Een keypair genereren om de transactie te betalen
  • Een airdrop aanvragen om de keypair te financieren
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");

Genereer een keypair voor het mint account. De publieke sleutel zal worden gebruikt als het adres van het mint account.

Mint keypair
const mint = new Keypair();

Bereken het minimum aantal lamports dat nodig is voor een mint account. De getMinimumBalanceForRentExemptMint functie berekent hoeveel lamports er moeten worden toegewezen voor de gegevens op een mint account.

Rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

De eerste instructie roept de createAccount instructie van het System Program aan om:

  1. Reserveer het aantal bytes dat nodig is om de mint-gegevens op te slaan.
  2. Draag lamports over van de wallet om het nieuwe account te financieren.
  3. Wijs eigendom toe van het account aan het 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
});

De tweede instructie roept de Token Extensions Program's createInitializeMint2Instruction instructie aan om het mint account te initialiseren met de volgende gegevens:

  • 2 decimalen
  • Wallet als zowel mint authority als freeze authority
Initialize mint instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2,
wallet.publicKey,
wallet.publicKey,
TOKEN_2022_PROGRAM_ID
);

Voeg beide instructies toe aan één transactie. Dit zorgt ervoor dat het aanmaken van het account en de initialisatie atomair gebeuren. (Ofwel beide instructies slagen, ofwel geen van beide.)

Deze aanpak is gebruikelijk bij het bouwen van complexe Solana-transacties, omdat het garandeert dat alle instructies samen worden uitgevoerd.

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

Onderteken en verzend de transactie. Twee handtekeningen zijn vereist:

  • Het wallet account ondertekent als betaler voor transactiekosten en het aanmaken van het account
  • Het mint account ondertekent om het gebruik van zijn adres voor het nieuwe account te autoriseren
Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

De geretourneerde transactiehandtekening kan worden gebruikt om de transactie te inspecteren op Solana Explorer.

Het creëren van een token vereist het gebruik van zowel de @solana/web3.js als de @solana/spl-token bibliotheken. De code in het onderstaande voorbeeld zal:

  • Een verbinding maken
  • Een keypair genereren om de transactie te betalen
  • Een airdrop aanvragen om de keypair te financieren
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");

Genereer een keypair voor het mint account. De publieke sleutel zal worden gebruikt als het adres van het mint account.

Mint keypair
const mint = new Keypair();

Bereken het minimum aantal lamports dat nodig is voor een mint account. De getMinimumBalanceForRentExemptMint functie berekent hoeveel lamports er moeten worden toegewezen voor de gegevens op een mint account.

Rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

De eerste instructie roept de createAccount instructie van het System Program aan om:

  1. Reserveer het aantal bytes dat nodig is om de mint-gegevens op te slaan.
  2. Draag lamports over van de wallet om het nieuwe account te financieren.
  3. Wijs eigendom toe van het account aan het 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
});

De tweede instructie roept de Token Extensions Program's createInitializeMint2Instruction instructie aan om het mint account te initialiseren met de volgende gegevens:

  • 2 decimalen
  • Wallet als zowel mint authority als freeze authority
Initialize mint instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2,
wallet.publicKey,
wallet.publicKey,
TOKEN_2022_PROGRAM_ID
);

Voeg beide instructies toe aan één transactie. Dit zorgt ervoor dat het aanmaken van het account en de initialisatie atomair gebeuren. (Ofwel beide instructies slagen, ofwel geen van beide.)

Deze aanpak is gebruikelijk bij het bouwen van complexe Solana-transacties, omdat het garandeert dat alle instructies samen worden uitgevoerd.

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

Onderteken en verzend de transactie. Twee handtekeningen zijn vereist:

  • Het wallet account ondertekent als betaler voor transactiekosten en het aanmaken van het account
  • Het mint account ondertekent om het gebruik van zijn adres voor het nieuwe account te autoriseren
Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

De geretourneerde transactiehandtekening kan worden gebruikt om de transactie te inspecteren op Solana Explorer.

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?

Inhoudsopgave

Pagina Bewerken

Beheerd door

© 2025 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden