简要说明
- L2 应与它们所基于的 L1 具有相同的审查阻力
- 在 BOB 上,用户已经可以通过以太坊交易将其资产从 BOB 强制提取至以太坊
- 对于其 BitVM 桥接器,BOB 正致力于整合比特币,使其成为用户在 BOB 上执行交易的一种方式
- 比特币用户无需向 BOB 发送交易,即可从 BOB 提取 BTC。
L2 的核心特性之一是,即使排序器处于离线状态,它们的状态也需要持续更新。L2 通过从数据可用性(Data Availability,DA)层读写其状态来实现这一点,该层的更新与 L2 是否在线无关。这样,即使在定序器离线或定序器不直接接受其事务的情况下,用户也可以强制纳入其事务。
对于 BOB 的 BitVM 桥接器来说,这带来了一个有趣的问题。BOB 目前使用以太坊 EIP-4844 blobs 作为其 DA 层。以太坊上的用户可以通过 BitVM 桥接器轻松触发提款返回比特币。不过,这需要用户在以太坊上拥有 ETH。
这对我们来说还不够好:比特币用户应该只需要比特币上的 BTC 就可以强制将他们的 BTC 从 BOB 提取回比特币。我们正在开发一种混合解决方案:默认使用以太坊作为 DA,同时允许用户通过比特币上的特殊交易强制包含 BOB 上的交易。我们很高兴能在这篇博文中分享我们的工作进展。
DA 和衍生的背景
对于 L2 来说,衍生过程相当重要:BOB 的整个 L2 状态需要从 L1 和 DA 层构建。这使得 L2 与 DA 层(在我们的例子中,即以太坊)一样,享有相同的审查阻力。
简单地说,在卷积(特别是 OP 堆栈链)中,我们在 L1 上有两种数据:
- 存款交易向 "OptimismPortal "合约存款的交易。这些交易通常是以太坊用户将其资产存入 BOB 的交易。这些存款交易也可用于在 BOB 上执行其他交易。
- 排序器(或更准确地说是 op-batcher)从 L2 交易中提交的批次。其中包括用户直接在 BOB 上进行的所有交易,并最终包含回以太坊 blob 中。
比特币作为 DA 层
如果我们想把比特币作为一个 DA 层,为什么不完全改用比特币作为一个 DA 层呢?答案主要是成本。比特币的可用存储空间很小(大约每 10 分钟 4MB),因此存储成本很高。
不过,在我们的案例中,BOB 仍可使用以太坊作为其 "主 "DA 层,在此发布全部交易数据,但如果以太坊 DA 不可用,则可添加比特币作为高度抗审查的后备层。从本质上讲,以太坊成为乐观的 DA 层,而比特币成为昂贵但容错的最后手段。
混合衍生管道
基本的解决方案是将比特币作为衍生管道的一部分添加到 BOB 中,这样 BOB(特别是 "操作节点")就可以按此顺序处理输入:
- 比特币强制提现交易(专为 BOB 新增加的功能)
- 以太坊存款到 BOB 的 OptimismPortal 合约(OP 堆栈标准)
- 来自 op-batcher 的以太坊批次(OP 堆栈标准)
让我们来探讨一下将比特币强制提现交易编码到 BOB 衍生管道中的可行解决方案。请注意,该方案仍在研究中,因此可能会有变化。
比特币强制提款交易
我们需要三个部分来创建强制取款交易:
- 在比特币上构建强制提取交易。
- 在比特币的大小限制内将强制提取交易存储在比特币上。
- 处理比特币强制提款交易的天然气费用。
1.构建强制提款交易
OP 堆栈存款交易的结构如下:
- bytes32 sourceHash:来源哈希值,唯一标识存款来源。
- address from:发件人账户地址。
- 地址到:收件人账户地址,如果存入的交易是创建合同,则地址为空(长度为零)。
- uint256 mint:在 L2 上铸币的 ETH 值。
- uint256 值:要发送到收件人账户的 ETH 值。
- uint64 gas:L2 事务的气体限值。
- bool isSystemTx:如果为 true,则事务不与 L2 块气体池交互。
- 字节数据:calldata.
强制取款交易要求在存款交易的数据字段中包含编码的取款交易。具体做法是在 BOB 上创建交易,触发从 BOB 到比特币的提现,其工作原理与从以太坊发送的交易完全相同。
然后,我们可以在比特币上存储一个(压缩)版本的强制提现交易,其中包括上述所有数据。
2.在比特币上存储强制提现交易
由于强制提款交易的数据大于 OP_RETURN 输出中通常应存储的数据,我们可能会使用Taproot输出来存储数据。
由于以太坊上的存款交易(可能包括取款)会被发送到 BOB 的 OptimismPortal 合约,因此很容易识别,但要识别比特币上的强制取款交易就不那么容易了。
数据序列化:强制提现交易使用 Taproot 脚本在 "信封 "结构中进行序列化。这种结构在比特币网络中是不存在的,例如也用于 Ordinals。我们根据自己的需要调整结构。
未设置
OP_FALSE OP_IF
OP_PUSH "bob"
OP_1
OP_PUSH "事务"
OP_0
op_push $withdrawal_transaction_data
OP_ENDIF
两阶段提交/回转方案:
与 Ordinals 一样,用户必须向比特币提交两笔交易:
- 提交事务:创建 Taproot 输出,提交包含铭文内容的脚本。此事务尚未显示数据,我们需要为 BOB 完整节点和排序器创建第二个事务,以包含撤回事务。
- 揭示交易:使用提交交易的输出,揭示链上铭文,即揭示用户的提取交易,将其纳入 BOB。
3.处理强制退出交易的天然气成本
这是最悬而未决的问题,目前正在考虑两个方案:
- 将比特币上强制提现交易的 gas 值设置为 0,并从用户在 BOB 上的 ETH 余额中扣除 gas 费用。这样,只有在 BOB 上拥有 ETH 的用户才能强制提现。然而,这并不是一个好的选择,因为它要求用户在 BOB 上拥有 ETH 才能强制提现,也就是说,在比特币上拥有 BTC 的用户不能强制提现。
- 用户在比特币上用 BTC 支付天然气费用。BOB 网络需要在比特币上有一个可以接收 BTC 的地址,并将用户收到的 BTC 有效地兑换成 BOB 上的 ETH,以支付 L1 部分的天然气成本和执行成本。使用BOB Gateway并将 BOB DAO 的 EVM 地址设置为 BTC 接收方,就有可能实现这一方案。
我们还在尝试更多想法,敬请期待更多更新!
把一切结合起来
任何人只需查看比特币和以太坊的数据,就能确定 BOB 的状态:
- 读取比特币的所有取款交易。这些交易被编码为每笔取款的两个交易,即一个提交交易和一个揭示交易。这是我们对 OP 堆栈的补充,也是我们增强衍生管道的地方。
- 读取以太坊上 BOB OptimismPortal 合约的所有交易。这已经是标准 OP 堆栈衍生管道的一部分。
- 直接读取在 BOB 上进行的所有交易,并将其整合为以太坊上批次的一部分。重要的是,全节点不会直接从序列器读取已确认的交易,而是从以太坊 blobs 读取。这已经是标准 OP 堆栈衍生管道的一部分。

