跳转到内容

Rust SDK:获取数据

可以使用 Aptos 客户端通过多种辅助函数获取链上数据。ledger_infoget_balanceview 等高层次辅助方法位于 Aptos 上。更底层的 REST 调用通过 aptos.fullnode() 进行。

以下示例展示如何获取应用中常用的数据:

use aptos_sdk::{Aptos, AptosConfig};
let aptos = Aptos::new(AptosConfig::devnet())?;
let ledger_info = aptos.ledger_info().await?;
let balance = aptos.get_balance(address).await?;
let account = aptos.fullnode().get_account(address).await?;
let resources = aptos.fullnode().get_account_resources(address).await?;

可以使用 aptos.view 调用返回链上自定义数据的 View 函数。

例如,可以查询当前时间戳或 APT Coin 余额:

let timestamp = aptos
.view("0x1::timestamp::now_seconds", vec![], vec![])
.await?;
let balance = aptos
.view(
"0x1::coin::balance",
vec!["0x1::aptos_coin::AptosCoin".to_string()],
vec![serde_json::json!(address.to_string())],
)
.await?;

启用 indexer 功能时(默认开启),Aptos 客户端既可查询来自 全节点 的网络数据,也可查询 Indexer API 的数据。

use aptos_sdk::{Aptos, AptosConfig, types::AccountAddress};
let aptos = Aptos::new(
AptosConfig::devnet()
.with_indexer_url("https://api.devnet.aptoslabs.com/v1/graphql")?,
)?;
let indexer = aptos
.indexer()
.ok_or_else(|| anyhow::anyhow!("Indexer client not available"))?;
let balances = indexer
.get_fungible_asset_balances(AccountAddress::ONE)
.await?;
let my_query = r#"query { ledger_infos { chain_id } }"#;
let result: serde_json::Value = indexer.query(my_query, None).await?;