Saltearse al contenido

SDK de Go - Obtener Datos

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 recuperarán datos de la cadena, por ejemplo Account, AccountResources, Transactions.

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

client, err := aptos.NewClient(aptos.DevnetConfig)
if err != nil {
panic("Failed to create client:" + err.Error())
}
address := aptos.AccountAddress{}
err := address.ParseStringRelaxed("0x123")
if err != nil {
panic("Failed to parse address:" + err.Error())
}
accountInfo, err := client.Account(address)
resources, err := client.AccountResources(address)
transactions, err := client.Transactions()

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 client.QueryIndexer() así:

var out []CoinBalance
var q struct {
Current_coin_balances []struct {
CoinType string `graphql:"coin_type"`
Amount uint64
OwnerAddress string `graphql:"owner_address"`
} `graphql:"current_coin_balances(where: {owner_address: {_eq: $address}})"`
}
variables := map[string]any{
"address": address.StringLong(),
}
err := ic.Query(&q, variables)
if err != nil {
return nil, err
}
for _, coin := range q.Current_coin_balances {
out = append(out, CoinBalance{
CoinType: coin.CoinType,
Amount: coin.Amount,
})
}

Puedes llamar funciones de vista que retornan datos personalizados de la cadena usando client.View.

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

viewResponse, err := client.View(&aptos.ViewPayload {
Module: aptos.ModuleId{Address: aptos.AccountAddress{}, Name: "chain_id"},
Function: "get",
ArgTypes: []aptos.TypeTag{},
Args: [][]byte{},
)
chainId := viewResponse[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 esperar en una versión específica del indexador.

// Esperar en processorName para alcanzar la versión 12345
err := client.WaitOnIndexer("processorName", 12345)