Verkkoon kirjoittaminen
Edellisessä osiossa opit lukemaan tietoja Solana-verkosta. Nyt opit kirjoittamaan tietoja verkkoon. Solana-verkkoon kirjoittaminen tapahtuu lähettämällä transaktioita, jotka sisältävät yhden tai useamman ohjeen.
Ohjelmat määrittelevät liiketoimintalogiikan sille, mitä kukin ohje tekee. Kun lähetät transaktion, Solana-ajoympäristö suorittaa jokaisen ohjeen järjestyksessä ja atomisesti. Tämän osion esimerkit näyttävät, miten rakennetaan ja lähetetään transaktioita Solana-ohjelmien kutsumiseksi, mukaan lukien:
- SOL-tokenien siirtäminen tilien välillä
- Uuden tokenin luominen
SOL-tokenien siirtäminen
Alla oleva esimerkki siirtää SOL-tokeneita kahden tilin välillä. Jokaisella tilillä on omistaja- ohjelma, joka on ainoa ohjelma, joka voi vähentää tilin SOL-saldoa.
Kaikki lompakkotilit ovat System Program -ohjelman omistamia. 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}`);const senderBalance = await connection.getBalance(sender.publicKey);const receiverBalance = await connection.getBalance(receiver.publicKey);console.log("Sender Balance:", `${senderBalance}`);console.log("Receiver Balance:", `${receiverBalance}`);
Luo Connection transaktioiden lähettämistä ja tilitietojen hakemista varten.
Tässä esimerkissä yhdistämme paikalliseen testivalidatoriin, joka toimii
osoitteessa localhost:8899.
const connection = new Connection("http://localhost:8899", "confirmed");
Luo uudet avainparit käytettäväksi lähettäjän ja vastaanottajan tileinä.
const sender = new Keypair();const receiver = new Keypair();
Lisää SOL lähettäjän tilille. Muilla verkoilla kuin pääverkolla voit käyttää
requestAirdrop -metodia saadaksesi SOL-tokeneita testausta varten.
const signature = await connection.requestAirdrop(sender.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");
SystemProgram.transfer() -metodi luo ohjeen, joka siirtää SOL-tokeneita
fromPubkey -tililtä toPubkey -tilille
määritetyn määrän lamports -yksiköitä.
const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: receiver.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});
Luo transaktio ja lisää ohje transaktioon. Tässä esimerkissä luomme transaktion, jossa on yksi ohje. Voit kuitenkin lisätä transaktioon useita ohjeita.
const transaction = new Transaction().add(transferInstruction);
Allekirjoita ja lähetä transaktio verkkoon. Lähettäjän keypair vaaditaan allekirjoittajien taulukossa valtuuttamaan SOL:n siirto heidän tililtään.
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[sender]);
Transaktion allekirjoitus on yksilöllinen tunniste, jota voidaan käyttää transaktion etsimiseen Solana Explorerissa.
Tokenin luominen
Alla oleva esimerkki luo uuden tokenin Solanassa käyttäen Token Extensions Programia. Tämä vaatii kaksi ohjetta:
- Kutsu System Programia uuden tilin luomiseksi.
- Kutsu Token Extensions Programia kyseisen tilin alustamiseksi mint-tiliksi.
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 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("Transaction Signature:", `${transactionSignature}`);const mintData = await getMint(connection,mint.publicKey,"confirmed",TOKEN_2022_PROGRAM_ID););
Tokenin luominen vaatii sekä @solana/web3.js että @solana/spl-token
-kirjastojen käyttöä. Alla oleva esimerkkikoodi:
- Luo yhteyden
- Generoi keypair transaktion maksamiseksi
- Pyytää airdropin keypair-avaimen rahoittamiseksi
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");
Generoi keypair mint-tiliä varten. Julkista avainta käytetään mint-tilin osoitteena.
const mint = new Keypair();
Laske mint-tilille tarvittavien lamport-yksiköiden vähimmäismäärä.
getMinimumBalanceForRentExemptMint -funktio laskee, kuinka monta
lamport-yksikköä täytyy varata mint-tilin dataa varten.
const rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);
Ensimmäinen ohje kutsuu System Program -ohjelman createAccount -ohjetta:
- Varaa tavujen määrä, joka tarvitaan mint-tietojen tallentamiseen.
- Siirrä lamportseja lompakosta uuden tilin rahoittamiseksi.
- Määritä omistajuus tilille Token Extensions program -ohjelmalle.
const createAccountInstruction = SystemProgram.createAccount({fromPubkey: wallet.publicKey,newAccountPubkey: mint.publicKey,space: MINT_SIZE,lamports: rentExemptionLamports,programId: TOKEN_2022_PROGRAM_ID});
Toinen ohje kutsuu Token Extensions Program -ohjelman
createInitializeMint2Instruction -ohjetta mint-tilin alustamiseksi seuraavilla
tiedoilla:
- 2 desimaalia
- Lompakko sekä mint-auktoriteettina että jäädytysauktoriteettina
const initializeMintInstruction = createInitializeMint2Instruction(mint.publicKey,2,wallet.publicKey,wallet.publicKey,TOKEN_2022_PROGRAM_ID);
Lisää molemmat ohjeet yhteen transaktioon. Tämä varmistaa, että tilin luominen ja alustaminen tapahtuvat atomisesti. (Joko molemmat ohjeet onnistuvat tai kumpikaan ei onnistu.)
Tämä lähestymistapa on yleinen rakennettaessa monimutkaisia Solana-transaktioita, sillä se takaa, että kaikki ohjeet suoritetaan yhdessä.
const transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);
Allekirjoita ja lähetä transaktio. Kaksi allekirjoitusta vaaditaan:
- Lompakko -tili allekirjoittaa maksajana transaktiomaksuja ja tilin luomista varten
- Mint -tili allekirjoittaa valtuuttaakseen osoitteensa käytön uutta tiliä varten
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet,mint]);
Palautettua transaktion allekirjoitusta voidaan käyttää transaktion tarkasteluun Solana Explorerissa.
Is this page helpful?