Ανάγνωση από το Δίκτυο

Διαβάστε δεδομένα από το δίκτυο Solana ανακτώντας διαφορετικούς λογαριασμούς. Αυτός ο οδηγός εξηγεί τη δομή των λογαριασμών του Solana. Κάθε λογαριασμός Solana έχει μια μοναδική διεύθυνση που χρησιμοποιείται για τον εντοπισμό των onchain δεδομένων του λογαριασμού. Οι λογαριασμοί Solana περιέχουν είτε δεδομένα κατάστασης είτε εκτελέσιμο πρόγραμμα.

Ανάκτηση λογαριασμού πορτοφολιού

Ένας λογαριασμός πορτοφολιού είναι λογαριασμός που ανήκει στο System Program. Οι λογαριασμοί πορτοφολιού χρησιμοποιούνται κυρίως για την αποθήκευση SOL και την υπογραφή συναλλαγών. Όταν SOL αποστέλλεται σε μια νέα διεύθυνση για πρώτη φορά, ένας λογαριασμός συστήματος δημιουργείται αυτόματα.

Το παρακάτω παράδειγμα δημιουργεί ένα πρόγραμμα-πελάτη Kit, παράγει ένα νέο υπογράφον, ζητά SOL για τη χρηματοδότηση της νέας διεύθυνσης, και ανακτά τα δεδομένα του λογαριασμού από το RPC API του προγράμματος-πελάτη.

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.

Όταν ανακτάτε έναν λογαριασμό πορτοφολιού με getAccountInfo(), το Kit επιστρέφει την απόκριση RPC που φαίνεται στο παράδειγμα εξόδου στα δεξιά.

Η απόκριση έχει δύο πεδία ανώτατου επιπέδου: το context περιγράφει πότε έγινε η ανάγνωση, και το value περιέχει τα πεδία λογαριασμού που επιστράφηκαν από τη μέθοδο RPC.

