BitVM及其优化思考

这篇具有很好参考价值的文章主要介绍了BitVM及其优化思考。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 引言

比特币是一种去中心化、安全且值得信赖的数字资产。但是,它存在重大限制,无法成为支付和其他应用的可扩展网络。比特币的扩容问题自诞生以来就一直备受关注。比特币UTXO模型将每笔交易视为一个独立事件,导致一个无状态的系统,缺乏执行复杂的、依赖状态的计算能力。因此,虽然比特币可以执行简单脚本和多签交易,但它难以促进在有状态的区块链平台上常见的复杂和动态的合约交互。这一问题显著限制了在比特币上构建的去中心化应用(dApps)和复杂金融工具的范畴,而状态模型平台提供了一个更加多样化的环境,用于部署和执行功能丰富的智能合约。
对于比特币扩容,主要有状态通道、侧链、客户端验证等技术。其中,状态通道提供了安全且多样化的支付解决方案,但其在验证任意复杂计算的能力上有限。这种限制减少了其在需要复杂、条件性逻辑和交互的各种场景中的应用。侧链虽然支持广泛的应用,并提供超越比特币功能的多样性,但是具有较低的安全性。这种安全上的差异源于侧链采用的是独立的共识机制,这些机制远不如比特币共识机制的健壮性。客户端验证,使用比特币UTXO模型,可以处理更多复杂的交易,但是与比特币没有双向校验和约束能力,导致其安全性低于比特币。客户端验证协议的链下设计依赖于服务器或云基础设施,这可能导致集中化或通过妥协服务器进行潜在审查。客户端验证的链下设计还给区块链基础设施引入了更多复杂性,可能导致可扩展性问题。
2023年12月,ZeroSync 项目负责人Robin Linus发表了一篇名为《BitVM:Compute Anything On Bitcoin》的白皮书,引发了大家对于提升比特币可编程性的思考。该论文提出一种在不改变比特币网络共识的情况下可实现图灵完备的比特币合约解决方案,使得任何复杂计算都可以在比特币上验证,而无需改变比特币基本规则。BitVM充分利用比特币脚本和Taproot,实现乐观Rollup。基于Lamport签名(又名bit commitment),让比特币两个UTXO之间建立联系,实现有状态的比特币脚本。在 Taproot 地址中承诺一个大型程序,operator和验证方进行大量的链下交互,在链上产生的足迹很小。如果双方合作,则可以执行任意复杂的、有状态的链下计算,而不在链上留下任何痕迹。如果双方不合作,则发生争议时,需要链上执行。因此,BitVM极大地拓宽了比特币的潜在用例,使比特币不仅可以作为一种货币,还可以作为各种去中心化应用和复杂计算任务的验证平台。
但是,虽然BitVM技术在比特币扩容方面极具优势,但仍处于早期阶段,在效率和安全方面还存在一些问题。如:

  • (1)挑战与响应需要多次交互,导致手续费昂贵,挑战周期长;
  • (2)Lamport一次性签名数据较长,需要降低数据长度;
  • (3)哈希函数复杂度较高,需要Bitcoin friendly哈希函数,降低费用;
  • (4)现有BitVM合约庞大而比特币区块容量有限,可借助scriptless scripts来实现Scriptless Scripts BitVM,节约比特币区块空间,同时提升BitVM效率;
  • (5)现有BitVM采用的是许可模型,仅联盟成员可发起挑战,且限定为仅两方之间,应扩展至permissionless 多方挑战模式,将信任假设进一步减小。

为此,本文提出一些优化思路,进一步提高BitVM的效率和安全性。

2. BitVM原理

