来源:Bitlayer研究组

作者:林德尔,mutourend。

邮箱: lyndell2010@gmail.com, zouyudi@gmail.com

1.引言

比特币是一种去中心化、安全且值得信赖的数字资产。但是,它有很大的限制,无法成为支付和其他应用的可扩展网络。比特币的扩容问题自诞生以来就一直存在严重关注。币UTXO模型将每笔交易视为一个独立事件,导致一个无状态的系统,缺乏执行复杂性、依赖状态的计算能力。因此,虽然比特币可以执行简单的脚本和多标签交易,但它很难推广有状态的区块链平台上常见的复杂和动态的交互。这个问题明显限制了在比特币上构建去中心化应用(dApps)和复杂的金融工具的全球化,而状态模型平台提供了一个更加多样化的环境,用于部署和执行功能丰富的智能合约。

对于比特币扩容,主要有状态通道、侧链、客户端验证等技术。其中,状态通道提供了安全且多样化的支付解决方案,但其在验证复杂计算的能力上有限。这种限制减少其在需要复杂性、条件性逻辑和交互的各种场景中的应用。侧链虽然支持广泛的应用,并提供超越比特币功能的多样性,但具有较低的安全性。这种安全性上差异源于侧链的采用独立的共识机制,这些机制远不如比特币共识机制的健壮性。客户端验证,使用比特币 UTXO 模型,可以处理更复杂的交易,但是与比特币没有机构耗尽和约束能力,导致其安全性低于比特币。客户端验证协议的链下设计依赖于服务器或云基础设施,这可能导致中心化或通过妥协服务器进行潜在的审查。客户端验证的链下设计还给区块链基础设施引入了更加复杂性,可能导致可扩展性问题。

2023年12月,ZeroSync项目负责人Robin Linus发表了一篇名为《BitVM:Compute Anything On Bitcoin》的白皮书,引发了大家对于提升比特币灵活性的思考。该论文提出了一种在不改变比特币的情况下币网络认为的情况下可实现图灵的比特币合约解决方案,使得任何复杂的计算都可以在比特币上进行验证,从而改变比特币基本规则。BitVM充分利用比特币脚本和Taproot,实现乐观Rollup基于Lamport签名(又名比特承诺),让比特币两个UTXO建立关联,实现有状态的比特币脚本。在Taproot地址中承诺一个大型程序,操作者和验证方之间进行大量的链下交互,在链上产生的足迹很小。如果双方合作,则可以执行任意复杂的、有状态的链下计算,而不在链上留下任何痕迹。如果双方不合作,则发生争议时,需要链上执行因此,BitVM极大地拓展了比特币的潜在例子,使比特币不仅可以作为一种货币,还可以作为各种去中心化应用和复杂计算任务的验证平台。

但是,虽然BitVM技术在比特币扩容方面占有优势,但目前处于早期阶段,在效率和安全方面还存在一些问题。如:(1)挑战与响应需要多次交互,导致手续费昂贵,挑战周期长;(2)Lamport瞬时签名数据,需要降低数据长度;(3)哈希函数复杂度较高,需要比特币友好的哈希函数,降低费用;(4)现有BitVM约定庞大而比特币区块容量有限,是可以借助无脚本脚本来实现无脚本BitVM,节省比特币区块空间,同时提升BitVM效率;(5)现有BitVM采用许可模型,仅联盟成员可发起挑战,且限定为仅两者之间,应扩展至无需许可的多方挑战模式,将信任假设进一步增加。为此,本文提出了一些优化思路,进一步提高BitVM的效率和安全性。

2.BitVM原理

所以BitVM定位为比特币的合约,致力于推动比特币合约功能。当前比特币脚本是完全无状态的,比特币脚本执行时,其执行环境在每个脚本之后都会重置。令脚本1和脚本2 拥有相同 x 值的初始化方式是不存在的,比特币脚本暂时不支持该方式。但仍然可以借助现有的操作码,通过 Lamport 补充签名让比特币脚本是有状态的,如可强制 script1 和 script2 中的x为相同的值。如果参与方签署了相互冲突的x值,则可对其进行惩罚。BitVM程序计算发生在链上,而计算结果验证发生在链上。当前比特币区块有1MB限制,当验证计算复杂度较高时,可借助OP技术,采用挑战响应模式,支持更高复杂度的计算验证。

