Lukeminen verkosta

Lue tietoja Solana-verkosta hakemalla eri tilejä. Tässä oppaassa selitetään Solana-tilien rakenne. Jokaisella Solana- tilillä on yksilöllinen osoite, jonka avulla tilin ketjussa oleva data paikallistetaan. Solana-tilit sisältävät joko tiladataa tai suoritettavan ohjelman.

Hae lompakkotili

Lompakkotili on tili, jonka omistaa System Program. Lompakkotilejä käytetään ensisijaisesti SOL:n säilyttämiseen ja tapahtumien allekirjoittamiseen. Kun SOL lähetetään uuteen osoitteeseen ensimmäistä kertaa, järjestelmätili luodaan automaattisesti.

Alla oleva esimerkki luo Kit-asiakkaan, luo uuden allekirjoittajan, pyytää SOL:ia uuden osoitteen rahoittamiseksi ja hakee tilin tiedot asiakkaan RPC- rajapinnasta.

Fetch account
import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { solanaRpc, rpcAirdrop } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900"
})
)
.use(rpcAirdrop());
const signer = await generateKeyPairSigner();
console.log(`Address: ${signer.address}`);
// Funding an address with SOL automatically creates an account
await client.airdrop(signer.address, lamports(1_000_000_000n));
const accountInfo = await client.rpc.getAccountInfo(signer.address).send();
console.log(accountInfo);
Console
Click to execute the code.

Kun haet lompakkotilin getAccountInfo()-funktiolla, Kit palauttaa RPC- vastauksen, joka on esitetty oikealla olevassa esimerkkitulosteessa.

Vastauksessa on kaksi ylimmän tason kenttää: context kertoo, milloin luku tapahtui, ja value sisältää RPC-metodin palauttamat tilikentät.

context-kenttä näyttää tilin lukemiseen käytetyn slot-arvon sekä vastauksen tarjoilleen RPC-rajapintaversion. Myöhempi luku voi palauttaa eri slot-arvon tai rajapintaversion.

value-kenttä sisältää RPC-metodin palauttaman tilin tilan. Seuraavat vaiheet käyvät läpi value-kentän sisällä olevat kentät siinä järjestyksessä, jossa ne esiintyvät.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

lamports-kenttä sisältää tilin SOL-saldon mitattuna lamport-yksiköissä, jotka ovat SOL:n pienin yksikkö.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

data-kenttä sisältää tilille tallennetun datan tavuina. RPC palauttaa tilitiedot tuplena: koodattu dataketjuna, jota seuraa koodausmuoto. Lompakkotileillä koodattu dataketju on tyhjä, koska tili tallentaa 0 tavua dataa.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

owner-kenttä näyttää ohjelman, joka omistaa tilin. Lompakoilla omistaja on aina System Program, jonka osoite on 11111111111111111111111111111111.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

executable-kenttä kertoo, onko tilin osoite kutsuttavissa. true tarkoittaa, että osoite edustaa ohjelmaa, joka voi käsitellä ohjeita. false tarkoittaa, että tili tallentaa tilaa, kuten lompakkosaldon tai tilin datan, eikä sitä kutsuta ohjelmana. Lompakkotilit käyttävät false-arvoa.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

rentEpoch-kenttä on vanhentuneesta rent-mekanismista peräisin oleva perintökenttä. Kenttä palautetaan edelleen taaksepäin yhteensopivuuden vuoksi.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

space-kenttä näyttää data-kentässä olevien tavujen määrän. space-kenttä palautetaan tilihaun vastauksessa, mutta se ei ole osa tilin tietotyyppiä.

Lompakkotilin esimerkissä space-kentän arvo on 0, koska data-kenttä sisältää 0 tavua dataa.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Kun haet lompakkotilin getAccountInfo()-funktiolla, Kit palauttaa RPC- vastauksen, joka on esitetty oikealla olevassa esimerkkitulosteessa.

Vastauksessa on kaksi ylimmän tason kenttää: context kertoo, milloin luku tapahtui, ja value sisältää RPC-metodin palauttamat tilikentät.

context-kenttä näyttää tilin lukemiseen käytetyn slot-arvon sekä vastauksen tarjoilleen RPC-rajapintaversion. Myöhempi luku voi palauttaa eri slot-arvon tai rajapintaversion.

value-kenttä sisältää RPC-metodin palauttaman tilin tilan. Seuraavat vaiheet käyvät läpi value-kentän sisällä olevat kentät siinä järjestyksessä, jossa ne esiintyvät.

