B² Network技术实现:基于零知识证明验证承诺的比特币ZK-Rollup
原文作者:Stone, B² Network Research Lead
链接:https://www.aicoin.com/article/383238.html
B² Network 通过将零知识证明验证承诺记录在 Bitcoin 上,允许任意的观察者针对 commitment 进行挑战的机制,可以继承 Bitcoin 的安全性,在 Bitcoin 上共识 rollup 的数据。
B² Network是比特币上的一个Layer2解决方案,主要利用将零知识证明验证承诺提交到比特币网络,允许挑战者发起欺诈证明进行挑战,以达到利用比特币网络的强大共识保证B² Network安全性的目的。
本文主要介绍以太坊上的ZK-Rollup和OP-Rollup的运行机制,介绍神奇的与非门电路,介绍承诺的作用,并利用这些机制和概念设计B² Network上的零知识证明验证承诺,进而说明零知识证明验证承诺如何在比特币网络执行以及如何保证B² Network的安全性。
以太坊上的ZK-Rollup
ZK-Rollup是一种区块链的二层扩展解决方案,通过聚合多个交易并利用零知识证明来确保这些交易批次的正确性和完整性,并在一层区块链网络上进行零知识证明的验证,从而利用一层网络保证二层网络的安全性。它旨在提高区块链系统的吞吐量,减少交易费用,同时保持高度的安全性和数据完整性。
ZK-Rollup的运行过程大致如下:
交易聚合和排序。用户向ZK-Rollup提交交易,交易将会被提交到mempool中。ZK-Rollup的Sequencer从mempool中获取用户的交易并进行收集、排序,Sequencer负责处理交易,更新账户状态,并最终生成一个代表这些更新的批次;
状态转换和计算。所有的交易执行和状态更新都在链下进行。ZK-Rollup的VM(包括zkEVM、zkVM等不同的零知识证明智能合约执行引擎)计算新的账户状态,并处理如转账、智能合约交互等操作。同时生成必要的数据和证据来证明这些交易和状态更新是有效的,这里面包括新的账户状态和零知识证明;
零知识证明生成。ZK-Rollup的Prover利用零知识证明技术(如zk-SNARKs或zk-STARKs)来创建一个证明,这个证明表明所有聚合的交易都是有效的,没有违反网络规则。这个证明不透露任何有关交易内容的信息,保护用户隐私,同时确保了数据的完整性和安全性。
零知识证明验证。Aggregator将批次的数据和零知识证明提交到一层区块链网络。这通常以一种压缩的形式发生,以减少所需的链上空间。一层区块链网络上的智能合约接收这些数据和证明,并验证证明的有效性。如果证明有效,合约将更新其记录的ZK-Rollup层的状态。
ZK-Rollup的核心在于零知识证明的生成和验证。ZK-Rollup的交易在链下执行,并在链下生成状态,通过Prover生成零知识证明,作为ZK-Rollup的承诺。这个承诺代表着ZK-Rollup上的交易正确、有效地执行,生成了正确的状态。一层区块链网络不需要验证ZK-Rollup的全部交易和状态,只需要验证承诺,承诺的验证是通过一层网络的智能合约进行零知识证明验证,即可确认ZK-Rollup的有效性。
因此,在以太坊的ZK-Rollup中,零知识证明数据是二层网络向一层网络提交的承诺。
以太坊上的OP-Rollup
Optimistic Rollup (OP-Rollup) 是一种为了扩展区块链性能而设计的技术,它通过在链上保持最小的数据和执行尽可能多的计算在链下来实现。OP-Rollup 利用了“乐观”假设,即大部分交易都是诚实的,而不是立即验证每个交易的有效性,这样可以在一段时间后再进行验证,极大地提高了吞吐量和效率。
OP-Rollup的运行过程大致如下:
交易聚合和排序。用户向OP-Rollup提交交易,交易将会被提交到mempool中。OP-Rollup的Sequencer从mempool中获取用户的交易并进行收集、排序,Sequencer负责处理交易,更新账户状态,并最终生成一个代表这些更新的批次;
交易的执行。OP-Rollup的交易在链下执行,每个批次交易的执行,将导致旧的状态转变为新的状态,每个批次都会计算一个新的状态根(一种加密的“快照”表示整个系统状态),并将其提交到一层区块链网络;
状态的验证。OP-Rollup在提交交易批次时不立即进行复杂的验证,而是“乐观地”假设这些交易都是有效的,然后提交一层区块链网络。如果有观察者认为某个批次是无效的,他们可以提交一个欺诈证明来挑战该批次。在Optimistic Rollup解决方案中,欺诈证明是一种允许任何观察者挑战错误或恶意提交到链上的状态或交易的机制。Optimistic Rollup利用欺诈证明来确保即使是“乐观地”接受的交易也可以在事后被证明是错误的,并相应地被撤销;
挑战机制。挑战期是OP-Rollup提交状态确认后,有一个挑战窗口期,期间任何人都可以检查提交的批次,并在发现错误时提交欺诈证明,这通常是通过提交一个交易到一层区块链网络来实现,该交易声明了他们认为的错误并提供了相应的证据。Arbitrum Rollup(一种Optimistic Rollup的解决方案)使用一种称为“交互式验证游戏”的过程来解决挑战。在这个过程中,挑战者和提交者之间进行一系列的回合,逐步缩小他们对哪里出错的意见不一致的范围(采用的是二分查找法快速定位错误的交易位置)。最终,这个过程将确定错误发生的确切位置。一旦错误被确认,原始的批次将被撤销,并对提出错误的验证者进行处罚。如果挑战失败,则挑战者可能会失去他们为发起挑战而抵押的资金;如果挑战成功,则挑战者可以获得成功发起挑战赢得的奖励资金。
OP-Rollup的核心在于欺诈证明和挑战机制。OP-Rollup首先会“乐观”地认为所有交易都正确执行,然后在一层网络将计算编译为合约内虚拟机(AVM、OVM)的字节码,发布字节码的承诺。OP-Rollup的承诺验证,需要进行交易计算,并获得字节码,然后验证承诺。一旦有观察者发现有承诺不匹配的批次,观察者将会通过挑战机制生成欺诈证明,获得奖励。
以太坊的OP-Rollup首先“乐观”地确认和提交承诺,然后利用挑战机制,允许任何人对提交的承诺进行挑战,最终通过承诺和挑战确保OP-Rollup得到验证和确认。
神奇的与非门
与非门(NAND gate)是数字逻辑中的一种基本逻辑门,它实现了逻辑与(AND)操作后的逻辑非(NOT)操作。与非门的特性使其成为能够构造任何其他逻辑门和复杂逻辑电路的基础。以下是如何使用与非门构造逻辑门(如与门、或门、异或门)以及加法门和减法门的详细介绍:
1. 与非门基础
与非门有两个输入,当且仅当两个输入都为1时,输出为0;在所有其他情况下,输出为1。这可以用逻辑表达式表示为 A NAND B。
2. 构造基本逻辑门
与门(AND)
要使用与非门构造与门:
第一步:将两个输入连接到一个与非门。
第二步:将该与非门的输出连接到另一个与非门的两个输入端。
结果:第二个与非门的输出就是与门的结果。
或门(OR)
要使用与非门构造或门:
第一步:将每个输入分别通过一个与非门(自己与自己),产生两个非门的效果。
第二步:将这两个与非门的输出作为一个与非门的输入。
结果:该与非门的输出就是或门的结果。
异或门(XOR)
要使用与非门构造异或门(更复杂一些):
第一步:构造两个与非门,每个输入都连接到其中一个。
第二步:将第一步中的两个与非门的输出作为第三个与非门的输入。
第三步:将原始输入A和第一个与非门的输出连接到第四个与非门,将原始输入B和第二个与非门的输出连接到第五个与非门。
第四步:最后,将第四个和第五个与非门的输出连接到第六个与非门。
结果:第六个与非门的输出就是异或门的结果。
3. 构造加法门
半加器(Half Adder)
半加器是一个简单的加法器,它可以处理两个位的加法,并产生和(sum)和进位(carry)。
和:使用一个异或门来生成和。
进位:使用一个与门来生成进位。
使用与非门构造这些基本门,然后将它们组合起来形成半加器。
全加器(Full Adder)
全加器考虑了来自低位的进位输入。
第一步:构造两个半加器,第一个处理A和B,第二个处理第一个半加器的和与进位输入C。
和:第二个半加器的和输出。
进位:两个半加器的进位输出通过一个或门连接。
使用与非门构造半加器和或门,然后组合它们形成全加器。
4. 构造减法门
半减器(Half Subtractor)
半减器处理两个位的减法。
差:使用一个异或门生成差。
借位:使用一个与非门和非门来生成借位。
使用与非门构造异或门和其他所需逻辑,然后组合它们形成半减器。
全减器(Full Subtractor)
全减器考虑了来自高位的借位。
第一步:构造两个半减器,第一个处理A和B,第二个处理第一个半减器的差与借位输入。
差:第二个半减器的差输出。
借位:两个半减器的借位输出通过一个或门连接。
使用与非门构造半减器和或门,然后组合它们形成全减器。
5. 构造乘法门
二进制乘法
实现两个二进制数的乘法。
第一步:使用与门进行位乘法。
第二步:使用全加器串联进行连续的加法。
第三部:实现移位和累加。
6. 构造寄存器
D触发器
存储一位二进制信息。
第一步:使用与非门创建锁存器(Latch)。
第二步:将锁存器扩展成触发器(Flip-flop)。
寄存器
存储多位二进制数。
将多个D触发器并行连接,每个存储一位。
7. 构造时钟
振荡器
提供周期性的时钟信号。
使用与非门创建反馈回路,产生连续的振荡。
结论
与非门因其能够构造任何其他逻辑门和复杂电路的能力而被称为“通用逻辑门”。通过上述方法,可以利用与非门构建出复杂的加法、减法、乘法以及存储和时钟电路,这是计算机和数字系统中进行算术运算的基础。在现代集成电路设计中,与非门因其简单性和多功能性而广泛使用。
在B² Network的实践中,通过与非门可以构造任何的计算逻辑。
密码学中的承诺
承诺在密码学和区块链中应用非常广泛,像SHA256、Merkle Tree、零知识证明中的KZG都是承诺,像上文中介绍的ZK-Rollup将零知识证明作为Rollup的承诺,OP-Rollup将虚拟机内的字节码作为Rollup的承诺。
我们通过Merkle Tree来详细说明如何使用承诺:
commit:Prover将所有的value计算哈希,哈希作为二叉树的叶子节点,不断向上进行哈希计算,最终生成Merkle Tree,发布tree root hash作为承诺。
reveal:Prover揭露一个叶子节点对应的value,以及其branch。
check:Verifier通过揭露的value、branch计算哈希,最终与发布的承诺进行对比,进行验证。
如下图示例:
commit:Prover将tx1、tx2……tx8分别计算哈希,获得H(1)、H(2)......H(8),不断两两进行哈希计算,最终生成图中的二叉树结构,即Merkle Tree,将Merkle Tree的root节点的值H(12345678)作为承诺进行发布。
reveal:Prover揭露一个叶子结点对应的value,如tx3,以及其branch(H(4) -> H(12) -> H(5678))。
check:Verifier通过揭露的tx3和branch(H(4) -> H(12) -> H(5678))进行计算并验证承诺:
计算tx3的哈希H(3)
将H(3)与branch中的H(4)进行哈希,得到H(34)
将H(34)与branch中的H(12)计算哈希,得到H(1234)
将H(1234)与branch中的H(5678)计算哈希,得到H(12345678)
将H(12345678)与公布的承诺进行验证
B² Network的零知识证明验证承诺
B² Network是构建在比特币网络的ZK-Rollup二层解决方案。
Bitcoin上ZK-Rollup的限制
由于比特币的图灵不完备限制,导致比特币网络上没有办法进行零知识证明的验证,因此ZK-Rollup的传统解决方案,在一层区块链网络验证零知识证明的实现方式,是没办法在比特币网络上实现的。
ZK-Rollup只将零知识证明和Rollup的数据聚合通过Taproot写入比特币网络,只能保证ZK-Rollup的数据锚定在了比特币网络,无法被篡改,但是无法保证ZK-Rollup的交易的有效性、正确性,也没办法利用比特币网络的强大共识能力保证二层ZK-Rollup的安全性。
因此,一定需要在比特币网络上进行ZK-Rollup的确认。
零知识证明与算术电路
零知识证明
在零知识证明中,算术电路用于构建一个证明,证明者知道某些秘密信息,而不需要透露这些信息本身。
零知识证明使用算术电路生成证明:
生成证明
一旦算术电路建立,证明者将使用他们的秘密输入来计算电路的输出。在这个过程中,证明者还会生成额外的信息(如零知识证明特有的承诺和随机数),这些信息用于构建证明。
验证证明
证明者将他们的证明发送给验证者。验证者不知道证明者的秘密输入,但他们有电路的描述和证明者的证明。验证者通过执行电路的相同计算,并比较其结果与证明者提供的证明,来验证证明的有效性。
算术电路
算术电路通常表示为一个有向无环图(DAG),其中每个节点代表一个算术操作,边代表操作之间的数据流。输入节点代表电路的输入值,通常是一些数字或变量,而内部节点代表算术操作。电路的输出是最终的计算结果。
算术电路中的基础电路门:
加法门(Addition Gate)
乘法门(Multiplication Gate)
根据上文中与非门的介绍,算术电路是可以通过将加法门转换为与非门,将乘法门转换为与非门,最终算术电路转换为基于与非门的逻辑门电路。
零知识证明验证承诺
零知识证明的验证程序本身是一个算术电路,通过将算术电路转化为基于与非门的逻辑门,实际上可以将零知识证明的验证程序转化为基于与非门的逻辑门电路。
与非门通过比特币脚本实现,将Bit Value Commitment作为输入和输出组装成逻辑门,实现逻辑门约束。
可简记为 hash_c0> hash_c1> hash_b0> hash_b1> hash_a0> hash_a1> OP_GATECOMMITMENT ,对应的unlocking script是 preimage_a> preimage_b> preimage_c> 。
实际上,可以通过比特币脚本实现与非门,再由与非门构造出加法门和乘法门,加法门和乘法门组合成算术电路,最终构造出零知识证明的验证程序。但是由于涉及的门电路非常多,构造出的比特币脚本也非常庞大,无法在比特币网络上真正运行。
将Bit Value Commitment作为输入和输出组装成逻辑门,每一个带有不同输入和输出的逻辑门作为叶子节点,组合成电路二叉树,发布的Circuit Taproot是二叉树的root,减小了发布的尺寸。
Circuit Taproot作为B² Rollup在一层区块链网络比特币上提交的承诺。不同于传统的ZK-Rollup可以在一层网络执行验证,B² Rollup无法在比特币上直接执行验证。但是可以参考Optimistic Rollup的方式,针对承诺提供挑战机制,通过挑战机制完成Circuit Taproot承诺的确认。
验证和响应协议
不同于BitVM需要提前签署两方间的链下交易。B² Network采用发布锁定奖励的UTXO交易,解锁脚本是一个Taproot脚本。
具体的解锁Taproot脚本是Prover提前将Circuit Taproot Tree的每个branch生成脚本,并给定输入的哈希。Challenger利用preimage执行脚本,如果执行的output和Prover的提交不一致,就能利用MAST(Taproot Merklized Abstract Syntax Tree,默克尔抽象语法树)解锁整个Taproot,从而获得锁定的奖金。
由于零知识验证程序的运行成本很小,也非常快速,因此比特币网络上的用户都可以充当Challenge机制的观察者,验证B² Rollup提交的承诺,一旦发现承诺不一致,可以立即发起挑战。
挑战机制类似于Arbitrum Rollup的“交互式验证游戏”,不断寻找错误执行的逻辑门计算。为了在众多逻辑门中找到错误的一个,将会使用二分查找的方式,执行门电路比特币脚本。最快找到错误分支的挑战者,可以在比特币网络上解锁锁定奖励的UTXO,从而获得奖励。
同时,Taproot锁定脚本中的一个分支是时间锁脚本,当没有Challenge成功挑战,Prover将在挑战期结束后,通过时间锁脚本解锁UTXO,取回奖励。
总结
B² Network通过Ordinals Protocol,将rollup的data和proof聚合后写入Tapscript中,利用不同的去中心化存储协议保存rollup明细数据,有效地保证了rollup的data availability。
B² Network 通过将 zero-knowledge proof verification commitment记录在Bitcoin上,允许任意的观察者针对commitment进行挑战的机制,可以继承Bitcoin的安全性,在Bitcoin上共识rollup的数据。
最后更新于