与 Optimistic Rollup 和 MATT 提议(Merkelize All The Things)类似,BitVM 系统基于欺骗论证和挑战响应协议,但不需要修改比特币的共识规则。BitVM 基础原语简单,主要基于区块链、时间锁和大型Taproot树。

证明者逐字节承诺,但在链上验证所有计算将极其昂贵。因此,验证者执行一系列所提出的设计的挑战,以简单地驳斥证明者的意图。证明者和验证者共同预签挑战和响应交易,用于解决争议,从而允许在比特币上进行通用计算验证。

BitVM关键组件有:

  • 承诺电路:证明者和验证者将程序编译为大型二进制电路。证明者在一个Taproot地址中承诺电路,该地址下的每个叶子脚本,对应该电路中的每个逻辑门。核心是基于位的承诺到实现逻辑门承诺,从实现电路承诺。

  • 挑战与响应:证明者和验证者预签一系列交易来实现挑战响应游戏。理想情况下,这种交互是在链下进行的,当证明者不配合时,也可以在上链执行。

  • 存款模块两可惩罚:如果证明者提出任何不正确的声明,则验证者挑战成功后可拿走证明者,挫败证明者的作恶行为。

3.BitVM优化

3.1 基于ZK降低OP交易量

当前有2大主流正确Rollups:ZK Rollups和OP Rollups。其中,ZK Rollups依赖于ZK Proof的有效性验证,即执行的密码学证明,其安全性依赖于计算复杂度假设;OP Rollups依赖于Fraud Proof ,假设所提交的状态均是正确的,挑战设定周期通常为7天,其安全性假设步骤系统内至少有一个公平方能够探测到不正确的状态,并提交欺诈证明。假设BitVM挑战程序最大数为2^{32},需要内存为2^{32}*4字节,约17GB。在最坏的情况下,需要约40轮挑战和响应,约半年时间,总脚本约150KB。该情况下激励严重不足,但实际情况几乎不会发生。

考虑使用零知识证明降低BitVM的挑战次数,从而提高BitVM的效率。根据零知识证明理论,如果数据数据满足算法F,则证明证明满足验证算法进行验证,即验证算法为真输出;如果数据数据不满足算法F,则证明证明也不满足验证算法验证,即验证算法输出False。在BitVM系统中,如果挑战者不认可证明方提交的数据,则发起挑战。

对于算法F,使用二分法拆开,假设需要2^n次,则能找到错误点;如果算法复杂度太高,则n增加,需要很久才能完成。但是,零知识证明的验证算法验证的复杂度是固定的,公开证明和验证算法验证整个过程,发现输出为假。零知识证明的优势在于打开验证算法要验证所需的计算复杂度,相比于二分法打开原始算法F,低因此,借助零知识证明,让BitVM挑战的不再是原始算法F,而是验证算法验证,降低挑战轮数,每小时挑战周期。

最后,虽然零知识证明有效和解决证明依赖于不同的安全假设,可将二者结合,可构建ZK欺诈证明,实现按需ZK证明。相反完整的ZK Rollup,不再需要为每个人单个状态变换生成ZK证明,按需模型使得,只有在有挑战的时候才需要ZK证明,而整个Rollup设计仍然是乐观的。因此,仍然默认所生成的状态是有效的,直到挑战有人该状态。如果某个状态无挑战,则消耗生成任何ZK Proof。但是,如果参与方发起挑战,则需为挑战区块内所有交易的正确性生成ZK Proof。未来,可探索为单个有争议指令生成ZK Fraud Proof,避免一直生成ZK Proof的计算成本。

3.2 比特币汇率的瞬时签名

比特币网络中,遵循共识规则的交易是有效交易,但除共识规则之外,还额外引入了规范性规则。比特币节点仅转发标准广播交易,但有效但非标准的交易被分配的唯一方法直接是与矿工合作。

根据共识规则,传统(即非隔离见证)交易的最大大小为1MB,即占满整个区块。但传统交易的规范度上限为100kB。根据共识规则,隔离见证交易的最大大小为4MB,即权重限制。但Segwit交易的规范度上限为400kB。

Lamport签名是BitVM的基础组件,降低签名和端点长度,有助于降低交易数据,从而降低手续费。Lamport瞬时签名需使用哈希函数(如单向排列函数f)。Lamport瞬时签名方案中,消息长度为v比特,端点长度为2v比特,签名长度也为2v比特。签名和端点,需要消耗大量的存储gas。因此,需要寻找类似功能的签名方案,以降低签名和峰值长度。相比于Lamport瞬时签名,Winternitz瞬时签名的签名和峰值长度大幅降低,但是增加了签名和验签的计算复杂度。