lamports-kenttä sisältää tilin SOL-saldon mitattuna lamport-yksiköissä, jotka ovat SOL:n pienin yksikkö.

data-kenttä sisältää tilille tallennetun datan tavuina. RPC palauttaa tilitiedot tuplena: koodattu dataketjuna, jota seuraa koodausmuoto. Lompakkotileillä koodattu dataketju on tyhjä, koska tili tallentaa 0 tavua dataa.

owner-kenttä näyttää ohjelman, joka omistaa tilin. Lompakoilla omistaja on aina System Program, jonka osoite on 11111111111111111111111111111111.

executable-kenttä kertoo, onko tilin osoite kutsuttavissa. true tarkoittaa, että osoite edustaa ohjelmaa, joka voi käsitellä ohjeita. false tarkoittaa, että tili tallentaa tilaa, kuten lompakkosaldon tai tilin datan, eikä sitä kutsuta ohjelmana. Lompakkotilit käyttävät false-arvoa.

rentEpoch-kenttä on vanhentuneesta rent-mekanismista peräisin oleva perintökenttä. Kenttä palautetaan edelleen taaksepäin yhteensopivuuden vuoksi.

space-kenttä näyttää data-kentässä olevien tavujen määrän. space-kenttä palautetaan tilihaun vastauksessa, mutta se ei ole osa tilin tietotyyppiä.

Lompakkotilin esimerkissä space-kentän arvo on 0, koska data-kenttä sisältää 0 tavua dataa.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Hae Token Program

Alla oleva esimerkki hakee Token Programin havainnollistaakseen eroa lompakko- ja ohjelmatilien välillä. Token Program määrittelee ohjeet tokenien käsittelyä varten, kuten tokenien luomisen ja siirtämisen. Ohjelmia kutsutaan käsittelemään ohjeita. Ohjelman tila, kuten tokenien tiedot ja saldot, tallennetaan erillisille ohjelman omistamille tileille.

Token Programin osoite on ketjussa sijaitseva program account. Yksinkertaisuuden vuoksi voit ajatella ohjelman osoitetta itse ohjelmana, koska sitä käytetään ohjelman kutsumiseen. Päivitettävissä olevien ohjelmien osalta program account tallentaa metatiedot ja viittaa erilliseen programdata accountiin, joka sisältää käyttöönotetun suoritettavan koodin. Voit tarkastella Token Programin lähdekoodia ja program accountia Solana Explorerissa.

Fetch program account
import { address, createClient, fetchJsonParsedAccount } from "@solana/kit";
import { solanaRpc } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "https://api.mainnet.solana.com"
})
);
const tokenProgramAddress = address(
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
);
const accountInfo = await client.rpc
.getAccountInfo(tokenProgramAddress, {
encoding: "base64"
})
.send();
console.log(accountInfo);
const parsedAccount = await fetchJsonParsedAccount(
client.rpc,
tokenProgramAddress
);
console.log(parsedAccount);
Console
Click to execute the code.

Token Program on suoritettava ohjelmatili. Ohjelmilla on samat perustavanlaatuiset kentät kuin kaikilla tileillä, mutta niillä on keskeisiä eroja.

Token Program -esimerkki käyttää base64 -koodausta palauttaakseen program accountin raakadatan.

Seuraavat vaiheet käyvät läpi kentät value:n sisällä siinä järjestyksessä, jossa kentät esiintyvät.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

data -kenttä tallentaa BPF Upgradeable Loaderin program account -tilan. Ensimmäinen tuple-alkio sisältää koko tilin datan base64-koodattuna. Toinen tuple-alkio ilmaisee koodauksen. Tässä 36 tavua sisältävät metatiedot ja program account -osoitteen.

Päivitettävissä olevien ohjelmien osalta program account -tila viittaa erilliseen programdata accountiin, joka tallentaa ohjelman suoritettavan koodin.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

executable-kenttä on asetettu arvoon true, mikä ilmaisee, että tilin osoitetta voidaan kutsua ohjelmana.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

lamports-kenttä sisältää program account -tilin hallussa olevan SOL-saldon. Program account -tileillä on oltava riittävästi lamport-yksiköitä rent-vapausehdon täyttämiseksi.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Jokainen program account on loader-ohjelman omistama. Token Program account -tilin kohdalla owner on BPF Upgradeable Loader.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

rentEpoch-kenttä on perintökenttä vanhentuneesta rent-mekanismista. Kenttä palautetaan edelleen taaksepäin yhteensopivuuden vuoksi.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

