EIP-658: 将交易状态码嵌入到收据中
Authors | Nick Johnson <nick@ethereum.org> |
---|---|
Created | 2017-06-30 |
Requires | EIP-140 |
摘要
此 EIP 将收据的中间状态根字段替换为一个状态码,指示顶级调用是成功还是失败。
动机
随着 EIP140 中 REVERT 操作码的引入,用户不再能够假设交易失败当且仅当它消耗了所有 gas。 因此,调用者没有明确的机制来确定交易是否成功以及其中包含的状态更改是否已应用。
完整节点可以通过重放交易来提供 RPC 以获取交易返回状态和值,但快速节点只能对其支点之后的节点执行此操作,而轻节点根本无法执行此操作,这使得非共识解决方案不切实际。
相反,我们建议用返回状态(1 表示成功,0 表示失败)替换中间状态根,该中间状态根已被 EIP98 废弃。 这既允许调用者确定成功状态,又纠正了先前从收据中遗漏返回数据的问题。
规范
对于 block.number >= BYZANTIUM_FORK_BLKNUM
的区块,中间状态根将替换为状态码,0 表示失败(由于任何可能导致交易或顶级调用回滚的操作),1 表示成功。
理由
这构成了最小的可能更改,允许获取交易的成功/失败状态,以最小的干扰或额外的工作为 Metropolis 保留现有功能。
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Nick Johnson <nick@ethereum.org>, "EIP-658: 将交易状态码嵌入到收据中," Ethereum Improvement Proposals, no. 658, June 2017. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-658.