EIP-:
Authors |
---|
eip: 2014 title: 扩展状态预言机 author: Alex Beregszaszi (@axic) discussions-to: https://ethereum-magicians.org/t/eip-2014-extended-state-oracle/3301 status: Stagnant type: Standards Track category: Core created: 2019-05-10 requires: 140
简单概要
摘要
引入一个新的系统合约,它具有一个遵循 Contract ABI Encoding 的可扩展接口,用于访问扩展数据集,例如链标识符、区块哈希等。
这允许以太坊合约语言与此合约交互,就像它是一个常规合约一样,而不需要任何语言支持。
动机
在过去的几年里,已经提出了几个扩展 EVM 以提供更多数据的提案。一些例子包括扩展访问区块哈希 (EIP-210) 和链标识符 (EIP-1344)。
将它们作为 EVM 操作码添加似乎是在为相对较少使用的功能占用稀缺的操作码空间,而将它们作为预编译添加则被认为更加复杂,因为需要为每种情况定义和商定一个接口。
本提案试图通过定义一个可扩展的标准接口来解决这两个问题。
规范
在地址 0x0000000000000000000000000000000000000009
处引入一个新的系统合约(“预编译”),称为 ESO(Extended State Oracle,扩展状态预言机)。
可以使用 CALL
或 STATICCALL
查询它,并遵循 Contract ABI Encoding 获取输入和输出。鼓励在 ABI 编码中使用基本类型,以保持较低的复杂度。
将来,可以扩展 ESO 以使其具有状态并接受来自系统地址的交易以存储传递的数据 —— 类似于 EIP-210 提出的内容。
希望将更多数据引入状态(不是区块或交易的一部分)的提案应旨在扩展 ESO。
目前不建议将 ESO 转换为状态中存在的合约,而是将其作为预编译包含在内,并将实现细节留给客户端。 将来,如果它被充分扩展并且需要拥有状态,那么将其从预编译移动并拥有实际代码将是有意义的。
链标识符
最初,引入一个读取当前链标识符的功能:getCurrentChainId()
返回当前链标识符作为 uint64
编码的值。
它应该是一个不可支付的函数,这意味着发送任何值都会像 EIP-140 中描述的那样回滚交易。
这已经被提议为 EIP-1344。
合约 ABI JSON 如下:
[
{
"constant": true,
"inputs": [],
"name": "getCurrentChainId",
"outputs": [
{
"name": "",
"type": "uint64"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
}
]
这将转换为将字节 5cf0e8a4
发送到 ESO,并为以太坊主网返回字节 0000000000000000000000000000000000000000000000000000000000000001
。
注意: 应该可以引入另一个接口来检查链历史记录或给定区块中链标识符的有效性(参见 EIP-1959 和 EIP-1965)。
理由
待定
向后兼容性
待定
测试用例
待定
实现
待定
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
, "EIP-: ," Ethereum Improvement Proposals, no. , . [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-.