Skip to content

整体测试出的问题

Agzs edited this page Dec 20, 2018 · 21 revisions

整体测试出的问题

实例1

步骤:pow算法,signer1, node1, node2节点连接,signer1挖矿,node1执行Mint、Send操作,node2执行Deposit操作
问题:Deposit能产生proof,但是报****** invalid private key; 同时,node2执行Mint操作提示无法验证proof
注:由于Deposit成功产生proof,由于交易签名返回空,导致该笔交易失败;但是存储的value_new、cmtA和cmtA_old却更新,
而账户零知识余额的cmtA却没有更新,所以进行Mint操作时,能产生proof,
但是验证proof时,由于所需的cmtA_old从账户余额中读取,所以无法验证proof

已解决:换个账户,问题不再出现,原因未知

张桐

问题1

步骤:node1成功进行Mint交易,Send交易(向node2发送),以及Update交易,然后node2执行Deposit交易。
问题:node2 Deposit操作执行后,在Deposit交易生成之前,打印了两次Update交易验证成功的结果(之前Update已经成功生成并验证,生成了区块)

已解决:换个账户,问题不再出现,原因未知

问题2

步骤:node1成功进行Mint交易,Send交易(向node2发送),然后node2执行Deposit交易。
问题:node2 Deposit操作执行失败,报错:invalid private key

已解决:生成的随机化私钥可能会越界,对 skB‘=skB+H() 中的hash值和私钥的最高位设为0,保证二者相加依然是256位的,问题解决。

问题3

步骤:node1成功进行Mint交易,Send交易(向node2发送),然后node2对该Send交易执行Update。
问题:node2 Update交易成功(本不应该成功),并且接下来对该交易的多次Deposit都验证成功。

已解决:生成update交易中的proof所用的cmtS和sn_A参数本应该是txSend交易中所公布的,并非是用户自身保存的数值计算得到的;Deposit交易中公布的随机化公钥pk'_B并未写入到数据库

问题4

步骤:node1成功进行Mint交易,Send交易(向node2发送),然后node2也成功执行Mint,Send交易(向node3发送),node2执行Update交易(b->c)。
问题:node2 Update交易生成失败,报错:invalid CMTRoot

已解决:cmtS的merkle root应该使用libsnark模块提供的函数

问题5

步骤:node1成功进行Mint交易,Send交易(向node2发送),然后node2执行相同Deposit交易(a->b)两次。
问题:node2 对同一个Send交易执行的多次Deposit交易都可以成功。

已解决:Deposit交易中公布的随机化公钥pk'_B并未写入到数据库

问题6

步骤:node1成功进行Mint交易,Send交易(向node2发送),然后node1节点退出重进重新连接,进行Update操作。
问题:Update操作失败,运行时错误。

已解决:全局标识符读写文件解码错误

刘卫壮

问题1:开四个节点,A(Mint)给B send,A给C send,此时send失败。
然后B(Mint)给C send,C(Mint)给D send后,此时,B,C都可以执行update操作,而A执行update操作后失败,打印send sendtx firstly

已解决:exit退出,删除账户信息,重新创建账户,重新执行以上操作,成功。


问题2:四个节点,ABCD,BCD与A互连,A专门用来挖矿,不做任何交易。
BCD依次执行Mint操作,过程中A挖矿,都成功。
B给C Send操作,成功。C给D Send操作,成功。D给B Send操作,成功。过程中A挖矿。
B执行Update操作,显示:Verifying update proof successfully!!!
但是接着打印:
fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x80 addr=0x0 pc=0x7ffa88dee98d]
后,弹出console控制台

已解决:重新退出,然后测试,不出现上述问题,原因未知。


问题3:四个节点,A为挖矿节点,BCD交易
BCD Mint操作,成功;B给C 执行send交易,D给B 执行send交易,C给A执行send交易。
B执行Deposit操作,正常是失败的,执行失败。接着B执行Update,正常是可以执行的,但是执行Update 弹出console。

已解决:注释了deposit内genRoot() 只使用update的genRoot (可能原因)


杨崇彬

魏中尧

吉晓辉


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