AIP-88:区块收尾交易
AIP-88 介绍区块收尾交易。这是一类在区块执行后提供区块信息的新交易。它们只能由共识创建,不能由用户发起;其中包含区块的 gas 用量信息,未来还会包含更多信息。
它取代了此前用于“有时”表示区块结束的 StateCheckpoint 交易类型。新的 BlockEpilogue 交易会在区块末尾创建,并保证是该区块的最后一笔交易。唯一的例外是纪元的最后一个区块:该区块没有 BlockEpilogue 交易。
区块收尾交易包含什么?
Section titled “区块收尾交易包含什么?”区块收尾交易包含一个 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"}兼容性常见问题
Section titled “兼容性常见问题”这对我的 dApp 有什么影响?
Section titled “这对我的 dApp 有什么影响?”如果 dApp 会处理交易,并且预期区块的最后一笔交易是 StateCheckpoint,则需要更新代码以处理 BlockEpilogue 交易。
请注意,除纪元的最后一个区块外,BlockEpilogue 保证是区块中的最后一笔交易;纪元的最后一个区块没有 BlockEpilogue 交易。
哪些应用可能受影响?
Section titled “哪些应用可能受影响?”区块浏览器、中心化交易所索引器处理器等会索引所有交易的应用可能受影响。不过,这些交易大多仅提供信息,不影响 dApp 的核心功能。
如何处理新的交易类型?
Section titled “如何处理新的交易类型?”如果使用 Aptos Go SDK 或 Aptos TypeScript SDK,只需更新到最新版本;SDK 会自动处理该新交易类型。