跳转到内容

AIP-88:区块收尾交易

AIP-88 介绍区块收尾交易。这是一类在区块执行后提供区块信息的新交易。它们只能由共识创建,不能由用户发起;其中包含区块的 gas 用量信息,未来还会包含更多信息。

它取代了此前用于“有时”表示区块结束的 StateCheckpoint 交易类型。新的 BlockEpilogue 交易会在区块末尾创建,并保证是该区块的最后一笔交易。唯一的例外是纪元的最后一个区块:该区块没有 BlockEpilogue 交易。

区块收尾交易包含一个 BlockEndInfo 枚举。它被有意设计为枚举,以便将来扩展而不破坏现有代码。当前版本为 V0,包含以下字段:

module 0x1::epilogue {
enum BlockEndInfo {
V0 {
/// Whether block gas limit was reached
block_gas_limit_reached: bool,
/// Whether block output limit was reached
block_output_limit_reached: bool,
/// Total gas_units block consumed
block_effective_block_gas_units: u64,
/// Total output size block produced
block_approx_output_size: u64,
},
}
}

这些字段主要提供区块中 gas 用量的调试信息。

JSON 输出如下:

{
"version":"1912",
"hash":"0x54a8efc93fc94f5b545dadb63da3d4dc192125c717b336dc446d55a5b553913f",
"state_change_hash":"0xafb6e14fe47d850fd0a7395bcfb997ffacf4715e0f895cc162c218e4a7564bc6",
"event_root_hash":"0x414343554d554c41544f525f504c414345484f4c4445525f4841534800000000",
"state_checkpoint_hash":"0x841a43956ca09a02b1c1cdadc65f24c390170aa666015a2e8f7ec5c9d6a3875f",
"gas_used":"0",
"success":true,
"vm_status":"Executed successfully",
"accumulator_root_hash":"0x6561976b4560ff25239dffc6cada70e7008dd42fc4d3df2eca6a86b6d2ec384d",
"changes":[],
"timestamp":"1719263322836578",
"block_end_info": {
"block_gas_limit_reached":false,
"block_output_limit_reached":false,
"block_effective_block_gas_units":0,
"block_approx_output_size":1163
},
"type":"block_epilogue_transaction"
}

如果 dApp 会处理交易,并且预期区块的最后一笔交易是 StateCheckpoint,则需要更新代码以处理 BlockEpilogue 交易。

请注意,除纪元的最后一个区块外,BlockEpilogue 保证是区块中的最后一笔交易;纪元的最后一个区块没有 BlockEpilogue 交易。

区块浏览器、中心化交易所索引器处理器等会索引所有交易的应用可能受影响。不过,这些交易大多仅提供信息,不影响 dApp 的核心功能。

如果使用 Aptos Go SDK 或 Aptos TypeScript SDK,只需更新到最新版本;SDK 会自动处理该新交易类型。