Lendo da rede

Leia dados da rede Solana buscando diferentes contas. Esta seção va ajudá-lo a entender a estrutura das contas Solana. Cada conta Solana tem um endereço único que é usado para localizar seus dados correspondentes na blockchain. As contas contêm dados de estado ou um programa executável.

Buscar uma conta de carteira

Uma carteira é uma conta pertencente ao System Program. As carteiras são principalmente usadas para armazenar SOL e assinar transações. Quando SOL é enviado para um novo endereço pela primeira vez, uma conta do sistema é automaticamente criada.

O exemplo abaixo gera um novo keypair, solicita SOL para financiar o novo endereço de chave pública e recupera os dados da conta para a carteira recém-financiada.

Fetch account
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 account
const 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));
Console
Click to execute the code.

Quando você busca uma conta de carteira, a resposta inclui os campos mostrados no exemplo de saída à direita.

O campo data contém os dados da conta armazenados como bytes. Para contas de carteira, este campo está vazio (0 bytes).

O campo executable indica se o campo data da conta contém código de programa executável. Para contas de carteira, este campo é false.

O campo lamports contém o saldo de SOL da conta, em lamports.

O campo owner mostra o programa que possui a conta. Para carteiras, o proprietário é sempre o System Program, com o endereço 11111111111111111111111111111111.

O campo rentEpoch é um campo legado de um mecanismo de rent obsoleto. (Este campo está incluído para compatibilidade retroativa.)

O campo space mostra o número de bytes contidos no campo data. Este não é um campo no próprio tipo Account, mas está incluído na resposta.

Neste exemplo, o campo space é 0 porque o campo data contém 0 bytes de dados.

Quando você busca uma conta de carteira, a resposta inclui os campos mostrados no exemplo de saída à direita.

O campo data contém os dados da conta armazenados como bytes. Para contas de carteira, este campo está vazio (0 bytes).

O campo executable indica se o campo data da conta contém código de programa executável. Para contas de carteira, este campo é false.

O campo lamports contém o saldo de SOL da conta, em lamports.

O campo owner mostra o programa que possui a conta. Para carteiras, o proprietário é sempre o System Program, com o endereço 11111111111111111111111111111111.

O campo rentEpoch é um campo legado de um mecanismo de rent obsoleto. (Este campo está incluído para compatibilidade retroativa.)

O campo space mostra o número de bytes contidos no campo data. Este não é um campo no próprio tipo Account, mas está incluído na resposta.

Neste exemplo, o campo space é 0 porque o campo data contém 0 bytes de dados.

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

Buscar o Token Program

O exemplo abaixo busca o Token Program para demonstrar a diferença entre contas de carteira e program accounts. A program account armazena o bytecode compilado para o código-fonte do Token Program. Você pode visualizar esta program account no Solana Explorer.

Fetch program account
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);
Console
Click to execute the code.

O Token Program é uma program account executável. Os programas têm os mesmos campos subjacentes que todas as contas, mas com diferenças fundamentais.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

O campo executable está definido como true, o que indica que o campo data da conta contém código executável.

O campo data armazena o código executável do programa.

Cada program account é de propriedade do seu programa carregador. Neste exemplo, o owner é o programa BPFLoader2.

O Token Program é uma program account executável. Os programas têm os mesmos campos subjacentes que todas as contas, mas com diferenças fundamentais.

O campo executable está definido como true, o que indica que o campo data da conta contém código executável.

O campo data armazena o código executável do programa.

Cada program account é de propriedade do seu programa carregador. Neste exemplo, o owner é o programa BPFLoader2.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

Buscar uma mint account

Uma mint account é uma conta de propriedade do Token Program que armazena metadados globais para um token específico. Isso inclui o fornecimento total, número de decimais e as contas que estão autorizadas a cunhar ou congelar tokens. O endereço da mint account identifica exclusivamente um token na rede Solana.

O exemplo abaixo busca a mint account do USD Coin para demonstrar como o estado de um programa é armazenado em uma conta separada.

Fetch program account
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);
Console
Click to execute the code.

As mint accounts armazenam estado, não código executável. Elas são de propriedade do Token Program, que inclui instruções definindo como criar e atualizar mint accounts.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