Example output
{
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.

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

Το πεδίο value περιέχει την κατάσταση λογαριασμού που επιστράφηκε από τη μέθοδο RPC. Τα ακόλουθα βήματα αναλύουν τα πεδία εντός του value με τη σειρά που εμφανίζονται.

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

Το πεδίο lamports περιέχει το υπόλοιπο SOL του λογαριασμού, μετρούμενο σε lamports, τη μικρότερη μονάδα SOL.

Example output
{
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 δεδομένων.

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

Το πεδίο owner εμφανίζει το πρόγραμμα που κατέχει τον λογαριασμό. Για τα πορτοφόλια, ο ιδιοκτήτης είναι πάντα το System Program, με τη διεύθυνση 11111111111111111111111111111111.

Example output
{
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. Το πεδίο εξακολουθεί να επιστρέφεται για λόγους συμβατότητας προς τα πίσω.

Example output
{
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 δεδομένων.

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

Όταν ανακτάτε έναν λογαριασμό πορτοφολιού με getAccountInfo(), το Kit επιστρέφει την απόκριση RPC που φαίνεται στο παράδειγμα εξόδου στα δεξιά.

Η απόκριση έχει δύο πεδία ανώτατου επιπέδου: το context περιγράφει πότε έγινε η ανάγνωση, και το value περιέχει τα πεδία λογαριασμού που επιστράφηκαν από τη μέθοδο RPC.

Το πεδίο context δείχνει το slot που χρησιμοποιήθηκε για την ανάγνωση του λογαριασμού και την έκδοση RPC API που εξυπηρέτησε την απόκριση. Μια μεταγενέστερη ανάγνωση μπορεί να επιστρέψει διαφορετικό slot ή έκδοση API.

Το πεδίο value περιέχει την κατάσταση λογαριασμού που επιστράφηκε από τη μέθοδο RPC. Τα ακόλουθα βήματα αναλύουν τα πεδία εντός του value με τη σειρά που εμφανίζονται.

Το πεδίο lamports περιέχει το υπόλοιπο SOL του λογαριασμού, μετρούμενο σε lamports, τη μικρότερη μονάδα SOL.

Το πεδίο data περιέχει τα δεδομένα του λογαριασμού αποθηκευμένα ως bytes. Το RPC επιστρέφει τα δεδομένα λογαριασμού ως πλειάδα: τη συμβολοσειρά κωδικοποιημένων δεδομένων, ακολουθούμενη από την κωδικοποίηση. Για λογαριασμούς πορτοφολιού, η συμβολοσειρά κωδικοποιημένων δεδομένων είναι κενή, επειδή ο λογαριασμός αποθηκεύει 0 bytes δεδομένων.

Το πεδίο owner εμφανίζει το πρόγραμμα που κατέχει τον λογαριασμό. Για τα πορτοφόλια, ο ιδιοκτήτης είναι πάντα το System Program, με τη διεύθυνση 11111111111111111111111111111111.

Το πεδίο executable υποδεικνύει αν η διεύθυνση του λογαριασμού μπορεί να κληθεί. Το true σημαίνει ότι η διεύθυνση αντιπροσωπεύει ένα πρόγραμμα που μπορεί να επεξεργαστεί εντολές. Το false σημαίνει ότι ο λογαριασμός αποθηκεύει κατάσταση, όπως υπόλοιπο πορτοφολιού ή δεδομένα λογαριασμού, και δεν καλείται ως πρόγραμμα. Οι λογαριασμοί πορτοφολιού χρησιμοποιούν false.

Το πεδίο rentEpoch είναι ένα παλαιό πεδίο από έναν καταργημένο μηχανισμό rent. Το πεδίο εξακολουθεί να επιστρέφεται για λόγους συμβατότητας προς τα πίσω.

Το πεδίο space εμφανίζει τον αριθμό των bytes που περιέχονται στο πεδίο data. Το πεδίο space επιστρέφεται μαζί με την απόκριση ανάκτησης λογαριασμού, αλλά δεν αποτελεί μέρος του τύπου δεδομένων του λογαριασμού.

Για το παράδειγμα λογαριασμού πορτοφολιού, το πεδίο space είναι 0 επειδή το πεδίο data περιέχει 0 bytes δεδομένων.

Example output
{
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.

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 είναι ένας εκτελέσιμος λογαριασμός προγράμματος. Τα προγράμματα έχουν τα ίδια βασικά πεδία με όλους τους λογαριασμούς, αλλά με βασικές διαφορές.

Το παράδειγμα Token Program χρησιμοποιεί κωδικοποίηση base64 για να επιστρέψει τα ακατέργαστα δεδομένα του program account.

Τα παρακάτω βήματα παρουσιάζουν τα πεδία εντός του value με τη σειρά που εμφανίζονται.

Το πεδίο data αποθηκεύει την κατάσταση του program account του BPF Upgradeable Loader. Το πρώτο στοιχείο της πλειάδας περιέχει τα πλήρη δεδομένα του λογαριασμού κωδικοποιημένα σε base64. Το δεύτερο στοιχείο της πλειάδας προσδιορίζει την κωδικοποίηση. Εδώ, τα 36 bytes περιλαμβάνουν μεταδεδομένα και τη διεύθυνση του ProgramData account.

Για αναβαθμίσιμα προγράμματα, η κατάσταση του program account δείχνει στο ξεχωριστό ProgramData account που αποθηκεύει τον εκτελέσιμο κώδικα του προγράμματος.

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 έχει οριστεί σε true, το οποίο υποδεικνύει ότι η διεύθυνση του λογαριασμού μπορεί να κληθεί ως πρόγραμμα.

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 περιέχει το υπόλοιπο SOL που διακρατεί το program account. Τα program accounts χρειάζονται αρκετά lamports για να παραμένουν απαλλαγμένα από rent.

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
}
}

Κάθε program account ανήκει σε ένα loader program. Για το Token Program account, το owner είναι το 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 είναι ένα παλαιό πεδίο από έναν καταργημένο μηχανισμό rent. Το πεδίο εξακολουθεί να επιστρέφεται για λόγους συμβατότητας προς τα πίσω.

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 δείχνει το συνολικό μέγεθος των δεδομένων του program account σε bytes. Η τιμή space είναι μόνο 36 bytes, επειδή το program account αποθηκεύει μεταδεδομένα του loader και τη διεύθυνση του ProgramData account, όχι τον πλήρη μεταγλωττισμένο κώδικα του προγράμματος.

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 του program account ως base64 tuple. Η αναλυμένη απόκριση αποσειριοποιεί αυτά τα bytes σε ονομαστικά πεδία στο αντικείμενο data. Το πεδίο programData περιέχει τη διεύθυνση του ProgramData account που αποθηκεύει τον εκτελέσιμο κώδικα του προγράμματος.

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 είναι ένας εκτελέσιμος λογαριασμός προγράμματος. Τα προγράμματα έχουν τα ίδια βασικά πεδία με όλους τους λογαριασμούς, αλλά με βασικές διαφορές.

Το παράδειγμα Token Program χρησιμοποιεί κωδικοποίηση base64 για να επιστρέψει τα ακατέργαστα δεδομένα του program account.

Τα παρακάτω βήματα παρουσιάζουν τα πεδία εντός του value με τη σειρά που εμφανίζονται.

Το πεδίο data αποθηκεύει την κατάσταση του program account του BPF Upgradeable Loader. Το πρώτο στοιχείο της πλειάδας περιέχει τα πλήρη δεδομένα του λογαριασμού κωδικοποιημένα σε base64. Το δεύτερο στοιχείο της πλειάδας προσδιορίζει την κωδικοποίηση. Εδώ, τα 36 bytes περιλαμβάνουν μεταδεδομένα και τη διεύθυνση του ProgramData account.

Για αναβαθμίσιμα προγράμματα, η κατάσταση του program account δείχνει στο ξεχωριστό ProgramData account που αποθηκεύει τον εκτελέσιμο κώδικα του προγράμματος.

Το πεδίο executable έχει οριστεί σε true, το οποίο υποδεικνύει ότι η διεύθυνση του λογαριασμού μπορεί να κληθεί ως πρόγραμμα.

Το πεδίο lamports περιέχει το υπόλοιπο SOL που διακρατεί το program account. Τα program accounts χρειάζονται αρκετά lamports για να παραμένουν απαλλαγμένα από rent.

Κάθε program account ανήκει σε ένα loader program. Για το Token Program account, το owner είναι το BPF Upgradeable Loader.

Το πεδίο rentEpoch είναι ένα παλαιό πεδίο από έναν καταργημένο μηχανισμό rent. Το πεδίο εξακολουθεί να επιστρέφεται για λόγους συμβατότητας προς τα πίσω.

Το πεδίο space δείχνει το συνολικό μέγεθος των δεδομένων του program account σε bytes. Η τιμή space είναι μόνο 36 bytes, επειδή το program account αποθηκεύει μεταδεδομένα του loader και τη διεύθυνση του ProgramData account, όχι τον πλήρη μεταγλωττισμένο κώδικα του προγράμματος.

Η προηγούμενη απόκριση επέστρεψε το πεδίο data του program account ως base64 tuple. Η αναλυμένη απόκριση αποσειριοποιεί αυτά τα bytes σε ονομαστικά πεδία στο αντικείμενο data. Το πεδίο programData περιέχει τη διεύθυνση του ProgramData account που αποθηκεύει τον εκτελέσιμο κώδικα του προγράμματος.

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
}
}

Ανάκτηση ενός mint account

Ένα mint account είναι ένας λογαριασμός που ανήκει στο Token Program και αποθηκεύει καθολικά μεταδεδομένα για ένα συγκεκριμένο token. Το mint account αποθηκεύει τη συνολική προσφορά του token, τον αριθμό δεκαδικών ψηφίων, την αρχή έκδοσης και την αρχή δέσμευσης. Η διεύθυνση του mint account αναγνωρίζει μοναδικά ένα token στο δίκτυο Solana.

Το παρακάτω παράδειγμα ανακτά το mint account του USD Coin για να δείξει πώς η κατάσταση ενός προγράμματος αποθηκεύεται σε ξεχωριστό λογαριασμό. Τα ακριβή υπόλοιπα και οι τιμές προσφοράς ενδέχεται να διαφέρουν ανάλογα με το slot από το οποίο διαβάζει ο κόμβος RPC σας.

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 accounts αποθηκεύουν κατάσταση, όχι εκτελέσιμο κώδικα. Τα mint accounts ανήκουν στο Token Program, το οποίο περιλαμβάνει εντολές που ορίζουν τον τρόπο δημιουργίας και ενημέρωσης mint accounts.

Τα παρακάτω βήματα περιγράφουν τα πεδία εντός value με τη σειρά που εμφανίζονται.

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 περιέχει τη σειριοποιημένη κατάσταση λογαριασμού Mint. Το πρώτο στοιχείο της πλειάδας περιέχει τα πλήρη δεδομένα λογαριασμού 82 byte κωδικοποιημένα σε base64. Το δεύτερο στοιχείο της πλειάδας προσδιορίζει την κωδικοποίηση.

Για να διαβάσετε από ένα mint account, πρέπει να αποσειριοποιήσετε το πεδίο data στον τύπο δεδομένων Mint, όπως φαίνεται στο επόμενο παράδειγμα.

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 υποδεικνύει αν ο λογαριασμός μπορεί να κληθεί ως πρόγραμμα. Τα mint accounts αποθηκεύουν κατάσταση, επομένως το πεδίο executable είναι 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 περιέχει το υπόλοιπο σε SOL που διατηρεί το mint account. Η τιμή σε lamports είναι το υπόλοιπο απαλλαγής ενοικίου του mint account, όχι η προσφορά token.

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 ανήκει στο Token Program. Το πεδίο data του mint account μπορεί να τροποποιηθεί μόνο από τις εντολές του Token Program.

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 είναι ένα παλαιό πεδίο από έναν καταργημένο μηχανισμό rent. Το πεδίο εξακολουθεί να επιστρέφεται για λόγους συμβατότητας με παλαιότερες εκδόσεις.

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 δείχνει ότι το mint account περιέχει 82 bytes δεδομένων.

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 accounts αποθηκεύουν κατάσταση, όχι εκτελέσιμο κώδικα. Τα mint accounts ανήκουν στο Token Program, το οποίο περιλαμβάνει εντολές που ορίζουν τον τρόπο δημιουργίας και ενημέρωσης mint accounts.

Τα παρακάτω βήματα περιγράφουν τα πεδία εντός value με τη σειρά που εμφανίζονται.

Το πεδίο data περιέχει τη σειριοποιημένη κατάσταση λογαριασμού Mint. Το πρώτο στοιχείο της πλειάδας περιέχει τα πλήρη δεδομένα λογαριασμού 82 byte κωδικοποιημένα σε base64. Το δεύτερο στοιχείο της πλειάδας προσδιορίζει την κωδικοποίηση.

Για να διαβάσετε από ένα mint account, πρέπει να αποσειριοποιήσετε το πεδίο data στον τύπο δεδομένων Mint, όπως φαίνεται στο επόμενο παράδειγμα.

Το πεδίο executable υποδεικνύει αν ο λογαριασμός μπορεί να κληθεί ως πρόγραμμα. Τα mint accounts αποθηκεύουν κατάσταση, επομένως το πεδίο executable είναι false.

Το πεδίο lamports περιέχει το υπόλοιπο σε SOL που διατηρεί το mint account. Η τιμή σε lamports είναι το υπόλοιπο απαλλαγής ενοικίου του mint account, όχι η προσφορά token.

Το mint account ανήκει στο Token Program. Το πεδίο data του mint account μπορεί να τροποποιηθεί μόνο από τις εντολές του Token Program.

Το πεδίο rentEpoch είναι ένα παλαιό πεδίο από έναν καταργημένο μηχανισμό rent. Το πεδίο εξακολουθεί να επιστρέφεται για λόγους συμβατότητας με παλαιότερες εκδόσεις.

Το πεδίο space δείχνει ότι το mint account περιέχει 82 bytes δεδομένων.

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

Τα δεδομένα του λογαριασμού αποθηκεύονται στο πεδίο data σε σειριοποιημένη μορφή. Για να διαβαστούν αυτά τα δεδομένα ως πεδία όπως supply ή decimals, αποσειριοποιήστε το πεδίο data στον τύπο λογαριασμού που ορίζεται από το πρόγραμμα ιδιοκτησίας. Τα περισσότερα προγράμματα Solana παρέχουν βιβλιοθήκες πελατών με βοηθητικές συναρτήσεις για αυτό το βήμα. Αυτές οι βοηθητικές συναρτήσεις επιστρέφουν δομημένα δεδομένα λογαριασμού, καθιστώντας το αποτέλεσμα πιο εύχρηστο.

Για παράδειγμα, η βιβλιοθήκη @solana-program/token περιλαμβάνει τη συνάρτηση fetchMint() για την ανάκτηση ενός mint account και την αποσειριοποίηση του πεδίου data του mint account στον τύπο δεδομένων Mint που ορίζεται από το Token Program.

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() ανακτά ένα mint account και αποσειριοποιεί το πεδίο data του mint account στον τύπο λογαριασμού Mint.

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 στο Solana Explorer.

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
}

