Skip to content

Redeem实现

Agzs edited this page Dec 6, 2018 · 1 revision

文件说明

1、circuit 目录

1.1 commitment.tcc文件

基于libsnark自带的sha256的电路,重新构造sha256_two_block_gadget电路,支持两个blocks的哈希,

证明cmt_A == sha256(value, sn, r)

1.2 comparison.tcc文件

基于libsnark自带的comparison_gadget的, 重新构造less_comparison_gadget电路,证明A < B的关系

1.3 gadget.tcc文件

整合上述子电路,构造支持redeem的电路,根据以下已知条件:

 * ************* for cmtA_old **************
 * publicData: cmtA_old, sn_old,  
 * privateData: value_old, r_old

 * ************** for cmtA_new **************
 * publicData: cmtA_new, value_s  
 * privateData: value_new, sn_new, r_new

证明以下等式成立:

cmt_A_old == sha256(value_old, sn_old, r_old)
cmtA_new == sha256(value_new, sn_new, r_new)
value_new == value_old - value_s
value_s < value_old
1.4 note.tcc文件

基于libsnark自带的packing_gadget的, 重新改写get_field_element_from_bits_by_order()函数,实现域上二进制到域上十进制的转化

1.5 sub_cmp.tcc文件

重写libsnark自带的比较电路,添加加法约束,构造note_gadget_with_comparison_and_subtraction_for_value_old的电路,

证明 value_old - value_s == value 并且 value_s < value_old

1.6 utils.tcc文件

包含gadget辅助函数,实现类型转化等操作

2、deps 目录

该目录复制于zcash,主要是使用正常sha256函数所依赖的的库文件,需要特别说明的是libsodium,该库主要用来产生uint256类型的随机数;

libsodium库下载地址:https://download.libsodium.org/libsodium/releases/old/unsupported/libsodium-1.0.8.tar.gz

libsodium安装方法:https://download.libsodium.org/doc/installation

libsodium编译方法:在CMakeLists.txttarget_link_libraries()中添加sodium,并在相应的文件中导入#include "deps/sodium.h"

3、其他文件

3.1 main.cpp文件

简单封装,内含函数入口,支持测试

3.2 redeem_gadget.cpp文件

仿照zcash封装InitGenerateProveVerify操作

3.3 redeem_gadget.hpp文件

仿照zcash实现InitGenerateProveVerify操作

3.4 Note.h文件

含有Note结构体,用于包装valuesnr,计算cmtA的哈希值

3.5 uint256.h文件

bitcoin中导入的文件,支持uint256相关操作

3.6 util.h文件

包含辅助函数,实现vector类型的相关转换等操作

1. 方案设计

VNT零知识设计方案

方案设计图

2. 方案实现

实现细节思考

2.1 libsnark模块实现

2.2 ethereum模块实现

2.3 cgo模块实现

3. 方案测试

部分问题

整体测试出的问题

3.1 libsnark模块测试

3.2 整体测试

4. 修改汇总

4.1 libsnark模块修改汇总

4.2 ethereum模块修改汇总

4.3 cgo模块修改汇总

5. 开发技巧

修改并编译web3.js文件

libsnark遇到的大“坑”

FZQA

CGO

MPT trie

transaction 部分修改

简易以太坊测试

Clone this wiki locally