在Winternitz瞬时签名方案中,使用特殊函数P将v比特的消息映射为长度为n的传输。s中每个元素的取值为{0,…,d}。Lamport瞬时签名方案是d=1特殊情况下的Winternitz瞬时签名方案。在Winternitz瞬时签名方案中,n,d,v之间的关系满足:n≈v/log2(d+1)。当d=15时,有n≈(v/4)+1。对于包含n个元素的Winternitz签名而言,比Lamport瞬时签名方案中的峰值长度和签名长度短4倍。但是,验签的复杂度提高了4倍。在BitVM中使用d=15,v=160,f=ripemd160(x)实现Winternitz一次性签名,可将比特承诺大小降低50%,从而将BitVM的交易费用降低至少50%。未来,在对现有Winternitz比特币脚本实现进行优化的同时,可探索以比特币脚本表达的更简洁的一次性签名方案。

3.3 比特币汇率的哈希函数

根据共识规则,P2TR脚本的最大大小为10kB,P2TR脚本见证人的最大大小与最大Segwit交易大小相同,为4MB。但P2TR脚本见证人的标准上限为400kB。

当前比特币网络不支持OP_CAT,无法编辑字符串做Merkle路径验证。因此,需要用现有的比特币脚本,以脚本大小和脚本见证大小最优化的方式,实现一种比特币友好的哈希函数,从而支持merkle包含证明验证功能。

BLAKE3为BLAKE2哈希函数的优化版本,并引入了Bao树模式。相比于BLAKE2s,其压缩函数的轮数由10个7组成。BLAKE3哈希函数将其输入切分为1024字节大小的连续chunk,最后一个chunk可能更短但不为空。当只有一个chunk时,则该chunk为根节点,且为该树的唯一节点。将这些chunk排布为二叉树的叶子节点,然后对每个块独立压缩。

当将BitVM用于验证Merkle包含证明场景时,硬盘腐蚀的输入由2个256位硬盘值拼接而成,即硬盘腐蚀的输入为64字节。使用BLAKE3硬盘函数时,这64字节可分配于单个chunk内,整个BLAKE3哈希偏置仅需要对单个chunk应用一次压缩函数。BLAKE3的压缩函数中,需要运行7次轮函数和6次替换函数。

目前BitVM中已经完成了基于u32值的XOR、加法、位右移等模侵犯,可以很容易地组成出比特币脚本实现的BLAKE3哈希函数。使用stack中4个分开的字节来表示u32个单词,来实现BLAKE3所需的u32加法、u32按位异或和u32按位旋转。目前BLAKE3哈希函数比特币脚本共约100kB,足以用于构建一个玩具版本的BitVM。

另外,可分割这些BLAKE3代码,使得Verifier和Prover可以通过将挑战响应游戏中的执行一分为二而不是完全执行来显着降低所需的链上数据。最后,使用比特币脚本实现Keccak- 256、Grøstl等哈希函数,初步选出了最多比特币汇率的哈希函数,并探索其他新的比特币汇率哈希函数。

3.4 无脚本脚本 BitVM

Scriptless Scripts是一种通过使用Schnorr签名,在链下执行智能合约的方法。Scripless Scripts概念诞生于Mimblewimble,除了内核及其签名之外,不存储永久数据。

无脚本脚本的优点是功能、隐私和效率。

  • 功能:无脚本脚本可增加智能合约的范围和复杂性。比特币脚本能力基于网络中已启用的OP_CODES数量,而无脚本脚本将智能合约的规范和执行从链上转移到仅设计契约参与方的讨论,花费等待比特币网络的分叉来实现新的操作码。

  • 隐私:将智能合约的规范和执行从链上转移到链下,可增加隐私。在链上,合约的很多细节都会共享到整个网络,这些详细信息包括参与者的数量和地址转账金额等。通过将智能合约转移至链下,网络只知道参与者同意其合约条款已得到满足且相关交易有效。

  • 效率:无脚本脚本最大限度地降低链上验证和存储的数据量。通过将智能合约移至链下,全节点的管理费用会减少,用户的交易费用也会降低。