Το πεδίο address περιέχει τη διεύθυνση του mint account.

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
}

Το πεδίο data περιέχει την αποσειριοποιημένη κατάσταση λογαριασμού Mint. Τα εμφωλευμένα πεδία στο data προέρχονται από τον τύπο λογαριασμού Mint του Token Program.

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
}

Το πεδίο data.mintAuthority δείχνει τον μοναδικό λογαριασμό που μπορεί να δημιουργεί νέες μονάδες του token.

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
}

Το πεδίο supply δείχνει τον συνολικό αριθμό των token που έχουν εκδοθεί. Η τιμή της προσφοράς μετράται στη μικρότερη μονάδα του token. Για να λάβετε τη συνολική προσφορά σε τυπικές μονάδες, προσαρμόστε την τιμή του πεδίου supply με βάση το decimals.

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
}

Το πεδίο decimals δείχνει τον αριθμό των δεκαδικών ψηφίων για το token.

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
}

Το πεδίο isInitialized υποδεικνύει εάν το mint account έχει αρχικοποιηθεί. Το πεδίο isInitialized αποτελεί έλεγχο ασφαλείας που χρησιμοποιείται στο Token Program.

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
}

Το πεδίο data.freezeAuthority εμφανίζει τον λογαριασμό με εξουσιοδότηση για πάγωμα token accounts. Ένα token account είναι ένας ξεχωριστός λογαριασμός που αποθηκεύει μονάδες ενός token για έναν κάτοχο. Όταν παγώσει, ένα token account δεν μπορεί να μεταφέρει ή να καταστρέψει το υπόλοιπο των token του.

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
}

