Alert Source Discuss
🚧 Stagnant Standards Track: Core

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-155chainId = 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.