跳转到内容

区块

Aptos 按交易而非按区块为账本状态编号。执行后,每笔交易产生的状态都会单独存储,因此客户端可以读取并证明单个版本。这不同于只持久化区块结束后状态的链。

区块仍是共识和证明的单位。验证者就一批有序交易达成一致,用 Block-STM 执行该批次,并持久化结果。存储中的证明以区块为粒度。一个区块包含多少用户交易,取决于网络活动以及链上限制(gas、输出大小和最大区块大小)。

出块不是固定槽位时间。Aptos 在网络时延允许时就会提议下一个区块。主网出块时间通常为数十毫秒;可在 Explorer 查看实时时间戳。

从提交到确认的完整路径见 Aptos 区块链深入解析

区块不止用户交易。共识会插入系统交易来标记批次,并在某些情况下携带协议数据:

  1. BlockMetadataTransaction — 区块中的第一笔交易。记录提议者、时间戳和轮次。在纪元边界还可以触发验证者集合变更和奖励分配。
  2. ValidatorTransaction — 可选的验证者协议负载,例如 JWK 更新或随机数(DKG)材料。不是用户提交的。
  3. 用户交易 — 来自账户的已签名交易。见交易和状态
  4. BlockEpilogueTransaction — 通常是区块中的最后一笔交易。携带 BlockEndInfo(区块是否触及 gas 或输出限制,以及大致用量)。由 AIP-88 引入,取代了此前作为区块结束标记的 StateCheckpointTransaction

一个纪元的最后一个区块没有 BlockEpilogueTransaction。若索引器或浏览器假定每个区块都以 StateCheckpoint 结束,需要改为处理 block_epilogue_transaction

典型的主网区块如下:

BlockMetadataTransaction
[ValidatorTransaction ...] // 可选
[user transactions ...]
BlockEpilogueTransaction // 纪元最后一个区块会省略

纪元是用于应用验证者集合变更、重新分配投票权并支付质押奖励的较长间隔。主网、测试网和开发网的纪元均为两小时(7200 秒)。一个纪元中的区块数量,就是该窗口内网络实际产出的区块数。

重大配置变更——例如验证者加入或离开集合——只在下一纪元开始时生效。纪元触发器见质押