-
Notifications
You must be signed in to change notification settings - Fork 14
整体测试出的问题
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
已解决:换个账户,问题不再出现,原因未知
步骤:node1成功进行Mint交易,Send交易(向node2发送),以及Update交易,然后node2执行Deposit交易。
问题:node2 Deposit操作执行后,在Deposit交易生成之前,打印了两次Update交易验证成功的结果(之前Update已经成功生成并验证,生成了区块)
已解决:换个账户,问题不再出现,原因未知
步骤:node1成功进行Mint交易,Send交易(向node2发送),然后node2执行Deposit交易。
问题:node2 Deposit操作执行失败,报错:invalid private key
已解决:生成的随机化私钥可能会越界,对 skB‘=skB+H() 中的hash值和私钥的最高位设为0,保证二者相加依然是256位的,问题解决。
步骤:node1成功进行Mint交易,Send交易(向node2发送),然后node2对该Send交易执行Update。
问题:node2 Update交易成功(本不应该成功),并且接下来对该交易的多次Deposit都验证成功。
已解决:生成update交易中的proof所用的cmtS和sn_A参数本应该是txSend交易中所公布的,并非是用户自身保存的数值计算得到的;Deposit交易中公布的随机化公钥pk'_B并未写入到数据库
步骤:node1成功进行Mint交易,Send交易(向node2发送),然后node2也成功执行Mint,Send交易(向node3发送),node2执行Update交易(b->c)。
问题:node2 Update交易生成失败,报错:invalid CMTRoot
已解决:cmtS的merkle root应该使用libsnark模块提供的函数
步骤:node1成功进行Mint交易,Send交易(向node2发送),然后node2执行相同Deposit交易(a->b)两次。
问题:node2 对同一个Send交易执行的多次Deposit交易都可以成功。
已解决:Deposit交易中公布的随机化公钥pk'_B并未写入到数据库
步骤: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 (可能原因)