
ZoKrates是一个针对以太坊的zk-SNARKs工具类项目,利用它可以比较容易地实现链下生成零知识证明,再提交到以太坊链上用智能合约进行验证的功能.
ZoKrates本身主要用rust实现,底层zkp方案依赖于bellman,libsnark实现.
本文简要介绍ZoKrates的使用以及V神zkSNARKs相关文章里的一个案例用ZoKrates实现说明.
关于zkSNARKs,ZoKrates更详细的介绍和说明可以参考文末参考资料.
命令行说明
compile
编译源码:将zok源码压平成逻辑条件语句形式,生成两个文件(默认out,),其中.ztf文件是可读版.
命令样例:zokratescompile[-oout]-
zok源码文件:
defmain(privatefielda,fieldb)-(field):
fieldresult=ifa*a==bthen1else0fi
returnresult
生成的ztf文件:
defmain(_0,_1)-(1):
(1*_0)*(1*_0)==1*_4
g16-malleabilityforimplications.
Hasgenerated5points
生成验证合约
命令:zokratesexport-verifier
编译并发布合约
使用remix和Metamask来编译和发布.
Rinkby上发布并源码认证的合约:0x53577a6d35da004d1c76397959c594d0426ecd1a
生成正确的witness和proof
命令:
Computingwitness
Witness:
[true]
:
~out_01
~one1
_03
_19
_227
生成正确的proof
命令:
Generatingproof
WARNING:/reference/proving_#g16-malleabilityforimplications.
generate-proofsuccessful:true
{"proof":{"a":["0x110332d0c8e1d05ce9404fd93105c3fe4584d80ccb5ac717acadc7ebd0fc980e","0x030f5b5816274abb8eef5be4fd24991d0de600916d02338be72374e7b9bfdf6c"],
"b":[["0x047db95379f2de8e6753fc26dfd0254d6f634526062ae70e3545bd50bf8be5df","0x187c8851eae58a5713dd46f18dc9598b67598a248edb0cee6b68f5d080f01e9b"],["0x05ae13857c3b68ea1728fcdf4f41883c78be1fda50b4a54f0aab8c27aa63fdf2","0x2402254c268795bb9c1ef973e4fb4a5eacc8e230793a1d6b8208666b436da00a"]],
"c":["0x141b43d522d0cf6912c12efbb5c5bb783a21a1392573d9073db93f284ba6b008","0x2aa86a426ca6b2deeeaff97cbeef7299082cc9753635bb8dee1c8d87e9ef53c2"]
},
"inputs":["0x0000000000000000000000000000000000000000000000000000000000000001"]
}%
调用verifier合约进行验证
交易:0xf84aa9f7cc7b7ef7896f77b295bcce657c18c6053fe33eba0905f86131c6851f
根据,交易有抛出事件就说明验证通过.
生成错误的witness和proof
命令:
Computingwitness
Executionfailed:Expected35toequal73
无法生成.
伪造错误的proof,基于上面的的数据进行任意修改.
调用verifier合约进行验证
交易:0x669936c392f39a10bc0ee594e1472b87a93b0370ed329ab03892e5f702fb1ea3
交易:0x89689b344f88751995641f8f682768aaf99b770f70f404bd003fedc6ecb50393
有些交易会失败,有些交易会成功,但是成功的交易也是没有事件的(说明验证没通过,函数返回false)
参考资料
ZoKrates-github
zokratesdocs
bellman
libsnark
VitalikButerin-QuadraticArithmeticPrograms:fromZerotoHero
零知识证明-深入理解ZoKrates