解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)

BTC EVM 操作 操作码 欺诈 2024-01-28 44

摘要:作者:雾月 & Faust,极客web3顾问:Kevin He, BitVM 中文社区发起人,ex Web3 Tech Head@Huobi导语:目前,比特币Layer2已经成为一股热潮,市面上自我定位为“比特币Layer2”的项目...

作者:雾月 & Faust,极客web3

顾问:Kevin He, BitVM 中文社区的发起者,ex Web3 Tech Head@Huobi

导语:目前,BTCLayer2已经成为一股热潮,据说市场上有几十个自我定位为“BTCLayer2”的项目。其中,很多自称为“RollupBTCLayer2声称使用Bitvm白皮书提出的方案,将Bitvm转化为BTC生态学。

但无奈的是,目前大部分关于Bitvm的文字资料,都未能通俗地解释其原理。

这篇文章是我们读了Bitvm只有8页的白皮书,查阅了Taprotot、MAST树、Bitcoin Script相关信息后的简要总结。为了方便读者理解,其中一些表达形式不同于Bitvm白皮书中描述的内容。我们假设读者对Layer2有一些了解,能够理解“欺诈确认”的简单思路。

解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)

先总结两三句Bitvm的想法:不需要on Chain的数据,首先在链下发布并存储,链上只存储Commitment(承诺)

当出现挑战/欺诈确认时,我们只需要链接数据on chian,确认它与链上的Commitment有关。今后,BTC主网再次验证这些ont 数据是否存在问题,数据生产者(处理交易节点)是否存在作恶行为。所有这些都遵循奥卡姆剃刀的原则——“如果没有必要,就不要增加实体”(会少on chain,就少on chain)

解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)

文本:所谓基于Bitvm的BTC链欺诈证实验证方案,通俗总结:

1.BitvM的关键思路

首先,计算机/处理器是由大量逻辑门电路组成的输入-导出系统。Bitcoin是Bitcoin的关键思路之一 Script(BTC脚本),模拟逻辑门电路的输入导出效果

只要能模拟逻辑门电路,理论上就能实现图灵机,完成所有可计算任务。换句话说,只要你有更多的钱,你就可以聚集一群工程师来帮助你使用简单的图形 Script代码,先模拟逻辑门电路,再用大量的逻辑门电路实现EVM或WASM功能。

解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)

(这个截图来自一个 教学游戏:“图灵完整” ,其中,核心内容是利用逻辑门电路,特别是非门,构建完整的CPU处理器)

有人曾经把Bitvm的想法比作:在我的世界里,用红石电路做M1处理器。换句话说,它相当于用积木建造纽约帝国大厦。

解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)

(据说这是有人在《我的世界》中花了一年时间建造的“处理器”)

2. 为什么要用Bitcoin? Script模拟EVM还是WASM?

这不是很麻烦吗?这是因为吗?大多数BTCLayer2往往选择支持Solidity或Move等高级语言,而目前可以直接在比特币链上运行的是Bitcoin Script是一种简单的编程语言,由一堆独特的操作码组成,非图灵完整

解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)

(一段Bitcoin Script代码示例)

如果BTCLayer2准备像Arbitrum这样的以太坊Layer2一样,在Layer1上验证欺诈,在很大程度上继承了BTC的安全性,需要在BTC链上直接验证“有争议的交易”或“有争议的操作码”。这样,Layer2使用的Solidity语言就有必要了 / EVM对应的操作码,再次在比特币链上运行。问题总结如下:

使用Bitcoin BTCnative简陋的编程语言Script,实现了EVM或其他虚拟机的效果。

因此,从编译原理的角度来理解Bitvm方案,这就是EVM方案 / WASM / Javascript操作码,转换为Bitcoin Script操作码,逻辑门电路作为“ EVM 操作码 ——> Bitcoin Script操作码是两者之间的一种中间形态(IR)。

解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)

(Bitvm白皮书中提到了在比特币链上执行一些“有争议的指令”的一般想法)

Anyway,最终模拟的效果是,把原来的EVM / 只能在WASM上处理的指令,放在BTC链上直接处理 。虽然这个方案是可行的,但困难在于如何使用大量的逻辑门电路作为中间形式来传达所有的EVM / WASM 操作码op code。而且,通过逻辑门电路的搭配,直接表达一些极其复杂的交易处理过程,可能会产生巨大的工作量。

3.与Arbitrum高度相似的“互动欺诈确认”

以下是Bitvm白皮书中提到的另一个核心,即与Arbitrum高度相似的“互动欺诈确认”。

互动欺诈证实涉及到一个叫assert的词。一般来说,Layer2的提议者Proposer(通常由排序器充当)会在Layer1上发布assert肯定,声明一些交易数据和状态转换结果是有效的。

如果有人认为Proposer提交的assert肯定有问题(相关数据有误),就会有争议。此时,Proposer和Challenger将回合交换信息,并通过二分法搜索有争议的数据,快速定位到一定粒度极细的操作指令及其相关数据片段。

有争议的操作指令(OP Code),它需要与其输入参数直接执行在Layer1上,并验证输出结果(Layer1节点将其计算的输出结果与Proposer之前发布的输出结果进行比较)。在Arbitrum中,这被称为“单步欺诈确认”。

解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)

(在Arbitrum的互动欺诈确认协议中,Proposer发布的数据将通过二分法进行检索,并尽快定位有争议的指令和执行结果,最终将单步欺诈确认发送到Layer1进行最终验证)

参考资料:前Arbitrum技术大使解读Arbitrum的组件结构(上)

解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)

(Arbitrum的互动欺诈确认流程图,阐述比较粗糙)

