原文作者:Arbitrum
原文链接:
https://github.com/OffchainLabs/nitro/blob/master/docs/inside_anytrust.md
翻译校对:TinTinLand
AnyTrust 是 Arbitrum Nitro 的技术变式,它通过最小信任假设来降低交易成本。
Arbitrum 协议要求所有 Arbitrum 节点,包括验证器(验证链的正确性,并准备质押正确结果的节点)都可以访问 Arbitrum 收件箱中 L2 交易数据。Arbitrum Rollup 通过在 L1 以太坊上发布数据(批量处理或压缩的形式)作为 calldata 以提供数据访问。支付这笔以太坊 Gas 费用是使用 Arbitrum 网络最大的成本。
相反,AnyTrust 依靠外部数据可用性委员会(以下简称“委员会”)来存储数据并按需提供。该委员会有 N 名成员,AnyTrust 只需要确保至少有 2 名成员是诚实的。这是因为,如果 N-1 名委员会成员需要承诺提供对某些数据的访问,承诺方只需要有一名诚实成员即可,同时为了避免该诚实成员在 N-1 之外,因此,总共需要至少 2 名成员为诚实节点。这样,即可保证 rollup 协议正常运行。
Keysets
一组 Keyset 明确了该委员会成员的公钥和数据可用性证书有效所需的签名数。Keysets 使委员会成员可以发生变化,并使委员会成员能够更改其密钥。Keyset 包含:
-
委员会成员人数
-
对于每个委员会成员,有一个 BLS 公钥
-
所需的委员会签名数。
Keysets 由其哈希值标识。L1 KeysetManager 合约维护当前有效的 Keysets 列表。L2 链的管理者可以在此列表中添加或删除 Keysets。
当 Keyset 变得有效时,KeysetManager 合约会发出一个包含 Keyset 哈希和完整合约的 L1 以太坊事件。在这之后,只要给定 Keyset 哈希,将允许任何人恢复合约内容。.虽然 API 不限制可以同时有效的 Keysets 的数量,但通常只有一个 Keyset 有效。
数据可用性证明
AnyTrust 中的一个核心概念是数据可用性证明(以下简称“DACert”)。DACert 包含:
-
数据块的哈希值
-
有效期
-
用于签名的 Keyset 哈希
-
说明哪些委员会成员已签署的位图
-
BLS 汇总签名(在 BLS12-381 曲线上),证明已签名方
-
证明 N-1 委员会成员已签署(哈希,有效期)
由于 2-of-N 信任假设,DACert 证明在有效期结束之前,用户至少可以从一名诚实的委员会成员可以获得证明块的数据(即 DACert 中哈希的前映像)。
在普通(非 AnyTrust)Nitro 中,Arbitrum 定序器将数据块作为调用数据发布在 L1 链上。数据块的哈希值由 L1 收件箱协定提交,允许 L2 代码安全可靠地读取数据。
AnyTrust 为定序器提供了两种在 L1 上发布数据块的方法:它可以如上所述发布完整数据,也可以发布 DACert 证明数据的可用性。L1 收件箱协定将拒绝任何使用无效 Keyset 的 DACert;DACert 其他方面的有效性将由 L2 代码检查。
从收件箱读取数据的 L2 代码将像在 Nitro 中一样读取完整数据块。如果它看到 DACert,它将参考 DACert 指定的 Keyset (已知该 Keyset 有效,因为 L1 收件箱已验证)来检查 DACert 的有效性。
L2 代码验证:
-
签名者的数量至少是 Keyset 所需的数量
-
总计的签名对已声明的签名者有效
-
有效期至少比当前 L2 时间戳晚两周。
如果 DACert 无效,则 L2 代码将丢弃 DACert 并转到下一个数据块。如果 DACert 有效,则 L2 代码将读取数据块,该数据块保证可用,因为 DACert 有效。
数据可用性服务器
委员会成员运行数据可用性服务器 (DAS) 软件。DAS 公开了两个 API:
-
Sequencer API 只能由 Arbitrum 链的 Sequencer 调用,它是一个 JSON-RPC 接口,允许 Sequencer 将数据块提交给 DAS 进行存储。部署通常会阻止排序器以外的调用方访问此 API。
-
REST API 旨在向全世界开放,是一种基于 RESTful HTTP(S)的协议,允许通过哈希获取数据块。此 API 是完全可缓存的,部署可以使用缓存代理或 CDN 来增加规模并防止 DoS 攻击。
只有委员会成员有理由支持 Sequencer API。我们希望其他人运行 REST API,这很有帮助。下面将对此进行详细介绍。
DAS 软件基于配置选项,可以将其数据存储在本地文件、Badger 数据库、Amazon S3 上,或者冗余地跨多个备份存储。该软件还支持在内存(使用 Bigcache)或 Redis 实例中进行可选缓存。
定序器交互委员会
当 Arbitrum 定序器生成一个数据批次,并希望使用委员会发布时,它会通过 RPC 将该批次的数据以及有效期(通常在未来三周)一并发送给所有委员会成员。
每个委员会成员都将数据存储在其后备存储中,并按数据的哈希值编制索引。然后,成员使用其 BLS 密钥对(哈希、有效期)进行签名,并将带有成功指示器的签名返回给定序器。
一旦定序器收集了足够的签名,它就可以聚合签名,并为(哈希、有效期)创建有效的 DACert。然后,定序器将该 DACert 发布到 L1 收件箱合约,使其开放于 L2 上的 AnyTrust 软件应用。
如果定序器未能在几分钟内收集到足够的签名,它将放弃使用委员会的尝试,并将通过将完整数据直接发布到 L1 链来“回退到 Rollup ”,就像在非 AnyTrust 链中所做的那样。
L2 能够运行两种数据发布格式,即通过 DACert 或完整发布数据,并将正确处理每种格式。
了解更多:
Arbitrum 中文推特号:
https://twitter.com/arbitrum_cn
Arbitrum 小助手:Arbitrum_assistant
Arbitrum Discord:discord.gg/arbitrum