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ä:
- 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 omistaja kaikille "lompakko"-tileille. SOL-tokenien siirtämiseksi 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-tilaksi.
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 luomiseen
- 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 alustamiseen
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?