Skip to content

liuweizhuang

Eason Ryan edited this page Dec 20, 2018 · 10 revisions
测试1(在Update之前,同一个节点不能执行两次Send操作):
ABCD四个节点互连:
Mint:A(Mint),B(Mint),C(Mint),D(Mint)
Send:然后A给B 发送Send交易,B miner.start(),proof验证成功。A给C发送Send交易,proof验证失败,并打印:cannot Send SendTx after send。B给C 发送Send交易,C miner.start(),proof验证成功。C给D 发送Send交易,D miner.start(),proof验证成功。
Update:ABC进行Update操作,并用另外一个节点挖矿,proof验证成功。
Deposit:BCD进行Deposit操作,并用另外一个节点挖矿,proof验证成功。
Redeem:ABC进行Redeem操作,并用另外一个节点挖矿,proof验证成功。

测试2(同一个节点不能执行两次Update操作):
ABCD四个节点互连:
Mint:A(Mint),B(Mint),C(Mint),D(Mint)
Send:然后A给B 发送Send交易,B miner.start(),proof验证成功。B给C 发送Send交易,C miner.start(),proof验证成功。C给D 发送Send交易,D miner.start(),proof验证成功。
Update:ABC进行Update操作,并用另外一个节点挖矿,顺序为A,proof验证成功,A再进行Update,打印:updateTx must after sendTx, but last tx is not a sendTx。B进行Update操作,proof验证成功,C进行Update操作,proof验证成功。
Deposit:BCD执行Deposit操作,proof验证成功。
Redeem:ABC执行Redeem操作,proof验证成功。

测试3(常规正确步骤测试,成功!):
ABCD四个节点,A作为矿工不参与交易,只作为挖矿者。BCD三个节点与A建立连接,并产生交易。
Mint:BCD执行Mint操作,proof验证成功。
Send:B给C 发送Send交易,proof验证成功。C给D 发送Send交易,proof验证成功。D给B 发送Send交易,proof验证成功。
Update:BCD执行Update交易,proof验证成功。
Deposit:CDB执行Deposit交易,proof验证成功。
Redeem:BCD执行Redeem操作,proof验证成功。

测试4(Update时传入错误的txHash参数):
AB两个节点,互连。
Mint:AB执行Mint操作,proof验证成功。
Send:A给B发送Send交易,proof验证成功。产生txHash(A),B给A发送Send交易,proof验证成功,产生txHash(B)。
Update:B执行Update操作,传入txHash(A),打印:Error: can't generate proof。

测试5(Send操作完只能执行Update操作):
ABCD四个节点,BCD都和A连接。A只作为挖矿节点,BCD执行各种交易。
Mint:BCD执行Mint操作,proof验证成功。
Send:B给C执行Send操作,C给D执行Send操作,D给B执行Send操作,proof都验证成功。
Deposit:此时C执行Deposit操作,正常不成功,因为C还没有Update,结果不成功。
Update:C执行Update操作,proof验证成功。D执行Update操作,proof验证成功。

测试6(Deposit执行前必须执行Update):
ABCD四个节点,BCD都和A连接。A只作为挖矿节点,BCD执行各种交易。
Mint:BCD执行Mint操作,proof验证成功。
Send:B给C执行Send操作,D给C执行Send操作,C给B执行Send操作,proof都验证成功。
Update:C执行Update操作。
Deposit:此时C执行两次Deposit操作,proof验证成功。
Update:B执行Update操作,proof验证成功。
Deposit:B执行Deposit操作,proof验证成功。
Redeem:BC执行Redeem操作,proof验证成功。D执行Redeem操作,验证proof失败,打印:cannot send Redeem after sendTx。因为D没有执行Update。
Update:D执行Update操作,proof验证成功。
Redeem:D执行Update操作,proof验证成功。

测试7(不同ip下账户间的执行交易):
在一台电脑创建一个节点A,另一台电脑创建BC,C只用来挖矿,AB用来交易,ABC建立连接。
Mint:AB执行Mint操作,proof验证成功。
Send:A给B执行Send操作,B给A执行Send操作,proof验证成功。
Update:AB执行Update操作,proof验证成功。
Deposit:AB执行Deposit操作,proof验证成功。
Redeem:AB执行Redeem操作,proof验证成功。

测试8(五台电脑不同ip终端建立连接,执行正常操作过程):
五台电脑,六个节点,其中一台两个节点,一个节点生成的账户专门用来挖矿,另一个一个和另外四个执行交易。交易账户分别为:ABCDE
挖矿节点账户始终处于挖矿状态,B先给ACDE发送普通账户余额,确保初始账户都有明文余额。
Mint:ABCDE执行Mint操作,proof都验证成功。
Send:A给B send,B给C send,C给D send,D给E Send,E给A send,proof都验证成功,并记录下send txHash。
Update:ABCDE执行Update操作,proof验证成功。
Deposit:ABCDE执行Deposit操作,proof验证成功。
Redeem:ABCDE执行Redeem操作,proof验证成功。

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