Verkkoon kirjoittaminen

Edellisessä osiossa opit, miten luetaan dataa Solana-verkosta hakemalla tilejä. Datan kirjoittaminen Solana-verkkoon edellyttää transaktiota. Transaktio sisältää yhden tai useamman ohjeen, ja jokainen ohje kutsuu ohjelmaa.

Ohjelmat määrittelevät liiketoimintalogiikan kullekin ohjeelle. Kun lähetät transaktion, Solana-ajonaikainen ympäristö suorittaa transaktion ohjeet järjestyksessä. Transaktiot ovat atomisia. Joko kaikki transaktion ohjeet onnistuvat, tai koko transaktio epäonnistuu.

Tämän osion esimerkit näyttävät, miten:

  1. Siirretään SOL tilien välillä
  2. Luodaan uusi token mint

SOL:n siirtäminen

Alla oleva esimerkki siirtää SOL:n yhdeltä tililtä toiselle. Vain ohjelma, joka on nimetty tilin omistajaksi, voi muokata tilin dataa tai vähentää lamporteja sen saldosta. Lompakkotilit omistaa System Program, joten SOL:n siirtäminen lompakkotilien välillä edellyttää ohjetta, joka kutsuu System Programin transfer -ohjetta. Lähdetilin on myös allekirjoitettava transaktio.

Transfer SOL
import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { solanaRpc, rpcAirdrop } from "@solana/kit-plugin-rpc";
import { generatedPayer, airdropPayer } from "@solana/kit-plugin-signer";
import { getTransferSolInstruction } from "@solana-program/system";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900"
})
)
.use(rpcAirdrop())
.use(airdropPayer(lamports(1_000_000_000n)));
const receiver = await generateKeyPairSigner();
const transferInstruction = getTransferSolInstruction({
source: client.payer,
destination: receiver.address,
amount: lamports(10_000_000n)
});
const result = await client.sendTransaction([transferInstruction]);
console.log("Transaction Signature:", result.context.signature);
const { value: senderBalance } = await client.rpc
.getBalance(client.payer.address)
.send();
const { value: receiverBalance } = await client.rpc
.getBalance(receiver.address)
.send();
console.log("Sender Balance:", senderBalance);
console.log("Receiver Balance:", receiverBalance);
Console
Click to execute the code.

Luo Kit-asiakas paikalliselle testi-validatorille. Tämä katkelma lisää maksajan allekirjoittajan, muodostaa yhteyden paikalliseen RPC-päätepisteeseen, ottaa käyttöön airdropit ja rahoittaa maksajan testaus-SOL:lla siirtoa varten.

Client setup
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900"
})
)
.use(rpcAirdrop())
.use(airdropPayer(lamports(1_000_000_000n)));

Luo allekirjoittaja vastaanottajalle. Lähettäjä on client.payer, joka luotiin generatedPayer():llä ja rahoitettiin airdropPayer():llä.

Receiver signer
const receiver = await generateKeyPairSigner();

getTransferSolInstruction()-apufunktio luo System Program -käskyn. Käsky siirtää SOL:ia source-allekirjoittajalta destination-osoitteeseen määritetyn amount lamportin verran.

Transfer instruction
const transferInstruction = getTransferSolInstruction({
source: client.payer,
destination: receiver.address,
amount: lamports(10_000_000n)
});

Kutsu client.sendTransaction() käskyjen taulukolla. Kit-asiakas muuntaa käskyt yhdeksi tapahtumaksi, allekirjoittaa käskyihin liitetyillä allekirjoittajilla, lähettää tapahtuman ja odottaa vahvistusta.

Send transaction
const result = await client.sendTransaction([transferInstruction]);
console.log("Transaction Signature:", result.context.signature);

Kun transaktio on vahvistettu, hae molemmat saldot käyttämällä client.rpc.

Fetch balances
const { value: senderBalance } = await client.rpc
.getBalance(client.payer.address)
.send();
const { value: receiverBalance } = await client.rpc
.getBalance(receiver.address)
.send();

Luo Kit-asiakas paikalliselle testi-validatorille. Tämä katkelma lisää maksajan allekirjoittajan, muodostaa yhteyden paikalliseen RPC-päätepisteeseen, ottaa käyttöön airdropit ja rahoittaa maksajan testaus-SOL:lla siirtoa varten.

Client setup
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900"
})
)
.use(rpcAirdrop())
.use(airdropPayer(lamports(1_000_000_000n)));

