如何将 Cosmos 生态跨链标准 IBC 整合到以太坊?

原文标题:Bringing IBC to Ethereum using ZK-Snarks

原文作者:Garvit Goel,Jinank Jain

原文来源:ethresear.ch

编译:红军大叔

这是一篇关于如何将 IBC 带到以太坊的文章。本文的目的是概述该项目的技术细节并获得以太坊社区的支持。让我们深入了解它。

IBC 代表 Inter Blockchain Communication – Cosmos 生态系统中的跨链标准 https://ibcprotocol.org/[1]

问题背景

IBC 遵循轻客户端原则,需要将源区块链和目标区块链的轻客户端实现为智能合约,以验证跨链交易。

这意味着,为了将 IBC 连接到 Eth,我们需要在以太坊上以智能合约方式运行 Tendermint 轻客户端 (run the Tendermint light client on Ethereum as a solidity smart contract)。

但是这个过程 gas 消耗昂贵,因为这需要在 Solidity 中验证数百个 ed25519 签名,而 ed25519 预编译在以太坊上不可用。一个 ed25519 需要 500K gas。

这意味着验证完整的轻客户端 header 将需要至少 5000 万 gas 费(100 个验证者),对于拥有 1000 个验证者的更大的 cosmos 链,则高达 5 亿 gas。

因此,为了在以太坊上更便宜地验证签名, 我们需要新的方法。

解决方案

我们通过从 zk-rollups 获得灵感来实现这一目标。我们没有直接在以太坊上验证 ed25519 的签名,(并在 solidity 智能合约内执行曲线操作),而是构建了一个签名有效性的 zk 证明,并在链上验证该证明。

在 Electron Labs,我们构建了一个基于 circom 的库,允许你为一批 Ed25519 签名生成 zk-snark 证明。在这里查看完整的实现[2]。

如何参与体验?

我们已经部署了一个服务器,其端点允许你提交一批签名并获得 zk-proof 作为回报。你现在可以使用我们的文档中给出的 API 参考进行测试 – docs.electronlabs.org/reference/generate-proof9[3]

数学实现细节

为 ed25519 创建 ZK 证明是一个难题。

这是因为 ed25519 的 twisted Edwards curve 使用的 finite field 比 altbn128 曲线(由 zk-snarks 使用)使用的 finite field 大。在较小的 field 内执行大型 finite field 运算很困难,因为模数和乘法等一些基本运算可能变得非常低效。

为了解决这个问题,我们能够找到 2^85 作为基数,来定义我们的 twisted Edwards curve 的曲线运算。由于 ed25519 素数 p=2^255-19 是 2^85 的近似倍数,我们能够为基数 2^85 的数字想出有效的基本运算,如乘法和模法(在 25519 素数下)。

接下来,我们使用这些自定义操作在 ZK 电路中定义曲线操作,例如点加法、标量乘法和签名验证。

在这个文档中很难公正地解释这背后的数学细节,请参阅我们的详细文档解释[4].

单一签名证明的性能

由于上述优化,我们能够为单个签名实现的性能数据如下:

以太坊

所有指标都是在一台 16 核 3.0GHz、32G 内存的机器上测量的(AWS c5a.4xlarge 实例)

Batch Prover 的性能

要了解系统级别的性能,我们需要查看 3 个参数:

  • 每个签名的证明生成时间 ~ 9.6 秒(平均)
  • 每批 / 证明的签名数 = ≤ 100(最大值)
  • 为批次生成 zk-proof 的时间 = 16 分钟(基于 100 个签名批次)

证明生成时间(几乎)与每批签名的数量呈线性关系。我们可以增加 / 减少每批签名的数量,并且证明生成时间会相应改变。

以太坊

证明制作时间将以延迟的形式显现。为了减少这种情况,我们可以在一个 zk 证明中放入较少数量的签名。但是,这意味着同样的批次大小(或每个轻客户端 header)将需要更多的证明,这将增加验证该批次的 gas 成本。

