forked from bcoin-org/bcoin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwalletdb.js
120 lines (99 loc) · 2.62 KB
/
walletdb.js
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
'use strict';
var bench = require('./bench');
var co = require('../lib/utils/co');
var crypto = require('../lib/crypto/crypto');
var WalletDB = require('../lib/wallet/walletdb');
var MTX = require('../lib/primitives/mtx');
var Outpoint = require('../lib/primitives/outpoint');
var walletdb, runBench;
function dummy() {
var hash = crypto.randomBytes(32).toString('hex');
return new Outpoint(hash, 0);
}
walletdb = new WalletDB({
name: 'wallet-test',
db: 'memory',
resolution: false,
verify: false
});
runBench = co(function* runBench() {
var i, j, wallet, addrs, jobs, end;
var result, tx, mtx, options;
// Open and Create
yield walletdb.open();
wallet = yield walletdb.create();
addrs = [];
// Accounts
jobs = [];
for (i = 0; i < 1000; i++)
jobs.push(wallet.createAccount({}));
end = bench('accounts');
result = yield Promise.all(jobs);
end(1000);
for (i = 0; i < result.length; i++)
addrs.push(result[i].receive.getAddress());
// Keys
jobs = [];
for (i = 0; i < 1000; i++) {
for (j = 0; j < 10; j++)
jobs.push(wallet.createReceive(i));
}
end = bench('keys');
result = yield Promise.all(jobs);
end(1000 * 10);
for (i = 0; i < result.length; i++)
addrs.push(result[i].getAddress());
// TX deposit
jobs = [];
for (i = 0; i < 10000; i++) {
mtx = new MTX();
mtx.addOutpoint(dummy());
mtx.addOutput(addrs[(i + 0) % addrs.length], 50460);
mtx.addOutput(addrs[(i + 1) % addrs.length], 50460);
mtx.addOutput(addrs[(i + 2) % addrs.length], 50460);
mtx.addOutput(addrs[(i + 3) % addrs.length], 50460);
tx = mtx.toTX();
jobs.push(walletdb.addTX(tx));
}
end = bench('deposit');
result = yield Promise.all(jobs);
end(10000);
// TX redemption
jobs = [];
for (i = 0; i < 10000; i++) {
mtx = new MTX();
mtx.addTX(tx, 0);
mtx.addTX(tx, 1);
mtx.addTX(tx, 2);
mtx.addTX(tx, 3);
mtx.addOutput(addrs[(i + 0) % addrs.length], 50460);
mtx.addOutput(addrs[(i + 1) % addrs.length], 50460);
mtx.addOutput(addrs[(i + 2) % addrs.length], 50460);
mtx.addOutput(addrs[(i + 3) % addrs.length], 50460);
tx = mtx.toTX();
jobs.push(walletdb.addTX(tx));
}
end = bench('redemption');
result = yield Promise.all(jobs);
end(10000);
// Balance
end = bench('balance');
result = yield wallet.getBalance();
end(1);
// Coins
end = bench('coins');
result = yield wallet.getCoins();
end(1);
// Create
end = bench('create');
options = {
rate: 10000,
outputs: [{
value: 50460,
address: addrs[0]
}]
};
yield wallet.createTX(options);
end(1);
});
runBench().then(process.exit);