无脚本脚本是一种在比特币上设计密码学协议的方法,可避免执行显着的智能合约。核心思想是使用密码算法实现期望功能,而不是使用脚本实现功能。式签名和锁定签名,是无脚本脚本的原始构建基础。使用Scriptless脚本,可以实现比常规交易更小的交易,降低交易手续费。

可借助Scriptless Scripts,使用Schnorr签名和锁定签名,不再像BitVM方案那样提供哈希值和哈希原像,也可以实现BitVM电路中的逻辑门承诺,从而可节省BitVM脚本空间,提高BitVM效率虽然现有的 Scriptless Scripts 方案能够降低 BitVM 脚本空间,需要论证者和挑战者大量交互来组合。未来将对该方案进行改进,同时尝试将 Scripless Scripts 引入具体的 BitVM 功能模块内。

3.5 消耗许可的多方挑战

当前BitVM挑战默认需要许可的原因在于:比特币的UTXO只能执行一次,导致恶劣的验证者可以通过挑战诚实证明者来“浪费”该契约。当前BitVM限定为双方挑战模式。尝试作恶的证明者,可同时利用自己控制的验证者发起挑战,从而“浪费”该契约,使得作恶成功,而其他验证者无法阻止该行为。因此,在比特币基础之上,需要研究许可的多方OP挑战协议,可将BitVM的现有1-of-n信任模型,扩展至1-of-N。其中,N远大于n。另外,需要研究解决挑战者与证明者串谋或恶意挑战“浪费”契约的问题。最终实现信任更小的BitVM协议。

缺乏许可的多方挑战,允许任何人在没有许可名单的情况下参与。这就意味着,用户可以在没有任何可信第三方参与的情况下,从L2提币。此外,任何想要参与OP挑战协议的用户期待和质疑删除无效提款。

将BitVM扩展为消耗许可多方挑战模型,需要解决以下攻击:

  • 巫攻击:即使攻击者复数参与多个争议挑战,单个诚实参与方仍能够赢得争议。如果关系参与方维护正确结果的成本,与对者的数量呈线性攻击时,则当涉及大量攻击者此时,诚实参与方赢得争议所需的成本将变得不切实际,且容易遭受巫术攻击。论文在Permissionless Refereed Tournaments中,提出了一种改变游戏规则的争议解决算法,单个诚实参与方赢得了争议的争议成本对手随着数量的增长呈对数增长,而不是线性增长。

  • 延迟攻击:某些或一群恶意方,遵循某种策略来阻止或延迟正确结果(如将资产提取到L1)在L1上的确认,并依据诚实的证明者消耗L1手续费。可要求挑战者需提前质押来解决该问题。如果挑战者发起延迟攻击,则没有收到其质押。但是,如果攻击者愿意在一定时间内牺牲质押来解决延迟攻击,则应该有应对策略来降低延迟攻击的影响。论文BoLD: Rollup Challenge 协议中的有限流动性延迟提出了一种算法,使得无论攻击者愿意损失多少质押,最坏情况下的攻击也只会导致一定程度的延迟上限。

未来,将探索适用于比特币特性的、可抵抗以上攻击问题的BitVM需要许可多方挑战模型。

4.结论

BitVM技术探索才刚刚开始,未来将探索和实践更多的优化方向,以实现对比特币的扩容,繁荣比特币生态。

参考文献

  1. BitVM:在比特币上计算任何东西

  2. BitVM:链下比特币合约

  3. 罗宾·莱纳斯 (Robin Linus) 谈 BitVM

  4. [bitcoin-dev] BitVM:在比特币上计算任何东西

  5. 奇怪的一对:可扩展性日期上的 ZK 和 Optimistic Rollups

  6. 比特币的交易和脚本限制是什么?

  7. BIP-342:Taproot脚本的验证

  8. https://twitter.com/robin_linus/status/1765337186​​222686347

  9. 应用密码学研究生价格

  10. BLAKE3:一种功能,无处不在

  11. [bitcoin-dev] 在比特币脚本中实现 Blake3

  12. https://github.com/BlockstreamResearch/scriptless-scripts

  13. 无脚本脚本简介

  14. 使用无脚本脚本的 BitVM

  15. Rollups延迟攻击的解决方案

  16. 介绍戴夫。 Cartesi 的无许可防错系统。

  17. Rollups 的延迟攻击

  18. Rollup 延迟攻击的解决方案 – Arbitrum Research

  19. 多人互动计算游戏笔记

  20. BoLD:Rollup 挑战协议中的有限流动性延迟

  21. 未经许可的裁判锦标赛