-
Notifications
You must be signed in to change notification settings - Fork 14
Deposit实现
基于libsnark
自带的sha256
的电路,重新构造sha256_two_block_gadget
电路,支持两个blocks
的哈希,
证明cmt_B_old == sha256(value_old, sn_old, r_old)
证明cmt_B == sha256(value, sn, r)
重新构造sha256_three_block_gadget
电路,支持三个blocks
的哈希,
证明cmt_S == sha256(value_s, pk_B, sn_s, r_s, sn_A)
整合上述子电路,构造支持deposit
的电路,根据以下已知条件:
* ************* for cmtB_old **************
* publicData: cmtB_old, sn_old,
* privateData: value_old, r_old
* ************** for cmtB_new **************
* publicData: cmtB_new
* privateData: value_new, sn_new, r_new
* ************** for cmtS **************
* publicData: pk_B
* privateData: value_s, sn_s, r_s, sn_A
* ************** for MerkleTree **********
* publicData: rt_cmt
* privateData: authPath, cmtS
证明以下等式成立:
cmtS == sha256(value_s, pk_B, sn_s, r_s, sn_A)
cmt_B_old == sha256(value_old, sn_old, r_old)
cmtB_new == sha256(value_new, sn_new, r_new)
value_new == value_old + value_s
cmtS在以rt_cmt为根的MerkleTree上
基于libsnark
自带的sha256_two_to_one_hash_gadget
和merkle_tree_check_read_gadget
,仿照zcash
中的merkle_tree_gadget
实现,注意witness
的root
和path
的初始化。
基于libsnark
自带的packing_gadget
的, 重新改写get_field_element_from_bits_by_order()
函数,实现域上二进制到域上十进制的转化
包含gadget
辅助函数,实现类型转化等操作
该目录复制于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.txt
的target_link_libraries()
中添加sodium
,并在相应的文件中导入#include "deps/sodium.h"
简单封装,内含函数入口,支持测试
仿照zcash
封装Init
,Generate
,Prove
和Verify
操作
仿照zcash
实现Init
,Generate
,Prove
和Verify
操作
仿照zcash
中的IncrementalMerkleTree
和IncrementalWitness
,实现merkleTree
的组织处理,包括path
、root
、tree
和witness
,该文件主要包括MerklePath
,EmptyMerkleRoots
,IncrementalWitness
,和IncrementalMerkleTree
,SHA256Compress
的类模板及其方法。
仿照zcash
中的IncrementalMerkleTree
和IncrementalWitness
,实现merkleTree
的组织处理,包括path
、root
、tree
和witness
,该文件主要包括MerklePath
,EmptyMerkleRoots
,IncrementalWitness
,和IncrementalMerkleTree
,SHA256Compress
的类模板中方法的实现。
含有Note
结构体,用于包装value
,sn
和r
,计算cmtB
的哈希值
含有NoteS
结构体,用于包装value_s
,pk_B
, sn_s
, r_s
和sn_A_old
,计算cmtS
的哈希值
从bitcoin
中导入的文件,支持uint256
相关操作
包含辅助函数,实现vector
类型的相关转换等操作
定义一些宏,比如INCREMENTAL_MERKLE_TREE_DEPTH