Demo BitVM
BitVM 风格布尔门证明。
txt
# 紧凑布尔证明:每个位都通过一对哈希承诺中的一个原像来打开。
Contract DemoBitVM:
# 每条线的第 0 项表示 bit 0,第 1 项表示 bit 1。
Struct HashPair:
hash0: hex
hash1: hex
def main(preimageE: hex, preimageB: hex, preimageA: hex):
# 打开原像即可确定 A、B、E 分别选择了哪个 bit 值。
hA = Hash160(preimageA)
okA = Or(Equal(hA.Clone(), self.hashPairA.hash0), Equal(hA.Clone(), self.hashPairA.hash1))
NumEqualVerify(okA, 1)
bitA = Equal(hA, self.hashPairA.hash1)
hB = Hash160(preimageB)
okB = Or(Equal(hB.Clone(), self.hashPairB.hash0), Equal(hB.Clone(), self.hashPairB.hash1))
NumEqualVerify(okB, 1)
bitB = Equal(hB, self.hashPairB.hash1)
hE = Hash160(preimageE)
okE = Or(Equal(hE.Clone(), self.hashPairE.hash0), Equal(hE.Clone(), self.hashPairE.hash1))
NumEqualVerify(okE, 1)
bitE = Equal(hE, self.hashPairE.hash1)
# 被选择的 E 必须等于 A 与 B 的 NAND 结果。
EqualVerify(Not(And(bitA, bitB)), bitE)