Leia dados da rede Solana buscando diferentes contas. Este guia explica a estrutura das contas da Solana. Cada conta da Solana possui um endereço único usado para localizar os dados onchain da conta. As contas da Solana contêm dados de estado ou um programa executável.
Buscar uma conta de carteira
Uma conta de carteira é uma conta pertencente ao System Program. As contas de carteira são usadas principalmente para armazenar SOL e assinar transações. Quando SOL é enviado para um novo endereço pela primeira vez, uma conta do sistema é criada automaticamente.
O exemplo abaixo cria um cliente Kit, gera um novo assinante, solicita SOL para financiar o novo endereço e recupera os dados da conta da API RPC do cliente.
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);
Ao buscar uma conta de carteira com getAccountInfo(), o Kit retorna a resposta
RPC exibida no exemplo de saída à direita.
A resposta possui dois campos de nível superior: context descreve quando a
leitura ocorreu, e value contém os campos da conta retornados pelo método RPC.
O campo context mostra o slot usado para ler a conta e a versão da API RPC que
forneceu a resposta. Uma leitura posterior pode retornar um slot ou versão de
API diferente.
O campo value contém o estado da conta retornado pelo método RPC. Os seguintes
passos percorrem os campos dentro de value na ordem em que os campos aparecem.
O campo lamports contém o saldo SOL da conta, medido em
lamports, a menor unidade de SOL.
O campo data contém os dados da conta armazenados em bytes. O RPC retorna os
dados da conta como uma tupla: a string de dados codificada, seguida da
codificação. Para contas de carteira, a string de dados codificada está vazia
porque a conta armazena 0 bytes de dados.
O campo owner mostra o programa que é proprietário da conta. Para carteiras, o
proprietário é sempre o System Program, com o endereço
11111111111111111111111111111111.
O campo executable indica se o endereço da conta é chamável. true significa
que o endereço representa um programa que pode processar instruções. false
significa que a conta armazena estado, como o saldo de uma carteira ou dados da
conta, e não é chamada como um programa. Contas de carteira utilizam false.
O campo rentEpoch é um campo legado de um mecanismo de rent descontinuado. O
campo ainda é retornado para compatibilidade retroativa.
O campo space mostra o número de bytes contidos no campo data. O campo
space é retornado junto com a resposta de busca da conta, mas não faz parte do
tipo de dados da conta.
Para o exemplo de conta de carteira, o campo space é 0 porque o campo data
contém 0 bytes de dados.
Buscar o Token Program
O exemplo abaixo busca o Token Program para demonstrar a diferença entre contas de carteira e contas de programa. O Token Program define instruções para trabalhar com tokens, como criar e transferir tokens. Os programas são invocados para processar instruções. O estado do programa, como dados de tokens e saldos, é armazenado em contas separadas de propriedade do programa.
O endereço do Token Program é o program account onchain. Para simplificar, você pode pensar no endereço do programa como o próprio programa, pois esse é o endereço usado para invocá-lo. Para programas atualizáveis, o program account armazena metadados e aponta para um programdata account separado que armazena o código executável implantado. Você pode visualizar o código-fonte do Token Program source code e o program account no 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);
O Token Program é um program account executável. Os programas possuem os mesmos campos subjacentes que todas as contas, mas com diferenças importantes.
O exemplo do Token Program utiliza a codificação base64 para retornar os dados
brutos do program account.
Os passos a seguir percorrem os campos dentro de value na ordem em que os
campos aparecem.
O campo data armazena o estado do program account do BPF Upgradeable Loader. O
primeiro item da tupla contém os dados completos da conta codificados em base64.
O segundo item da tupla identifica a codificação. Aqui, os 36 bytes incluem
metadados e o endereço do programdata account.
Para programas atualizáveis, o estado do program account aponta para o programdata account separado que armazena o código executável do programa.
{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}}
O campo executable está definido como true, o que indica que o endereço da
conta pode ser invocado como um programa.
{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}}
O campo lamports contém o saldo em SOL mantido pelo program account. Os
program accounts precisam de lamports suficientes para permanecer isentos de
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}}
Todo program account é de propriedade de um
programa carregador.
Para o Token Program account, o owner é o 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}}
O campo rentEpoch é um campo legado de um mecanismo de rent descontinuado. O
campo ainda é retornado por compatibilidade retroativa.
{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}}
O campo space mostra o tamanho total dos dados do program account em bytes. O
valor de space é apenas 36 bytes porque o program account armazena metadados
do carregador e o endereço do ProgramData account, e não o programa compilado
completo.
{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}}
A resposta anterior retornou o campo data do program account como uma tupla
base64. A resposta analisada desserializa esses bytes em campos nomeados no
objeto data. O campo programData contém o endereço do ProgramData account
que armazena o código executável do programa.
{executable: true,lamports: 43712780n,programAddress: "BPFLoaderUpgradeab1e11111111111111111111111",space: 36n,address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",data: {programData: "3gvYRKWyXRR9xKWe1ZjPhLY5ZJRN7KDB4rFZFGoJfFk2",parsedAccountMeta: { program: "bpf-upgradeable-loader", type: "program" }},exists: true}
Buscar um mint account
Um mint account é uma conta pertencente ao Token Program que armazena metadados globais de um token específico. O mint account armazena o fornecimento total do token, o número de casas decimais, a autoridade de cunhagem e a autoridade de congelamento. O endereço do mint account identifica exclusivamente um token na rede Solana.
O exemplo abaixo busca o mint account do USD Coin para demonstrar como o estado de um programa é armazenado em uma conta separada. Os valores exatos de saldos e fornecimento podem variar dependendo do slot que o seu nó RPC utiliza para leitura.
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 armazenam estado, não código executável. Mint accounts são de propriedade do Token Program, que inclui instruções que definem como criar e atualizar mint accounts.
Os passos a seguir descrevem os campos dentro de value na ordem em que os
campos aparecem.
{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}}
O campo data contém o estado serializado da conta Mint. O primeiro item da
tupla contém os 82 bytes completos dos dados da conta codificados em base64. O
segundo item da tupla identifica a codificação.
Para ler a partir de um mint account, você deve desserializar o campo data no
tipo de dados Mint, conforme mostrado no
próximo exemplo.
{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}}
O campo executable indica se a conta pode ser invocada como um programa. Mint
accounts armazenam estado, portanto o campo 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}}
O campo lamports contém o saldo em SOL mantido pelo mint account. O valor em
lamports é o saldo isento de aluguel do mint account, não o fornecimento do
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}}
O mint account é de propriedade do
Token Program. O campo data do
mint account só pode ser modificado pelas instruções do 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}}
O campo rentEpoch é um campo legado de um mecanismo de rent obsoleto. O campo
ainda é retornado para compatibilidade retroativa.
{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}}
O campo space mostra que o mint account contém 82 bytes de dados.
{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}}
Desserializar mint account
Os dados da conta são armazenados no campo data em formato serializado. Para
ler esses dados como campos como supply ou decimals, desserialize o campo
data no tipo de conta definido pelo programa proprietário. A maioria dos
programas Solana fornece bibliotecas cliente com funções auxiliares para esta
etapa. Esses auxiliares retornam dados de conta estruturados, tornando o
resultado mais fácil de trabalhar.
Por exemplo, a biblioteca @solana-program/token inclui a função
fetchMint() para buscar um mint account e desserializar o
campo data do mint account no tipo de dados
Mint
definido pelo 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>,}
A função fetchMint() busca um mint account e desserializa o campo data
do mint account no tipo de conta 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}}
Você pode visualizar os dados completamente desserializados da mint account no 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}
O campo address contém o endereço da 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}
O campo data contém o estado desserializado da conta Mint. Os campos
aninhados em data são provenientes do tipo de conta Mint do 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}
O campo data.mintAuthority indica a única conta autorizada a criar novas
unidades do 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}
O campo supply exibe o número total de tokens que foram emitidos. O valor do
supply é medido na menor unidade do token. Para obter o supply total em unidades
padrão, ajuste o valor do campo supply pelo 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}
O campo decimals indica o número de casas decimais do 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}
O campo isInitialized indica se a mint account foi inicializada. O campo
isInitialized é uma verificação de segurança utilizada no 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}
O campo data.freezeAuthority mostra a conta com autoridade para congelar token
accounts. Uma token account é uma
conta separada que armazena unidades de um token para um proprietário. Quando
congelada, uma token account não pode transferir nem queimar seu saldo de
tokens.
{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}
O campo executable é falso. O mint account do USDC armazena o estado do token,
portanto o mint account do USDC não pode ser invocado como um programa.
{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}
O campo lamports contém o saldo em SOL mantido pelo mint account. O valor em
lamports é o saldo isento de aluguel do mint account, não o fornecimento de
tokens.
{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}
O campo programAddress mostra o programa que é proprietário do mint account.
Para o USDC, o programa proprietário é o Token Program. Apenas o programa que
possui uma conta pode modificar seu campo data por meio das instruções
implantadas do programa.
{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}
O campo space mostra o tamanho dos dados originais do mint account em bytes. A
conta Mint base do Token Program tem 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}
Saída serializada vs. desserializada
Ambos os exemplos leem o mesmo mint account do USDC. A primeira resposta deixa o
campo data serializado. Para ler o conteúdo do mint account, decodifique esses
dados como o tipo de conta definido pelo programa proprietário. Para um mint
account, o Token Program define o tipo Mint mostrado à direita.
Antes de decodificar, o campo data contém dados de
conta serializados.
{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}}
Após decodificar os dados como Mint, o campo data
contém campos de conta nomeados.
{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?