Το πεδίο executable είναι false. Το mint account του USDC αποθηκεύει την κατάσταση του token, επομένως το mint account του USDC δεν μπορεί να κληθεί ως πρόγραμμα.

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
}

Το πεδίο lamports περιέχει το υπόλοιπο SOL που διατηρεί το mint account. Η τιμή lamports είναι το υπόλοιπο απαλλαγής ενοικίου του mint account, όχι η προσφορά token.

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
}

Το πεδίο programAddress εμφανίζει το πρόγραμμα που κατέχει το mint account. Για το USDC, το κατέχον πρόγραμμα είναι το Token Program. Μόνο το πρόγραμμα που κατέχει έναν λογαριασμό μπορεί να τροποποιήσει το πεδίο data του μέσω των αναπτυγμένων εντολών του προγράμματος.

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
}

Το πεδίο space εμφανίζει το μέγεθος των αρχικών δεδομένων του mint account σε bytes. Ο βασικός τύπος λογαριασμού Mint του Token Program έχει μέγεθος 82 bytes.

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() ανακτά ένα mint account και αποσειριοποιεί το πεδίο data του mint account στον τύπο λογαριασμού Mint.

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 στο Solana Explorer.

Το πεδίο address περιέχει τη διεύθυνση του mint account.

Το πεδίο data περιέχει την αποσειριοποιημένη κατάσταση λογαριασμού Mint. Τα εμφωλευμένα πεδία στο data προέρχονται από τον τύπο λογαριασμού Mint του Token Program.

