Verkkoon kirjoittaminen
Edellisessä osiossa opit lukemaan dataa Solana-verkosta. Nyt opit kirjoittamaan siihen dataa. Solana-verkkoon kirjoittaminen tapahtuu lähettämällä transaktioita, jotka sisältävät yhden tai useamman ohjeen.
Ohjelmat (älysopimukset) määrittelevät liiketoimintalogiikan sille, mitä kukin ohje tekee. 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ämä osio kattaa seuraavat esimerkit:
- SOL:n 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:n siirtäminen
Tässä esimerkissä opit, miten siirtää SOL:ia 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:n 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 testivalidaattoriin, 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ä.
Keypair
sisältää:
- Julkisen avaimen, joka toimii tilin osoitteena
- Yksityisen avaimen, jota käytetään transaktioiden allekirjoittamiseen
const sender = new Keypair();const receiver = new Keypair();
Ennen kuin voimme siirtää SOL-tokeneita, lähettäjän tilillä on oltava SOL-saldoa.
Muilla verkoilla kuin pääverkolla voit käyttää requestAirdrop
-metodia
SOL-tokenien saamiseksi 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 lamports
-määrän verran.
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-tokenien siirto heidän tililtään.
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[sender]);
Transaktion allekirjoitus on yksilöllinen tunniste, jota voidaan käyttää transaktion hakemiseen Solana Explorerissa.
Luo token
Tässä esimerkissä opit, miten luodaan uusi token Solanassa käyttäen Token Extensions Program -ohjelmaa. Tämä vaatii kaksi ohjetta:
- Kutsu System Program luomaan uusi tili.
- Kutsu Token Extensions Program alustamaan tili 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 Solanassa vaatii sekä @solana/web3.js
että
@solana/spl-token
-kirjastojen käyttöä.
- Luo yhteys
- Luo keypair transaktion maksamiseksi
- Pyydä airdrop keyparin 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");
Luo keypair mint-tilille.
Tämän keypair-parin julkista avainta käytetään mint-tilin osoitteena.
const mint = new Keypair();
Laske mint-tilille vaadittavien lamport-yksiköiden vähimmäismäärä.
getMinimumBalanceForRentExemptMint
-funktio laskee tarkalleen, kuinka paljon
SOL:ia (lamport-yksiköinä) täytyy varata mint-tilin dataa varten.
const rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);
Ensimmäinen ohje kutsuu System Program -ohjelman createAccount
-ohjetta
suorittaakseen seuraavat toiminnot:
- Varaa tarvittavat tavut mint-datan tallentamista varten
- Siirrä lamport-yksiköt 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});
Toinen ohje kutsuu Token Extensions Program -ohjelman
createInitializeMint2Instruction
-ohjetta alustaakseen mint-tilin 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.
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ä.
const transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);
Allekirjoita ja lähetä transaktio. Kaksi allekirjoitusta vaaditaan:
- Lompakko allekirjoittaa maksajana transaktiomaksuja ja tilin luomista varten
- Mint allekirjoittaa valtuuttaakseen osoitteensa käytön uutta tiliä varten
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet,mint]);
Palautettua transaktioallekirjoitusta voidaan käyttää transaktion tarkasteluun Solana Explorerissa.
Is this page helpful?