因此,减少延迟会增加 gas 成本。

下面我们列出了根据延迟和参与该 cosmos 链的验证者数量来验证以太坊上的 Tendermint 轻客户端 (LC) header 的预期成本。

我们可以让用户 /cosmos 链决定他们想要使用的延迟和 gas 费用的选项。

以太坊

基于 2022 年 8 月 5 日的 gas 价格。

这里我们选择 200 个验证人和 50 个签名作为证明的基础分析。

Relayer 基础设施成本

由于 Tendermint 出块速度是~7 秒,而证明的生成时间是 8 分钟,我们将需要多个验证人并行来跟上区块的生产速度。

所需的并行机器数 = 8 分钟 *60 / 7 秒 = 69 台机器

我们建议使用 m5.8xlarge AWS 云实例来生成证明。

因此,此基础设施的成本 = 1.536 美元 *69 = 106 美元 / 小时

每个轻客户端 Header 的机器成本 = 106/3600/7 = 0.206 美元

预估总交易成本

基于 8 分钟延迟和 200 个验证器的假设。

链上轻客户端验证的总成本 = 0.206 = $18.1

让我们假设一个最坏的情况(从交易费用的角度来看),即一个区块中只有一个跨链交易。然后验证 LC 标头的全部费用由该交易承担。加上一些间接成本,验证跨链交易大约是 20 美元。

假设每个区块有 10 笔交易的乐观情况,此成本将约为 2 美元,这与以太坊上 Uniswap 交易的成本相似。

怎样降低 gas 成本和延迟(使用递归)?

为了将延迟降低到几秒钟,并将每笔交易的 gas 成本降低到几美分,我们正在研究递归证明技术。这将使我们能够并行生成多个证明,然后递归地将它们组合成一个证明。

我们正在评估市场上可用的各种递归库,例如 plonky2,以及 Mina、Aztec 和 Starknet 团队的作品。我们邀请任何从事递归工作的人与我们联系。

通过使用递归和基于硬件的加速,我们相信我们可以实现跨链交易的 5 秒以下的延迟。

未来,我们甚至可以将多个轻客户端 header 组合在一个证明中,每个证明的成本仅为 4.5 美元,并且每个跨链交易的成本可能低于 1 美元。

系统设计概述

当前 IBC 设计(简化)

以太坊

新提议的 IBC 设计

以太坊

提案设计要点

  1. IBC 的界面保持不变。这使得采用非常容易,因为不需要新的开发文档和开发人员的再教育。现有的代码库也将按原样使用。
  2. 应用链(appchain)上不需要治理更新
  3. 以太坊上的 IBC 需要两项更改:
  4. Relayer 现在将只提交其有效性证明,而不是提交完整的轻客户端 Header。
  5. 以太坊侧的链上轻客户端模块将包括一个 zk-proof 验证器,而不是 ed25619 签名验证。

下一步计划?

我们邀请以太坊和 ZK 社区提供他们的意见并帮助我们收集支持以使该提案成为现实。

执行计划:

  1. 阶段 1:我 ZK 引擎与 IBC 的集成
  2. 阶段 2:通过递归证明和硬件加速将延迟降低到约 5 秒。
  3. 阶段 3:部署一个演示应用链,通过 zk-IBC 连接到以太坊。
  4. 阶段 4:运行演示应用程序链的设置,进行广泛的测试,并使社区能够测试交易。
  5. 阶段 5:安全审计
  6. 阶段 6:主网部署

微信外链

[1] https://ibcprotocol.org/:

https://ibcprotocol.org/

[2] 在这里查看完整的实现:

https://github.com/Electron-Labs/ed25519-circom

[3] docs.electronlabs.org/reference/generate-proof9:

http://docs.electronlabs.org/reference/generate-proof

[4] 详细文档解释:

https://docs.electronlabs.org/reference/overview

责任编辑:Felix

转载声明:本文 由CoinON抓取收录,观点仅代表作者本人,不代表CoinON资讯立场,CoinON不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。若以此作为投资依据,请自行承担全部责任。

