-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest.js
More file actions
497 lines (433 loc) · 28 KB
/
Copy pathtest.js
File metadata and controls
497 lines (433 loc) · 28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
const Web3 = require('web3');
const testCJ = require('./test.json');
// const contractJson = require('./setget.json');
// const contractJson = require('./ecrecover.json');
// const contractJson = require('./SMecrecover.json');
// const contractJson = require('./onlySMecrecover.json');
// const contractJson = require('./bsm.json');
// const contractJson = require('./f_add_bytes32.json');
// const contractJson = require('./f_mul.json');
// const contractJson = require('./f_add_strimgM.json');
// const contractJson = require('./float.json');
// const contractJson = require('./time.json');
const plContractJson = require('./TreeBox/ProjectList.json');
const abfContractJson = require('./TreeBox/AssetBookerFactory.json');
const abContractJson = require('./TreeBox/AssetBooker.json');
const ccContractJson = require('./ContractsCalls/main.json');
const aContractJson = require('./ContractsCalls/a.json');
const bContractJson = require('./ContractsCalls/b.json');
const sid = require('./TreeBox/StandardIDType.json');
const sidv1 = require('./TreeBox/StandardIDType_V1.json');
const sidv2 = require('./TreeBox/StandardIDType_V2.json');
const sidv3 = require('./TreeBox/StandardIDType_V3.json');
const tb = require('./TreeBox/TreeBox.json');
const uintFuck = require('./uintFuck.json');
const addr0 = '0x0000000000000000000000000000000000000000';
const addr1 = '0x0000000000000000000000000000000000000001';
const addr2 = '0x0000000000000000000000000000000000000002';
// const web3 = new Web3('http://odyscluster-validator1.test.shie.com.cn/');
const web3 = new Web3('http://127.0.0.1:8545');
const _from = '0x7eff122b94897ea5b0e2a9abf47b86337fafebdc'; // secp256k1
const _pass = "1234";
// const _from = '0x2f689c3776c510a7ef56f441b4b5ed31a5da2275'; // sm2p256v1
// const _pass = "12345";
// const _from = '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d';
// const _pass = '';
// const _from = '0x198C1F50a75ffaa046A7180E12e55fcf005BDa81';
// const _pass = '';
// const _from = '0xbf1dfFD25E1A101898791c87AeE683A3B65555D7';
// const _pass = '';
// const _from = addr0;
// const _pass = '';
// const _from = '0x148D910aB6e59998553F3298f0c442e1d7632118';
// const _pass = '';
const _to = '';
const _gas = 999999999999999;
const _gasPrice = 20000000000;
async function unlock() {
await web3.eth.personal.unlockAccount(_from, _pass, 999999999)
}
async function deploy(contractJson, ...params) {
var contractInst = new web3.eth.Contract(contractJson.abi);
var address = await contractInst.deploy({
data: '0x' + contractJson.bin,
arguments: !!params?params:undefined
})
.send({
from: _from,
gas: _gas,
gasPrice: _gasPrice
})
.then(newContractInst => {
return newContractInst.options.address;
})
.catch(e => {
console.error(e.toString('utf8'));
});
console.log("deploy address: ", address);
return address;
}
async function call(contractAddr, contractJson, methodName, ...params) {
var contractInst = new web3.eth.Contract(contractJson.abi, contractAddr);
var contractInstMethod = !!params?contractInst.methods[methodName](...params):contractInst.methods[methodName]();
var result = await contractInstMethod.call({
from: _from,
gas: _gas,
gasPrice: _gasPrice
})
.then((result) => {
return result;
})
.catch(e => {
console.error(e.toString('utf8'));
});
console.log("call result: ", result);
return result;
}
async function send(contractAddr, contractJson, methodName, ...params) {
var contractInst = new web3.eth.Contract(contractJson.abi, contractAddr);
var contractInstMethod = !!params?contractInst.methods[methodName](...params):contractInst.methods[methodName]();
console.log('sintan1071 dev --- 检查abiEncode: ', contractInstMethod.encodeABI())
var receipt = await contractInstMethod.send({
from: _from,
gas: _gas,
gasPrice: _gasPrice
})
.then((receipt) => {
return receipt;
})
.catch(e => {
console.error(e);
});
console.log("send receipt: ", receipt);
return receipt;
}
unlock().then(()=> {
/******************************************↓↓↓测试区域↓↓↓*****************************************************/
// 这是setget测试
// deploy();
// send('0x9Ac6dBfCFbeC90C44c0634b4E5dcE20b5C62D57f', 'set', '666');
// call('0x9Ac6dBfCFbeC90C44c0634b4E5dcE20b5C62D57f', 'get');
// 这是ecrecover测试
// deploy();
// call('0xB6b29Ef90120BEC597939e0Eda6b8a9164F75deb', 'recoverSignerTest', web3.utils.keccak256("\x19Ethereum Signed Message:\n"+web3.utils.hexToBytes('0x1147174232333666114717423233366611471742323336661147174232333666').length+web3.utils.hexToUtf8('0x1147174232333666114717423233366611471742323336661147174232333666')), '0x8b9012ff364438c8fc750608e0968ed47f844f3a378aab089e758d59149e33b861208eba2d374a3df544c376b8131e675c98f2d4237e2cba50a7c767a6892d131b'); // secp256k1
// call('0xB6b29Ef90120BEC597939e0Eda6b8a9164F75deb', 'keccak256Test', '0x1');
// call('0x4782545970DEcA2AdaBF0680d871BE6B7a228E02', 'keccak256Test', '0x1'); // 测试国密sm3下的keccak256算法
// console.log('sintan1071 dev --- web3 utils sha3', web3.utils.sha3('0x1'))
// console.log('sintan1071 dev --- web3 utils keccak256', web3.utils.keccak256('0x1'))
// web3.eth.personal.sign('0x1147174232333666114717423233366611471742323336661147174232333666', _from, _pass).then(sig=>{console.log('sintan1071 dev --- web3 sign: ', sig)})
// web3.eth.personal.ecRecover('0x1147174232333666114717423233366611471742323336661147174232333666', '0x8b9012ff364438c8fc750608e0968ed47f844f3a378aab089e758d59149e33b861208eba2d374a3df544c376b8131e675c98f2d4237e2cba50a7c767a6892d131b').then(addr=>{console.log('sintan1071 dev --- web3 ecrecover: ', addr)}) // secp256k1
// web3.eth.personal.ecRecover('0x1147174232333666114717423233366611471742323336661147174232333666', '0x960f20a9b6c98a9dee9092cffe942b6cb917dcb6707b3109603f247c5cf8716218ee59bc97e8029f321a5f3210fd1993b4ba9c22e6d706eb105e212c476505441bee4d1aa9d7279b5bf86c9ce829360bf9f13ed4140f7a3969f382e4ed339e9f76').then(addr=>{console.log('sintan1071 dev --- web3 ecrecover: ', addr)}) // sm2p256v1
// 使用明文测试ecrecover
// web3.eth.personal.sign('你好 sintan1071 !', _from, _pass).then(sig=>{console.log('sintan1071 dev --- web3 sign: ', sig)})
// call('0xB6b29Ef90120BEC597939e0Eda6b8a9164F75deb', 'recoverSignerTest', web3.utils.keccak256("\x19Ethereum Signed Message:\n"+web3.utils.hexToBytes(web3.utils.utf8ToHex('你好 sintan1071 !')).length+'你好 sintan1071 !'), '0x607659d3f8b2ec9ee6e763fef0ecbb5f44bf9ebdfccfc7ea59538ee383c91cbc155652b27eb9032433d2d4b9ab40bbabd056b77624654871ec57d06fb1327cf81c'); // secp256k1
// 这是SMecrecover测试
// deploy();
// call('0x5020fbc2D1B1f6f843676060dEe645e81dA72C48', 'View_splitSignature_SM', '0x960f20a9b6c98a9dee9092cffe942b6cb917dcb6707b3109603f247c5cf8716218ee59bc97e8029f321a5f3210fd1993b4ba9c22e6d706eb105e212c476505441bee4d1aa9d7279b5bf86c9ce829360bf9f13ed4140f7a3969f382e4ed339e9f76'); // sm2p256v1
// call('0x1271c8f6a4Ec234Efb387AEE454e2509A65A7Dd0', 'recoverSignerTest_SM',
// web3.utils.keccak256("\x19Ethereum Signed Message:\n"+web3.utils.hexToBytes('0x1147174232333666114717423233366611471742323336661147174232333666').length+web3.utils.hexToUtf8('0x1147174232333666114717423233366611471742323336661147174232333666')),
// '0x960f20a9b6c98a9dee9092cffe942b6cb917dcb6707b3109603f247c5cf8716218ee59bc97e8029f321a5f3210fd1993b4ba9c22e6d706eb105e212c476505441bee4d1aa9d7279b5bf86c9ce829360bf9f13ed4140f7a3969f382e4ed339e9f76'); // sm2p256v1
// 这是OnlySMecrecover测试
// deploy();
// let r = '0x' + '960f20a9b6c98a9dee9092cffe942b6cb917dcb6707b3109603f247c5cf8716218ee59bc97e8029f321a5f3210fd1993b4ba9c22e6d706eb105e212c476505441bee4d1aa9d7279b5bf86c9ce829360bf9f13ed4140f7a3969f382e4ed339e9f76'.substr(0, 64)
// let s = '0x' + '960f20a9b6c98a9dee9092cffe942b6cb917dcb6707b3109603f247c5cf8716218ee59bc97e8029f321a5f3210fd1993b4ba9c22e6d706eb105e212c476505441bee4d1aa9d7279b5bf86c9ce829360bf9f13ed4140f7a3969f382e4ed339e9f76'.substr(64, 64)
// let v = '0x' + '960f20a9b6c98a9dee9092cffe942b6cb917dcb6707b3109603f247c5cf8716218ee59bc97e8029f321a5f3210fd1993b4ba9c22e6d706eb105e212c476505441bee4d1aa9d7279b5bf86c9ce829360bf9f13ed4140f7a3969f382e4ed339e9f76'.substr(128, 66)
// call('0xb3B10FD5E0222987eD309901F65974251B1016C3', 'Test', v, r, s, web3.utils.keccak256("\x19Ethereum Signed Message:\n"+web3.utils.hexToBytes('0x1147174232333666114717423233366611471742323336661147174232333666').length+web3.utils.hexToUtf8('0x1147174232333666114717423233366611471742323336661147174232333666'))); // sm2p256v1
/*secp256k1*/
// call('0xB6b29Ef90120BEC597939e0Eda6b8a9164F75deb', 'Test',
// '0x8b9012ff364438c8fc750608e0968ed47f844f3a378aab089e758d59149e33b861208eba2d374a3df544c376b8131e675c98f2d4237e2cba50a7c767a6892d131b',
// web3.utils.keccak256("\x19Ethereum Signed Message:\n"+web3.utils.hexToBytes('0x1147174232333666114717423233366611471742323336661147174232333666').length+web3.utils.hexToUtf8('0x1147174232333666114717423233366611471742323336661147174232333666'))); // sm2p256v1
/*sm2p256v1*/
// call('0x4782545970DEcA2AdaBF0680d871BE6B7a228E02', 'Test',
// '0x960f20a9b6c98a9dee9092cffe942b6cb917dcb6707b3109603f247c5cf8716218ee59bc97e8029f321a5f3210fd1993b4ba9c22e6d706eb105e212c476505441bee4d1aa9d7279b5bf86c9ce829360bf9f13ed4140f7a3969f382e4ed339e9f76',
// web3.utils.keccak256("\x19Ethereum Signed Message:\n"+web3.utils.hexToBytes('0x1147174232333666114717423233366611471742323336661147174232333666').length+web3.utils.hexToUtf8('0x1147174232333666114717423233366611471742323336661147174232333666'))); // sm2p256v1
// 性能测试
// Benchmark()
// 测试bsm合约 涨:call => 1, 跌:put => 2
// deploy()
// call('0x75bcEFB2D6E4e5F864eF1220e7679612C5E9D9aC', 'bs', '2020-05-22', '2020-05-22', '2020-07-21', '1000.00', '1000.00', '0.04000', '0.30000', 1)
// call('0x75bcEFB2D6E4e5F864eF1220e7679612C5E9D9aC', 'bs', '2020-05-22', '2020-05-22', '2020-06-21', '1.00', '1.00', '0.02000', '0.20000', 2)
// call('0x75bcEFB2D6E4e5F864eF1220e7679612C5E9D9aC', 'bs', '2020-05-22', '2020-05-22', '2020-06-21', '1.00', '1.00', '0.02000', '0.20000', 1)
// call('0x75bcEFB2D6E4e5F864eF1220e7679612C5E9D9aC', 'bs', '2020-05-22', '2020-05-22', '2020-07-21', '1.00', '1.00', '0.02000', '0.20000', 1)
// call('0xBEd272E0eee0F8DA9397A71237e5535F24FB4F87', 'Test', '123.45', '6.789') // 返回bytes32
// call('0xA6751036a19Cb5d3D1F91b9acfD2cCC2F003466F', 'Test', '123.45', '6.789') // 返回string memory
// call('0x2cE224CaD729c63C5cDF9CE8F2E8B5B8f81eC7B4', 'Test', '123.45', '6.789', '1.23456') // 返回bytes32 多参数计算
// console.log('res --- ', web3.utils.hexToAscii('0x312e30303030303030303030303030303032452b363400000000000000000000'))
// console.log('1.0000000000000002E+64'.length)
// 测试float预编译合约
// deploy()
// call('0xdf96F6A967B31B8755631C459e6c5393Af4068e8', 'Test', '99999999999999999999999999999999', '99999999999999999999999999999999') // 国密乘法
// call('0x53B5EeA006A9BAF9741094FB8C31B29A3fC6A865', 'Test', '99999999999999999999999999999999', '99999999999999999999999999999999') // 国密加法
// call('0x95F8e668E6a6067F5CB8B873AC43CC95Dbe4486f', 'Test1', '123.45', '6.789') // false
// call('0x95F8e668E6a6067F5CB8B873AC43CC95Dbe4486f', 'Test2', '123.45', '6.789') // true
// call('0x95F8e668E6a6067F5CB8B873AC43CC95Dbe4486f', 'Test2', '12.345', '67.89') // false
// call('0x95F8e668E6a6067F5CB8B873AC43CC95Dbe4486f', 'Test3', '123.45', '6.789') // false
// call('0x95F8e668E6a6067F5CB8B873AC43CC95Dbe4486f', 'Test3', '12.345', '67.89') // true
// 测试time预编译合约
// deploy()
// call('0x2479fE5Dc873a07F42caCF214802f704d30C3259', 'Test1', '2020-05-01', '2020-05-02') // true
// call('0x2479fE5Dc873a07F42caCF214802f704d30C3259', 'Test2', '2020-05-01', '2020-05-02') // false
// call('0x2479fE5Dc873a07F42caCF214802f704d30C3259', 'Test3', '2020-05-03', '2020-05-01') // 1
// console.log('res --- ', web3.utils.hexToAscii('0x3200000000000000000000000000000000000000000000000000000000000000'))
// 测试大型oz项目的TreeBox
// TreeBoxUnitTest()
// TreeBoxTest()
// 测试合约之间互相调用的原子性
// ContractsCallsTest()
// 测试通过自己写的solintan的以太坊合约管理系统的oz的合约升级
// UpgradeTest()
// 测试require的返回报错信息
// RequireErrorTest()
// 测试uint溢出
// deploy(uintFuck);
call('0x4B8e85812BB2F8c88830406F42a63D5897d72765',uintFuck,'testFunc')
/******************************************↑↑↑测试区域↑↑↑*****************************************************/
})
/*******************************************
* 测试方法
* *****************************************
*/
async function Benchmark() {
let loop = 10
/*secp256k1*/ //19s260ms 27ms
let startTime = new Date();
for (let i = 0; i < loop; i++) {
await web3.eth.personal.sign('你好 sintan1071 !' + i, _from, _pass).then(sig=>{console.log('/*secp256k1*/ sign: ', sig)})
// await web3.eth.personal.ecRecover('0x1147174232333666114717423233366611471742323336661147174232333666', '0x8b9012ff364438c8fc750608e0968ed47f844f3a378aab089e758d59149e33b861208eba2d374a3df544c376b8131e675c98f2d4237e2cba50a7c767a6892d131b').then(addr=>{console.log('/*secp256k1*/ ecrecover: ', addr)}) // secp256k1
}
let stopTime = new Date();
console.log('/*secp256k1*/签名'+ loop +'次时间: ', formatSeconds(stopTime - startTime))
/*sm2p256v1*/ //1s836ms 17ms
// let startTime = new Date();
// for (let i = 0; i < loop; i++) {
// // await web3.eth.personal.sign('你好 sintan1071 !' + i, _from, _pass).then(sig=>{console.log('/*sm2p256v1*/ sign: ', sig)})
// await web3.eth.personal.ecRecover('0x1147174232333666114717423233366611471742323336661147174232333666', '0x960f20a9b6c98a9dee9092cffe942b6cb917dcb6707b3109603f247c5cf8716218ee59bc97e8029f321a5f3210fd1993b4ba9c22e6d706eb105e212c476505441bee4d1aa9d7279b5bf86c9ce829360bf9f13ed4140f7a3969f382e4ed339e9f76').then(addr=>{console.log('/*sm2p256v1*/ ecrecover: ', addr)}) // sm2p256v1
// }
// let stopTime = new Date();
// console.log('/*sm2p256v1*/'+ loop +'次时间: ', formatSeconds(stopTime - startTime))
}
async function TreeBoxTest() {
// // 先部署projectList
// let plAddr = await deploy(plContractJson);
// console.log('pl addr --- ', plAddr);
// await send(plAddr, plContractJson, 'initialize');
// // 部署AssetBookerFactory
// let abfAddr = await deploy(abfContractJson);
// console.log('abf addr --- ', abfAddr);
// await send(abfAddr, abfContractJson, 'initialize', web3.utils.utf8ToHex('1'), plAddr);
// // 在projectList里面注册项目的工厂合约,即AssetBookerFactory
// // await send(plAddr, plContractJson, 'registProject', web3.utils.utf8ToHex('1'), 'AssetBookerFactory', abfAddr, JSON.stringify(abfContractJson));
// await send(plAddr, plContractJson, 'registProject', web3.utils.utf8ToHex('1'), 'AssetBookerFactory', abfAddr);
// // 调用生成AssetBooker
// let abRes = await send(abfAddr, abfContractJson, 'create', '0x148D910aB6e59998553F3298f0c442e1d7632118');
// let abAddr = abRes.events.ContractInstantiation.returnValues.instantiation;
// console.log('ab addr --- ', abAddr);
// //!!! 查看两个合约的owner都是谁
// let o1 = await call(abfAddr, abfContractJson, 'owner'); // 应该是调用的账户
// let o2 = await call(abAddr, abContractJson, 'owner'); // 应该是工厂合约
// console.log('owners --- ', o1, o2);
// //!!! 查看projectList合约的信息是否通过合约之间的调用成功更新
// let r1 = await call(plAddr, plContractJson, 'getProjectInterfaceByID', web3.utils.utf8ToHex('1'));
// let r2 = await call(plAddr, plContractJson, 'getProjectInfoByID', web3.utils.utf8ToHex('1'));
// console.log('results --- ', r1, r2);
// 测试通过工厂合约升级项目后是否可以获取到事件
// console.log('sintan1071 dev --- 看下hash', web3.utils.keccak256('666'));
// await send('0xaf3ede071fb0ecd9c747e33425c3a7c3eb445c99', abfContractJson,
// 'updateImpls',
// new Date().getTime(),
// addr1,
// '0x75e83f0616022fe7d03f920eb516b3142a0c29fe',
// web3.utils.keccak256('666').toLowerCase()
// );
// 测试可升级的通过代理合约调用其他合约的msgSender是代理合约还是实例合约
console.log('sintan1071 dev --- funcSig: ', web3.utils.keccak256('initialize(uint,address,address,address)'));
console.log('sintan1071 dev --- funcSig: ', web3.utils.keccak256('initialize(uint256,address,address,address)'));
// await send('0xd04f7E43A3772326013e66543df90279343f660a', abContractJson,
// 'initialize',
// addr1,
// '0xa1f2641b8248a05dee3b3a27a3768b30d265465b',
// addr0
// );
await send('0xd04f7E43A3772326013e66543df90279343f660a', tb,
'initialize',
23,
addr1,
addr2,
addr0
);
// await send('0x59f7636fa67e07fb347f6b6073f55f3822b82145', sid,
// 'initialize'
// );
/**这下面是一整套**/
// await send('0x41611df22e0072d1e23662f6ae1bd6507b10213e', abContractJson,
// 'addManager',
// [addr1]
// );
// await call('0x41611df22e0072d1e23662f6ae1bd6507b10213e', abContractJson,
// 'owner' // 这个应该是工厂
// );
// // 验证project的值
// await call('0x41611df22e0072d1e23662f6ae1bd6507b10213e', abContractJson,
// 'userActions',
// 0
// );
// // 验证工厂的值
// await call('0xf8d38d754bf39e5997856c1ed89fa1b84ebab31c', abfContractJson,
// 'sintan1071devTESTrealProjectAddr'
// );
// // 验证pList的值
// await call('0x278d35749b2a4809b3dad029ca1d07c240583d2b', plContractJson,
// 'sintan1071devTESTrealFactoryAddr'
// );
// await call('0x278d35749b2a4809b3dad029ca1d07c240583d2b', plContractJson,
// 'getProjectInfoByID',
// 1
// );
/**这上面是一整套**/
}
async function TreeBoxUnitTest() {
// 单独测试treebox
const tbAddr = '0x85f14C7B46CaC95d367d096CD17D3B4fFB7a51bF';
// 测试老中医说的call随便不用签名不用解锁
// await call(tbAddr, tb, 'getUserInfo', '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d');
// 管理员测试sintan1071 dev 获取tree
// await call(tbAddr, tb, 'getTree');
// await call(tbAddr, tb, 'getInserterFromItem', 3, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', '0xbf1dfFD25E1A101898791c87AeE683A3B65555D7');
// await call(tbAddr, tb, 'getInserterFromItem', 0, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', '0x198C1F50a75ffaa046A7180E12e55fcf005BDa81');
// await call(tbAddr, tb, 'getInserterFromItem', 2, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', '0x198C1F50a75ffaa046A7180E12e55fcf005BDa81');
// await call(tbAddr, tb, 'getInserterFromItem', 1, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', '0xbf1dfFD25E1A101898791c87AeE683A3B65555D7');
// await call(tbAddr, tb, 'getInserterFromItem', 4, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', '0xbf1dfFD25E1A101898791c87AeE683A3B65555D7');
// await call(tbAddr, tb, 'getInserterFromItem', 4, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', '0x198C1F50a75ffaa046A7180E12e55fcf005BDa81');
// 测试addItemToBox
// await send(tbAddr, tb, 'addItemToBox', 'http://你猜猜我是谁', 'key6666', '0x148D910aB6e59998553F3298f0c442e1d7632118', ['0xbf1dfFD25E1A101898791c87AeE683A3B65555D7']);
//0.缺少参数测试
// await send(tbAddr, tb, 'addItemToBox', addr0, '', '', []);
// await send(tbAddr, tb, 'addItemToBox', addr0, '', 'http://222', []);
//1.onlyIfUserActive,更换_from的地址
// await send(tbAddr, tb, 'addItemToBox', addr0, '', 'http://111111', []);
//2.onlyIfUserBoxIsNotFull
// await send(tbAddr, tb, 'addItemToBox', addr0, '', 'http://333', ['0xbf1dfFD25E1A101898791c87AeE683A3B65555D7', '0x198C1F50a75ffaa046A7180E12e55fcf005BDa81']);
// await send(tbAddr, tb, 'addItemToBox', addr0, '', 'http://3330', ['0xbf1dfFD25E1A101898791c87AeE683A3B65555D7']);
// await send(tbAddr, tb, 'addItemToBox', addr0, '', 'http://3331', ['0x198C1F50a75ffaa046A7180E12e55fcf005BDa81']);
// await send(tbAddr, tb, 'addItemToBox', addr0, '', 'http://[ERROR]onlyIfUserBoxIsNotFull', []);
//3.onlyIfUserBoxIsNotReleased
// await send(tbAddr, tb, 'pushBoxStatus', '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d');
// await send(tbAddr, tb, 'addItemToBox', addr0, '', 'http://[ERROR]onlyIfUserBoxIsNotReleased', []);
// 测试getItemsFromBox
//0.错误参数测试
// await call(tbAddr, tb, 'getItemsFromBox', '0x7eff122b94897ea5b0e2a9abf47b86337fafebdc'); // 不存在box
// await call(tbAddr, tb, 'getItemIdsFromBox', _from); // 正常情况
// await call(tbAddr, tb, 'getItemFromBoxById', 0, _from); // 错误情况
// await call(tbAddr, tb, 'getItemFromBoxById', 3, _from); // 正常情况
// await call(tbAddr, tb, 'getItemFromBoxById', 2, _from); // 正常情况
// await call(tbAddr, tb, 'getItemFromBoxById', 4, _from); // 正常情况
//1.用Receiver或者nexter获取
// await send(tbAddr, tb, 'pushUserStatus', '0x148D910aB6e59998553F3298f0c442e1d7632118');
// await send(tbAddr, tb, 'pushUserStatus', '0xbf1dfFD25E1A101898791c87AeE683A3B65555D7');
// await call(tbAddr, tb, 'getUserInfo', '0x198C1F50a75ffaa046A7180E12e55fcf005BDa81');
//1.1 先让owner pushBoxStatus,然后nexter就可以获取到值
// await send(tbAddr, tb, 'pushBoxStatus', '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d');
// 测试delItemsFromBox
// 还原box状态
// await send(tbAddr, tb, 'pushBoxStatus', '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d');
// await call(tbAddr, tb, 'getUserInfo', '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d');
// await call(tbAddr, tb, 'getUserInfo', '0x198C1F50a75ffaa046A7180E12e55fcf005BDa81');
// await call(tbAddr, tb, 'getUserInfo', '0xbf1dfFD25E1A101898791c87AeE683A3B65555D7');
//0.错误参数测试
// await send(tbAddr, tb, 'delItemFromBox', 3);
//1.正确参数测试
// let res = await send(tbAddr,tb, 'delItemFromBox', 3);
// console.log('sintan1071 dev --- 事件返回结果: ', res.events.SinTan1071DevTEST.returnValues)
// await call(tbAddr, tb, 'getItemFromBoxById', 2, _from); // 正常情况
// await call(tbAddr, tb, 'getItemFromBoxById', 4, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d')
// await send(tbAddr, tb, 'addNextersToItem', 2, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', [addr1, addr2]);
// await send(tbAddr, tb, 'addNextersToItem', 3, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', [addr1, addr2]);
// await call(tbAddr, tb, 'getNextersFromItem', 2, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d');
// await call(tbAddr, tb, 'getNextersFromItem', 3, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d');
// await call(tbAddr, tb, 'getNextersFromItem', 4, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d');
// await call(tbAddr, tb, 'getKeyFromItem', 2, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', '0xbf1dfFD25E1A101898791c87AeE683A3B65555D7');
// await call(tbAddr, tb, 'getKeyFromItem', 4, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', '0xbf1dfFD25E1A101898791c87AeE683A3B65555D7');
// await call(tbAddr, tb, 'getKeyFromItem', 5, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d');
// await call(tbAddr, tb, 'getKeyFromItem', 5, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', '0xbf1dfFD25E1A101898791c87AeE683A3B65555D7');
// await call(tbAddr, tb, 'getKeyFromItem', 5, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', '0x198C1F50a75ffaa046A7180E12e55fcf005BDa81');
// 测试release后receiver来增加receiver
// await send(tbAddr, tb, 'addNextersToItem', 5, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', ['0xbf1dfFD25E1A101898791c87AeE683A3B65555D7']);
// await call(tbAddr, tb, 'getNextersFromItem', 5, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d');
// await send(tbAddr, tb, 'delNextersFromItem', 5, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', ['0xbf1dfFD25E1A101898791c87AeE683A3B65555D7']);
// await send(tbAddr, tb, 'delNextersFromItem', 5, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d', ['0x198C1F50a75ffaa046A7180E12e55fcf005BDa81']);
// await call(tbAddr, tb, 'getPrevers'); // 测试不同用户获取自己的prever
await call(tbAddr, tb, 'getItemIdsFromBox', '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d'); // 正常情况
await call(tbAddr, tb, 'getItemIdsFromBox', '0x198C1F50a75ffaa046A7180E12e55fcf005BDa81'); // 正常情况
await call(tbAddr, tb, 'getItemFromBoxById', 2, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d'); // 正常情况
await call(tbAddr, tb, 'getItemFromBoxById', 4, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d'); // 正常情况
await call(tbAddr, tb, 'getItemFromBoxById', 5, '0x5bE6Bbe4428B6fE3d2F2c0f3984BC41Ad94f4E8d'); // 正常情况
await call(tbAddr, tb, 'getItemFromBoxById', 1, '0x198C1F50a75ffaa046A7180E12e55fcf005BDa81'); // 正常情况
}
async function ContractsCallsTest() {
let aAddr = await deploy(aContractJson);
let bAddr = await deploy(bContractJson);
// console.log('a b Addr --- ', aAddr, bAddr);
let ccAddr = await deploy(ccContractJson);
// console.log('cc Addr --- ', ccAddr);
// // 测试部署打断是否是原子性的
// await send(ccAddr, ccContractJson, 'deploy');
// await call(ccAddr, ccContractJson, 'Aaddr');
// 测试sendtx打断是否是原子性的
await send(ccAddr, ccContractJson, 'set', aAddr, '23333', bAddr, 666);
await call(aAddr, aContractJson, 'get');
await call(bAddr, bContractJson, 'get');
}
async function UpgradeTest() {
const addr = '0x9Fa3Bd12bF5E66cE0d5340ce78C44B25C545e9f3';
await call(addr, sid, 'getTEST');
// modifier test
// await send(addr, sid, 'setUserIdType', '急急急');
// await call(addr, sid, 'getUserIdType', '居民身份证');
// owner
// await call(addr, sid, 'owner');
// v0
// await send(addr, sid, 'setUserIdType', '居民身份证');
// await call(addr, sid, 'getUserIdType', '居民身份证');
// v1
// await send(addr, sidv1, 'setUserIdType', '护照');
// await call(addr, sidv1, 'getUserIdType', '居民身份证');
// await call(addr, sidv1, 'getUserIdType', '护照');
// await send(addr, sidv1, 'setTest1', 111);
// await call(addr, sidv1, 'v1');
// v2
// await send(addr, sidv2, 'setUserIdType', '企业税号');
// await call(addr, sidv2, 'getUserIdType', '居民身份证');
// await call(addr, sidv2, 'getUserIdType', '护照');
// await call(addr, sidv2, 'getUserIdType', '企业税号');
// await send(addr, sidv2, 'setTest2', 222);
// await call(addr, sidv2, 'v2');
// v3
// await send(addr, sidv3, 'setUserIdType', '机器码');
// await call(addr, sidv3, 'getUserIdType', '居民身份证');
// await call(addr, sidv3, 'getUserIdType', '护照');
// await call(addr, sidv3, 'getUserIdType', '企业税号');
// await call(addr, sidv3, 'getUserIdType', '机器码');
// await send(addr, sidv3, 'setTest3', TODO);
// await call(addr, sidv3, 'v3');
}
async function RequireErrorTest() {
// console.log('web3 version: ', web3.version);
let cAddr = await deploy(testCJ);
// let cAddr = '0x0053F453958D4a54Dc8d784Ff4D60F460525DE99';
// 0000000000000000000000000000000000000000000000000000000000000020
// 0000000000000000000000000000000000000000000000000000000000000003
// 3132330000000000000000000000000000000000000000000000000000000000
// console.log('funcSig: ', web3.utils.keccak256('setString(string)'));
// console.log('data bytes32: ', web3.utils.utf8ToHex('123'));
await send(cAddr, testCJ, 'setString', '123');
await call(cAddr, testCJ, 'getTxData');
}
/*******************************************
* 工具方法
*******************************************
*/
function formatSeconds (value) {
let sec = Math.floor(value / 1000)
let msec = value % 1000
return sec + 's' + msec + 'ms'
}