ZoKrates 是一个针对以太坊的 zk-SNARKs 工具类项目, 利用它可以比较容易地实现链下生成零知识证明, 再提交到以太坊链上用智能合约进行验证的功能.
ZoKrates 本身主要用 rust 实现, 底层 zkp 方案依赖于 bellman, libsnark 实现.
本文简要介绍 ZoKrates 的使用以及 V 神 zkSNARKs 相关文章里的一个案例用 ZoKrates 实现说明.
关于 zkSNARKs, ZoKrates 更详细的介绍和说明可以参考文末参考资料.
命令行说明
compile
编译源码: 将 zok 源码压平成逻辑条件语句形式, 生成两个文件(默认 out, out.ztf), 其中 .ztf 文件是可读版.
命令样例: zokrates compile [-o out] -i sample.zok
zok 源码文件 sample.zok:
def main(private field a, field b) -> (field):
field result = if a * a == b then 1 else 0 fi
return result
生成的 ztf 文件:
def main(_0, _1) -> (1):
(1 * _0) * (1 * _0) == 1 * _4
# _2, _3 = Rust::ConditionEq((-1) * _1 + 1 * _4)
((-1) * _1 + 1 * _4) * (1 * _3) == 1 * _2
(1 * ~one + (-1) * _2) * ((-1) * _1 + 1 * _4) == 0
(1 * ~one) * (1 * ~one + (-1) * _2) == 1 * ~out_0
return ~out_0
赞 (0)打赏 微信扫一扫