声明:图文来源于网络,如有侵权请联系删除

风险提示:投资有风险,入市需谨慎。本资讯不作为投资理财建议。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2022年9月14日 下午8:50
下一篇 2022年9月14日 下午8:50

相关推荐

如何将 Cosmos 生态跨链标准 IBC 整合到以太坊?

星期三 2022-09-14 20:50:20

这是一篇关于如何将 IBC 带到以太坊的文章。本文的目的是概述该项目的技术细节并获得以太坊社区的支持。让我们深入了解它。

IBC 代表 Inter Blockchain Communication – Cosmos 生态系统中的跨链标准 https://ibcprotocol.org/[1]

问题背景

IBC 遵循轻客户端原则,需要将源区块链和目标区块链的轻客户端实现为智能合约,以验证跨链交易。

这意味着,为了将 IBC 连接到 Eth,我们需要在以太坊上以智能合约方式运行 Tendermint 轻客户端 (run the Tendermint light client on Ethereum as a solidity smart contract)。

但是这个过程 gas 消耗昂贵,因为这需要在 Solidity 中验证数百个 ed25519 签名,而 ed25519 预编译在以太坊上不可用。一个 ed25519 需要 500K gas。

这意味着验证完整的轻客户端 header 将需要至少 5000 万 gas 费(100 个验证者),对于拥有 1000 个验证者的更大的 cosmos 链,则高达 5 亿 gas。

因此,为了在以太坊上更便宜地验证签名, 我们需要新的方法。

解决方案

我们通过从 zk-rollups 获得灵感来实现这一目标。我们没有直接在以太坊上验证 ed25519 的签名,(并在 solidity 智能合约内执行曲线操作),而是构建了一个签名有效性的 zk 证明,并在链上验证该证明。

在 Electron Labs,我们构建了一个基于 circom 的库,允许你为一批 Ed25519 签名生成 zk-snark 证明。在这里查看完整的实现[2]。

如何参与体验?

我们已经部署了一个服务器,其端点允许你提交一批签名并获得 zk-proof 作为回报。你现在可以使用我们的文档中给出的 API 参考进行测试 – docs.electronlabs.org/reference/generate-proof9[3]

数学实现细节

为 ed25519 创建 ZK 证明是一个难题。

这是因为 ed25519 的 twisted Edwards curve 使用的 finite field 比 altbn128 曲线(由 zk-snarks 使用)使用的 finite field 大。在较小的 field 内执行大型 finite field 运算很困难,因为模数和乘法等一些基本运算可能变得非常低效。

为了解决这个问题,我们能够找到 2^85 作为基数,来定义我们的 twisted Edwards curve 的曲线运算。由于 ed25519 素数 p=2^255-19 是 2^85 的近似倍数,我们能够为基数 2^85 的数字想出有效的基本运算,如乘法和模法(在 25519 素数下)。

接下来,我们使用这些自定义操作在 ZK 电路中定义曲线操作,例如点加法、标量乘法和签名验证。

在这个文档中很难公正地解释这背后的数学细节,请参阅我们的详细文档解释[4].

单一签名证明的性能

由于上述优化,我们能够为单个签名实现的性能数据如下:

以太坊

所有指标都是在一台 16 核 3.0GHz、32G 内存的机器上测量的(AWS c5a.4xlarge 实例)

Batch Prover 的性能

要了解系统级别的性能,我们需要查看 3 个参数:

  • 每个签名的证明生成时间 ~ 9.6 秒(平均)
  • 每批 / 证明的签名数 = ≤ 100(最大值)
  • 为批次生成 zk-proof 的时间 = 16 分钟(基于 100 个签名批次)

证明生成时间(几乎)与每批签名的数量呈线性关系。我们可以增加 / 减少每批签名的数量,并且证明生成时间会相应改变。

以太坊

证明制作时间将以延迟的形式显现。为了减少这种情况,我们可以在一个 zk 证明中放入较少数量的签名。但是,这意味着同样的批次大小(或每个轻客户端 header)将需要更多的证明,这将增加验证该批次的 gas 成本。

