Lue dataa Solana-verkosta hakemalla erilaisia tilejä. Tämä osio auttaa sinua ymmärtämään Solanan tilien rakennetta. Jokaisella Solana-tilillä on yksilöllinen osoite, jota käytetään sen vastaavan lohkoketjudatan paikantamiseen. Tilit sisältävät joko tiladataa tai suoritettavan ohjelman.
Hae lompakkotili
Lompakko on tili, jonka omistaa System Program. Lompakoita käytetään pääasiassa SOL-tokenien säilyttämiseen ja transaktioiden allekirjoittamiseen. Kun SOL-tokeneita lähetetään uuteen osoitteeseen ensimmäistä kertaa, järjestelmätili luodaan automaattisesti.
Alla oleva esimerkki luo uuden avainparin, pyytää SOL-tokeneita rahoittaakseen uuden julkisen avaimen osoitteen ja hakee tilidatan juuri rahoitetulle lompakolle.
import { Keypair, Connection, LAMPORTS_PER_SOL } from "@solana/web3.js";const keypair = Keypair.generate();console.log(`Public Key: ${keypair.publicKey}`);const connection = new Connection("http://localhost:8899", "confirmed");// Funding an address with SOL automatically creates an accountconst signature = await connection.requestAirdrop(keypair.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");const accountInfo = await connection.getAccountInfo(keypair.publicKey);console.log(JSON.stringify(accountInfo, null, 2));
Kun haet lompakkotilin, vastaus sisältää oikealla näkyvässä esimerkkitulostuksessa esitetyt kentät.
{"data": {"type": "Buffer","data": []},"executable": false,"lamports": 1000000000,"owner": "11111111111111111111111111111111","rentEpoch": 0,"space": 0}
data -kenttä sisältää tilin datan tallennettuna tavuina. Lompakkotileillä tämä
kenttä on tyhjä (0 tavua).
{"data": {"type": "Buffer","data": []},"executable": false,"lamports": 1000000000,"owner": "11111111111111111111111111111111","rentEpoch": 0,"space": 0}
executable -kenttä osoittaa, sisältääkö tilin data -kenttä suoritettavaa
ohjelmakoodia. Lompakkotileillä tämän kentän arvo on false.
{"data": {"type": "Buffer","data": []},"executable": false,"lamports": 1000000000,"owner": "11111111111111111111111111111111","rentEpoch": 0,"space": 0}
lamports -kenttä sisältää tilin SOL-saldon
lamporteina.
{"data": {"type": "Buffer","data": []},"executable": false,"lamports": 1000000000,"owner": "11111111111111111111111111111111","rentEpoch": 0,"space": 0}
owner -kenttä näyttää ohjelman, joka omistaa tilin. Lompakkojen kohdalla
omistaja on aina System Program, jonka osoite on
11111111111111111111111111111111.
{"data": {"type": "Buffer","data": []},"executable": false,"lamports": 1000000000,"owner": "11111111111111111111111111111111","rentEpoch": 0,"space": 0}
rentEpoch -kenttä on jäänne vanhentuneesta rent-mekanismista. (Tämä kenttä on
sisällytetty taaksepäin yhteensopivuuden vuoksi.)
{"data": {"type": "Buffer","data": []},"executable": false,"lamports": 1000000000,"owner": "11111111111111111111111111111111","rentEpoch": 0,"space": 0}
space -kenttä näyttää data -kentän sisältämien tavujen määrän. Tämä ei ole
kenttä itse Account-tyypissä, vaan se
on sisällytetty vastaukseen.
Tässä esimerkissä space -kenttä on 0, koska data -kenttä sisältää 0 tavua
dataa.
{"data": {"type": "Buffer","data": []},"executable": false,"lamports": 1000000000,"owner": "11111111111111111111111111111111","rentEpoch": 0,"space": 0}
Hae Token Program
Alla oleva esimerkki hakee Token Programin osoittaakseen eron lompakko- ja program account -tilien välillä. Program account tallentaa käännetyn tavukoodin Token Programin lähdekoodista. Voit tarkastella tätä program accountia Solana Explorerissa.
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");const accountInfo = await connection.getAccountInfo(address);
Token Program on suoritettava program account. Ohjelmilla on samat peruskentät kuin kaikilla tileillä, mutta merkittävin eroin.
{"data": {"type": "Buffer","data": [127, "...truncated, total bytes: 134080...", 0]},"executable": true,"lamports": 4522329612,"owner": "BPFLoader2111111111111111111111111111111111","rentEpoch": 18446744073709552000,"space": 134080}
executable -kenttä on asetettu arvoon true, mikä osoittaa, että tilin data
-kenttä sisältää suoritettavaa koodia.
{"data": {"type": "Buffer","data": [127, "...truncated, total bytes: 134080...", 0]},"executable": true,"lamports": 4522329612,"owner": "BPFLoader2111111111111111111111111111111111","rentEpoch": 18446744073709552000,"space": 134080}
data -kenttä tallentaa ohjelman suoritettavan koodin.
{"data": {"type": "Buffer","data": [127, "...truncated, total bytes: 134080...", 0]},"executable": true,"lamports": 4522329612,"owner": "BPFLoader2111111111111111111111111111111111","rentEpoch": 18446744073709552000,"space": 134080}
Jokaisen program account -tilin omistaa sen
lataaja-ohjelma. Tässä esimerkissä
owner on BPFLoader2-ohjelma.
{"data": {"type": "Buffer","data": [127, "...truncated, total bytes: 134080...", 0]},"executable": true,"lamports": 4522329612,"owner": "BPFLoader2111111111111111111111111111111111","rentEpoch": 18446744073709552000,"space": 134080}
Hae mint account
Mint account on Token Program -ohjelman omistama tili, joka tallentaa tietyn tokenin globaalit metatiedot. Näihin kuuluvat kokonaistarjonta, desimaalien määrä ja tilit, joilla on valtuudet luoda tai jäädyttää tokeneita. Mint account -tilin osoite yksilöi tokenin Solana-verkossa.
Alla oleva esimerkki hakee USD Coin Mint -tilin havainnollistaakseen, miten ohjelman tila tallennetaan erilliseen tiliin.
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const accountInfo = await connection.getAccountInfo(address);
Mint account -tilit tallentavat tilaa, eivät suoritettavaa koodia. Niiden omistaja on Token Program, joka sisältää ohjeet siitä, miten mint account -tilejä luodaan ja päivitetään.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
Mint account -tilin data -kenttä tallentaa tilaa, ei suoritettavaa koodia,
joten executable -kenttä on false.
Token Program määrittelee Mint -datatyypin, joka tallennetaan data
-kenttään.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
data -kenttä sisältää serialisoidun Mint -tilatiedon, kuten mint authorityn,
kokonaistarjonnan ja desimaalien määrän.
Lukeaksesi Mint account -tiliä, sinun täytyy deserialisoida data -kenttä
Mint -datatyypiksi, mikä näytetään
seuraavassa esimerkissä.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
Mint account -tilin omistaa
Token Program. Tämä tarkoittaa,
että sen data -kenttää voi muokata vain Token Program -ohjelman ohjeilla.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
Mint account -tilin deserialisointi
Ennen kuin tilin data -kentän raakadataa voidaan tulkita mielekkäästi, se
täytyy deserialisoida. Asianmukaisen datatyypin määrittelee ohjelma, joka
omistaa tilin. Useimmat Solana-ohjelmat tarjoavat asiakaskirjastoja
apufunktioilla, jotka abstrahoivat deserialisointiprosessin. Nämä funktiot
muuntavat tilin raakatavut jäsennellyiksi datatyypeiksi, mikä helpottaa
tilidatan käsittelyä.
Esimerkiksi @solana/spl-token -kirjasto sisältää
getMint() -funktion, joka auttaa deserialisoimaan mint
account -tilin data -kentän
Mint
-datatyypiksi, jonka Token Program on määritellyt.
import { PublicKey, Connection } from "@solana/web3.js";import { getMint } from "@solana/spl-token";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const mintData = await getMint(connection, address, "confirmed");
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 initializedpub is_initialized: bool,/// Optional authority to freeze token accounts.pub freeze_authority: COption<Pubkey>,}
getMint() -funktio purkaa mint account -tilin data -kentän Mint account
-tyypiksi.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
Voit tarkastella täysin purettua mint account -dataa Solana Explorerissa.
address -kenttä sisältää mint account -tilin osoitteen.
mintAuthority -kenttä näyttää ainoan tilin, joka voi luoda uusia tokenin
yksiköitä.
supply -kenttä näyttää luotujen tokenien kokonaismäärän. Tämä arvo mitataan
tokenin pienimmässä yksikössä. Saadaksesi kokonaistarjonnan standardiyksiköissä,
mukauta supply -kentän arvoa decimals -arvon mukaan.
decimals -kenttä näyttää tokenin desimaalipaikkojen määrän.
isInitialized -kenttä ilmaisee, onko mint account -tili alustettu. Tätä
kenttää käytetään turvallisuustarkistuksena Token Program -ohjelmassa.
freezeAuthority -kenttä näyttää tilin, jolla on valtuudet jäädyttää token
account -tilejä. Jäädytetty token account ei voi siirtää tai polttaa
sisältämäänsä tokenia.
tlvData -kenttä sisältää lisätietoja Token Extensions -ominaisuuksille ja
vaatii lisäpurkamista. Tämä kenttä on merkityksellinen vain tileille, jotka on
luotu Token Extension Program -ohjelmalla
(Token2022).
Is this page helpful?