Το πεδίο data.mintAuthority δείχνει τον μοναδικό λογαριασμό που μπορεί να δημιουργεί νέες μονάδες του token.

Το πεδίο supply δείχνει τον συνολικό αριθμό των token που έχουν εκδοθεί. Η τιμή της προσφοράς μετράται στη μικρότερη μονάδα του token. Για να λάβετε τη συνολική προσφορά σε τυπικές μονάδες, προσαρμόστε την τιμή του πεδίου supply με βάση το decimals.

Το πεδίο decimals δείχνει τον αριθμό των δεκαδικών ψηφίων για το token.

Το πεδίο isInitialized υποδεικνύει εάν το mint account έχει αρχικοποιηθεί. Το πεδίο isInitialized αποτελεί έλεγχο ασφαλείας που χρησιμοποιείται στο Token Program.

Το πεδίο data.freezeAuthority εμφανίζει τον λογαριασμό με εξουσιοδότηση για πάγωμα token accounts. Ένα token account είναι ένας ξεχωριστός λογαριασμός που αποθηκεύει μονάδες ενός token για έναν κάτοχο. Όταν παγώσει, ένα token account δεν μπορεί να μεταφέρει ή να καταστρέψει το υπόλοιπο των token του.

Το πεδίο executable είναι false. Το mint account του USDC αποθηκεύει την κατάσταση του token, επομένως το mint account του USDC δεν μπορεί να κληθεί ως πρόγραμμα.

