Ir al contenido

Obtener Datos mediante el SDK

Puedes usar el cliente Aptos para obtener datos on-chain usando una variedad de metodos auxiliares. Los ejemplos a continuacion asumen que ya has creado una instancia del cliente Aptos:

use aptos_sdk::{Aptos, AptosConfig};
let aptos = Aptos::new(AptosConfig::testnet())?;

Obtiene el saldo de APT para cualquier direccion de cuenta. El saldo se devuelve en octas (1 APT = 100,000,000 octas).

let address = "0x1".parse()?;
let balance = aptos.get_balance(address).await?;
println!("Balance: {} octas", balance);

Verifica si una cuenta existe on-chain y obtiene su numero de secuencia actual. El numero de secuencia es necesario al construir transacciones manualmente.

let address = "0x1".parse()?;
// Check if an account exists
let exists = aptos.account_exists(address).await?;
println!("Account exists: {}", exists);
// Get the current sequence number
let sequence_number = aptos.get_sequence_number(address).await?;
println!("Sequence number: {}", sequence_number);

Obtiene el estado actual de la blockchain, incluyendo la ultima version del ledger, la altura del bloque y la epoca.

let info = aptos.ledger_info().await?;
println!("Ledger version: {}", info.ledger_version);
println!("Block height: {}", info.block_height);
println!("Epoch: {}", info.epoch);

Las funciones de vista permiten llamar funciones Move on-chain que estan marcadas como #[view] sin enviar una transaccion. La variante JSON devuelve resultados como serde_json::Value, lo cual es util para consultas rapidas y datos dinamicos.

Llama a una funcion de vista simple sin argumentos de tipo ni parametros:

let result = aptos
.view("0x1::timestamp::now_seconds", vec![], vec![])
.await?;
println!("Current timestamp: {:?}", result);

Para consultar un saldo de moneda especifico, pasa el tipo de moneda como argumento de tipo y la direccion de la cuenta como argumento de funcion:

let result = aptos
.view(
"0x1::coin::balance",
vec!["0x1::aptos_coin::AptosCoin"],
vec![serde_json::json!("0x1")],
)
.await?;
println!("Coin balance: {:?}", result);

El metodo view_bcs devuelve resultados como bytes codificados en BCS, que puedes deserializar en structs de Rust con tipado fuerte. Esto es mas eficiente y seguro en tipos que la variante JSON.

let timestamp: Vec<u64> = aptos
.view_bcs("0x1::timestamp::now_seconds", vec![], vec![])
.await?;
println!("Current timestamp: {} seconds", timestamp[0]);

Estima el costo de gas de una transaccion antes de enviarla. Esto es util para mostrar estimaciones de tarifas a los usuarios o validar que una transaccion no excedera un presupuesto de gas.

use aptos_sdk::types::InputEntryFunctionData;
let payload = InputEntryFunctionData {
function: "0x1::aptos_account::transfer".to_string(),
type_arguments: vec![],
arguments: vec![
serde_json::json!("0xrecipient_address"),
serde_json::json!("1000"),
],
};
let gas_estimate = aptos.estimate_gas(&sender, payload.clone()).await?;
println!("Estimated gas units: {}", gas_estimate);

Para consultas avanzadas no cubiertas por los metodos de alto nivel de Aptos, puedes acceder al cliente REST del fullnode directamente. Esto te da acceso al conjunto completo de endpoints de la API del fullnode.

let address = "0x1".parse()?;
// Retrieve all modules published under an account
let modules = aptos.fullnode().get_account_modules(address).await?;
for module in &modules.data {
println!("Module: {}", module.abi.as_ref().unwrap().name);
}

El SDK incluye un cliente de indexador para consultar datos on-chain agregados y enriquecidos. El indexador proporciona acceso a tipos de datos que no estan disponibles a traves de la API del fullnode por si sola, como el historial de propiedad de tokens, agregaciones de eventos y resumenes de transacciones de cuentas.

let indexer = aptos.indexer();

El cliente del indexador proporciona acceso a:

  • Datos de tokens — propiedad, metadatos e historial de transferencias para activos digitales.
  • Saldos de monedas — saldos actuales e historicos de todos los tipos de monedas.
  • Transacciones de cuentas — datos de transacciones enriquecidos con payloads decodificados.
  • Datos de eventos — flujos de eventos agregados y filtrables.
  • Datos de colecciones — metadatos y estadisticas de colecciones NFT.