-
Notifications
You must be signed in to change notification settings - Fork 14
Redeem实现
基于libsnark
自带的sha256
的电路,重新构造sha256_two_block_gadget
电路,支持两个blocks
的哈希,
证明cmt_A == sha256(value, sn, r)
基于libsnark
自带的comparison_gadget
的, 重新构造less_comparison_gadget
电路,证明A < B
的关系
整合上述子电路,构造支持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
基于libsnark
自带的packing_gadget
的, 重新改写get_field_element_from_bits_by_order()
函数,实现域上二进制到域上十进制的转化
重写libsnark
自带的比较电路,添加加法约束,构造note_gadget_with_comparison_and_subtraction_for_value_old
的电路,
证明 value_old - value_s == value
并且 value_s < value_old
包含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
操作
含有Note
结构体,用于包装value
,sn
和r
,计算cmtA
的哈希值
从bitcoin
中导入的文件,支持uint256
相关操作
包含辅助函数,实现vector
类型的相关转换等操作