Luo allekirjoittaja vastaanottajalle. Lähettäjä on client.payer, joka luotiin generatedPayer():llä ja rahoitettiin airdropPayer():llä.

Receiver signer
const receiver = await generateKeyPairSigner();

getTransferSolInstruction()-apufunktio luo System Program -käskyn. Käsky siirtää SOL:ia source-allekirjoittajalta destination-osoitteeseen määritetyn amount lamportin verran.

Transfer instruction
const transferInstruction = getTransferSolInstruction({
source: client.payer,
destination: receiver.address,
amount: lamports(10_000_000n)
});

Kutsu client.sendTransaction() käskyjen taulukolla. Kit-asiakas muuntaa käskyt yhdeksi tapahtumaksi, allekirjoittaa käskyihin liitetyillä allekirjoittajilla, lähettää tapahtuman ja odottaa vahvistusta.

Send transaction
const result = await client.sendTransaction([transferInstruction]);
console.log("Transaction Signature:", result.context.signature);

Kun transaktio on vahvistettu, hae molemmat saldot käyttämällä client.rpc.

Fetch balances
const { value: senderBalance } = await client.rpc
.getBalance(client.payer.address)
.send();
const { value: receiverBalance } = await client.rpc
.getBalance(receiver.address)
.send();
Transfer SOL
import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { solanaRpc, rpcAirdrop } from "@solana/kit-plugin-rpc";
import { generatedPayer, airdropPayer } from "@solana/kit-plugin-signer";
import { getTransferSolInstruction } from "@solana-program/system";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900"
})
)
.use(rpcAirdrop())
.use(airdropPayer(lamports(1_000_000_000n)));

Luo token

Alla oleva esimerkki luo uuden token mintin käyttämällä Token Extensions Program. mint account on tili, joka määrittää tokenin globaalit asetukset, kuten desimaalit, tarjonnan, mint authorityn ja freeze authorityn.

Mint-tilin luominen vaatii kaksi ohjetta:

  1. Kutsu System Program luomaan uusi tili, jonka omistaa Token Extensions Program.
  2. Kutsu Token Extensions Program alustamaan kyseinen tili mintiksi.
Create mint account
import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { solanaRpc, rpcAirdrop } from "@solana/kit-plugin-rpc";
import { generatedPayer, airdropPayer } from "@solana/kit-plugin-signer";
import { getCreateAccountInstruction } from "@solana-program/system";
import {
fetchMint,
getInitializeMintInstruction,
getMintSize,
TOKEN_2022_PROGRAM_ADDRESS
} from "@solana-program/token-2022";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900"
})
)
.use(rpcAirdrop())
.use(airdropPayer(lamports(1_000_000_000n)));
const mint = await generateKeyPairSigner();
const space = BigInt(getMintSize());
const rent = await client.rpc.getMinimumBalanceForRentExemption(space).send();
const createAccountInstruction = getCreateAccountInstruction({
payer: client.payer,
newAccount: mint,
space,
lamports: rent,
programAddress: TOKEN_2022_PROGRAM_ADDRESS
});
const initializeMintInstruction = getInitializeMintInstruction({
mint: mint.address,
decimals: 2,
mintAuthority: client.payer.address,
freezeAuthority: client.payer.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});
const result = await client.sendTransaction([
createAccountInstruction,
initializeMintInstruction
]);
console.log("Mint Address:", mint.address);
console.log("Transaction Signature:", result.context.signature);
const mintAccount = await fetchMint(client.rpc, mint.address);
console.log("Mint Account:", mintAccount);
Console
Click to execute the code.

Luo ja rahoita Kit-asiakas, luo sitten allekirjoittaja uuden mint account -osoitteen käyttöön. Asiakkaan maksaja rahoittaa tilin luomisen ja maksaa tapahtumapalkkion.

Client and mint setup
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900"
})
)
.use(rpcAirdrop())
.use(airdropPayer(lamports(1_000_000_000n)));
const mint = await generateKeyPairSigner();

Laske mint account -koko tavuina, tee sitten RPC-pyyntö laskeaksesi tarvittavat lamport-yksiköt datan tallentamiseen tilille. Tätä vaadittua saldoa kutsutaan nimellä rent.

Mint account size and rent
const space = BigInt(getMintSize());
const rent = await client.rpc.getMinimumBalanceForRentExemption(space).send();

Ensimmäinen ohje kutsuu System Program -ohjelmaa. Ohje käyttää payer -maksajaa rahoittamaan newAccount -tilin, varaa mint account -tilille space -tilan, siirtää rent-vapaan lamports -saldon ja määrittää omistajuuden programAddress -ohjelmalle.

