为了完成跨链资产转移,目前可用的大多数解决方案都基于桥梁,这是一个单独的中间实体,通常受信在交易的某个时期持有这些资产。这种信任假设是不可取的,因为它为攻击创造了很大的机会。在这篇文章中,我将解释,假设存在 zkRollup,人们无需额外的信任假设(例如桥梁)即可实现跨链资产转移。
假设你在以太坊上持有500,000泰达币作为二级资产,你想在Avalanche上将其转移到泰达币。目前,您需要签订桥接服务合同,B是一个独立的实体,将 “购买” 您的ETH-USDT,并在不久之后 “出售” 您的AVE-USDT。
请注意,这里有各种假设在起作用:
在这篇文章中,我将展示一种在不存在此处提到的缺点的情况下完成资产转移的方法。更具体地说,我将表明,通过谨慎地组合底层原语并使用 zkRollUps 的标准安全假设,我们可以实现跨链资产转移。
为此,我们必须首先通过总结 Rollups,特别是 zkRollups 来准备阶段。然后,我们将研究层内和跨层资产转移,并讨论每种情况下的交易证明。这为最重要的部分奠定了基础:跨链资产转移。我们将首先考虑 L1 到 L1 的场景,然后考虑 L2 到 L2 的场景。作为一项新的贡献,我们将介绍纠结的汇总:一个 L2 由两个 L1 共享。随后将讨论跨链通信方法和基本假设。
总而言之,交易处理被下链并分批组合,以降低成本和提高速度。但是,每笔交易以及整个汇总账本的状态都将记录在主链上。内核 L2 与其在 L1 上录制之间总是存在延迟。
用 Vitalik Buterin 的话来说:
“汇总将计算(和状态存储)移出链,但每笔交易会保留一些数据在链上。为了提高效率,他们使用了一大堆花哨的压缩技巧,尽可能用计算代替数据。[...]链上有一个维护状态根的智能合约:汇总状态的默克尔根(即汇总 “内部” 的账户余额、合约代码等)。任何人都可以发布批次、高度压缩形式的事务集合以及先前的状态根和新的状态根(处理事务后的默克尔根)。合约检查批次中先前的状态根是否与其当前状态根相匹配;如果匹配,则将状态根切换到新的状态根。”
对于数据而言,这意味着所有交易数据必须保留在 L1 上,但要采用压缩形式以降低天然气成本。对于处理而言,这意味着尽可能将计算移至 L2,而只在 L1 上写入结果。
换句话说,汇总在原始区块链之上模拟账本功能,因此分别称为第 2 层和第 1 层。
但是,如何确保汇总交易的有效性呢?
仅仅依靠实现汇总的智能合约的正确性是不够的。汇总的定义是,每个状态转换(即\ 交易有效性)都由主链维护、验证和认可,因此主链需要一个独立于 L2 实现的外部(软件无关)验证或验证机制。
在乐观的汇总中,一个实体(通常称为序列器)在\(layer_1\)上发布\(oldStateRoot_2、txBatch、newStateRoot\)(与第 2 层相关)。在特定的时间内(通常是七天),这种状态^的变化可能会受到局外人的质疑。如果没有这样的挑战发生,拟议的状态将永久化(因此 “乐观”)。但是,如果状态更改受到质疑,则会触发以下过程。
假定存在的关于L1的仲裁合同将决定Sequencer还是Challenger是正确的。该仲裁合同由挑战者激活。
然后,合同宣布谁是对谁错。结果,仲裁失败者的保证金(一笔巨额存款)将被削减作为罚款。
因此,从乐观的角度来看,各方有经济(博弈论)激励他们诚实行事。
有关乐观汇总的更详细描述,请参阅:
ethereum.org/en/developers/docs/scaling/optimistic-rollups/ #what-is-an-optistic-rollups
在 zkRollup 中,采用了不同的方法。每次状态转换\(oldStateRoot,txBatch\ Longrightarrow newStateRoot\)都会生成知识证明,这表明\ (\ text {newStateRoot} _ {2}\) 是执行批处理的正确结果。尽管有时被称为零知识证明,但严格来说,这个术语具有误导性。总的来说,隐私不是问题,因为无论如何交易都应该是公开的。但是,问题在于这种证明的简洁性,因为链上验证很昂贵,因此应该高效地完成(通常是SNARK)。
更准确地说:让\ (STF\) 表示第 2 层账本的状态转换函数。说实话 Sequencer,我们必须有 $$ newState = STF(oldState,TxBatch)$$
请记住,在区块链上,交易内容可以采取多种形式:
那么,如何才能确信 L1(以及所有监视这个主链的人)确信 L2 确实从 $oldState_2$ 和 $txBatch$ 中正确计算出了 $newState_2$ 呢?通过将可验证的计算应用于 STF 这意味着 $STF (oldState_2, batch) $ 的执行跟踪被发送到有效性证明生成器,该生成器生成方程 (1) 包含的简洁的非交互式有效性证明。
随后,L1上的汇总合约有了一种方法,该方法在输入$oldState_2时,batch,newState_2,validityProof$会验证有效性证明并返回接受/拒绝的裁决。如果是 ACCEPT、$oldState_2、batch,则 newState_2$ 在 L1 上被记录为有效,而如果是 REJECT,则只会丢弃批次和状态更改。
区块链存在的理由是资产转移,并且在交易过程中采取了极其谨慎的措施来保持资产的不变性:没有损失,什么也没有收获。值得注意的是,L1和L2的资产不变性的底层安全机制略有不同。
第 1 层
L1上资产转移的正确性由L1采用的共识机制保证,并且由于它是开源软件,因此可以公开验证。
第 2 层。
L1 仅保证 L2 汇总数据的可用性,不保证其正确性。在L2上进行资产转移的正确性取决于L2的正确实现。zkVM 仅验证在 L1 上发布的汇总数据是否与 L2 上的账本程序一致,但是如果该程序出现错误,zkVM 将无法捕捉到错误。
但是,由于 L2 源通常是从 L1 复制的,因此这种风险已降至最低。
去中心化的 Sequencer 可确保对提交的交易进行批处理(避免审查),但不能确保资产不变性。
给定一个带有 L2 汇总的 L1,我们可以想象它们之间的资产在两个方向上转移。我们将以以太币为例:
这些跨层资产转移可以解释为垂直桥梁,也称为原生桥梁。
为了确保资产不变性,这些交易遵循以下原则之一,视情况而定:
为了实现这一点,我们定义:
最后两个账户用于锁定和解锁交易。管理这些账户的智能合约称为影子合约。
为了避免讨论锁定/解锁与烧毁/铸造的问题,我们假设在初始化时会铸造大量固定数量的 ETH²(计入) Rollupacc²。除非通过L1上的等效锁定交易解锁,否则这些资产将保持锁定在该账户中(Polygon也这样做)。请注意,资产不变性应保持: rollupacc+ rollupacc² = 初始数量,永远。
将资产从 L1 转移到 L2 时,有两种选择:使用原子性或 “先摧毁后创造” 原则。
L1 上的汇总智能合约在 L1 和汇总上执行交易,让 L2 进行清理。许多汇总将其作为应急机制来实施,以避免审查。
这种方法有一些优点:L1 保证了原子性,交易结算时间短。但是,它会使测序复杂化并增加天然气成本。
L1 上的智能合约生成交易证明并将其发送到 Sequencer 以在 L2 上触发交易。L2 上的智能合约信任 L1,因此交易证明不是 ZK 证明,只是一个简单的 TxID。
在步骤 3 中,有几个选项:SEQ 监控 L1,SEQ 由 L1 上的智能合约提醒,或者 SEQ 由客户端 X 通知,等等。
L2 上的智能合约生成交易证明,并将其发送到 L1 上的智能合约,作为 L1 交易的触发器。由于 L1 不信任 L2,因此该交易证明必须是 ZK Proof,其功能类似于认证支票。资产不变性通过 “先摧毁后创造” 模式来保证。
应采取措施确保支票只能兑现一次;保留以前兑现的支票清单是一个不错的解决办法,再加上到期日期,以防止清单无限期增加。
请注意,在这种情况下,在 L1 上触发智能合约来执行汇总交易并让 L2 清理混乱局面不是一个选项,因为汇总数据是压缩的,对于 L1 上的智能合约来说是不可理解的。
请注意,需要等待交易结算的两个步骤。
本文由 ZKM 高级密码学家 Jeroen van de Graaf 撰写。该系列的第二部分将更详细地探讨 Entangled Rollup 的机制。
为了完成跨链资产转移,目前可用的大多数解决方案都基于桥梁,这是一个单独的中间实体,通常受信在交易的某个时期持有这些资产。这种信任假设是不可取的,因为它为攻击创造了很大的机会。在这篇文章中,我将解释,假设存在 zkRollup,人们无需额外的信任假设(例如桥梁)即可实现跨链资产转移。
假设你在以太坊上持有500,000泰达币作为二级资产,你想在Avalanche上将其转移到泰达币。目前,您需要签订桥接服务合同,B是一个独立的实体,将 “购买” 您的ETH-USDT,并在不久之后 “出售” 您的AVE-USDT。
请注意,这里有各种假设在起作用:
在这篇文章中,我将展示一种在不存在此处提到的缺点的情况下完成资产转移的方法。更具体地说,我将表明,通过谨慎地组合底层原语并使用 zkRollUps 的标准安全假设,我们可以实现跨链资产转移。
为此,我们必须首先通过总结 Rollups,特别是 zkRollups 来准备阶段。然后,我们将研究层内和跨层资产转移,并讨论每种情况下的交易证明。这为最重要的部分奠定了基础:跨链资产转移。我们将首先考虑 L1 到 L1 的场景,然后考虑 L2 到 L2 的场景。作为一项新的贡献,我们将介绍纠结的汇总:一个 L2 由两个 L1 共享。随后将讨论跨链通信方法和基本假设。
总而言之,交易处理被下链并分批组合,以降低成本和提高速度。但是,每笔交易以及整个汇总账本的状态都将记录在主链上。内核 L2 与其在 L1 上录制之间总是存在延迟。
用 Vitalik Buterin 的话来说:
“汇总将计算(和状态存储)移出链,但每笔交易会保留一些数据在链上。为了提高效率,他们使用了一大堆花哨的压缩技巧,尽可能用计算代替数据。[...]链上有一个维护状态根的智能合约:汇总状态的默克尔根(即汇总 “内部” 的账户余额、合约代码等)。任何人都可以发布批次、高度压缩形式的事务集合以及先前的状态根和新的状态根(处理事务后的默克尔根)。合约检查批次中先前的状态根是否与其当前状态根相匹配;如果匹配,则将状态根切换到新的状态根。”
对于数据而言,这意味着所有交易数据必须保留在 L1 上,但要采用压缩形式以降低天然气成本。对于处理而言,这意味着尽可能将计算移至 L2,而只在 L1 上写入结果。
换句话说,汇总在原始区块链之上模拟账本功能,因此分别称为第 2 层和第 1 层。
但是,如何确保汇总交易的有效性呢?
仅仅依靠实现汇总的智能合约的正确性是不够的。汇总的定义是,每个状态转换(即\ 交易有效性)都由主链维护、验证和认可,因此主链需要一个独立于 L2 实现的外部(软件无关)验证或验证机制。
在乐观的汇总中,一个实体(通常称为序列器)在\(layer_1\)上发布\(oldStateRoot_2、txBatch、newStateRoot\)(与第 2 层相关)。在特定的时间内(通常是七天),这种状态^的变化可能会受到局外人的质疑。如果没有这样的挑战发生,拟议的状态将永久化(因此 “乐观”)。但是,如果状态更改受到质疑,则会触发以下过程。
假定存在的关于L1的仲裁合同将决定Sequencer还是Challenger是正确的。该仲裁合同由挑战者激活。
然后,合同宣布谁是对谁错。结果,仲裁失败者的保证金(一笔巨额存款)将被削减作为罚款。
因此,从乐观的角度来看,各方有经济(博弈论)激励他们诚实行事。
有关乐观汇总的更详细描述,请参阅:
ethereum.org/en/developers/docs/scaling/optimistic-rollups/ #what-is-an-optistic-rollups
在 zkRollup 中,采用了不同的方法。每次状态转换\(oldStateRoot,txBatch\ Longrightarrow newStateRoot\)都会生成知识证明,这表明\ (\ text {newStateRoot} _ {2}\) 是执行批处理的正确结果。尽管有时被称为零知识证明,但严格来说,这个术语具有误导性。总的来说,隐私不是问题,因为无论如何交易都应该是公开的。但是,问题在于这种证明的简洁性,因为链上验证很昂贵,因此应该高效地完成(通常是SNARK)。
更准确地说:让\ (STF\) 表示第 2 层账本的状态转换函数。说实话 Sequencer,我们必须有 $$ newState = STF(oldState,TxBatch)$$
请记住,在区块链上,交易内容可以采取多种形式:
那么,如何才能确信 L1(以及所有监视这个主链的人)确信 L2 确实从 $oldState_2$ 和 $txBatch$ 中正确计算出了 $newState_2$ 呢?通过将可验证的计算应用于 STF 这意味着 $STF (oldState_2, batch) $ 的执行跟踪被发送到有效性证明生成器,该生成器生成方程 (1) 包含的简洁的非交互式有效性证明。
随后,L1上的汇总合约有了一种方法,该方法在输入$oldState_2时,batch,newState_2,validityProof$会验证有效性证明并返回接受/拒绝的裁决。如果是 ACCEPT、$oldState_2、batch,则 newState_2$ 在 L1 上被记录为有效,而如果是 REJECT,则只会丢弃批次和状态更改。
区块链存在的理由是资产转移,并且在交易过程中采取了极其谨慎的措施来保持资产的不变性:没有损失,什么也没有收获。值得注意的是,L1和L2的资产不变性的底层安全机制略有不同。
第 1 层
L1上资产转移的正确性由L1采用的共识机制保证,并且由于它是开源软件,因此可以公开验证。
第 2 层。
L1 仅保证 L2 汇总数据的可用性,不保证其正确性。在L2上进行资产转移的正确性取决于L2的正确实现。zkVM 仅验证在 L1 上发布的汇总数据是否与 L2 上的账本程序一致,但是如果该程序出现错误,zkVM 将无法捕捉到错误。
但是,由于 L2 源通常是从 L1 复制的,因此这种风险已降至最低。
去中心化的 Sequencer 可确保对提交的交易进行批处理(避免审查),但不能确保资产不变性。
给定一个带有 L2 汇总的 L1,我们可以想象它们之间的资产在两个方向上转移。我们将以以太币为例:
这些跨层资产转移可以解释为垂直桥梁,也称为原生桥梁。
为了确保资产不变性,这些交易遵循以下原则之一,视情况而定:
为了实现这一点,我们定义:
最后两个账户用于锁定和解锁交易。管理这些账户的智能合约称为影子合约。
为了避免讨论锁定/解锁与烧毁/铸造的问题,我们假设在初始化时会铸造大量固定数量的 ETH²(计入) Rollupacc²。除非通过L1上的等效锁定交易解锁,否则这些资产将保持锁定在该账户中(Polygon也这样做)。请注意,资产不变性应保持: rollupacc+ rollupacc² = 初始数量,永远。
将资产从 L1 转移到 L2 时,有两种选择:使用原子性或 “先摧毁后创造” 原则。
L1 上的汇总智能合约在 L1 和汇总上执行交易,让 L2 进行清理。许多汇总将其作为应急机制来实施,以避免审查。
这种方法有一些优点:L1 保证了原子性,交易结算时间短。但是,它会使测序复杂化并增加天然气成本。
L1 上的智能合约生成交易证明并将其发送到 Sequencer 以在 L2 上触发交易。L2 上的智能合约信任 L1,因此交易证明不是 ZK 证明,只是一个简单的 TxID。
在步骤 3 中,有几个选项:SEQ 监控 L1,SEQ 由 L1 上的智能合约提醒,或者 SEQ 由客户端 X 通知,等等。
L2 上的智能合约生成交易证明,并将其发送到 L1 上的智能合约,作为 L1 交易的触发器。由于 L1 不信任 L2,因此该交易证明必须是 ZK Proof,其功能类似于认证支票。资产不变性通过 “先摧毁后创造” 模式来保证。
应采取措施确保支票只能兑现一次;保留以前兑现的支票清单是一个不错的解决办法,再加上到期日期,以防止清单无限期增加。
请注意,在这种情况下,在 L1 上触发智能合约来执行汇总交易并让 L2 清理混乱局面不是一个选项,因为汇总数据是压缩的,对于 L1 上的智能合约来说是不可理解的。
请注意,需要等待交易结算的两个步骤。
本文由 ZKM 高级密码学家 Jeroen van de Graaf 撰写。该系列的第二部分将更详细地探讨 Entangled Rollup 的机制。