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:

  1. SOL:n 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: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.

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}`);
const senderBalance = await connection.getBalance(sender.publicKey);
const receiverBalance = await connection.getBalance(receiver.publicKey);
console.log("Sender Balance:", `${senderBalance}`);
console.log("Receiver Balance:", `${receiverBalance}`);
Console
Click to execute the code.

Luo Connection transaktioiden lähettämistä ja tilitietojen hakemista varten.

Tässä esimerkissä yhdistämme paikalliseen testivalidaattoriin, joka toimii osoitteessa localhost:8899.

Connection
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
Generate Keypairs
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.

Airdrop
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.

Transfer Instruction
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.

Transaction
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.

Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender]
);

Transaktion allekirjoitus on yksilöllinen tunniste, jota voidaan käyttää transaktion hakemiseen Solana Explorerissa.

Luo Connection transaktioiden lähettämistä ja tilitietojen hakemista varten.

Tässä esimerkissä yhdistämme paikalliseen testivalidaattoriin, joka toimii osoitteessa localhost:8899.

Connection
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
Generate Keypairs
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.

Airdrop
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.

Transfer Instruction
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.

Transaction
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.

Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender]
);

Transaktion allekirjoitus on yksilöllinen tunniste, jota voidaan käyttää transaktion hakemiseen Solana Explorerissa.

Transfer SOL
import {
LAMPORTS_PER_SOL,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
Keypair,
Connection
} from "@solana/web3.js";
const connection = new Connection("http://localhost:8899", "confirmed");

Luo token

Tässä esimerkissä opit, miten luodaan uusi token Solanassa käyttäen Token Extensions Program -ohjelmaa. Tämä vaatii kaksi ohjetta:

  1. Kutsu System Program luomaan uusi tili.
  2. Kutsu Token Extensions Program alustamaan tili Mint-tiliksi.
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,
getMint
} 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("Transaction Signature:", `${transactionSignature}`);
const mintData = await getMint(
connection,
mint.publicKey,
"confirmed",
TOKEN_2022_PROGRAM_ID
);
);
Console
Click to execute the code.

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
Connection & Wallet Setup
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.

Mint Keypair
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.

Rent Exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

Ensimmäinen ohje kutsuu System Program -ohjelman createAccount -ohjetta suorittaakseen seuraavat toiminnot:

  1. Varaa tarvittavat tavut mint-datan tallentamista varten
  2. Siirrä lamport-yksiköt 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
});

Toinen ohje kutsuu Token Extensions Program -ohjelman createInitializeMint2Instruction -ohjetta alustaakseen mint-tilin seuraavilla tiedoilla:

  • 2 desimaalia
  • Lompakko sekä mint-auktoriteettina että jäädytysauktoriteettina
Initialize Mint Instruction
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ä.

Transaction
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
Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

Palautettua transaktioallekirjoitusta voidaan käyttää transaktion tarkasteluun Solana Explorerissa.

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
Connection & Wallet Setup
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.

Mint Keypair
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.

Rent Exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

Ensimmäinen ohje kutsuu System Program -ohjelman createAccount -ohjetta suorittaakseen seuraavat toiminnot:

  1. Varaa tarvittavat tavut mint-datan tallentamista varten
  2. Siirrä lamport-yksiköt 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
});

Toinen ohje kutsuu Token Extensions Program -ohjelman createInitializeMint2Instruction -ohjetta alustaakseen mint-tilin seuraavilla tiedoilla:

  • 2 desimaalia
  • Lompakko sekä mint-auktoriteettina että jäädytysauktoriteettina
Initialize Mint Instruction
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ä.

Transaction
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
Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

Palautettua transaktioallekirjoitusta voidaan käyttää transaktion tarkasteluun Solana Explorerissa.

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,
getMint
} from "@solana/spl-token";
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");

Is this page helpful?

Sisällysluettelo

Muokkaa sivua