ERC-7785: 链上注册链标识符
通过哈希链名称来派生链标识符,并使用 ENS 将链名称映射到这些标识符,以取代 GitHub 上的集中式列表
Authors | Marco Stronati (@paracetamolo), Jeff Lau (@jefflau) |
---|---|
Created | 2024-09-26 |
Discussion Link | https://ethereum-magicians.org/t/on-chain-registration-of-chain-identifiers/21299 |
Requires | EIP-2304 |
摘要
此 ERC 提议将链标识符作为其链名称(和其他信息)的摘要派生出来,并使用 ENS 将链名称映射到标识符,以取代 GitHub 上的集中式列表。 还提出了一个解决方案,以支持未按照此 ERC 派生的现有链标识符。
动机
链名称和标识符之间的映射,例如 Mainnet -> 0x1
,目前维护在一个集中式列表中。
然而,这种解决方案有两个主要的缺点:
- 它不能随着 L2 数量的增长而扩展。
- 列表维护者是单一故障点。
期望的属性:
- 以抗审查的方式注册新链名称和标识符的能力
- 以无需信任的方式解析链名称和标识符的能力
- 保持名称和标识符之间的唯一映射
链标识符欺骗和重放攻击
集中式列表的一个重要属性是,它保持名称和标识符之间的一对一对应关系。
如果没有这个属性,攻击者可以注册一个指向现有标识符的新名称。例如,my-testnet
可以指向主网 0x1
。用户可能会被欺骗,为看似无辜的 my-testnet
签署交易,而实际上是为主网签署交易,然后攻击者可以重放该交易。
规范
本文档中的关键词“必须”,“禁止”,“需要”,“应该”,“不应该”,“推荐”,“不推荐”,“可以”和“可选”按照 RFC 2119 和 RFC 8174 中的描述进行解释。
扩展链标识符
当前的链标识符通常被任意选择为短的。虽然这些标识符在小规模上很方便,但随着它们数量的增加,更希望从更大的空间中提取它们。
我们建议将标识符的大小扩展到 32 字节,并使用密码哈希函数派生它们。 该函数的输入必须包含链名称,并且可以包含其他信息。
一个 L2 的例子:
chain_id = Keccak-256(CHAIN_NAME, SETTLEMENT_CHAIN_ID, VERSION, DEPLOYER_CONTRACT_ADDRESS, SALT)
其中:
SETTLEMENT_CHAIN_ID
是 L2 结算的 L1 的 ID,它可以是 Mainnet 或一个测试网。VERSION
是用任意字符串分隔哈希函数的域DEPLOYER_CONTRACT_ADDRESS
是 L1 上 L2 的地址
链名称解析
任何 ENS 名称都可以解析为链标识符,如 ERC-2304 中所指定的。该名称应解析为不仅包含链标识符,还包含验证标识符所需的所有可选信息的记录。
例如,链名称 rollup
可以通过解析转换为 Mainnet 上的链标识符:
rollup.eth -> {version : uint, bridge : address, chain_id : chain_id}
然后使用以下方法验证:
chain_id == hash("rollup", 0x1, version, bridge)
理由
待定
向后兼容性
可以使用从链标识符到链名称的反向映射来支持未使用上述方案派生的现有标识符,以便可以检查唯一性。
例如,链名称 legacy-rollup.eth
可以解析为链标识符 0x123
。
然后可以在 chainid.reverse
域中将 0x123
解析为 chain_name
。
如果 chain_name == legacy-rollup
,则映射有效。
引导和交接
为了引导对旧链标识符的处理,我们设想 EF 填充 chainid.reverse
域,一个临时的 l2.eth
用于名称,然后移交给它们。
- EF 使用 Ethereum 列表填充两个子域
l2.eth
和chainid.reverse
。 - rollup 注册一个
rollup.eth
并将其指向他们的chain_id
。 - EF 将
rollup.l2.eth
和chain_id.chainid.reverse
移交给 rollup - rollup 更新
chain_id.chainid.reverse
以返回rollup.eth
安全考虑
如上所述,域名欺骗可能导致重放攻击,可以通过使用哈希函数派生新标识符以及检查旧标识符的反向映射来消除。
域名抢注,即积累大量域名,希望以后将其出售给合法用户的做法,是一种可能性,但随着越来越多的 L2 注册,我们可以预期同样的问题会出现在集中的 Github 列表中。
版权
在 CC0 下放弃版权和相关权利。
Citation
Please cite this document as:
Marco Stronati (@paracetamolo), Jeff Lau (@jefflau), "ERC-7785: 链上注册链标识符 [DRAFT]," Ethereum Improvement Proposals, no. 7785, September 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7785.