Saltearse al contenido

Obtener Datos via SDK

Puedes usar el cliente Aptos para obtener datos de la cadena usando una variedad de funciones de ayuda. Específicamente, muchas de las funciones listadas en la documentación de referencia aquí que comienzan con get... recuperarán datos de la cadena.

Aquí hay un ejemplo mostrando cómo obtener datos comunes que puedes necesitar en tu aplicación:

const aptosConfig = new AptosConfig({ network: Network.DEVNET });
const aptos = new Aptos(aptosConfig);
const fund = await aptos.getAccountInfo({ accountAddress: "0x123" });
const modules = await aptos.getAccountModules({ accountAddress: "0x123" });
const tokens = await aptos.getAccountOwnedTokens({ accountAddress: "0x123" });

El cliente Aptos puede por defecto consultar tanto datos de red desde fullnodes como la API del Indexador que contiene datos agregados y enriquecidos. Si quieres usar una consulta personalizada para datos de la API del Indexador, puedes usar aptos.queryIndexer así:

const ledgerInfo = await aptos.queryIndexer({
query: {
query: `
query MyQuery {
ledger_infos {
chain_id
}
}
`
}
})

Algunas consultas son intencionalmente amplias, pero esto puede hacer difícil inferir el tipo de retorno apropiado. Para acomodar eso, estas solicitudes amplias como getAccountResources te permiten especificar cuál debería ser el tipo de respuesta esperado.

type Coin = { coin: { value: string } };
const resource = await aptos.getAccountResource<Coin>({
accountAddress: testAccount.accountAddress,
resourceType: "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>",
});
// Ahora tienes acceso a la propiedad del tipo de respuesta
const value = resource.coin.value;

Puedes llamar funciones de vista que retornan datos personalizados de la cadena usando aptos.view.

Por ejemplo, puedes buscar la red que estás usando con la función de vista chain_id:

const payload: InputViewFunctionData = {
function: "0x1::chain_id::get",
};
const chainId = (await aptos.view({ payload }))[0];

Detrás de escena, algunas solicitudes usan la API del Indexador para acceder a datos que han sido procesados o agregados. Ese análisis adicional puede tomar un poco de tiempo, por lo que los datos pueden estar ligeramente atrasados respecto al ledger más reciente.

Si quieres asegurar que los datos estén frescos, puedes especificar el minimumLedgerVersion en cualquier solicitud que use la API del Indexador.

// Obtener el número de versión del ledger más reciente
const ledgerVersion = await aptos.getLedgerInfo().ledger_version;
const tokens = await aptos.getAccountOwnedTokens({
accountAddress: alice.accountAddress,
minimumLedgerVersion: BigInt(response.version),
});

También puedes asegurar que tu solicitud tenga los datos de una transacción que enviaste obteniendo la versión del ledger de la validación de la transacción misma.

// Esperar una transacción que acabas de enviar
const response = await aptos.waitForTransaction({
transactionHash: pendingTransaction.hash,
});
// Luego buscar cómo esa transacción afectó la cuenta de alice
const tokens = await aptos.getAccountOwnedTokens({
accountAddress: alice.accountAddress,
minimumLedgerVersion: BigInt(response.version),
});