Create account instruction
const createAccountInstruction = getCreateAccountInstruction({
payer: client.payer,
newAccount: mint,
space,
lamports: rent,
programAddress: TOKEN_2022_PROGRAM_ADDRESS
});

Toinen ohje kutsuu Token Extensions Program -ohjelmaa. Ohje alustaa mint -osoitteen decimals -desimaaliarvoilla, mintAuthority -lyöntiviranomaisella, freezeAuthority -jäädytysviranomaisella sekä määrittää mint account -tilin omistavan tokenProgram -ohjelman.

Initialize mint instruction
const initializeMintInstruction = getInitializeMintInstruction({
mint: mint.address,
decimals: 2,
mintAuthority: client.payer.address,
freezeAuthority: client.payer.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});

Lähetä molemmat ohjeet yhdessä transaktiossa. Tilin luontiohjeen täytyy tulla ennen mint-tilin alustamisohjetta, koska mint account täytyy olla olemassa ennen kuin Token Extensions Program voi kirjoittaa mint-tietoja tilille.

Send transaction
const result = await client.sendTransaction([
createAccountInstruction,
initializeMintInstruction
]);

Kun transaktio on vahvistettu, hae mint account.

Fetch mint account
const mintAccount = await fetchMint(client.rpc, mint.address);
console.log("Mint Account:", mintAccount);

Luo ja rahoita Kit-asiakas, luo sitten allekirjoittaja uuden mint account -osoitteen käyttöön. Asiakkaan maksaja rahoittaa tilin luomisen ja maksaa tapahtumapalkkion.

Client and mint setup
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900"
})
)
.use(rpcAirdrop())
.use(airdropPayer(lamports(1_000_000_000n)));
const mint = await generateKeyPairSigner();

Laske mint account -koko tavuina, tee sitten RPC-pyyntö laskeaksesi tarvittavat lamport-yksiköt datan tallentamiseen tilille. Tätä vaadittua saldoa kutsutaan nimellä rent.

Mint account size and rent
const space = BigInt(getMintSize());
const rent = await client.rpc.getMinimumBalanceForRentExemption(space).send();

Ensimmäinen ohje kutsuu System Program -ohjelmaa. Ohje käyttää payer -maksajaa rahoittamaan newAccount -tilin, varaa mint account -tilille space -tilan, siirtää rent-vapaan lamports -saldon ja määrittää omistajuuden programAddress -ohjelmalle.

Create account instruction
const createAccountInstruction = getCreateAccountInstruction({
payer: client.payer,
newAccount: mint,
space,
lamports: rent,
programAddress: TOKEN_2022_PROGRAM_ADDRESS
});

Toinen ohje kutsuu Token Extensions Program -ohjelmaa. Ohje alustaa mint -osoitteen decimals -desimaaliarvoilla, mintAuthority -lyöntiviranomaisella, freezeAuthority -jäädytysviranomaisella sekä määrittää mint account -tilin omistavan tokenProgram -ohjelman.

Initialize mint instruction
const initializeMintInstruction = getInitializeMintInstruction({
mint: mint.address,
decimals: 2,
mintAuthority: client.payer.address,
freezeAuthority: client.payer.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});

Lähetä molemmat ohjeet yhdessä transaktiossa. Tilin luontiohjeen täytyy tulla ennen mint-tilin alustamisohjetta, koska mint account täytyy olla olemassa ennen kuin Token Extensions Program voi kirjoittaa mint-tietoja tilille.

Send transaction
const result = await client.sendTransaction([
createAccountInstruction,
initializeMintInstruction
]);

Kun transaktio on vahvistettu, hae mint account.

Fetch mint account
const mintAccount = await fetchMint(client.rpc, mint.address);
console.log("Mint Account:", mintAccount);
Create mint account
import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { solanaRpc, rpcAirdrop } from "@solana/kit-plugin-rpc";
import { generatedPayer, airdropPayer } from "@solana/kit-plugin-signer";
import { getCreateAccountInstruction } from "@solana-program/system";
import {
fetchMint,
getInitializeMintInstruction,
getMintSize,
TOKEN_2022_PROGRAM_ADDRESS
} from "@solana-program/token-2022";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900"
})
)
.use(rpcAirdrop())
.use(airdropPayer(lamports(1_000_000_000n)));
const mint = await generateKeyPairSigner();

Is this page helpful?

Sisällysluettelo

Muokkaa sivua
© 2026 Solana Foundation. Kaikki oikeudet pidätetään.