O campo data da conta mint armazena estado, não código executável, então o campo executable é false.

O Token Program define o tipo de dados Mint, que é armazenado no campo data.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

O campo data contém o estado serializado da conta Mint, como a autoridade da mint, fornecimento total, número de decimais.

Para ler de uma conta Mint, você deve desserializar o campo data no tipo de dados Mint, que é mostrado no próximo exemplo.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

A conta mint é de propriedade do Token Program. Isso significa que seu campo data só pode ser modificado pelas instruções do Token Program.

Mint Account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

As mint accounts armazenam estado, não código executável. Elas são de propriedade do Token Program, que inclui instruções definindo como criar e atualizar mint accounts.

O campo data da conta mint armazena estado, não código executável, então o campo executable é false.

O Token Program define o tipo de dados Mint, que é armazenado no campo data.

O campo data contém o estado serializado da conta Mint, como a autoridade da mint, fornecimento total, número de decimais.

Para ler de uma conta Mint, você deve desserializar o campo data no tipo de dados Mint, que é mostrado no próximo exemplo.

A conta mint é de propriedade do Token Program. Isso significa que seu campo data só pode ser modificado pelas instruções do Token Program.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Desserializar conta mint

Antes que os bytes brutos no campo data de uma conta possam ser interpretados de forma significativa, eles devem ser desserializados. O tipo de dados apropriado é definido pelo programa que possui a conta. A maioria dos programas Solana fornece bibliotecas de cliente com funções auxiliares que abstraem o processo de desserialização. Essas funções convertem os bytes brutos da conta em tipos de dados estruturados, tornando mais fácil trabalhar com os dados da conta.

Por exemplo, a biblioteca @solana/spl-token inclui a função getMint() para ajudar a desserializar o campo data de uma conta mint no tipo de dados Mint definido pelo Token Program.

Deserialize mint account data
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");
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>,
}

A função getMint() desserializa o campo data de uma conta mint no tipo de conta Mint.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Você pode visualizar os dados completamente desserializados da conta mint no Solana Explorer.

O campo address contém o endereço da conta mint.

O campo mintAuthority mostra a única conta que pode criar novas unidades do token.

O campo supply mostra o número total de tokens que foram mintados. Este valor é medido na menor unidade do token. Para obter o fornecimento total em unidades padrão, ajuste o valor do campo supply pelo decimals.

O campo decimals mostra o número de casas decimais para o token.

O campo isInitialized indica se a conta mint foi inicializada. Este campo é uma verificação de segurança usada no Token Program.

O campo freezeAuthority mostra a conta com autoridade para congelar token accounts. Um token account congelado não pode transferir ou queimar o token que contém.

O campo tlvData contém dados extras para Token Extensions e requer desserialização adicional. Este campo é relevante apenas para contas criadas pelo Token Extension Program (Token2022).

A função getMint() desserializa o campo data de uma conta mint no tipo de conta Mint.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Você pode visualizar os dados completamente desserializados da conta mint no Solana Explorer.

O campo address contém o endereço da conta mint.

O campo mintAuthority mostra a única conta que pode criar novas unidades do token.

O campo supply mostra o número total de tokens que foram mintados. Este valor é medido na menor unidade do token. Para obter o fornecimento total em unidades padrão, ajuste o valor do campo supply pelo decimals.

O campo decimals mostra o número de casas decimais para o token.

O campo isInitialized indica se a conta mint foi inicializada. Este campo é uma verificação de segurança usada no Token Program.

O campo freezeAuthority mostra a conta com autoridade para congelar token accounts. Um token account congelado não pode transferir ou queimar o token que contém.

O campo tlvData contém dados extras para Token Extensions e requer desserialização adicional. Este campo é relevante apenas para contas criadas pelo Token Extension Program (Token2022).

Deserialized mint data
{
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"mintAuthority": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"supply": "8985397351591790",
"decimals": 6,
"isInitialized": true,
"freezeAuthority": "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar",
"tlvData": {
"type": "Buffer",
"data": []
}
}

Is this page helpful?

Índice

Editar Página

Gerenciado por

© 2025 Fundação Solana.
Todos os direitos reservados.
Lendo da rede | Solana