BitVM定位为Bitcoin的链下合约,致力于推动Bitcoin合约功能。当前比特币脚本是完全无状态的,所以比特币脚本执行时,其执行环境在每个脚本之后都会重置。令脚本1和脚本2拥有相同 x x x值的原生方式是不存在的,比特币脚本原生不支持该方式。但仍可以借助现有opcodes,通过Lamport一次性签名让Bitcoin脚本是有状态的,如可强制script1和script2中的 x x x为相同值。如果参与方签署了相互冲突的 x x x值,则可对其进行惩罚。BitVM程序计算发生在链下,而计算结果验证发生在链上。当前Bitcoin区块有1MB限制,当验证计算过于复杂时,可借助OP技术,采用挑战响应模式,支持更高复杂度的计算验证。
与Optimistic Rollup和MATT提案(Merkelize All The Things)类似,BitVM系统基于欺诈证明和挑战-响应协议,但不需要修改比特币的共识规则。BitVM底层原语简单,主要基于哈希锁、时间锁和大型 Taproot 树。
证明者逐字节承诺,但在链上验证所有计算将过于昂贵。所以,验证者执行一系列精心设计的挑战,以简洁地驳斥证明者的虚假主张。证明者和验证者共同预签一系列挑战和响应交易,用于解决争议,从而允许在比特币上进行通用计算验证。
BitVM关键组件有:

  • 电路承诺:证明者和验证者将程序编译为大型二进制电路。证明者在一个Taproot地址中承诺该电路,该地址下的每个叶子脚本,对应该电路中的每个逻辑门。核心是基于bit commitment来实现logic gate commitment,从实现电路承诺。
  • 挑战和响应:证明者和验证者预签一系列交易来实现挑战-响应游戏。理想情况下,这种互动是在链下进行的,当证明者不配合时,也可在链上执行。
  • 模棱两可惩罚:如果证明者提出任何不正确的声明,则验证者挑战成功后可拿走证明者存款,挫败证明者的作恶行为。

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} 232,需要内存为 2 32 ∗ 4 2^{32}*4 2324字节,约17GB。在最坏情况下,需要约40轮挑战和响应,约半年时间,总脚本约150KB。该情况下激励严重不足,但实际情况下几乎不发生。
考虑使用零知识证明降低BitVM的挑战次数,从而提高BitVM的效率。根据零知识证明理论,如果数据 D a t a Data Data满足算法 F F F,则证明proof满足验证算法 V e r i f y Verify Verify,即验证算法输出True;如果数据 D a t a Data Data不满足算法 F F F,则证明proof也不满足验证算法 V e r i f y Verify Verify,即验证算法输出False。在BitVM系统中,如果挑战者不认可证明方提交的数据,则发起挑战。
对于算法 F F F,使用二分法拆开,假设需要 2 n 2^n 2n次,则能找到错误点;如果算法复杂度太高,则n较大,需要很久才能完成。但是,零知识证明的验证算法 V e r i f y Verify Verify的复杂度是固定的,公开证明proof和验证算法 V e r i f y Verify Verify全过程,发现输出为False。零知识证明的优势在于打开验证算法 V e r i f y Verify Verify所需的计算复杂度,相比于二分法打开原始算法 F F F,要低得多。因此,借助零知识证明,让BitVM挑战的不再是原始算法 F F F,而是验证算法 V e r i f y Verify Verify,降低挑战轮数,缩短挑战周期。
最后,虽然零知识证明有效性和欺诈证明依赖于不同的安全假设,但是可将二者结合,可构建ZK Fraud Proof,实现On-Demand ZK Proof。不同于full ZK Rollup,不再需要为每个单个状态变换生成ZK proof,On-Demand模型使得,仅在有挑战时才需要ZK Proof,而整个Rollup设计仍是乐观的。因此,仍默认所生成的状态是有效的,直到有人挑战该状态。如果某个状态无挑战,则无需生成任何ZK Proof。但是,如果参与方发起挑战,则需为挑战区块内所有交易的正确性生成ZK Proof。未来,可探索为单个有争议指令生成ZK Fraud Proof,避免一直生成ZK Proof的计算成本。

3.2 比特币友好的一次性签名

