当前位置:主页 > 区块链新闻 > 正文

tp钱包下载官网|BitVM详解:在比特币链上验证欺诈证明的方法

目前全球比特VM项目正在风头上,据悉已经有比特币层2项目自称采用了BitVM白皮书提出的方案。但是关于BitVM的文字资料大多未能通俗地解释其原理。文章为了使读者理解,对BitVM进行了简单总结,包括其核心思想和他们尝试解决的问题。另外还提到了BitVM方案中的核心内容,如双喜拉坎电路及的研究对烦琐原理和数据处理流程。文章最后同时也提到了BitVM方案仍然存在一些挑战,比如操作码的处理流程以及核心思想需要进一步优化。

作者:雾月&Faust,极客web3

顾问:Kevin He,BitVM中文社区发起人,前Web3技术负责人@Huobi

目前,比特币Layer2已经成为一股热潮,不久自我定位为“比特币Layer2”的项目,据悉目前已有家。其中,明显自封为“Rollup”的比特币Layer2,声称采用了BitVM白皮书提出的方案,使 BitVM 成为比特币生态的显着学。

但无奈的是,目前大多数关于BitVM的文字资料,都未能通俗的解释其原理。

本文是我们读完BitVM只有8页的白皮书后,查阅了与Taproot、MASTTree、Bitcoin Script相关的资料后,进行了简单的总结。为了便于读者理解,其中一些表达方式与BitVM导出中阐述的内容不同,我们假设读者对Layer2有一些了解,并能够理解“欺诈论证”的简单思想。

前几句话说出了全球BitVM的想法:耗尽链上的数据,先在链下发布并存储,链上只存放承诺(承诺)。

发生挑战/欺诈证明时,我们只把需要链上的数据,证明其与链上的承诺存在关联。之后,BTC主网重新验证这些链上的数据是否有问题,数据生产者(处理)这一切都遵循奥卡姆剃刀原则——“若非必要,勿增实体”(能少在链上,就少在链上)。

详解BitVM:如何在比特币链上验证欺诈证明

正文:所谓基于BitVM的BTC链上欺诈证明验证方案,通俗总结:

1.首先,计算机/处理器,是一个由大量逻辑门电路组合成的输入输出系统。BitVM的核心思想之一,是用Bitcoin Script(比特币脚本),模拟出逻辑门电路的输入输出效果。

只要能模拟出逻辑门电路,理论上就可以实现图灵机,完成所有可计算任务。只要你人多钱多,就可以召集一帮工程师,补救用功能简陋的比特币脚本代码,先模拟出逻辑门电路,再用巨量的逻辑门电路实现EVM或者WASM的功能。

详解BitVM:如何在比特币链上验证欺诈证明

有人将BitVM的思路比作:在《我的世界》里,用红石电路做了一个M1处理器。或者说,实际上用积木撘出来纽约帝国大厦。

详解BitVM:如何在比特币链上验证欺诈证明

2. 那么,为什么非使用比特币脚本模拟EVM或WASM?这样不是很麻烦吗?这是因为大多数比特币Layer2往往选择支持Solidity或Move等高级语言,而目前可以直接在比特币链上运行的,是比特币脚本这种简单的、由大量独特的操作码组成的、非图灵的编程语言。

详解BitVM:如何在比特币链上验证欺诈证明

如果比特币Layer2打算像Arbitrum等以太坊Layer2一样,在Layer1上验证欺骗证明,极大程度继承BTC安全性,需要在BTC链上直接验证“某笔有争议的交易”或“某个有争议的”如此一来,就等于Layer2采用的Solidity语言/EVM对应的操作码,放在比特币链上重新运行一遍。问题归结为:

使用比特币脚本这种比特币原生的简陋编程语言,实现出EVM或其他虚拟机的效果。

所以,从编译原理的角度去理解BitVM方案,就是把EVM / WASM / Javascript操作码,转译为比特币脚本的操作码,逻辑门电路作为“ EVM操作码——>比特币脚本操作码”两者之间的一种中间形态(IR)。

详解BitVM:如何在比特币链上验证欺诈证明(BitVM出口里,谈到比特币链上某些执行“有争议的指令”的大致思路)

不管怎样,最终模拟出来的效果是,把具体在EVM / WASM上才能处理的指令,放到比特币链上直接处理。这个方案虽然可行,但难点在于,如何用大量的逻辑门电路作为中间形态,表达出所有的EVM / WASM操作码。而且,用逻辑门电路的组合,直接表达一些极为复杂的交易处理流程,可能产生巨大的工作量。

3.下面说下BitVM外汇中提到的另一个核心,与Arbitrum高度相似的“吸吮论证”。

行为欺诈论证会涉及到一个叫做assert(断言)的词,一般而言,Layer2的提议者Proposer(往往由排序器扮演),会在Layer1上发布assert断言,某些声明交易数据、状态转换结果,是有效无误的。

如果认为Proposer提交的断言断言有问题(关联的数据有误),就会发生争议。此时,Proposer和Challenger会式轮询的交易所信息,对有争议的数据进行二分法查找,快速有人定位到某些粒度极细的操作指令,以及相关的数据片段。

这个有争议的操作指令(OP Code),需要连带其输入参数对Layer1上直接执行,事务输出结果做验证(Layer1节点把自己计算得到的输出结果,与Proposer之前发布的输出结果进行对比)。在Arbitrum里,这被称为“单步欺骗论证”。

详解BitVM:如何在比特币链上验证欺诈证明

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

详解BitVM:如何在比特币链上验证欺诈证明

到了这里,单步方案论证的思路很好理解了:大多数发生在Layer2的交易指令,不需要在BTC链上重新验证。但其中一些有争议的数据片段/操作码,在被人挑战时要在Layer1重放一次。