因此,减少延迟会增加 gas 成本。

下面我们列出了根据延迟和参与该 cosmos 链的验证者数量来验证以太坊上的 Tendermint 轻客户端 (LC) header 的预期成本。

我们可以让用户 /cosmos 链决定他们想要使用的延迟和 gas 费用的选项。

以太坊

基于 2022 年 8 月 5 日的 gas 价格。

这里我们选择 200 个验证人和 50 个签名作为证明的基础分析。

Relayer 基础设施成本

由于 Tendermint 出块速度是~7 秒,而证明的生成时间是 8 分钟,我们将需要多个验证人并行来跟上区块的生产速度。

所需的并行机器数 = 8 分钟 *60 / 7 秒 = 69 台机器

我们建议使用 m5.8xlarge AWS 云实例来生成证明。

因此,此基础设施的成本 = 1.536 美元 *69 = 106 美元 / 小时

每个轻客户端 Header 的机器成本 = 106/3600/7 = 0.206 美元

预估总交易成本

基于 8 分钟延迟和 200 个验证器的假设。

链上轻客户端验证的总成本 = 0.206 = $18.1

让我们假设一个最坏的情况(从交易费用的角度来看),即一个区块中只有一个跨链交易。然后验证 LC 标头的全部费用由该交易承担。加上一些间接成本,验证跨链交易大约是 20 美元。

假设每个区块有 10 笔交易的乐观情况,此成本将约为 2 美元,这与以太坊上 Uniswap 交易的成本相似。

怎样降低 gas 成本和延迟(使用递归)?

为了将延迟降低到几秒钟,并将每笔交易的 gas 成本降低到几美分,我们正在研究递归证明技术。这将使我们能够并行生成多个证明,然后递归地将它们组合成一个证明。

我们正在评估市场上可用的各种递归库,例如 plonky2,以及 Mina、Aztec 和 Starknet 团队的作品。我们邀请任何从事递归工作的人与我们联系。

通过使用递归和基于硬件的加速,我们相信我们可以实现跨链交易的 5 秒以下的延迟。

未来,我们甚至可以将多个轻客户端 header 组合在一个证明中,每个证明的成本仅为 4.5 美元,并且每个跨链交易的成本可能低于 1 美元。

系统设计概述

当前 IBC 设计(简化)

以太坊

新提议的 IBC 设计

以太坊

提案设计要点

  1. IBC 的界面保持不变。这使得采用非常容易,因为不需要新的开发文档和开发人员的再教育。现有的代码库也将按原样使用。
  2. 应用链(appchain)上不需要治理更新
  3. 以太坊上的 IBC 需要两项更改:
  4. Relayer 现在将只提交其有效性证明,而不是提交完整的轻客户端 Header。
  5. 以太坊侧的链上轻客户端模块将包括一个 zk-proof 验证器,而不是 ed25619 签名验证。

下一步计划?

我们邀请以太坊和 ZK 社区提供他们的意见并帮助我们收集支持以使该提案成为现实。

执行计划:

  1. 阶段 1:我 ZK 引擎与 IBC 的集成
  2. 阶段 2:通过递归证明和硬件加速将延迟降低到约 5 秒。
  3. 阶段 3:部署一个演示应用链,通过 zk-IBC 连接到以太坊。
  4. 阶段 4:运行演示应用程序链的设置,进行广泛的测试,并使社区能够测试交易。
  5. 阶段 5:安全审计
  6. 阶段 6:主网部署

微信外链

[1] https://ibcprotocol.org/:

https://ibcprotocol.org/

[2] 在这里查看完整的实现:

https://github.com/Electron-Labs/ed25519-circom

[3] docs.electronlabs.org/reference/generate-proof9:

http://docs.electronlabs.org/reference/generate-proof

[4] 详细文档解释:

https://docs.electronlabs.org/reference/overview

责任编辑:Felix