如何高效分析 Aptos Event

현재 언어 번역이 없어 원문을 표시합니다.
随着 Aptos 生态的发展,上链数据分析的需求也随之出现,在这篇文章里,我们能简单了解 1)对 Aptos 事件的认识及其在 Aptos 设计中的地位;2)如何使用 Node API 轮询事件的数据;3)举例:一些查询/索引事件数据的更好方法!

什么是 Event?

在当前的区块链技术里面,大部分的公链项目都有 event 的定义。

它担任着区块链交互中非常重要的角色。因为在传统的 Web 开发中,客户端与服务端交互的大部分情况可以读写同步响应,而在区块链网络交互更像一个异步的读写分离系统,比较像目前流行的 CQRS 架构模式,有很多合约的结果返回是需要等待区块打包挖掘后产生的,所以在合约中提交 event 是一个很重要的与用户交互的方式。

总结来看,event 有以下2个用途:

  1. 获取交易中合约的返回数据;
  2. 监听合约的各种操作状态;

Aptos 架构中的 Event 设计

如何高效分析 Aptos Event

在 Aptos 的设计里面,可以通过 fullnode 的 rest service 以 Node API 的形式进行区块链的交互。对于一次 tx (transaction),大概经过的步骤:

  1. 从 rest service 代理 transaction 到 validator 的 mempool 组件进行缓存;
  2. 通过几个组件的努力,最终区块达成共识,由 Execution 调用 Storage 组件进行区块下交易的永久保存,其中也包括了代表运行结果的 event 数据;
  3. rest service 通过 Storage 组件获取 event 的数据;
如何高效分析 Aptos Event

如何通过 Node API 查询 Event?

Chainbase 现在已经提供了稳定高效的 fullcode 节点集群,可以注册生成 Aptos Mainnet 的 Node API endpoint,参见文档 点击。

如何高效分析 Aptos Event

简单创建后,我们就拥有了自己的 Node API 服务:https://aptos-mainnet.s.chainbase.online/{your-api-key}/v1

(注意:需要将 {your-api-key} 替换成你的 API KEY)

以查询官方 domain 项目 Aptos name v1 的域名映射事件为例子。通过链上数据的分析,项目的 account address 是:0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c.

我们先看一下 ABI 的事件定义(这也是 Aptos 比较友好的地方,可以通过链上查询 ABI),通过Get account modules接口。请求:

https://aptos-mainnet.s.chainbase.online/{your-api-key}/v1/accounts/0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c/modules

如何高效分析 Aptos Event

提取这里关键的 event 定义的信息,我们通过 Get events by event handle 构造出可以获取该事件的请求:

https://aptos-mainnet.s.chainbase.online/{your-api-key}/v1/accounts/0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c/events/0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c::domains::SetNameAddressEventsV1/set_name_events

  • address = 0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c
  • event_handle = 0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c::domains::SetNameAddressEventsV1
  • field_name = set_name_events
如何高效分析 Aptos Event

这样可以通过 Node API 不断轮询获取这些事件的数据。其中 domain_name 就是域名,new_address 就是映射的 address

Node API 具有局限性

通过上面的例子,我们可以不间断地获取最新的事件。但是如果我们希望查询某个 domain 最新的映射地址是什么,或者希望分析每天 domain 的注册量,类似这样的需求,基于 Node API 是无法被满足的。

从本质来看,Aptos 的 Node API 是为了满足最基本的区块链网络交互,其背后的存储和组件不是为了数据的各种维度的分析、检索、索引来设计的。

如何使用 Chainbase 处理 Node API 的局限性

Chainbase Data Cloud通过数据结构化、清洗、索引,计算导入到更加符合数据分析场景的云端数据仓库服务,让用户可以更加高效、轻松地访问 Aptos 的任意数据,并且可以基于 SQL 生成定制化的 API 服务

  • Aptos Raw Data: 如events,transactions,table_items,move_modules,move_resources 等等 文档
  • Aptos Abstract Data: 如 coin,token 等等 文档

下面我们还是以上面 Aptos name v1 的数据场景举例

当域名=000.apt 的时候,如何查询address 和 expiration time

select
    JSONExtract(data, 'domain_name', 'String') as domain,
    JSONExtract(JSONExtract(data, 'new_address', 'String'), 'vec', 'Array(String)') as registered_address,
    toDateTime(JSONExtract(data, 'expiration_time_secs', 'String')) as expiration,
    transaction_version
from
    aptos.events
where
    type = '0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c::domains::SetNameAddressEventV1'
    and account_address = '0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c'
    and domain = '000'
如何高效分析 Aptos Event

如何查询已注册域名的总数

select
    count(1)
from
    aptos.events
where
    type = '0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c::domains::RegisterNameEventV1'
    and account_address = '0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c'
如何高效分析 Aptos Event

如何查询 Top 10 holder accounts

select
    JSONExtract(JSONExtract(data, 'new_address', 'String'), 'vec', 'String') as registered_address,
    count(*) as holder_total
from
    aptos.events
where
    type = '0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c::domains::SetNameAddressEventV1'
    and account_address = '0x867ed1f6bf916171b1de3ee92849b8978b7d1b9e0a8cc982a3d19d535dfd9c0c'
    and registered_address != "[]"
group by registered_address
order by holder_total desc
limit
    10
如何高效分析 Aptos Event

从上述案例可看到,Chainbase 的 Data Cloud 非常快速高效地获取了 Aptos 上的 Event 数据,在开发者文档中,你能获取更多的案例和代码,欢迎大家前来探索。

祝你们在 Aptos 玩得开心!

공유하기:

작성자: Chainbase

이 글은 PANews 입주 칼럼니스트의 관점으로, PANews의 입장을 대표하지 않으며 법적 책임을 지지 않습니다.

글 및 관점은 투자 조언을 구성하지 않습니다

이미지 출처: Chainbase. 권리 침해가 있을 경우 저자에게 삭제를 요청해 주세요.

PANews 공식 계정을 팔로우하고 함께 상승장과 하락장을 헤쳐나가세요
PANews APP
Kalshi 개별주 무기한 계약, 출시 이후 명목 거래액 50억 달러… 트레이더들 빅테크 베팅
PANews 속보