假定卖家A,买家B 要买卖一个数 D,这时分买家 B 要提早知道 D 是否是他想要的,B会供给一个函数 F() 来判别 D 契合不契合 B 的要求。A 拿到 F 之后,运转一下 F(D),假如回来true,那么A 持续用一个加密函数 E() 得到密文 D’=E(K, D),这儿 K 是 A 为了这笔买卖新生成的随机数,然后 A 核算 HASH(K) = H。
接下来 A 交给 B 三样东西,第一个是密钥的哈希值 H,第二个是加密数据 D’, 第三个是用zksnarks发生的核算进程证明。核算进程便是: F(D)=true; E(K,D)=D’,HASH(K)=H。最终 B 结构一个比特币脚本:声明任何供给 H 的 Preimage 的人(也便是说,任何具有 K 的人)能够花掉脚本所带的0.1 BTC。A 最终建议一笔买卖,供给 K, 提走钱;B从区块链上看到 K,解密 D’ 得到 D。
咱们回头看,比特币脚本供给了一个原子操作(大白话:完成了密钥和BTC的一手交钱,一手交货);一起 zksnarks 技能供给了零常识证明,确保 B 的BTC没有被 A 提走之前 B 得不到 D 的,做到了完美公正性。