Go SDK:获取数据
可使用 Aptos 客户端和多种辅助函数获取链上数据。具体来说,参考文档中列出的许多函数都会获取链上数据,例如 Account、AccountResources 和 Transactions。
以下示例展示如何获取应用中可能需要的常见数据:
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()Aptos 客户端开箱即用,既可查询全节点中的网络数据,也可查询包含聚合和增强数据的 Indexer API。若要为 Indexer API 数据使用自定义查询,可按如下方式使用 client.QueryIndexer():
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, }) }使用 Move View 函数
Section titled “使用 Move View 函数”可通过 client.View 调用返回自定义链上数据的 view 函数。
例如,可通过 chain_id view 函数查询正在使用的网络:
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]确保 Indexer 数据新鲜
Section titled “确保 Indexer 数据新鲜”在后台,某些请求会使用 Indexer API 访问已处理或聚合的数据。这些额外解析需要一些时间,因此数据可能略微落后于最新账本。
如果要确保数据新鲜,可以等待 indexer 达到特定版本。
// Wait on processorName to reach version 12345err := client.WaitOnIndexer("processorName", 12345)