比特币网络中,遵循共识规则的交易是有效交易,但除共识规则之外,还额外引入了standardness规则。比特币节点仅转发广播标准交易,有效但非标准的交易被打包的唯一方法直接是与矿工合作。
根据共识规则,legacy(即non-Segwit)交易的最大size为1MB,即占满整个区块。但legacy交易的standardness上限为100kB。根据共识规则,Segwit交易的最大size为4MB,即weight limit。但Segwit交易的standardness上限为400kB。
Lamport签名是BitVM的基础组件,降低签名和公钥长度,有助于降低交易数据,从而降低手续费。Lamport一次性签名需使用哈希函数(如one way permutation函数f)。Lamport一次性签名方案中,消息长度为v比特,公钥长度为2v比特,签名长度也为2v比特。签名和公钥较长,需要消耗大量的存储gas。因此,需要寻找类似功能的签名方案,以降低签名和公钥长度。相比Lamport一次性签名,Winternitz一次性签名的签名和公钥长度大幅降低,但是增加了签名和验签的计算复杂度。
在Winternitz一次性签名方案中,使用特殊函数 P P P v v v比特的消息映射为长度为 n n n的向量 s s s s s s中每个元素的取值为 { 0 , ⋯   , d } \{0,\cdots,d\} {0,,d}。Lamport一次性签名方案是 d = 1 d=1 d=1特殊情况下的Winternitz一次性签名方案。在Winternitz一次性签名方案中, n , d , v n,d,v n,d,v之间的关系满足: n ≈ v / log ⁡ 2 ( d + 1 ) n\approx v/\log_2(d+1) nv/log2(d+1)。当 d = 15 d=15 d=15时,有 n ≈ ( v / 4 ) + 1 n\approx (v/4)+1 n(v/4)+1。对于包含 n n n个元素的Winternitz签名而言,比Lamport一次性签名方案中的公钥长度和签名长度短4倍。但是,验签的复杂度提高了4倍。在BitVM中使用 d = 15 , v = 160 , f = r i p e m d 160 ( x ) d=15,v=160,f=ripemd160(x) d=15,v=160,f=ripemd160(x)实现Winternitz一次性签名,可将bit commitment size降低50%,从而将BitVM的交易费降低至少50%。未来,在对现有Winternitz比特币脚本实现进行优化的同时,可探索以比特币脚本表达的更紧凑的一次性签名方案。

3.3 比特币友好的哈希函数

根据共识规则,P2TR script的最大size为10kB,P2TR script witness的最大size与最大Segwit交易size一样,为4MB。但P2TR script witness的standradness上限为400kB。
当前比特币网络还不支持OP_CAT,无法拼接字符串做Merkle path验证。因此,需用现有比特币脚本,以script size和script witness size最优的方式,实现一种比特币友好的哈希函数,从而支持merkle inclusion proof验证功能。
BLAKE3为BLAKE2哈希函数的优化版,并引入了Bao tree模式。相比于BLAKE2s-based,其压缩函数的轮数由10降至7。BLAKE3哈希函数会将其输入切分为1024字节大小的连续chunks,最后一个chunk可能更短但不为空。当只有一个chunk时,则该chunk为root node,且为该树的唯一节点。将这些chunks排布为二进制树的叶子节点,然后对每个chunk独立压缩。
当将BitVM用于验证Merkle inclusion proof场景时,哈希运算的输入由2个256-bit哈希值拼接而成,即哈希运算的输入为64字节。使用BLAKE3哈希函数时,这64字节可分配于单个chunk内,整个BLAKE3哈希运算仅需要对单个chunk应用一次压缩函数。BLAKE3的压缩函数中,需要运行7次轮函数和6次置换函数。
目前BitVM中已完成基于u32值的XOR、模加、位右移等基础运算,可以很容易组装出比特币脚本实现的BLAKE3哈希函数。使用stack中4个分开的字节来表示u32 words,来实现BLAKE3所需的u32 addition、u32 bitwise XOR 和 u32 bitwise rotations。目前BLAKE3哈希函数比特币脚本共约100kB,足以用于构建一个toy版本的BitVM。
此外,可拆分这些BLAKE3代码,使得Verifier和Prover可通过将挑战-响应游戏中的执行一分为二而不是完全执行来显著降低所需的链上数据。最后,使用比特币脚本实现Keccak-256、Grøstl等哈希函数,从中选出最比特币友好的哈希函数,并探索其它新的比特币友好哈希函数。

3.4 Scriptless Scripts BitVM