space-kenttä näyttää program account -tilin datan kokonaiskoon tavuina. space-arvo on vain 36 tavua, koska program account tallentaa loader-metatiedot ja ProgramData-tilin osoitteen, ei koko käännettyä ohjelmaa.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Edellinen vastaus palautti program account -tilin data-kentän base64-tuplena. Jäsennetty vastaus purkaa nämä tavut nimetyiksi kentiksi data-objektissa. programData-kenttä sisältää sen ProgramData-tilin osoitteen, johon suoritettava ohjelmakoodi on tallennettu.

Parsed Token program account
{
executable: true,
lamports: 43712780n,
programAddress: "BPFLoaderUpgradeab1e11111111111111111111111",
space: 36n,
address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
data: {
programData: "3gvYRKWyXRR9xKWe1ZjPhLY5ZJRN7KDB4rFZFGoJfFk2",
parsedAccountMeta: { program: "bpf-upgradeable-loader", type: "program" }
},
exists: true
}

Token Program on suoritettava ohjelmatili. Ohjelmilla on samat perustavanlaatuiset kentät kuin kaikilla tileillä, mutta niillä on keskeisiä eroja.

Token Program -esimerkki käyttää base64 -koodausta palauttaakseen program accountin raakadatan.

Seuraavat vaiheet käyvät läpi kentät value:n sisällä siinä järjestyksessä, jossa kentät esiintyvät.

data -kenttä tallentaa BPF Upgradeable Loaderin program account -tilan. Ensimmäinen tuple-alkio sisältää koko tilin datan base64-koodattuna. Toinen tuple-alkio ilmaisee koodauksen. Tässä 36 tavua sisältävät metatiedot ja program account -osoitteen.

Päivitettävissä olevien ohjelmien osalta program account -tila viittaa erilliseen programdata accountiin, joka tallentaa ohjelman suoritettavan koodin.

executable-kenttä on asetettu arvoon true, mikä ilmaisee, että tilin osoitetta voidaan kutsua ohjelmana.

lamports-kenttä sisältää program account -tilin hallussa olevan SOL-saldon. Program account -tileillä on oltava riittävästi lamport-yksiköitä rent-vapausehdon täyttämiseksi.

Jokainen program account on loader-ohjelman omistama. Token Program account -tilin kohdalla owner on BPF Upgradeable Loader.

rentEpoch-kenttä on perintökenttä vanhentuneesta rent-mekanismista. Kenttä palautetaan edelleen taaksepäin yhteensopivuuden vuoksi.

space-kenttä näyttää program account -tilin datan kokonaiskoon tavuina. space-arvo on vain 36 tavua, koska program account tallentaa loader-metatiedot ja ProgramData-tilin osoitteen, ei koko käännettyä ohjelmaa.

Edellinen vastaus palautti program account -tilin data-kentän base64-tuplena. Jäsennetty vastaus purkaa nämä tavut nimetyiksi kentiksi data-objektissa. programData-kenttä sisältää sen ProgramData-tilin osoitteen, johon suoritettava ohjelmakoodi on tallennettu.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Hae mint account

mint account on Token Program -ohjelman omistama tili, joka tallentaa tietyn tokenin yleiset metatiedot. mint account tallentaa tokenin kokonaistarjonnan, desimaalien määrän, lyöntivaltuuden ja jäädytysvaltuuden. mint account -osoite yksilöi tokenin Solana-verkossa.

Alla oleva esimerkki hakee USD Coin mint account -tilin havainnollistaakseen, miten ohjelman tila tallennetaan erilliseen tiliin. Tarkat saldot ja tarjonta-arvot voivat vaihdella sen mukaan, mistä slot-kohdasta RPC-solmusi lukee.

Fetch mint account
import { address, createClient } from "@solana/kit";
import { solanaRpc } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "https://api.mainnet.solana.com"
})
);
const mintAddress = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const accountInfo = await client.rpc
.getAccountInfo(mintAddress, {
encoding: "base64"
})
.send();
console.log(accountInfo);
Console
Click to execute the code.

mint account -tilit tallentavat tilaa, eivät suoritettavaa koodia. mint account -tilit ovat Token Program -ohjelman omistamia, ja se sisältää ohjeet siitä, miten mint account -tilejä luodaan ja päivitetään.

Seuraavat vaiheet käyvät läpi kentät value -rakenteessa siinä järjestyksessä kuin ne esiintyvät.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

data -kenttä sisältää serialisoidun Mint -tilin tilan. Ensimmäinen tuple-alkio sisältää täydet 82 tavun tilitiedot base64-koodattuna. Toinen tuple-alkio ilmaisee käytetyn koodauksen.

