Kirjoittaminen verkkoon

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 oman liiketoimintalogiikkansa mukaisesti kullekin ohjeelle. Kun lähetät transaktion, Solana-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 omistaja kaikille "lompakko"-tileille. SOL-tokenien siirtämiseksi 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}`);
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-tilaksi.
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}`);
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 luomiseen

  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 alustamiseen

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