Scriptless Scripts是一种通过使用Schnorr签名,在链下执行智能合约的方法。Scripless Scripts概念诞生自Mimblewimble,除了kernel及其签名之外,不存储永久数据。
Scriptless Scripts的优点是功能、隐私和效率。

  • 功能:Scriptless Scripts可增加智能合约的范围和复杂性。比特币脚本能力受限于网络中已启用的OP_CODES数量,而Scriptless Scripts将智能合约的规范和执行从链上转移到仅设计合约参与方的讨论,无需等待比特币网络的分叉来启用新的操作码。
  • 隐私:将智能合约的规范和执行从链上转移到链下,可增加隐私。在链上,合约的很多细节都会共享到整个网络,这些详细信息包括参与者的数量和地址以及转账金额等。通过将智能合约移至链下,网络只知道参与者同意其合约条款已得到满足且相关交易有效。
  • 效率:Scriptless Scripts最大限度地降低链上验证和存储的数据量。通过将智能合约移至链下,全节点的管理费用会减少,用户的交易费用也会降低。

Scriptless scripts是一种在比特币上设计密码学协议的方法,可避免执行显式智能合约。核心思想是使用密码算法实现期望功能,而不是使用脚本实现功能。适配器签名和多重签名,是Scriptless scripts的原始构建基石。使用Scriptless scripts,可实现比常规交易更小的交易,降低交易手续费。
可借助Scriptless Scripts,使用Schnorr多重签名和适配器签名,不再像BitVM方案那样提供哈希值和哈希原像,也可实现BitVM电路中的逻辑门承诺,从而可节约BitVM脚本空间,提高BitVM效率。虽然现有的Scriptless Scripts方案能降低BitVM脚本空间,但是需要证明者和挑战者有大量交互来组合公钥。未来将对该方案进行改进,同时尝试将Scripless Scripts引入到具体BitVM功能模块内。

3.5 无需许可的多方挑战

当前BitVM挑战默认需要许可的原因在于:Bitcoin的UTXO仅能执行一次,导致恶意的verifier可通过挑战诚实prover来“浪费”该合约。当前BitVM限定为两方挑战模式。试图作恶的prover,可同时用自己控制的verifier发起挑战,从而“浪费”该合约,使得作恶成功,而其它verifier无法阻止该行为。因此,在Bitcoin基础之上,需要研究无需许可的多方OP挑战协议,可将BitVM的现有1-of-n信任模型,扩展至1-of-N。其中,N远大于n。此外,需要研究解决挑战者与prover串谋或恶意挑战“浪费”合约的问题。最终实现信任更小的BitVM协议。
无需许可的多方挑战,允许任何人在没有许可名单的情况下参与。这就意味着,用户可在没有任何可信第三方参与的情况下,从L2提币。此外,任何想要参与OP挑战协议的用户均可质疑和删除无效提款。
将BitVM扩展为无需许可多方挑战模型,需解决如下攻击:

  • 女巫攻击:即使攻击者伪造多个身份参与争议挑战,单个诚实参与方仍能够赢得争议。如果诚实参与方捍卫正确结果的成本,与对攻击者的数量呈线性关系时,则当涉及大量攻击者时,诚实参与方为赢得争议所需付出的成本将变得不切实际,且容易受到女巫攻击。论文 Permissionless Refereed Tournaments 中,提出一种改变游戏规则的争议解决算法,单个诚实参与方赢得争议的成本随着对手的数量呈对数增长,而不是线性增长。
  • 延迟攻击:某个或一群恶意方,遵循某种策略来阻止或延迟正确结果(如将资产提取到L1)在L1上的确认,并迫使诚实的prover花费L1手续费。可要求挑战者需提前质押来缓解该问题。如果挑战者发起延迟攻击,则没收其质押。但是,如果攻击者愿意在一定限度内牺牲质押来追求延迟攻击,则应该有应对策略来降低延迟攻击的影响。论文 BoLD: Bounded Liquidity Delay in a Rollup Challenge Protocol提出的算法,使得无论攻击者愿意失去多少质押,最坏情况下的攻击只能导致一定上限的延迟。
    未来,将探索适用于比特币特性的,可抵抗以上攻击问题的BitVM无需许可多方挑战模型。

4. 结论

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

参考文献

[1] Bitlayer团队博客 BitVM And Its Optimization Considerations文章来源地址https://www.toymoban.com/news/detail-848123.html

