Hi 游客

更多精彩,请登录!

比特池塘 Just discuss 正文
前言回顾 上一篇《比特币生态太扩容方案巡礼(1):铭文何去何从》中,我们讨论了热门的铭文生态的技术原理和可能存在的安全问题,并且提到了用递归铭文来实现智能合约的可能性。但是因为Luke对Taproot脚本的限制,递归铭文似乎有了一些障碍,那在比特币网络上实现智能合约有没有其他的可能性呢? 区块链开发商ZeroSync的联合创始人Robin Linus,在2023年10月9日发表了一篇名为“BitVM:在比特币上进行所有运算(BitVM:Compute Anything on Bitcoin)”的论文,其中提出了一个计划,旨在将智能合约引入比特币区块链。 该论文提出了一个非常有趣的思路,可以用taproot完成几乎所有的任意计算,并使用这些计算来验证在比特币链下发生的事情。其中的诀窍是,将所有的逻辑都放在链下,并在其他人断言了不诚实的结果时,在链上用少数几步计算来挑战这些结果。 换句话说,就是将一个Verifier的逻辑放在比特币网络中,利用比特币的强共识安全,成为任何图灵完备运算层的可信第三方,再用Optimistic Rollups 的原理,来实现链外计算结果的验证。 那么怎么实现将一段Verifier的逻辑放在比特币网络中呢?为了和上一节的“铭刻”相呼应,我愿称之为在比特币网络上进行电路“蚀刻”的技术。 逻辑门电路在现有的比特币脚本上构造与非门(NAND gate)可以通过结合哈希锁和两个可能不太为人所熟知的操作码:OP_BOOLAND和OP_NOT来实现。 首先,哈希锁可以用来创建一个分支脚本,这个脚本可以通过两种方式中的一种来花费:要么满足哈希锁,要么满足哈希锁B。这样,路径A将1输出到堆栈,而路径B将0输出到堆栈。 通过满足特定哈希锁,你可以"解锁"一个比特,这个比特作为我们要构造的NAND门的输入之一。由于你只能满足其中一个路径的要求,所以这种方法只允许用户一次提交一个比特。 与非门的逻辑是接收两个比特作为输入,输出一个比特。如果两个输入比特都是1,则输出0;如果输入是其他组合,则输出1。使用两个哈希锁技巧,可以提交这两个输入,并验证输出是否正确,这就是OP_BOOLAND和OP_NOT的用途所在。 OP_BOOLAND的操作与与非门相反:如果两个输入都是1,则输出1;任何其他输入组合都会产生0。OP_NOT则输出与输入相反的值。因此,通过结合使用这两个操作码,可以在脚本堆栈中取两个输入并进行反和操作。最后,可以使用OP_EQUALVERIFY以及哈希锁技巧来验证断言的输出。如果堆栈中实际的与非操作结果与用户断言的输出不一致,脚本就无法通过验证。 这样,就在比特币脚本中“蚀刻”了与非门电路,实际上是通过比特币脚本来强制执行虚拟的与非门操作。 比特币上如何蚀刻与非门在现有的比特币脚本上构造与非门(NAND gate)可以通过结合哈希锁和两个可能不太为人所熟知的操作码:OP_BOOLAND和OP_NOT来实现。 首先,哈希锁可以用来创建一个分支脚本,这个脚本可以通过两种方式中的一种来花费:要么满足哈希锁,要么满足哈希锁B。这样,路径A将1输出到堆栈,而路径B将0输出到堆栈。 通过满足特定哈希锁,你可以"解锁"一个比特,这个比特作为我们要构造的NAND门的输入之一。由于你只能满足其中一个路径的要求,所以这种方法只允许用户一次提交一个比特。 与非门的逻辑是接收两个比特作为输入,输出一个比特。如果两个输入比特都是1,则输出0;如果输入是其他组合,则输出1。使用两个哈希锁技巧,可以提交这两个输入,并验证输出是否正确,这就是OP_BOOLAND和OP_NOT的用途所在。 OP_BOOLAND的操作与与非门相反:如果两个输入都是1,则输出1;任何其他输入组合都会产生0。OP_NOT则输出与输入相反的值。因此,通过结合使用这两个操作码,可以在脚本堆栈中取两个输入并进行反和操作。最后,可以使用OP_EQUALVERIFY以及哈希锁技巧来验证断言的输出。如果堆栈中实际的与非操作结果与用户断言的输出不一致,脚本就无法通过验证。 这样,就在比特币脚本中“蚀刻”了与非门电路,实际上是通过比特币脚本来强制执行虚拟的与非门操作。 如何蚀刻大规模电路虽然这个利用Taproot脚本实现电路蚀刻的想法很酷,但是别说像PC那种超大规模电路了,就是要实现任意一组计算,都需要成千上万的与非门电路,那在比特币有限的Taproot脚本空间里,如何覆盖复杂计算呢? BitVM提出了Taproot脚本树(Taproot Tree)的方法。为了在比特币脚本中实现复杂的计算过程,人们可以通过串联逻辑门来构建计算电路。在这个方案中,哈希锁被用来绑定各个门,从而实现顺序执行的逻辑操作。具体来说,如果一个门的脚本根据不同的哈希原像(哈希明文值)输入产生不同的输出结果C1或C2,那么下一个门会使用与之相匹配的哈希锁值作为其输入。 这种方法可以实现一种惩罚机制,即如果试图谎报前一个门的结果,就只能揭晓另一个哈希锁的原像。这种机制可以用于两个用户之间的交互式计算,其中他们预先同意参与特定的计算任务,然后将计算过程分解成只由与非门组成的电路。他们需要为电路中的每个门选择合适的哈希锁,并将其编码进锁定UTXO的脚本树中。 然后通过多个地址组成一个Taproot地址矩阵,再通过Taproot Tree的方式将逻辑电路蚀刻到一系列树状结构相连的UTXO交易的Taproot脚本中,最终形成一个可以处理一定计算任务的“类合约”逻辑电路。 欺诈挑战欺诈挑战是OP(Optimism Rollup)技术的核心(虽然至今都没有真的实现~),思想是在一个batch的交易被批量提交之前,挑战者对认为有错的交易发起欺诈挑战(质押对赌),主网上的Verifier合约会根据状态根在执行后的变化来判断提交者是否作恶,然后分配双方质押的资产。 而在bitVM中,脚本树被设计成两个电路,除了允许证明者提交到一个电路之外,还需要挑战者能够挑战证明者的声明。这可以通过预签名一系列的交易来实现。这些预签名交易通过「挑战 ->应答 ->挑战 ->…」的方式连接。如果某一方停止一段时间后,另外一方就会赢得挑战并回收双方的存款。 上图展示了一系列预先签名的交易: • 挑战:Vicky (挑战者 / 验证者)在脚本路径中释放一个原像(这些原像只有挑战者知道),用作对证明的挑战; • 应答:Paul (证明者)执行对应的逻辑门,将资金发回初始的脚本中; 在几轮的查询后可以迅速驳斥任何一个不一致的声明。如果证明者停止在链下与挑战者合作,挑战者就会强制证明者在链上合作:挑战者每解锁一个哈希锁,使得证明者的 UTXO 中的每个 NAND 门对应的 Taproot 叶子节点只有在证明者知道挑战者持有的一个原像时才可以被花费。证明者可以通过揭示其输入和输出来证明给定的 Taproot 叶子节点执行正确。其前提是挑战者通过揭露对应 Tapleaf 的哈希的原像来解锁它,通过二分查找的方式,挑战者可以在经过有限轮(O(logn))的挑战和应答后锁定证明者的错误。 整个过程涉及到多轮交互,以确保合约能够正确结算。挑战者可以不断挑战证明者,直到证明者证实了每个门的正确结果,或者在证明者无法响应挑战的情况下,挑战者可以在特定时间后提取资金。在理想情况下,所有操作都在链下进行,双方协作完成结算,但如果合作破裂,双方可以通过链上的挑战游戏来确保合约得到正确的解决。 落地障碍与安全性问题这项提议涉及处理和生成的数据量极其庞大。使用的Taproot脚本树可能包含数十亿个叶子节点,而相关的预先签名交易的处理时间可能至少需要几个小时,以确保准确的结算。每个Taproot地址的预设解锁条件执行都需支付矿工费,因此地址组合越多,成本也越大。 这种方案的一个主要限制在于,它只适用于两个参与者之间的交互:一个作为证明者,证明其执行的准确性;另一个作为验证者,挑战前者的声明。虽然未来的研究可能会找到方法让更多参与者加入,但目前看来还没有明确的解决方案。 在合作结算的场景中,所有参与者必须在线,这对于协议的实用性和便利性构成了一定的限制。 在安全性方面,主要有以下几点安全风险: 1、由于成本的限制,必然大量的计算工作要放在链下进行,链下计算就存在中心化服务的一些常见安全风险。 2、大量数据保存在链下,数据可用性和数据安全性也是必须要考虑的风险点 3、对于所蚀刻的电路本身是否存在逻辑漏洞也是一个安全风险点,由于电路的不易读性,需要付出更多的审计成本或形式化验证成本。 Metatrust曾经协助Uniswap进行了全面的形式化验证工作,并在ZK电路审计和形式化验证方面有非常丰富的经验,可以为BitVM生态的安全落地,提供保障。 上两篇的方案都是今年刚火热起来的技术方案,下一篇,我们将介绍一个更加古老,更加具备“正统性”的方案,闪电网络的升级版本——Taproott Assets。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

宋长宁 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    28