Lendo da rede
Esta seção explora como ler dados da rede Solana buscando diferentes contas para entender a estrutura de uma conta Solana.
Na Solana, todos os dados existem em "accounts". Você pode pensar nos dados na Solana como um banco de dados público com uma única tabela "Accounts", onde cada entrada é uma conta com o mesmo tipo base de Account.
Contas
As contas na Solana podem armazenar "estado" ou programas "executáveis". Cada conta tem um "endereço" (chave pública) que serve como seu ID único usado para localizar seus dados correspondentes na blockchain.
As contas Solana contêm:
- Estado: Dados que devem ser lidos e persistidos. Por exemplo, informações sobre tokens, dados do usuário ou outros dados definidos dentro de um programa.
- Programas Executáveis: Contas contendo o código real dos programas Solana. Essas contas armazenam instruções que os usuários podem invocar.
Esta separação entre código do programa e estado do programa é uma característica chave do Modelo de Conta da Solana. Para mais detalhes, consulte a página Modelo de Conta Solana.
Buscar conta de carteira
Este exemplo demonstra como:
- Gerar um novo keypair (par de chaves pública/privada).
- Solicitar um airdrop de SOL para financiar o novo endereço.
- Recuperar os dados da conta para o endereço financiado.
Na Solana, financiar um novo endereço com SOL cria automaticamente uma conta pertencente ao System Program. Todas as contas de "carteira" são simplesmente contas pertencentes ao System Program que mantêm SOL e podem assinar transações.
import { Keypair, Connection, LAMPORTS_PER_SOL } from "@solana/web3.js";const keypair = Keypair.generate();console.log(`Public Key: ${keypair.publicKey}`);const connection = new Connection("http://localhost:8899", "confirmed");// Funding an address with SOL automatically creates an accountconst signature = await connection.requestAirdrop(keypair.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");const accountInfo = await connection.getAccountInfo(keypair.publicKey);console.log(JSON.stringify(accountInfo, null, 2));
Buscar o Token Program
Este exemplo busca o Token Program para demonstrar a diferença entre contas de carteira e contas de programa.
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);
Buscar conta Mint
Este exemplo busca a conta Mint do USD Coin (USDC) para mostrar como os programas na Solana armazenam estado em contas separadas.
Uma conta Mint é uma conta pertencente ao Token Program. Ela armazena metadados globais para um token específico, incluindo o fornecimento total, número de decimais e as contas autorizadas a criar ou congelar tokens. O endereço da conta Mint identifica exclusivamente um token na rede Solana.
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);
Desserializar conta Mint
O campo data
de uma conta Solana contém bytes brutos. Para interpretar estes
dados de forma significativa, você deve desserializá-los no tipo de dados
apropriado definido pelo programa que possui a conta.
A maioria dos programas Solana fornece bibliotecas 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, facilitando o trabalho com os dados da conta.
Por exemplo, @solana/spl-token
inclui a função
getMint()
para ajudar a desserializar o campo data
de uma
mint account no tipo de dados
Mint.
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");
Is this page helpful?