Lukeaksesi mint account -tililtä sinun täytyy deserialisoida data -kenttä Mint -tietotyypiksi, kuten näytetään seuraavassa esimerkissä.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

executable -kenttä ilmaisee, voidaanko tiliä kutsua ohjelmana. mint account -tilit tallentavat tilaa, joten executable -kentän arvo on false.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

lamports -kenttä sisältää mint account -tilin hallussa olevan SOL-saldon. lamport-arvo on mint account -tilin vuokravapautussaldo, ei tokenin tarjonta.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

mint account on Token Programin omistama. mint account'n data-kenttää voi muokata ainoastaan Token Programin ohjeiden kautta.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

rentEpoch-kenttä on perintökenttä vanhentuneesta rent-mekanismista. Kenttä palautetaan edelleen taaksepäin yhteensopivuuden vuoksi.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

space-kenttä osoittaa, että mint account sisältää 82 tavua dataa.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

mint account -tilit tallentavat tilaa, eivät suoritettavaa koodia. mint account -tilit ovat Token Program -ohjelman omistamia, ja se sisältää ohjeet siitä, miten mint account -tilejä luodaan ja päivitetään.

Seuraavat vaiheet käyvät läpi kentät value -rakenteessa siinä järjestyksessä kuin ne esiintyvät.

data -kenttä sisältää serialisoidun Mint -tilin tilan. Ensimmäinen tuple-alkio sisältää täydet 82 tavun tilitiedot base64-koodattuna. Toinen tuple-alkio ilmaisee käytetyn koodauksen.

Lukeaksesi mint account -tililtä sinun täytyy deserialisoida data -kenttä Mint -tietotyypiksi, kuten näytetään seuraavassa esimerkissä.

executable -kenttä ilmaisee, voidaanko tiliä kutsua ohjelmana. mint account -tilit tallentavat tilaa, joten executable -kentän arvo on false.

lamports -kenttä sisältää mint account -tilin hallussa olevan SOL-saldon. lamport-arvo on mint account -tilin vuokravapautussaldo, ei tokenin tarjonta.

mint account on Token Programin omistama. mint account'n data-kenttää voi muokata ainoastaan Token Programin ohjeiden kautta.

rentEpoch-kenttä on perintökenttä vanhentuneesta rent-mekanismista. Kenttä palautetaan edelleen taaksepäin yhteensopivuuden vuoksi.

space-kenttä osoittaa, että mint account sisältää 82 tavua dataa.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Mint accountin deserialisointi

Tilitiedot tallennetaan data-kenttään serialisoitussa muodossa. Lukeaksesi tiedot kenttinä kuten supply tai decimals, deserialisoi data-kenttä omistavaohjelman määrittelemään tilityyppiin. Useimmat Solana-ohjelmat tarjoavat asiakaskirjastoja apufunktioilla tätä vaihetta varten. Nämä apufunktiot palauttavat jäsennellyn tilidata, jolloin tulos on helpompi käsitellä.

Esimerkiksi @solana-program/token-kirjasto sisältää fetchMint()-funktion mint accountin hakemiseen ja mint accountin data-kentän deserialisoimiseen Mint -tietotyypiksi, jonka Token Program määrittelee.

Deserialize mint account data
import { address, createClient } from "@solana/kit";
import { solanaRpc } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
import { fetchMint } from "@solana-program/token";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "https://api.mainnet.solana.com"
})
);
const mintAddress = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const mint = await fetchMint(client.rpc, mintAddress);
console.log(mint);
Console
Click to execute the code.
Mint account type
pub struct Mint {
/// Optional authority used to mint new tokens. The mint authority may only
/// be provided during mint creation. If no mint authority is present
/// then the mint has a fixed supply and no further tokens may be
/// minted.
pub mint_authority: COption<Pubkey>,
/// Total supply of tokens.
pub supply: u64,
/// Number of base 10 digits to the right of the decimal place.
pub decimals: u8,
/// Is `true` if this structure has been initialized
pub is_initialized: bool,
/// Optional authority to freeze token accounts.
pub freeze_authority: COption<Pubkey>,
}