到了这里,关于BitVM及其优化思考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • h2database BTree 设计实现与查询优化思考 | 京东云技术团队

    h2database 是使用Java 编写的开源数据库,兼容ANSI-SQL89。既实现了常规基于 BTree 的存储引擎,又支持日志结构存储引擎。功能非常丰富(死锁检测机制、事务特性、MVCC、运维工具等),数据库学习非常好的案例。 本文理论结合实践,通过BTree 索引的设计和实现,更好的理解数

    2024年02月11日
    浏览(79)
  • 【冒泡排序及其优化】

    冒泡排序的核⼼思想就是:两两相邻的元素进⾏⽐较 给出一个倒序数组:arr[10]={9,8,7,6,5,4,3,2,1,0} 请排序按小到大输出 1.1题目分析 这是一个完全倒序的数组,所以确定冒泡排序的趟数,就是需要九趟冒泡排序 1.2冒泡排序函数实现 1.3打印数组函数实现 1.4完整代码实际代入实现

    2024年02月13日
    浏览(28)
  • 鲸鱼优化算法及其实现

    鲸鱼优化算法(whaleoptimization algorithm, WOA)是群智能算法类型中的一种,通过模拟鲸鱼的行为方式,从而解决优化问题。本章将深入讨论鲸鱼优化算法的实现原理以及如何将算法应用于实际的优化问题中。 本章主要涉及到的知识点有: 算法介绍:包括算法的起源和工作原理。

    2024年02月02日
    浏览(39)
  • 动态规划法及其优化

    在很多问题中,动态规划算法是我们的最优选择,比起递归算法,动态规划算法的时间复杂度和空间复杂度都更加优越,可以处理的数据规模更大。但是,动态优化算法的时间复杂度为O(N*V),也就是说,当需要处理的数据规模较大时,使用动态规划算法也存在超时的可能性

    2024年02月05日
    浏览(44)
  • [动态规划] 01背包问题及其优化

    题目描述 给一个能承重V的背包,和n件物品,我们用重量和价值的二元组来表示一个物品,第i件物品表示为(Vi,Wi),问:在背包不超重的情况下,得到物品的最大价值是多少? 输入 第一行输入两个数 V,n,分别代表背包的最大承重和物品数。 接下来n行,每行两个数Vi,W

    2024年02月03日
    浏览(44)
  • Mybatis批量更新数据及其优化

    需求场景 :定时任务中,从其他平台同步数据,并更新当前平台数据库,表数据3W+,分批更新某个字段,耗时巨大,约30min,尝试性能优化。 批量更新的几种常见方式: 1.foreach 循环 在mybatis的xml文件中,使用foreach动态标签拼接SQL语句,每一条数据的更新语句对应一条update语

    2024年02月10日
    浏览(35)
  • Adam优化器及其变种的原理

    本文将从SGD开始介绍Adam优化器的原理以及其变种的提出背景。 SGD(随机梯度下降法)是基于 最速梯度下降 法的原理,假设我们存在损失函数,其中是要学习参数,定义如下的优化路径 ,使得损失函数值最小。这是一个不断更新迭代参数的过程,其中表示其中某一更新步,

    2024年02月04日
    浏览(38)
  • 麻雀优化算法SSA及其改进策略

         本文罗列常见改进策略,并将其应用于麻雀优化算法(SSA)的改进上,并对比改进后的效果。        具体 请参考文献《改进的麻雀搜索优化算法及其应用》。        原始SSA更新方式如下:         Xbestj (t)表示当前全局最佳位置,β 为服从均值为 0,方差为 1 的正态

    2024年02月02日
    浏览(44)
  • 索引堆及其优化(Java 实例代码)

    目录   索引堆及其优化 一、概念及其介绍 二、适用说明 三、结构图示 四、Java 实例代码 src/runoob/heap/IndexMaxHeap.java 文件代码:   一、概念及其介绍 索引堆是对堆这个数据结构的优化。 索引堆使用了一个新的 int 类型的数组,用于存放索引信息。 相较于堆,优点如下: 优化

    2024年02月10日
    浏览(36)
  • 测试环境使用问题及其优化对策实践

    G.J.Myers在软件测试技巧中提出:测试是为了寻找错误而运行程序的过程,一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试, 一个成功的测试是揭示了迄今为止尚未发现的错误的测试。 对于新手来说,日常测试用例设计时,很少用到系统的方法论,大多是根

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包