Whitepaper: https://bitvm.org/bitvm.pdf
PoC: https://github.com/supertestnet/tapleaf-circuits
目录:
Commitment Scheme
Commit一段计算
commit:P发布计算f(x)=35
,承诺知道其解x
# 计算f(x) = x^3 + x + 5 = 35
# 解x = 3
def f(x):
y = x**3
assert y + x + 5 == 35
reveal:P公布解x
check:V将解x
代入计算f(x)=35
进行验证
解的变量x
又称作计算的input,中间变量y
又称作witness
发布:将计算编译为电路,发布电路的commitment(逻辑和变量在ZKP电路中又称作gate constraints和copy constraints)
验证:用一个基于ZKP的validity proof做简洁的验证
发布:将计算编译为合约内虚拟机(AVM、OVM)的字节码,发布字节码的commitment
验证:fraud proof & interactive proving,V要求P在链上重新执行部分计算直至发现错误
https://zerocap.com/insights/research-lab/arbitrum-arb-deep-dive/
BitVM提出了在比特币上Commit一段计算的方法,其过程完全借鉴Optimistic Rollup
由P和V pre-sign一些链下交易
交易的input包含P和V的联合签名,确保交易的inputs和outputs符合各个场景下(challenge、response等)的格式要求
交易的output使用Taproot,即满足多个条件中的任意一个即可unlock这个output
https://blog.bitmex.com/the-schnorr-signature-taproot-softfork-proposal/
这些交易在interactive proving的时候上链,以保证interactive proving按照既定流程进行。
计算→Binary Circuit→opcode script→taproot commitment,重点提出了
Bit Value Commitment
<hash_0> <hash_1> OP_BITCOMMITMENT
<hash_0> <hash_1> OP_BITCOMMITMENT
<preimage>
<preimage> <hash_0> <hash_1> OP_BITCOMMITMENT
Logic Gate Commitment
<hash_c0> <hash_c1> <hash_b0> <hash_b1> <hash_a0> <hash_a1> OP_GATECOMMITMENT
,对应的unlocking script是<preimage_a> <preimage_b> <preimage_c>
组合成Binary Circuit Commitment
<hash_c0> <hash_c1> <hash_b0> <hash_b1> <hash_a0> <hash_a1> OP_GATECOMMITMENT
;其中一些包含相同的<hash_0> <hash_1>
则表示电路相连最终发布Circuit Taproot,减小发布的尺寸