fetchMint()-funktio hakee mint accountin ja deserialisoi mint accountin data-kentän Mint-tilityyppiin.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Voit tarkastella kokonaan deserialisoitua mint account -dataa Solana Explorerissa.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kenttä address sisältää mint account -osoitteen.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kenttä data sisältää deserialisoidun Mint -tilin tilan. Kentän data sisäkkäiset kentät ovat peräisin Token Program -ohjelman Mint -tilityypistä.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kenttä data.mintAuthority näyttää ainoan tilin, joka voi luoda uusia yksiköitä tokenille.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kenttä supply näyttää lyötyjen tokenien kokonaismäärän. Tarjonta-arvo on ilmaistu tokenin pienimmässä yksikössä. Saadaksesi kokonaistarjonnan vakioyksiköissä, jaa kentän supply arvo decimals -arvolla.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kenttä decimals näyttää tokenin desimaalipaikkojen määrän.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kenttä isInitialized ilmaisee, onko mint account alustettu. Kenttä isInitialized on Token Program -ohjelmassa käytetty turvallisuustarkistus.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kenttä data.freezeAuthority näyttää tilin, jolla on valtuus jäädyttää token accounts. token account on erillinen tili, joka tallentaa omistajan tokenien yksiköitä. Jäädytettynä token account ei voi siirtää tai polttaa token-saldoaan.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kenttä executable on epätosi. USDC mint account tallentaa tokenin tilan, joten USDC mint account ei voi toimia ohjelmana.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kenttä lamports sisältää mint accountin hallussa olevan SOL-saldon. lamport-arvo on mint accountin vuokravapaan saldon arvo, ei token-tarjonta.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kenttä programAddress näyttää ohjelman, joka omistaa mint accountin. USDC:n tapauksessa omistava ohjelma on Token Program. Vain tiliä omistava ohjelma voi muokata sen data-kenttää ohjelman käyttöönotettujen käskyjen kautta.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Kenttä space näyttää alkuperäisen mint account -datan koon tavuina. Token Programin perus-Mint-tili on 82 tavua.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

fetchMint()-funktio hakee mint accountin ja deserialisoi mint accountin data-kentän Mint-tilityyppiin.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Voit tarkastella kokonaan deserialisoitua mint account -dataa Solana Explorerissa.

Kenttä address sisältää mint account -osoitteen.

Kenttä data sisältää deserialisoidun Mint -tilin tilan. Kentän data sisäkkäiset kentät ovat peräisin Token Program -ohjelman Mint -tilityypistä.

Kenttä data.mintAuthority näyttää ainoan tilin, joka voi luoda uusia yksiköitä tokenille.

Kenttä supply näyttää lyötyjen tokenien kokonaismäärän. Tarjonta-arvo on ilmaistu tokenin pienimmässä yksikössä. Saadaksesi kokonaistarjonnan vakioyksiköissä, jaa kentän supply arvo decimals -arvolla.

Kenttä decimals näyttää tokenin desimaalipaikkojen määrän.

Kenttä isInitialized ilmaisee, onko mint account alustettu. Kenttä isInitialized on Token Program -ohjelmassa käytetty turvallisuustarkistus.

Kenttä data.freezeAuthority näyttää tilin, jolla on valtuus jäädyttää token accounts. token account on erillinen tili, joka tallentaa omistajan tokenien yksiköitä. Jäädytettynä token account ei voi siirtää tai polttaa token-saldoaan.

Kenttä executable on epätosi. USDC mint account tallentaa tokenin tilan, joten USDC mint account ei voi toimia ohjelmana.

Kenttä lamports sisältää mint accountin hallussa olevan SOL-saldon. lamport-arvo on mint accountin vuokravapaan saldon arvo, ei token-tarjonta.

Kenttä programAddress näyttää ohjelman, joka omistaa mint accountin. USDC:n tapauksessa omistava ohjelma on Token Program. Vain tiliä omistava ohjelma voi muokata sen data-kenttää ohjelman käyttöönotettujen käskyjen kautta.

Kenttä space näyttää alkuperäisen mint account -datan koon tavuina. Token Programin perus-Mint-tili on 82 tavua.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Serialisoitu vs. deserialisoitu tuloste

Molemmat esimerkit lukevat saman USDC mint accountin. Ensimmäinen vastaus jättää data-kentän serialisoituun muotoon. Mint accountin sisällön lukemiseksi kyseinen data on purettava omistavan ohjelman määrittelemän tilityypin mukaan. Mint accountin tapauksessa Token Program määrittelee oikealla näkyvän Mint-tyypin.

Ennen dekoodausta data-kenttä sisältää serialisoidun tilitiedon.

Serialized mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Kun data on dekoodattu Mint-muodossa, data-kenttä sisältää nimetyt tilitiedot.

Deserialized mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Is this page helpful?

Sisällysluettelo

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