Verkkoon kirjoittaminen

Edellisessä osiossa opit lukemaan dataa Solana-verkosta. Nyt tutustutaan siihen, miten verkkoon kirjoitetaan dataa. Solana-verkkoon kirjoittaminen tapahtuu lähettämällä transaktioita, jotka sisältävät yhden tai useamman ohjeen.

Ohjelmat (älysopimukset) käsittelevät näitä ohjeita liiketoimintalogiikkansa mukaisesti kullekin ohjeelle. Kun lähetät transaktion, Solanan ajoympäristö suorittaa jokaisen ohjeen järjestyksessä ja atomisesti (mikä tarkoittaa, että joko kaikki ohjeet onnistuvat tai koko transaktio epäonnistuu).

Tässä osiossa näet kaksi perusesimerkkiä:

  1. SOL-tokenien siirtäminen tilien välillä
  2. Uuden tokenin luominen

Nämä esimerkit näyttävät, miten rakennetaan ja lähetetään transaktioita Solana-ohjelmien kutsumiseksi. Lisätietoja löydät Transaktiot ja ohjeet ja Maksut Solanassa -sivuilta.

SOL-tokenien siirtäminen

Tässä esimerkissä opit, miten siirtää SOL-tokeneita kahden tilin välillä.

Solanassa jokaisella tilillä on tietty ohjelma omistajana. Vain ohjelman omistaja voi vähentää tilin SOL (lamport) -saldoa.

System Program on kaikkien "lompakko"-tilien omistaja. Siirtääksesi SOL-tokeneita sinun täytyy kutsua System Program -ohjelman transfer -ohjetta.

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}`);
Console
Click to execute the code.

Nämä ovat vaiheet transaktioiden rakentamiseen minkä tahansa Solanan ohjelman kanssa vuorovaikuttamiseksi.

Luo ohje, jonka haluat kutsua.

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

Lisää ohje transaktioon:

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

Allekirjoita ja lähetä transaktio:

Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender] // signer keypair
);

Luo token

Tässä esimerkissä opit, miten luoda uuden tokenin Solanassa käyttäen Token Extensions Program -ohjelmaa. Tämä vaatii kaksi ohjetta:

  1. Kutsu System Program -ohjelmaa luodaksesi uuden tilin.
  2. Kutsu Token Extensions Program -ohjelmaa alustaaksesi tilin Mint-tiliksi.
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
} 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("Mint Account:", `${mint.publicKey}`);
console.log("Transaction Signature:", `${transactionSignature}`);
Console
Click to execute the code.

Tässä on vaiheittainen erittely siitä, mitä esimerkki tekee:

Luo yhteys ja rahoita lompakko

Connection and 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");

Luo keypair Mint-tilille

Mint Keypair
const mint = new Keypair();

Laske vähimmäismäärä lamport-yksiköitä vuokravapautusta varten

Rent Exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

Luo ohje uuden tilin luomiseksi

  1. Varaa tarvittava tila mint-tietojen tallentamiseen
  2. Siirrä lamport-yksiköitä lompakosta uuden tilin rahoittamiseksi
  3. Määritä omistajuus tilille Token Extensions -ohjelmaan (TOKEN_2022_PROGRAM_ID)
Create Account Instruction
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});

Luo ohje Mint-tilin alustamiseksi

Initialize Mint Instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2, // decimals
wallet.publicKey, // mint authority
wallet.publicKey, // freeze authority
TOKEN_2022_PROGRAM_ID
);

Lisää molemmat ohjeet transaktioon

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

Lähetä ja vahvista transaktio molemmilla vaadituilla allekirjoittajilla

Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[wallet, mint]
);

Tulosta Mint-tili ja transaktion allekirjoitus

Output
console.log("Mint Account:", `${mint.publicKey}`);
console.log("Transaction Signature:", `${transactionSignature}`);

Yhdistämällä molemmat ohjeet yhteen transaktioon varmistat, että tilin luominen ja alustaminen tapahtuvat atomisesti. Joko molemmat ohjeet onnistuvat tai kumpikaan ei onnistu. Tämä lähestymistapa on yleinen rakennettaessa monimutkaisempia Solana-transaktioita, sillä se takaa, että kaikki ohjeet suoritetaan yhdessä.

Is this page helpful?

Sisällysluettelo

Muokkaa sivua