Διαβάστε δεδομένα από το δίκτυο Solana ανακτώντας διαφορετικούς λογαριασμούς. Αυτός ο οδηγός εξηγεί τη δομή των λογαριασμών του Solana. Κάθε λογαριασμός Solana έχει μια μοναδική διεύθυνση που χρησιμοποιείται για τον εντοπισμό των onchain δεδομένων του λογαριασμού. Οι λογαριασμοί Solana περιέχουν είτε δεδομένα κατάστασης είτε εκτελέσιμο πρόγραμμα.
Ανάκτηση λογαριασμού πορτοφολιού
Ένας λογαριασμός πορτοφολιού είναι λογαριασμός που ανήκει στο System Program. Οι λογαριασμοί πορτοφολιού χρησιμοποιούνται κυρίως για την αποθήκευση SOL και την υπογραφή συναλλαγών. Όταν SOL αποστέλλεται σε μια νέα διεύθυνση για πρώτη φορά, ένας λογαριασμός συστήματος δημιουργείται αυτόματα.
Το παρακάτω παράδειγμα δημιουργεί ένα πρόγραμμα-πελάτη Kit, παράγει ένα νέο υπογράφον, ζητά SOL για τη χρηματοδότηση της νέας διεύθυνσης, και ανακτά τα δεδομένα του λογαριασμού από το RPC API του προγράμματος-πελάτη.
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 accountawait client.airdrop(signer.address, lamports(1_000_000_000n));const accountInfo = await client.rpc.getAccountInfo(signer.address).send();console.log(accountInfo);
Όταν ανακτάτε έναν λογαριασμό πορτοφολιού με getAccountInfo(), το Kit
επιστρέφει την απόκριση RPC που φαίνεται στο παράδειγμα εξόδου στα δεξιά.
Η απόκριση έχει δύο πεδία ανώτατου επιπέδου: το context περιγράφει πότε έγινε
η ανάγνωση, και το value περιέχει τα πεδία λογαριασμού που επιστράφηκαν από τη
μέθοδο RPC.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Το πεδίο context δείχνει το slot που χρησιμοποιήθηκε για την ανάγνωση του
λογαριασμού και την έκδοση RPC API που εξυπηρέτησε την απόκριση. Μια
μεταγενέστερη ανάγνωση μπορεί να επιστρέψει διαφορετικό slot ή έκδοση API.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Το πεδίο value περιέχει την κατάσταση λογαριασμού που επιστράφηκε από τη
μέθοδο RPC. Τα ακόλουθα βήματα αναλύουν τα πεδία εντός του value με τη σειρά
που εμφανίζονται.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Το πεδίο lamports περιέχει το υπόλοιπο SOL του λογαριασμού, μετρούμενο σε
lamports, τη μικρότερη μονάδα SOL.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Το πεδίο data περιέχει τα δεδομένα του λογαριασμού αποθηκευμένα ως bytes. Το
RPC επιστρέφει τα δεδομένα λογαριασμού ως πλειάδα: τη συμβολοσειρά
κωδικοποιημένων δεδομένων, ακολουθούμενη από την κωδικοποίηση. Για λογαριασμούς
πορτοφολιού, η συμβολοσειρά κωδικοποιημένων δεδομένων είναι κενή, επειδή ο
λογαριασμός αποθηκεύει 0 bytes δεδομένων.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Το πεδίο owner εμφανίζει το πρόγραμμα που κατέχει τον λογαριασμό. Για τα
πορτοφόλια, ο ιδιοκτήτης είναι πάντα το System Program, με τη διεύθυνση
11111111111111111111111111111111.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Το πεδίο executable υποδεικνύει αν η διεύθυνση του λογαριασμού μπορεί να
κληθεί. Το true σημαίνει ότι η διεύθυνση αντιπροσωπεύει ένα πρόγραμμα που
μπορεί να επεξεργαστεί εντολές. Το false σημαίνει ότι ο λογαριασμός αποθηκεύει
κατάσταση, όπως υπόλοιπο πορτοφολιού ή δεδομένα λογαριασμού, και δεν καλείται ως
πρόγραμμα. Οι λογαριασμοί πορτοφολιού χρησιμοποιούν false.
Το πεδίο rentEpoch είναι ένα παλαιό πεδίο από έναν καταργημένο μηχανισμό rent.
Το πεδίο εξακολουθεί να επιστρέφεται για λόγους συμβατότητας προς τα πίσω.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Το πεδίο space εμφανίζει τον αριθμό των bytes που περιέχονται στο πεδίο
data. Το πεδίο space επιστρέφεται μαζί με την απόκριση ανάκτησης
λογαριασμού, αλλά δεν αποτελεί μέρος του τύπου δεδομένων του λογαριασμού.
Για το παράδειγμα λογαριασμού πορτοφολιού, το πεδίο space είναι 0 επειδή το
πεδίο data περιέχει 0 bytes δεδομένων.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Ανάκτηση του Token Program
Το παρακάτω παράδειγμα ανακτά το Token Program για να δείξει τη διαφορά μεταξύ λογαριασμών πορτοφολιού και λογαριασμών προγράμματος. Το Token Program ορίζει οδηγίες για την εργασία με tokens, όπως η δημιουργία και η μεταφορά tokens. Τα προγράμματα εκτελούνται για την επεξεργασία οδηγιών. Η κατάσταση του προγράμματος, όπως τα δεδομένα token και τα υπόλοιπα, αποθηκεύονται σε ξεχωριστούς λογαριασμούς που ανήκουν στο πρόγραμμα.
Η διεύθυνση του Token Program είναι το onchain program account. Για απλότητα, μπορείτε να σκεφτείτε τη διεύθυνση του προγράμματος ως το ίδιο το πρόγραμμα, καθώς αυτή είναι η διεύθυνση που χρησιμοποιείται για την εκτέλεσή του. Για αναβαθμίσιμα προγράμματα, το program account αποθηκεύει μεταδεδομένα και δείχνει σε ένα ξεχωριστό ProgramData account που αποθηκεύει τον εκτελέσιμο κώδικα. Μπορείτε να δείτε τον πηγαίο κώδικα του Token Program και το program account στον Solana Explorer.
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);
Το Token Program είναι ένας εκτελέσιμος λογαριασμός προγράμματος. Τα προγράμματα έχουν τα ίδια βασικά πεδία με όλους τους λογαριασμούς, αλλά με βασικές διαφορές.
Το παράδειγμα Token Program χρησιμοποιεί κωδικοποίηση base64 για να επιστρέψει
τα ακατέργαστα δεδομένα του program account.
Τα παρακάτω βήματα παρουσιάζουν τα πεδία εντός του value με τη σειρά που
εμφανίζονται.
Το πεδίο data αποθηκεύει την κατάσταση του program account του BPF Upgradeable
Loader. Το πρώτο στοιχείο της πλειάδας περιέχει τα πλήρη δεδομένα του
λογαριασμού κωδικοποιημένα σε base64. Το δεύτερο στοιχείο της πλειάδας
προσδιορίζει την κωδικοποίηση. Εδώ, τα 36 bytes περιλαμβάνουν μεταδεδομένα και
τη διεύθυνση του ProgramData account.
Για αναβαθμίσιμα προγράμματα, η κατάσταση του program account δείχνει στο ξεχωριστό ProgramData 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 έχει οριστεί σε true, το οποίο υποδεικνύει ότι η
διεύθυνση του λογαριασμού μπορεί να κληθεί ως πρόγραμμα.
{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 περιέχει το υπόλοιπο SOL που διακρατεί το program account.
Τα program accounts χρειάζονται αρκετά lamports για να παραμένουν απαλλαγμένα
από rent.
{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}}
Κάθε program account ανήκει σε ένα
loader program. Για το
Token Program account, το owner είναι το BPF Upgradeable Loader.
{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 είναι ένα παλαιό πεδίο από έναν καταργημένο μηχανισμό rent.
Το πεδίο εξακολουθεί να επιστρέφεται για λόγους συμβατότητας προς τα πίσω.
{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 δείχνει το συνολικό μέγεθος των δεδομένων του program account
σε bytes. Η τιμή space είναι μόνο 36 bytes, επειδή το program account
αποθηκεύει μεταδεδομένα του loader και τη διεύθυνση του ProgramData 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 του program account ως base64
tuple. Η αναλυμένη απόκριση αποσειριοποιεί αυτά τα bytes σε ονομαστικά πεδία στο
αντικείμενο data. Το πεδίο programData περιέχει τη διεύθυνση του ProgramData
account που αποθηκεύει τον εκτελέσιμο κώδικα του προγράμματος.
{executable: true,lamports: 43712780n,programAddress: "BPFLoaderUpgradeab1e11111111111111111111111",space: 36n,address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",data: {programData: "3gvYRKWyXRR9xKWe1ZjPhLY5ZJRN7KDB4rFZFGoJfFk2",parsedAccountMeta: { program: "bpf-upgradeable-loader", type: "program" }},exists: true}
Ανάκτηση ενός mint account
Ένα mint account είναι ένας λογαριασμός που ανήκει στο Token Program και αποθηκεύει καθολικά μεταδεδομένα για ένα συγκεκριμένο token. Το mint account αποθηκεύει τη συνολική προσφορά του token, τον αριθμό δεκαδικών ψηφίων, την αρχή έκδοσης και την αρχή δέσμευσης. Η διεύθυνση του mint account αναγνωρίζει μοναδικά ένα token στο δίκτυο Solana.
Το παρακάτω παράδειγμα ανακτά το mint account του USD Coin για να δείξει πώς η κατάσταση ενός προγράμματος αποθηκεύεται σε ξεχωριστό λογαριασμό. Τα ακριβή υπόλοιπα και οι τιμές προσφοράς ενδέχεται να διαφέρουν ανάλογα με το slot από το οποίο διαβάζει ο κόμβος RPC σας.
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);
Τα mint accounts αποθηκεύουν κατάσταση, όχι εκτελέσιμο κώδικα. Τα mint accounts ανήκουν στο Token Program, το οποίο περιλαμβάνει εντολές που ορίζουν τον τρόπο δημιουργίας και ενημέρωσης mint accounts.
Τα παρακάτω βήματα περιγράφουν τα πεδία εντός value με τη σειρά που
εμφανίζονται.
{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 περιέχει τη σειριοποιημένη κατάσταση λογαριασμού Mint. Το
πρώτο στοιχείο της πλειάδας περιέχει τα πλήρη δεδομένα λογαριασμού 82 byte
κωδικοποιημένα σε base64. Το δεύτερο στοιχείο της πλειάδας προσδιορίζει την
κωδικοποίηση.
Για να διαβάσετε από ένα mint account, πρέπει να αποσειριοποιήσετε το πεδίο
data στον τύπο δεδομένων Mint, όπως φαίνεται στο
επόμενο παράδειγμα.
{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 υποδεικνύει αν ο λογαριασμός μπορεί να κληθεί ως
πρόγραμμα. Τα mint accounts αποθηκεύουν κατάσταση, επομένως το πεδίο
executable είναι false.
{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 περιέχει το υπόλοιπο σε SOL που διατηρεί το mint account. Η
τιμή σε lamports είναι το υπόλοιπο απαλλαγής ενοικίου του mint account, όχι η
προσφορά token.
{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 ανήκει στο
Token Program. Το πεδίο data του
mint account μπορεί να τροποποιηθεί μόνο από τις εντολές του Token Program.
{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 είναι ένα παλαιό πεδίο από έναν καταργημένο μηχανισμό rent.
Το πεδίο εξακολουθεί να επιστρέφεται για λόγους συμβατότητας με παλαιότερες
εκδόσεις.
{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 δείχνει ότι το mint account περιέχει 82 bytes δεδομένων.
{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
Τα δεδομένα του λογαριασμού αποθηκεύονται στο πεδίο data σε σειριοποιημένη
μορφή. Για να διαβαστούν αυτά τα δεδομένα ως πεδία όπως supply ή decimals,
αποσειριοποιήστε το πεδίο data στον τύπο λογαριασμού που ορίζεται από το
πρόγραμμα ιδιοκτησίας. Τα περισσότερα προγράμματα Solana παρέχουν βιβλιοθήκες
πελατών με βοηθητικές συναρτήσεις για αυτό το βήμα. Αυτές οι βοηθητικές
συναρτήσεις επιστρέφουν δομημένα δεδομένα λογαριασμού, καθιστώντας το αποτέλεσμα
πιο εύχρηστο.
Για παράδειγμα, η βιβλιοθήκη @solana-program/token περιλαμβάνει τη
συνάρτηση fetchMint() για την ανάκτηση ενός mint account
και την αποσειριοποίηση του πεδίου data του mint account στον τύπο δεδομένων
Mint
που ορίζεται από το Token Program.
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);
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>,}
Η συνάρτηση fetchMint() ανακτά ένα mint account και αποσειριοποιεί το
πεδίο data του mint account στον τύπο λογαριασμού Mint.
{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 στο Solana Explorer.
{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}
Το πεδίο address περιέχει τη διεύθυνση του 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}
Το πεδίο data περιέχει την αποσειριοποιημένη κατάσταση λογαριασμού Mint. Τα
εμφωλευμένα πεδία στο data προέρχονται από τον τύπο λογαριασμού Mint του
Token Program.
{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}
Το πεδίο data.mintAuthority δείχνει τον μοναδικό λογαριασμό που μπορεί να
δημιουργεί νέες μονάδες του token.
{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}
Το πεδίο supply δείχνει τον συνολικό αριθμό των token που έχουν εκδοθεί. Η
τιμή της προσφοράς μετράται στη μικρότερη μονάδα του token. Για να λάβετε τη
συνολική προσφορά σε τυπικές μονάδες, προσαρμόστε την τιμή του πεδίου supply
με βάση το decimals.
{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}
Το πεδίο decimals δείχνει τον αριθμό των δεκαδικών ψηφίων για το token.
{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}
Το πεδίο isInitialized υποδεικνύει εάν το mint account έχει αρχικοποιηθεί. Το
πεδίο isInitialized αποτελεί έλεγχο ασφαλείας που χρησιμοποιείται στο Token
Program.
{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}
Το πεδίο data.freezeAuthority εμφανίζει τον λογαριασμό με εξουσιοδότηση για
πάγωμα token accounts. Ένα
token account είναι ένας ξεχωριστός
λογαριασμός που αποθηκεύει μονάδες ενός token για έναν κάτοχο. Όταν παγώσει, ένα
token account δεν μπορεί να μεταφέρει ή να καταστρέψει το υπόλοιπο των token
του.
{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}
Το πεδίο executable είναι false. Το mint account του USDC αποθηκεύει την
κατάσταση του token, επομένως το mint account του USDC δεν μπορεί να κληθεί ως
πρόγραμμα.
{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}
Το πεδίο lamports περιέχει το υπόλοιπο SOL που διατηρεί το mint account. Η
τιμή lamports είναι το υπόλοιπο απαλλαγής ενοικίου του mint account, όχι η
προσφορά token.
{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}
Το πεδίο programAddress εμφανίζει το πρόγραμμα που κατέχει το mint account.
Για το USDC, το κατέχον πρόγραμμα είναι το Token Program. Μόνο το πρόγραμμα που
κατέχει έναν λογαριασμό μπορεί να τροποποιήσει το πεδίο data του μέσω των
αναπτυγμένων εντολών του προγράμματος.
{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}
Το πεδίο space εμφανίζει το μέγεθος των αρχικών δεδομένων του mint account σε
bytes. Ο βασικός τύπος λογαριασμού Mint του Token Program έχει μέγεθος 82
bytes.
{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}
Σειριοποιημένη έναντι αποσειριοποιημένης εξόδου
Και τα δύο παραδείγματα διαβάζουν το ίδιο mint account του USDC. Η πρώτη
απόκριση αφήνει το πεδίο data σειριοποιημένο. Για να διαβάσετε τα περιεχόμενα
του mint account, αποκωδικοποιήστε αυτά τα δεδομένα ως τον τύπο λογαριασμού που
ορίζεται από το κατέχον πρόγραμμα. Για ένα mint account, το Token Program ορίζει
τον τύπο Mint που εμφανίζεται στα δεξιά.
Πριν από την αποκωδικοποίηση, το πεδίο data
περιέχει σειριοποιημένα δεδομένα λογαριασμού.
{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, το πεδίο
data περιέχει ονομαστικά πεδία λογαριασμού.
{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?