如果检测结论为:Proposer之前发布的数据有问题,则砍掉Proposer质押的资产;如果是Challenger有问题,则砍掉Challenger质押的资产。如果Prover长时间不响应挑战,也可以被Slash。

Arbitrum通过以太坊上的合约来实现上述效果,BitVM则要借助比特币脚本实现时间锁、多签等功能。

详解BitVM:如何在比特币链上验证欺诈证明

4.简单讲完“醉酒骗局论证”与“单步骗局论证”后,我们将谈及MAST树和Merkle Proof。

前面谈到,BitVM方案中,不会将Layer2在链下处理的大量交易数据/涉及的巨量逻辑门电路直接上链,只在必要时刻将极少的数据/逻辑门电路直接上链。

但是,我们需要某种方式,证明这些“到底在链下,现在要上链”的数据,不是随手捏造的,这就是密码学中常提到的承诺。Merkle Proof就是承诺的一种。

首先,我们说下全MAST树。MAST树全称为Merkelized Abstract Syntax Trees,就是把编译原理里涉及的AST树,转化为Merkle Tree之后的形态。

那么,AST树又是什么?它的中文名是“抽象语法树”,简单来说,就是把一段复杂的指令,通过词法分析,阐释为多个基础的操作单元,然后组织为一棵树状的数据结构。

详解BitVM:如何在比特币链上验证欺诈证明(一个AST树的简单案例,这棵AST树将x=2,y=x*3这样的简单侵犯,解读为简单操作码+数据)

而MAST树,就是把AST树Merkle化,以支持Merkle Proof。Merkle树有一个好处,就是它可以实现高效率的“数据压缩”。比如,你想在必要的时候,将Merkle树上的某段数据发布到BTC链上,但又要让胎儿相信,这个数据片段确实存在于Merkle树上,而不是你“随手拈来”的,怎么办?

你只要预先将Merkle树的Root记录在链上,在未来出示Merkle Proof,证明某段数据,存在于Root对应的Merkle树上,就行。

详解BitVM:如何在比特币链上验证欺诈证明

因此,消耗将完整的 MAST 树存放在 BTC 链上,只需要提前披露其根充当承诺,在必要时出示数据碎片 + Merkle Proof /Branch 即可。这样可以极大程度压缩链上的数据量,且能保证链上数据确实存在于MAST树上。而且,仅在BTC链上公开小部分数据片段+Merkle Proof,否则不是公开所有数据,能很好的隐私保护效果。

参考资料:数据扣留与凭证证明:Plasma不支持智能合约的原因

详解BitVM:如何在比特币链上验证欺诈证明

BitVM 的方案,尝试把所有的逻辑门电路用比特币脚本表达出来,再组织成一棵巨大的桅杆树,这棵树最底下的叶子叶(图中的内容),就对应着用比特币脚本实现的逻辑门电路。

Layer2的Proposer,会关闭的在BTC链上发布MAST树的根,每一棵MAST树,都关联着一笔交易,涉及其所有的输入参数/操作码/逻辑门电路。某种程度上,这类似于Arbitrum的提议者在以太坊链上发布Rollup Block。

当争议发生时,挑战者在BTC链上声明,自己要挑战Proposer发布的哪个Root,然后要求Proposer揭示Root对应的某段数据。之后,Proposer出示默克尔证明,反复在链上披露MAST树的小部分数据分割,直到和挑战者共同定位到有争议的逻辑门电路。之后就可以执行Slash。

详解BitVM:如何在比特币链上验证欺诈证明

5.到这里,BitVM整个方案大部分的部分基本讲完了,虽然其中某些细节还是有点晦暗重要,但相信读者已经可以得到BitVM的精华与要点。至于其白皮书里提到的位值承诺,是为了防止Proposer在被挑战而被迫在链上验证逻辑门电路时,给出该逻辑门的输入值“既赋值0,又赋值1”,产生二义性混乱。

总结:BitVM的方案,先用比特币脚本表达逻辑门电路,再用逻辑门电路表达EVM/其他VM的操作码,再用操作码表达任意一条交易指令的流程处理组织,最后形成merkle tree/MAST树。

这样的一棵树,如果表达的交易处理流程很复杂,很容易破掉1亿个叶子,所以要尽量减少承诺占用的区块空间,以及欺诈证明波及的范围。

虽然单步布局证明,只需要链上极小的一段数据和逻辑门脚本,但完整的Merkle Tree要在链下长期存储,以备有人挑战时,可以随时链上树上的数据。

Layer2每笔发生的交易,都会产生一个大号Merkle Tree,节点的计算和存储压力可想而知,大多数人可能不可能去运行节点(但这些历史数据可以被淘汰淘汰,而B^2网络专门引入类似Filecoin的zk存储证明,激励存储节点长期保存历史数据)

,基于发起倡议的OptimismRollup,本身也不需要有太多节点,因为其信任模型是1/N,只有N个节点中有1个是投票的,能够然而在关键时刻发起倡议论证,Layer2网络就是安全的。

但是,基于BitVM的Layer2方案设计中,还存在许多挑战,比如:

1)理论上说,为了进一步压缩数据,需要直接在Layer1验证码操作,可以将操作码的处理流程重新压缩为zk证明,让挑战者对zk证明的验证步骤进行挑战。这样可以将压缩上链上的数据量。但具体的开发细节会很复杂。

2)Proposer和Challenger要在链下反复产生交互,协议一起设计,承诺和挑战过程,在处理上进一步优化,需要消耗很多脑流程细胞。

版权保护: 本文由 主页 原创,转载请保留链接: http://www.smdsexam.com