技术挑战
数据一致性:虽然确保以太坊链和比特币链之间的数据一致性非常重要,但仅仅在两个链上都存在交易数据并不能保证有效性。交易必须根据卷积的状态转换功能代表有效的状态转换,才能被视为合法。该解决方案需要在 op-node(或其他共识层实现)中实施验证逻辑,在接受交易之前首先验证交易是否导致了有效的状态变化。
欺诈证明和有效性:BitVM 和以太坊的欺诈证明系统都需要加强,以处理来自两个链的数据,这可能会使争议解决变得更加复杂。为了解决这个问题,我们需要准确计算比特币和以太坊的可能交易,将其作为 BitVM 桥接和 BOB 在以太坊上结算的一部分。
存储增加:此外,由于需要处理和存储来自比特币和以太坊的数据,网络中的 BOB 节点面临着存储和带宽需求的增加。不过,我们可以通过要求在比特币上进行的 BOB 交易必须包含在以太坊 blob 中,并引用最新的比特币区块来缓解这一问题。这样,节点只需同步最近的比特币区块即可。
下一步工作
我们很高兴能将比特币的安全性与以太坊的创新性结合起来,推动混合卷积技术的发展。在这个具体问题上,我们希望将比特币的交易审查阻力与 BOB 的卷积堆栈结合起来。我们将在取得进展时更新这篇博文,提供更多信息。