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ä:
- SOL-tokenien siirtäminen tilien välillä
- 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.
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}`);
Nämä ovat vaiheet transaktioiden rakentamiseen minkä tahansa Solanan ohjelman kanssa vuorovaikuttamiseksi.
Luo ohje, jonka haluat kutsua.
const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: receiver.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});
Lisää ohje transaktioon:
const transaction = new Transaction().add(transferInstruction);
Allekirjoita ja lähetä transaktio:
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:
- Kutsu System Program -ohjelmaa luodaksesi uuden tilin.
- Kutsu Token Extensions Program -ohjelmaa alustaaksesi tilin Mint-tiliksi.
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}`);
Tässä on vaiheittainen erittely siitä, mitä esimerkki tekee:
Luo yhteys ja rahoita lompakko
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
const mint = new Keypair();
Laske vähimmäismäärä lamport-yksiköitä vuokravapautusta varten
const rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);
Luo ohje uuden tilin luomiseksi
- Varaa tarvittava tila mint-tietojen tallentamiseen
- Siirrä lamport-yksiköitä lompakosta uuden tilin rahoittamiseksi
- Määritä omistajuus tilille Token Extensions -ohjelmaan
(
TOKEN_2022_PROGRAM_ID
)
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
const initializeMintInstruction = createInitializeMint2Instruction(mint.publicKey,2, // decimalswallet.publicKey, // mint authoritywallet.publicKey, // freeze authorityTOKEN_2022_PROGRAM_ID);
Lisää molemmat ohjeet transaktioon
const transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);
Lähetä ja vahvista transaktio molemmilla vaadituilla allekirjoittajilla
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet, mint]);
Tulosta Mint-tili ja transaktion allekirjoitus
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?