EIP-3220: 跨链标识符规范
Authors | Weijia Zhang (@weijia31415), Peter Robinson (@drinkcoffee) |
---|---|
Created | 2020-10-21 |
Discussion Link | https://ethereum-magicians.org/t/eip-3220-crosschain-id-specification/5446 |
简述
一个能够处理分叉的自验证的唯一区块链标识符。
摘要
crosschain-id 是一个 32 字节的十六进制字符串,其中一些字节从区块链哈希中提取,另一些则手动定义以表征区块链。 我们还提出了一个注册和查找服务,用于从 crosschain-id 中检索区块链元数据。
动机
随着比特币和以太坊的成功,各种区块链(如 EOS、Ripple、莱特币、Besu、Wanchain 等)得到了开发并迅速发展。还有其他私有和联盟区块链,如 Hyperledger Fabric、Hyperledger Besu、Stellar、Corda、Quorum,它们只允许具有许可身份的节点加入区块链网络。公共和私有区块链的增长给链间互操作性带来了挑战,特别是当这些链是异构且不兼容的时候。企业以太坊联盟成立了跨链互操作性任务组 (CITF),以研究常见的跨链问题和解决方案。CITF 团队注意到,缺乏唯一的标识符来描述和描述区块链。在 EEA 跨链互操作性任务组会议和讨论中讨论了几个提案。
EIP-155 为区块链提供了一个唯一的标识符,以提供简单的重放攻击保护。该规范为一个区块链定义了一个整数 Chainid,并将 chainid 签名到交易数据中,从而阻止攻击者将相同的交易发送到不同的区块链。该规范将要求区块链定义一个 chainid 并在公共存储库中注册该 chainid。
使用整数作为 chainid 的挑战在于,它不够广泛,无法覆盖所有区块链,并且无法阻止不同的区块链使用相同的 chainid。此外,它没有解决两个分叉区块链具有相同的 chainid 的问题。
因此,需要一个更强大的区块链标识符来克服这些缺点,特别是对于涉及多个链的跨链操作。区块链标识符(crosschain id)应该是唯一的,并满足以下要求:
- 应提供区块链的识别、描述和发现。
- 应提供跨链服务生态系统中每个区块链的唯一标识。
- 应提供区块链身份的描述,如 chainId、名称、类型、共识方案等。
- 应为受支持的区块链以及生态系统中的新区块链提供发现机制。
- 应为加入的区块链提供注册到生态系统的机制。
- 应提供一种机制,用于区块链编辑属性或从跨链生态系统中注销。
- 应提供一种获取区块链一些关键信息的机制
- 应提供一种区分原始区块链和分叉区块链的机制
- 应提供一种无需外部注册服务即可验证 chainid 的机制
规范
32 字节 crosschain id 的定义
姓名 | 大小(字节) | 描述 |
---|---|---|
截断的区块哈希 | 16 | 这是创世区块的区块哈希,或者区块链分叉之前紧邻的区块哈希。这 16 个字节是 16 个最低有效字节,假设为网络字节顺序。 |
原生链 ID | 8 | 这是在签署交易时应与区块链一起使用的 Chain Id 值。对于没有 Chain Id 概念的区块链,此值为零。 |
链类型 | 2 | 保留 0x00 作为未定义的链类型。0x01 作为主网类型。0x1[0-A]:测试网,0x2[0-A]:私有开发网络 |
治理标识符 | 2 | 对于新的区块链,可以指定一个 governance_identifier 来标识区块链的原始所有者,以帮助解决分叉/主链争议。对于所有现有的区块链以及没有所有者概念的区块链,此字段为零。 |
保留 | 3 | 保留供将来使用。现在使用 000000。 |
校验和 | 1 | 用于验证标识符的完整性。此完整性检查的目标是检测人为输入错误的 Crosschain Identifier。该值计算为标识符其余部分的截断的 SHA256 消息摘要,使用最低有效字节,假设为网络字节顺序。请注意,此校验和字节仅以 256 分之一的概率检测完整性。此概率足以用于检测人们手动输入 Crosschain Identifier 时发生的印刷错误。 |
理由
我们已经考虑了各种替代规范,例如使用随机唯一的十六进制字符串来表示区块链。这种方法的缺点是随机 id 不能用于验证区块链的内在身份,例如创世区块的 blockhash。第二种替代方法是简单地使用创世区块哈希来表示用于跨链操作的区块链 id。这样做的缺点是此 id 没有关于区块链属性的信息,并且当区块链分叉为两个区块链时会出现问题。
向后兼容性
Crosschainid 可以向后兼容 EIP-155。crosschain id 包含一个 8 字节的段来记录 Native Chain ID
。
对于以太坊链,这可以用于旨在与 EIP-155 一起使用的值。
安全注意事项
crosschain id 的冲突:两个区块链可以包含相同的 crosschain id,从而导致错误地将资产转移到错误的区块链。 通过将 crosschain id 的哈希与创世区块的哈希进行比较来解决此安全问题。如果匹配,则验证 crosschain id。如果不是,则可以将 crosschain id 与分叉的 blockhash 进行比较。如果所有 blockhash 都不匹配 crosschain id 哈希,则无法验证 crosschain id。
防止重放攻击:虽然 crosschain id 本身与 chainid 不同,并且没有签名到区块链交易中,但 crosschain id 仍然可以用于呈现重放攻击。处理跨链交易的应用程序可以使用其 blockhash 验证 crosschain id,并确定交易是否有效。任何具有不可验证的 crosschain id 的交易都应被拒绝。
crosschain-id 不需要签名到 blockchaid tx 中。 对于没有以加密方式将 crosschain id 签名到区块中的区块链,无法使用区块本身验证 crosschain id,必须使用基于 crosschain id 规范实现的外部智能合约地址和链下实用程序进行验证。
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Weijia Zhang (@weijia31415), Peter Robinson (@drinkcoffee), "EIP-3220: 跨链标识符规范 [DRAFT]," Ethereum Improvement Proposals, no. 3220, October 2020. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-3220.