Lectura desde la red
Esta sección explora cómo leer datos de la red de Solana mediante la obtención de diferentes cuentas para entender la estructura de una cuenta de Solana.
En Solana, todos los datos existen en "cuentas". Puedes pensar en los datos en Solana como una base de datos pública con una única tabla "Cuentas", donde cada entrada es una cuenta con el mismo tipo base de Cuenta (Account).
Cuentas
Las cuentas en Solana pueden almacenar "estado" o programas "ejecutables". Cada cuenta tiene una "dirección" (clave pública) que sirve como su ID único utilizado para localizar sus datos correspondientes en la cadena.
Las cuentas de Solana contienen:
- Estado: Datos que están destinados a ser leídos y persistidos. Por ejemplo, información sobre tokens, datos de usuario u otros datos definidos dentro de un programa.
- Programas ejecutables: Cuentas que contienen el código real de los programas de Solana. Estas cuentas almacenan instrucciones que los usuarios pueden invocar.
Esta separación entre el código del programa y el estado del programa es una característica clave del Modelo de Cuenta de Solana. Para más detalles, consulta la página del Modelo de Cuenta de Solana.
Obtener una cuenta de billetera
Este ejemplo demuestra cómo:
- Generar un nuevo keypair (par de claves pública/privada).
- Solicitar un airdrop de SOL para financiar la nueva dirección.
- Recuperar los datos de la cuenta para la dirección financiada.
En Solana, financiar una nueva dirección con SOL crea automáticamente una cuenta propiedad del System Program. Todas las cuentas de "billetera" son simplemente cuentas propiedad del System Program que contienen SOL y pueden firmar transacciones.
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));
Consultar el Token Program
Este ejemplo consulta el Token Program para demostrar la diferencia entre cuentas de wallet y cuentas 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);
Obtener cuenta Mint
Este ejemplo obtiene la cuenta Mint de USD Coin (USDC) para mostrar cómo los programas en Solana almacenan el estado en cuentas separadas.
Una cuenta Mint es una cuenta propiedad del Token Program. Almacena metadatos globales para un token específico, incluyendo el suministro total, número de decimales y las cuentas autorizadas para acuñar o congelar tokens. La dirección de la cuenta Mint identifica de manera única a un token en la red de 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);
Deserializar cuenta Mint
El campo data
de una cuenta de Solana contiene bytes en bruto. Para
interpretar estos datos de manera significativa, debes deserializarlos al tipo
de datos apropiado definido por el programa propietario de la cuenta.
La mayoría de los programas de Solana proporcionan bibliotecas cliente con funciones auxiliares que abstraen el proceso de deserialización. Estas funciones convierten los bytes brutos de la cuenta en tipos de datos estructurados, facilitando el trabajo con los datos de la cuenta.
Por ejemplo, @solana/spl-token
incluye la función
getMint()
para ayudar a deserializar el campo data
de una
cuenta mint en el tipo de datos
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?