Το πεδίο lamports περιέχει το υπόλοιπο SOL που διατηρεί το mint account. Η τιμή lamports είναι το υπόλοιπο απαλλαγής ενοικίου του mint account, όχι η προσφορά token.

Το πεδίο programAddress εμφανίζει το πρόγραμμα που κατέχει το mint account. Για το USDC, το κατέχον πρόγραμμα είναι το Token Program. Μόνο το πρόγραμμα που κατέχει έναν λογαριασμό μπορεί να τροποποιήσει το πεδίο data του μέσω των αναπτυγμένων εντολών του προγράμματος.

Το πεδίο space εμφανίζει το μέγεθος των αρχικών δεδομένων του mint account σε bytes. Ο βασικός τύπος λογαριασμού Mint του Token Program έχει μέγεθος 82 bytes.

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
}

Σειριοποιημένη έναντι αποσειριοποιημένης εξόδου

Και τα δύο παραδείγματα διαβάζουν το ίδιο mint account του USDC. Η πρώτη απόκριση αφήνει το πεδίο data σειριοποιημένο. Για να διαβάσετε τα περιεχόμενα του mint account, αποκωδικοποιήστε αυτά τα δεδομένα ως τον τύπο λογαριασμού που ορίζεται από το κατέχον πρόγραμμα. Για ένα mint account, το Token Program ορίζει τον τύπο Mint που εμφανίζεται στα δεξιά.

Πριν από την αποκωδικοποίηση, το πεδίο data περιέχει σειριοποιημένα δεδομένα λογαριασμού.

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
}
}

Μετά την αποκωδικοποίηση των δεδομένων ως Mint, το πεδίο data περιέχει ονομαστικά πεδία λογαριασμού.

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?

Πίνακας Περιεχομένων

Επεξεργασία Σελίδας
© 2026 Ίδρυμα Solana. Με επιφύλαξη παντός δικαιώματος.