Aptos的数据分析师指南(第一部分)

  • aptoslabs
  • 发布于 2025-01-30 21:53
  • 阅读 81

本文介绍了Aptos区块链的用户交易、代币和数据访问等关键概念,重点阐述了交易在区块中的处理、资产的表示及其类型,以及数据查询的过程与工具。文章提供了对Aptos各项功能的深入分析,并展望了未来的研究方向。

作者:Ying Wu,数据工程师 @ Aptos Labs

介绍

Aptos 每秒生成多个 区块,具备即时终局性(使用 AptosBFT 共识)。区块内最有趣的交易类型是用户交易。区块内的交易是通过 BlockSTMMoveVM 内并行执行的。区块生成通常优化于延迟(快速区块),但是在负载较高时可以减慢以优化吞吐量,每个区块可以处理多达 几千个 交易(例如:79432868,140517934)。区块被分组到纪元中(每 ~2 小时在主网)并且这时允许验证者更换。

显示主网验证者的地理分布的探测器截图

Aptos 主网验证者的 IP 地理分布

我们有 100 多个验证者分布在 地理上 以实现去中心化并减少交易提交的延迟。运行验证者需要相当高的质押要求,不过,进行 委托质押 只需 10 APT。

我们目前托管 3 个 网络:主网、测试网和开发网(每 ~2 周重置一次)。

Aptos 交易类型及其符号列表

Aptos 探测器上的交易类型及其符号

用户交易

对于用户交易,一个地址提交一个交易,内容包括:

  • 被调用的合约(及合约有效载荷)— 即 entry_function
  • 交易的签名者(通常只有发送者)
  • 交易的状态(成功或虚拟机中止信息)
  • 最大 gas 限额和交易过期时间戳

Gas 以 octa 进行交易支付(1e8 octa = 1 APT),使用以下公式:gas_fee = gas_unit_price * gas_used - storage_refund。其中 gas_unit_price 默认值为 100 octa。在区块中可以通过增加 gas_unit_price 来进行优先级排序,钱包在拥堵时(当区块空间有限时)会建议提高 gas_unit_price

交易至少会有一个 事件(gas 费用声明,列出在 I/O、存储和存储退款上花费的 gas 量)并发生某些资源变化。由于这些变化仅显示交易引起的差异,因此合约最好发出事件以提供关于发生的操作的上下文(而不是尝试从变化中推断)。然而,事件无法被其他交易访问,旨在供索引程序使用。

可以使用交易哈希识别交易,但是,Aptos 的交易还包括一个单调递增的交易版本,版本通常用于交易标识。

货币和代币

在链上表示资产时,一个考虑因素是资产的“可堆叠性”。表示货币的资产是可互换的(同质化的),应当可以堆叠在一起,而表示艺术品的资产是独特的(应当进行更高层次的集合分组以便堆叠)。具有耐久性的物品表示是一个模糊的领域。

我们有两个“可堆叠”资产的表示:

  1. 货币(遗留)
  • 存储在 0x1::coin::CoinStore<type>(默认)
  • 使用 0x1::coin:: 函数进行操控
  • 使用 0xa 从货币迁移到同质化资产
  1. 同质资产,即 FA
  • 使用 0x1::fungible_asset:: 函数进行操控

我们还拥有两个非可堆叠资产的表示:

  1. 代币(遗留),即 token v1
  • 存储在 0x3::token::TokenStore
  • 使用 0x3:: 函数进行操控
  1. 数字资产,即 token v2
  • 使用 0x4:: 函数进行操控

货币的供应追踪是可选的。非遗留表示是对象,使其更易于追踪,并允许更复杂的权限控制能力。对象还可以导致有趣的表示,例如将货币发送到同质资产存储中,并且需要索引程序来查找由账户拥有的所有对象(对象的地址通过一致哈希生成)。

当可堆叠资产进入/退出 CoinStore 和 FungibleAssetStore 时,会发出 withdrawdeposit 事件(复式记账)。

当非可堆叠资产移动时,会发出 Transfer 事件或 Deposit 事件。此外,这些资产还会发出 mintburn 事件。

Aptos 有一个 开源索引器实现文档),提供以下资产的表:

  1. 活动(转移)
  2. 余额(所有权)
  3. 元数据(小数位数、名称等)

(同质资产的处理器代码见 fungible asset,数字资产的处理器代码见 digital asset)。

对这些表的公共查询访问通过 graphql 端点表参考)进行,尽管强烈建议 请求一个免费的开发 API 密钥 以获得更高的速率限制。

数据访问

多个供应商 提供对 Aptos 数据的访问。一些比较受欢迎的包括 duneflipsidebigquery(示例 查询 及其 rust ETL)。原始表的结构与 API 返回的数据类似,具有以下大致关系。

一些核心 Aptos 数据表之间关系的 ERD 图

一些 Aptos 核心数据表之间的关系

通过 每日活跃用户查询 来分析数据(我们常常将用户和账户互换使用)。

WITH final AS (
  SELECT
    tx_version,
    block_date,
    signer_address,
    tx_success,
    signer_type,
    type
  FROM aptos.signatures s
)
SELECT
  block_date,
  COUNT(1) as n_sig,
  COUNT(DISTINCT tx_version) as n_txn,
  COUNT(DISTINCT signer_address) as daily_active_user,
  MIN(tx_version),
  MAX(tx_version)
FROM final
WHERE 1=1
  AND block_date
    BETWEEN DATE_ADD('day', -31, current_date)
    AND DATE_ADD('day', -1, current_date)
  -- AND tx_version BETWEEN 1669545227 AND 1670475367
  AND tx_success
  AND signer_type != 'fee_payer'
GROUP BY 1
ORDER BY 1

在 Aptos,我们将活跃账户定义为一个签名交易的地址。我们可以在一笔交易上有多个签名(多重签名),因此一笔交易可以代表多个活跃账户,尽管它只能有一个发送账户(发送者通常用作代理)。

上述查询从签名表获取数据,并过滤出过去 30 天内的成功交易的非费用支付签名,并按天进行汇总以获得总的签名数(n_sig)、交易数(n_txn)、活跃账户数(daily_active_user)以及最小/最大版本,这对调试有用。

每日活跃地址随时间变化的图

来自 dune 的每日活跃地址查询

要检查个别交易(例如:2203280000),可以针对探测器和其他 Aptos API 进行查找。

  • 探测器
  • 全节点文档参考
  • GRPC: docker run — rm fullstorydev/grpcurl:v1.8.7 -d '{ "starting_version": 2203280000, "transactions_count": 1 }' -max-msg-sz 30000000 -H "authorization:Bearer aptoslabs_SECRET_KEY_HERE" grpc.mainnet.aptoslabs.com:443 aptos.indexer.v1.RawData/GetTransactions文档
  • GraphQL文档

结论

我希望这个概述能帮助其他人开始查询 Aptos 数据。在第 2 部分,我将深入探讨以下主题:

  • DeFi AMM 交易的数据变化
  • NFT 市场交易的数据变化
  • 追踪不进入 CoinStore 的货币转移
  • 估计货币供给
  • 追踪委托质押和收益 %
  • 理解不同的签名类型
  • 半同质代币(例如:具有耐久性的游戏道具作为资产)

记得为更高的查询速率限制 创建一个免费的开发者账户。我期待看到社区制作的仪表板。

  • 原文链接: medium.com/aptoslabs/dat...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论