EIP-1482: 定义最大区块时间戳漂移
Authors | Maurelian (@Maurelian) |
---|---|
Created | 2018-10-09 |
Discussion Link | https://ethereum-magicians.org/t/define-a-maximum-block-timestamp-drift/1556 |
简述
在协议规范中包含一个关于可接受的时间戳漂移的明确定义。
摘要
基于 Geth 和 Parity 都实现了相同的时间戳验证要求,这应该被写入参考规范中。
动机
对于区块头中的时间戳必须有多准确,缺乏明确的说明。《黄皮书》将时间戳描述为
一个标量值,等于 Unix 的 time() 在该区块创建时的合理输出
这导致了关于在智能合约开发中安全使用 TIMESTAMP
操作码(Solidity 的 block.timestamp
或 now
)的困惑。
对 “reasonable” 的不同解释可能会造成共识失败的风险。
规范
《黄皮书》应该将时间戳定义为:
一个标量值,等于 Unix 的 time() 在该区块创建时的输出。为了区块验证的目的,它必须大于前一个区块的时间戳,并且不能比系统时间大 15 秒以上。
理由
Geth 和 Parity 都会拒绝时间戳比未来时间大 15 秒以上的区块。这建立了一个事实上的标准,应该在参考规范中明确说明。
向后兼容性
对于在主链历史早期挖掘的区块,如果它们被认为是无效的,可能有必要放宽此要求。
测试用例
这些将非常重要。
实现
_在任何 EIP 被赋予 “Final” 状态之前,必须完成实现,但不必在 EIP 被接受之前完成。虽然在编写代码之前就规范和理由达成共识的方法有其优点,但在解决许多 API 细节的讨论时,”粗略共识和运行代码” 的原则仍然有用。 _
版权
版权及相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Maurelian (@Maurelian), "EIP-1482: 定义最大区块时间戳漂移 [DRAFT]," Ethereum Improvement Proposals, no. 1482, October 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1482.