在这里,很容易理解单步欺诈确认的想法:大部分发生在Layer2的交易指令不需要在BTC链上再次验证。但是,当一个有争议的数据片段/操作码受到挑战时,应该在Layer1重放。

若检验结论如下:

  • 如果Proposer之前发布的数据有问题,Slash将Proposer质押的资产降低;

  • 如果Challenger有问题,Slash将Challenger质押的资产降低。

  • 如果Prover长时间不响应挑战,也可以被Slash。

Arbitrum通过以太坊上的合同来达到上述效果,而Bitvm则借助Bitcoin Script实现时间锁、多签等功能。

解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)

4.Mast树和Merklele Proof

在简单地说了“互动欺诈确认”和“单步欺诈确认”之后,我们将讨论MAST树和Merkle Proof。

前面提到,在Bitvm方案中,Layer2不会处理链下的大量交易数据/涉及的大量逻辑门电路 直接on chain,必要时只有极个别据/逻辑门电路on chian。

可是,我们需要某种方式来证实这些“原本在链下,现在要on” chain“数据,不容易捏造,这就是密码学中常提到的Commitment。Merkle Proof是一种Commitment。

首先,我们来谈谈MAST树。Mast树全名为Merkelized Abstract Syntax Trees,将编译原理中涉及的AST树转化为Merkleele Tree后的形态

那么,什么是AST树呢?它的中文名称是“抽象语法树”。简单来说,就是通过词法分析将一个复杂的指令分为一堆基本的操作模块,然后组织成一棵树状的数据结构。

解读BitVM:如何在BTC链上验证欺诈证明?(执行EVM或其他VM的操作码)

(一个简单的AST树案例,这棵AST树将x=2,y=x*3 如此简单的操作,细分为底层操作码 数据)

MAST树,就是将AST树Merkle化,以支持Merkle Proof。Merkle树的一个优点是它可以实现高效的“数据压缩”。例如,如果有必要,你想在BTC链上发布Merkle树上的数据,但要让外界确信这个数据片段确实存在于Merkle树上,而不是你“容易得到”。你该怎么办?

只要您提前将Merkle树的Root保存在链上,在未来提供Merkle Proof,只需在Root对应的Merkle树上确认一段数据即可。

(Merkle Proof/Branch与Root的关系)

因此,无需将完整的MAST树存放在BTC链上,只需提前披露其Root作为Commitment,必要时提供 数据片段 Merkle Proof /Branch即可。这可以极大地压缩onono 数据量,并且可以保证on MAST树上确实存在着chain数据。此外,只有少数数据片段在BTC链上公开 Merkle Proof,而不是披露所有数据,可以起到很好的隐私保护作用。

参考资料:数据扣押和欺诈证实:Plasma不支持智能合同的原因

(MAST树示例)

Bitvm的方案试图用BTC脚本表达所有的逻辑门电路,然后组织成一棵巨大的MAST树。树下的叶片leaf(图中的Content)与BTC脚本实现的逻辑门电路相对应。

Layer2的Proposer会经常在BTC链上发布MAST树的root,每一棵MAST树都与一笔交易有关,涉及到它所有的交易 输入参数 / 操作码 / 逻辑门电路。在某种程度上,这类似于Arbitrum的Proposer以太坊链上发布Rollupp Block。

当争议发生时,挑战者在BTC链上声明,他想挑战Proposer发布的Root,然后要求Proposer揭示Root对应的数据。未来,Proposer提供默克尔确认,并反复在链上披露MAST树的一小部分数据片段,直到与挑战者一起定位有争议的逻辑门电路。Slash将来可以执行。

(图源)

5.最终

在这里,Bitvm整个方案最重要的部分基本完成。虽然有些细节还是有点晦涩,但相信读者已经能够得到Bitvm的精髓和要点。

白皮书中提到的白皮书bit value commitment,为了避免Proposer被挑战并被迫在链上验证逻辑门电路时,将逻辑门的输入值“取0,取1”,造成二义混乱

总结

Bitvm的方案首先用BTC脚本表达逻辑门电路,然后用逻辑门电路表达EVM/其他VM的操作代码,然后用操作代码表达任何交易指令的处理过程,最后组织成merkle tree/MAST树。

如果这样一棵树表达的交易处理过程非常复杂,很容易突破1亿次leaf,因此应尽量减少commitment占用的区块空间,以及欺诈确认的范围。

虽然单步欺诈证实只需要onchain的一小段数据和逻辑门脚本,但完整的Merklee Tree需要长时间存储在链下,以便有人挑战时,可以随时在onchain树上存储数据。

Layer2发生的每一笔交易,都会产生一个大的Merklele Tree,节点计算和存储压力可想而知,大多数人可能不愿意运行节点(但这些历史数据可以过期淘汰,B^2 network专门引入类似Filecoin的zk存储确认,鼓励存储节点长期保存历史数据)

然而,基于欺诈证明的乐观反弹本身并不需要太多的节点,因为它的信任模型是1/1N,只要N个节点中有一个是诚实的,就可以在关键时刻发起欺诈证实Layer2网络是安全的。

可是,在基于BitVM的Layer2方案策划中,仍存在许多挑战,例如:

1)理论上,为了进一步压缩数据,无需直接从Layer1验证操作码,操作码的处理过程可以再次压缩成zk proof,让挑战者对zk 挑战proof的验证过程。这样可以大大压缩onof chain的数据量。但具体的开发细节会非常复杂。

2)Proposer和Challenger需要消耗大量脑细胞才能在链下反复互动,如何设计协议,如何进一步优化Commitment和挑战过程,以及如何进一步优化处理过程。

相关推荐