零知识证明:ZoKrates 使用和案例说明 | 技术帖

本文简要介绍 ZoKrates 的使用以及 V 神 zkSNARKs 相关文章里的一个案例用 ZoKrates 实现说明.

零知识证明:ZoKrates 使用和案例说明 | 技术帖

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

转载声明:本文 由CoinON抓取收录,观点仅代表作者本人,不代表CoinON资讯立场,CoinON不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。若以此作为投资依据,请自行承担全部责任。

声明:图文来源于网络,如有侵权请联系删除

风险提示:投资有风险,入市需谨慎。本资讯不作为投资理财建议。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2019年12月16日 下午6:07
下一篇 2019年12月16日 下午6:07

相关推荐

零知识证明:ZoKrates 使用和案例说明 | 技术帖

星期一 2019-12-16 18:07:21

零知识证明:ZoKrates 使用和案例说明 | 技术帖

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