EIP-3788: 严格执行 chainId
拒绝未明确具有与节点配置相同的 chainId 的交易。
Authors | Gregory Markou (@GregTheGreek) |
---|---|
Created | 2021-09-02 |
Discussion Link | https://ethereum-magicians.org/t/discussion-to-eip-3788-strict-enforcement-of-chainid/7001 |
Requires | EIP-155 |
摘要
拒绝未明确具有与节点配置相同的 chainId 的交易。
动机
根据 EIP-155,chainId = 0
的交易被认为是有效的交易。这是一项功能,旨在为开发者提供在不同链上提交可重放交易的能力。随着 evm 兼容链的兴起,其中许多链使用流行的以太坊客户端的分支或软件包,我们正在将用户资金置于风险之中。这是因为大多数钱包界面没有向用户公开 chainId,这意味着他们通常不了解他们正在签署的 chainId。如果恶意行为者(或意外地)选择这样做,他们可以轻松地让用户在非主网网络上提交 chainId = 0
的交易,从而允许恶意行为者在以太坊主网(或为此目的的其他网络)上重放该交易,作为一种恶意或复杂的攻击。
规范
从分叉区块 N
开始,将 chaindId = 0
的交易视为无效。这样,交易将根据节点的配置进行验证。例如:
if (node.cfg.chainId != tx.chainId) {
// 拒绝交易
}
理由
节点设置的配置是主要的真实来源,因此在决定如何过滤交易时应明确使用。此检查应存在于两个位置,作为 JSON-RPC 上的过滤器(例如:eth_sendTransaction
),并在交易验证期间在 EVM 上严格执行。
这确保了用户不会有保证失败的待处理交易,并防止该交易被包含在区块中。
向后兼容性
这会破坏在区块号 N
之后提交 chainId == 0
交易的所有应用程序或工具。
测试用例
待定
安全考虑
应该注意的是,这不能阻止恶意行为者部署 chainId = 1
的网络,或复制任何其他网络的 chainId。
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Gregory Markou (@GregTheGreek), "EIP-3788: 严格执行 chainId [DRAFT]," Ethereum Improvement Proposals, no. 3788, September 2021. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-3788.