跳转到内容

Aptos 全节点 REST API

该 API 内置于全节点中,提供了一种简单,低延迟但底层的方式来读取状态和向 Aptos 区块链提交交易.它还支持交易模拟功能. 如需进行更高级的查询,我们推荐使用 索引器 GraphQL API.

Aptos 索引器 类似,Aptos REST API 也基于计算单元设有速率限制.您可以通过阅读 Aptos Build 文档 了解更多关于速率限制的工作原理.

大多数与 Aptos 区块链的集成都需要全面了解区块链当前和历史状态.Aptos 提供了历史交易,状态和事件,这些都是交易执行的结果.

  • 历史交易包含执行状态,输出以及与相关事件的关联.每笔交易都有一个唯一的版本号,用于确定其在区块链账本历史中的全局顺序.
  • 状态表示截至特定版本的所有交易输出.换句话说,状态版本是包含该交易版本之前所有交易的累积结果.
  • 交易执行时可能会触发事件.事件 是关于链上数据变更的提示信息.

节点上的存储服务采用两种数据修剪机制来清除数据:

  • 状态数据
  • 事件,交易等其他所有数据虽然可以禁用其中任一功能,但存储状态版本并不是特别可持续的做法.

可以通过在 storage_config.rs 中将 enable_ledger_pruner 设置为 false 来禁用事件和交易剪枝功能.这在 Mainnet 中是默认行为.在不久的将来,Aptos 将提供索引器来减少直接从节点查询的需求.

REST API 提供以下方式查询交易和事件:

通过 API 调用时,View 函数不会修改区块链状态.View 函数 及其 输入参数 可用于通过 Move 读取潜在的复杂链上状态.例如,您可以评估拍卖合约中的最高出价者.以下是相关文件:

View 函数的运行方式类似于 Aptos 模拟 API,但没有副作用且具有可访问的输出路径.可以通过 /view 端点调用 View 函数.调用 View 函数需要提供模块名,函数名以及输入类型参数和值.

函数不必是不可变的才能标记为 #[view],但如果函数是可变的,通过 API 调用时不会导致状态变更.如果要标记可变函数为 #[view],建议将其设为私有,以防止在运行时被恶意调用.

要使用 View 函数,需要通过 Aptos CLI 发布模块.

在 Aptos CLI 中,View 函数请求示例如下:

Terminal window
aptos move view --function-id devnet::message::get_message --profile devnet --args address:devnet
{
"Result": [
"View functions rock!"
]
}

在 TypeScript SDK 中,View 函数请求示例如下:

import { Aptos } from "@aptos-labs/ts-sdk";
const aptos = new Aptos();
const [balance] = aptos.view<[string]>({
function: "0x1::coin::balance",
typeArguments: ["0x1::aptos_coin::AptosCoin"],
functionArguments: [alice.accountAddress]
});
expect(balance).toBe("100000000");

视图函数返回一个值列表作为向量.默认情况下,结果以 JSON 格式返回;不过,也可以选择以 Binary Canonical Serialization (BCS) 编码格式返回.