bench: clean up benchmarks.
This commit is contained in:
parent
1d6eb802e7
commit
5e3b05ff11
@ -1,36 +1,38 @@
|
||||
'use strict';
|
||||
|
||||
var chachapoly = require('../lib/crypto/chachapoly');
|
||||
var crypto = require('../lib/crypto/crypto');
|
||||
var bench = require('./bench');
|
||||
var i, chacha, iv, poly, key, data, end;
|
||||
|
||||
console.log('note: rate measured in kb/s');
|
||||
|
||||
var chacha = new chachapoly.ChaCha20();
|
||||
var iv = new Buffer('0102030405060708', 'hex');
|
||||
chacha = new chachapoly.ChaCha20();
|
||||
iv = new Buffer('0102030405060708', 'hex');
|
||||
chacha.init(iv, 0);
|
||||
var data = new Buffer(32);
|
||||
for (var i = 0; i < 32; i++)
|
||||
data = new Buffer(32);
|
||||
for (i = 0; i < 32; i++)
|
||||
data[i] = i;
|
||||
var end = bench('encrypt');
|
||||
for (var i = 0; i < 1000000; i++)
|
||||
end = bench('encrypt');
|
||||
for (i = 0; i < 1000000; i++)
|
||||
chacha.encrypt(data);
|
||||
end(i * 32 / 1024);
|
||||
|
||||
var poly = new chachapoly.Poly1305();
|
||||
var key = new Buffer('000102030405060708090a0b0c0d0e0f', 'hex');
|
||||
poly = new chachapoly.Poly1305();
|
||||
key = new Buffer('000102030405060708090a0b0c0d0e0f', 'hex');
|
||||
poly.init(key);
|
||||
|
||||
var data = new Buffer(32);
|
||||
for (var i = 0; i < 32; i++)
|
||||
data = new Buffer(32);
|
||||
for (i = 0; i < 32; i++)
|
||||
data[i] = i & 0xff;
|
||||
|
||||
var end = bench('update');
|
||||
for (var i = 0; i < 1000000; i++)
|
||||
end = bench('update');
|
||||
for (i = 0; i < 1000000; i++)
|
||||
poly.update(data);
|
||||
end(i * 32 / 1024);
|
||||
|
||||
var end = bench('finish');
|
||||
for (var i = 0; i < 1000000; i++) {
|
||||
end = bench('finish');
|
||||
for (i = 0; i < 1000000; i++) {
|
||||
poly.init(key);
|
||||
poly.update(data);
|
||||
poly.finish();
|
||||
@ -38,8 +40,7 @@ for (var i = 0; i < 1000000; i++) {
|
||||
end(i * 32 / 1024);
|
||||
|
||||
// For reference:
|
||||
var crypto = require('../lib/crypto/crypto');
|
||||
var end = bench('sha256');
|
||||
for (var i = 0; i < 1000000; i++)
|
||||
end = bench('sha256');
|
||||
for (i = 0; i < 1000000; i++)
|
||||
crypto.hash256(data);
|
||||
end(i * 32 / 1024);
|
||||
|
||||
@ -1,44 +1,38 @@
|
||||
'use strict';
|
||||
|
||||
var BN = require('bn.js');
|
||||
var constants = require('../lib/protocol/constants');
|
||||
var util = require('../lib/utils/util');
|
||||
var assert = require('assert');
|
||||
var scriptTypes = constants.scriptTypes;
|
||||
var bench = require('./bench');
|
||||
var fs = require('fs');
|
||||
var assert = require('assert');
|
||||
var util = require('../lib/utils/util');
|
||||
var Coins = require('../lib/blockchain/coins');
|
||||
var TX = require('../lib/primitives/tx');
|
||||
var bench = require('./bench');
|
||||
|
||||
var wtx = fs.readFileSync(__dirname + '/../test/data/wtx.hex', 'utf8');
|
||||
var i, j, coins, raw, end;
|
||||
|
||||
wtx = TX.fromRaw(wtx.trim(), 'hex');
|
||||
coins = Coins.fromTX(wtx);
|
||||
|
||||
var coins = Coins.fromTX(wtx);
|
||||
var raw;
|
||||
//raw = coins.toRaw();
|
||||
//console.log(Coins.fromRaw(raw));
|
||||
|
||||
var end = bench('serialize');
|
||||
for (var i = 0; i < 10000; i++)
|
||||
end = bench('serialize');
|
||||
for (i = 0; i < 10000; i++)
|
||||
raw = coins.toRaw();
|
||||
end(i);
|
||||
|
||||
var end = bench('parse');
|
||||
for (var i = 0; i < 10000; i++)
|
||||
end = bench('parse');
|
||||
for (i = 0; i < 10000; i++)
|
||||
Coins.fromRaw(raw);
|
||||
end(i);
|
||||
|
||||
var end = bench('parse-single');
|
||||
var hash = wtx.hash('hex');
|
||||
for (var i = 0; i < 10000; i++)
|
||||
end = bench('parse-single');
|
||||
hash = wtx.hash('hex');
|
||||
for (i = 0; i < 10000; i++)
|
||||
Coins.parseCoin(raw, hash, 5);
|
||||
end(i);
|
||||
|
||||
var coins = Coins.fromRaw(raw);
|
||||
var end = bench('get');
|
||||
var j;
|
||||
coins = Coins.fromRaw(raw);
|
||||
end = bench('get');
|
||||
|
||||
for (var i = 0; i < 10000; i++)
|
||||
for (var j = 0; j < coins.outputs.length; j++)
|
||||
for (i = 0; i < 10000; i++)
|
||||
for (j = 0; j < coins.outputs.length; j++)
|
||||
coins.get(j);
|
||||
end(i * coins.outputs.length);
|
||||
|
||||
@ -1,19 +1,17 @@
|
||||
'use strict';
|
||||
|
||||
var BN = require('bn.js');
|
||||
var bcoin = require('../').set('main');
|
||||
var constants = bcoin.constants;
|
||||
var util = bcoin.util;
|
||||
var assert = require('assert');
|
||||
var bench = require('./bench');
|
||||
var Mnemonic = bcoin.hd.Mnemonic;
|
||||
var HD = require('../lib/hd');
|
||||
var Mnemonic = require('../lib/hd/mnemonic');
|
||||
|
||||
var key = bcoin.hd.fromMnemonic();
|
||||
var key = HD.fromMnemonic();
|
||||
var phrase = key.mnemonic.getPhrase();
|
||||
var i, end;
|
||||
|
||||
assert.equal(Mnemonic.fromPhrase(phrase).getPhrase(), phrase);
|
||||
|
||||
var end = bench('fromPhrase');
|
||||
for (var i = 0; i < 10000; i++)
|
||||
end = bench('fromPhrase');
|
||||
for (i = 0; i < 10000; i++)
|
||||
Mnemonic.fromPhrase(phrase);
|
||||
end(i);
|
||||
|
||||
@ -1,17 +1,14 @@
|
||||
'use strict';
|
||||
|
||||
var BN = require('bn.js');
|
||||
var bcoin = require('../').set('main');
|
||||
var constants = bcoin.constants;
|
||||
var util = bcoin.util;
|
||||
var assert = require('assert');
|
||||
var scriptTypes = constants.scriptTypes;
|
||||
var opcodes = constants.opcodes;
|
||||
var bench = require('./bench');
|
||||
var fs = require('fs');
|
||||
var Script = bcoin.script;
|
||||
|
||||
bcoin.cache();
|
||||
var assert = require('assert');
|
||||
var constants = require('../lib/protocol/constants');
|
||||
var util = require('../lib/utils/util');
|
||||
var crypto = require('../lib/crypto/crypto');
|
||||
var Script = require('../lib/script/script');
|
||||
var bench = require('./bench');
|
||||
var opcodes = constants.opcodes;
|
||||
var i, hashes, end;
|
||||
|
||||
Script.prototype.fromPubkeyhashOld = function fromScripthash(hash) {
|
||||
assert(Buffer.isBuffer(hash) && hash.length === 20);
|
||||
@ -28,16 +25,16 @@ Script.fromPubkeyhashOld = function fromScripthash(hash) {
|
||||
return new Script().fromPubkeyhashOld(hash);
|
||||
};
|
||||
|
||||
var hashes = [];
|
||||
for (var i = 0; i < 100000; i++)
|
||||
hashes.push(bcoin.crypto.randomBytes(20));
|
||||
hashes = [];
|
||||
for (i = 0; i < 100000; i++)
|
||||
hashes.push(crypto.randomBytes(20));
|
||||
|
||||
var end = bench('old');
|
||||
for (var i = 0; i < hashes.length; i++)
|
||||
end = bench('old');
|
||||
for (i = 0; i < hashes.length; i++)
|
||||
Script.fromPubkeyhashOld(hashes[i]);
|
||||
end(i);
|
||||
|
||||
var end = bench('hash');
|
||||
for (var i = 0; i < hashes.length; i++)
|
||||
end = bench('hash');
|
||||
for (i = 0; i < hashes.length; i++)
|
||||
Script.fromPubkeyhash(hashes[i]);
|
||||
end(i);
|
||||
|
||||
156
bench/tx.js
156
bench/tx.js
@ -1,102 +1,116 @@
|
||||
'use strict';
|
||||
|
||||
var BN = require('bn.js');
|
||||
var bcoin = require('../').set('main');
|
||||
var constants = bcoin.constants;
|
||||
var util = bcoin.util;
|
||||
var assert = require('assert');
|
||||
var scriptTypes = constants.scriptTypes;
|
||||
var bench = require('./bench');
|
||||
var fs = require('fs');
|
||||
var assert = require('assert');
|
||||
var Block = require('../lib/primitives/block');
|
||||
var Address = require('../lib/primitives/address');
|
||||
var TX = require('../lib/primitives/tx');
|
||||
var MTX = require('../lib/primitives/mtx');
|
||||
var Coin = require('../lib/primitives/coin');
|
||||
var CoinView = require('../lib/blockchain/coinview');
|
||||
var constants = require('../lib/protocol/constants');
|
||||
var crypto = require('../lib/crypto/crypto');
|
||||
var util = require('../lib/utils/util');
|
||||
var bench = require('./bench');
|
||||
|
||||
bcoin.cache();
|
||||
|
||||
var block = bcoin.block.fromJSON(require('../test/data/block300025.json'));
|
||||
var btx = block.txs[397];
|
||||
var json = require('../test/data/block300025.json');
|
||||
var block = Block.fromJSON(json);
|
||||
var btx = { tx: block.txs[397], view: new CoinView() };
|
||||
|
||||
var tx1 = parseTX('../test/data/tx3.hex');
|
||||
var tx4 = parseTX('../test/data/tx4.hex');
|
||||
var wtx = fs.readFileSync(__dirname + '/../test/data/wtx.hex', 'utf8');
|
||||
wtx = new Buffer(wtx.trim(), 'hex');
|
||||
var tx;
|
||||
var i, tx, raw, end, flags, input;
|
||||
|
||||
function parseTX(file) {
|
||||
file = fs.readFileSync(__dirname + '/' + file, 'utf8').trim().split(/\n+/);
|
||||
var tx = bcoin.tx.fromRaw(file.shift().trim(), 'hex');
|
||||
for (var i = 0; i < file.length; i++) {
|
||||
var coin = bcoin.tx.fromRaw(file[i].trim(), 'hex');
|
||||
tx.fillCoins(coin);
|
||||
}
|
||||
return tx;
|
||||
wtx = new Buffer(wtx.trim(), 'hex');
|
||||
|
||||
tx = json.txs[397];
|
||||
for (i = 0; i < tx.inputs.length; i++) {
|
||||
input = tx.inputs[i];
|
||||
btx.view.addCoin(Coin.fromJSON(input.coin));
|
||||
}
|
||||
|
||||
var end = bench('parse');
|
||||
for (var i = 0; i < 1000; i++)
|
||||
tx = bcoin.tx.fromRaw(wtx);
|
||||
function parseTX(file) {
|
||||
var data = fs.readFileSync(__dirname + '/' + file, 'utf8');
|
||||
var parts = data.trim().split(/\n+/);
|
||||
var raw = parts[0];
|
||||
var tx = TX.fromRaw(raw.trim(), 'hex');
|
||||
var view = new CoinView();
|
||||
var i, prev;
|
||||
|
||||
for (i = 1; i < parts.length; i++) {
|
||||
raw = parts[i];
|
||||
prev = TX.fromRaw(raw.trim(), 'hex');
|
||||
view.addTX(prev, -1);
|
||||
}
|
||||
|
||||
return { tx: tx, view: view };
|
||||
}
|
||||
|
||||
end = bench('parse');
|
||||
for (i = 0; i < 1000; i++)
|
||||
tx = TX.fromRaw(wtx);
|
||||
end(i);
|
||||
|
||||
var end = bench('serialize');
|
||||
var raw;
|
||||
|
||||
for (var i = 0; i < 1000; i++) {
|
||||
end = bench('serialize');
|
||||
for (i = 0; i < 1000; i++) {
|
||||
tx._raw = null;
|
||||
raw = tx.toRaw();
|
||||
}
|
||||
end(i);
|
||||
|
||||
var end = bench('hash');
|
||||
for (var i = 0; i < 3000; i++) {
|
||||
tx1.hash();
|
||||
tx1._hash = null;
|
||||
end = bench('hash');
|
||||
for (i = 0; i < 3000; i++) {
|
||||
tx1.tx.hash();
|
||||
tx1.tx._hash = null;
|
||||
}
|
||||
end(i);
|
||||
|
||||
var end = bench('witness hash');
|
||||
for (var i = 0; i < 3000; i++) {
|
||||
end = bench('witness hash');
|
||||
for (i = 0; i < 3000; i++) {
|
||||
tx.witnessHash();
|
||||
tx._whash = null;
|
||||
}
|
||||
end(i);
|
||||
|
||||
var end = bench('fee');
|
||||
for (var i = 0; i < 1000; i++)
|
||||
tx.getFee();
|
||||
end(i);
|
||||
|
||||
var end = bench('sanity');
|
||||
for (var i = 0; i < 1000; i++)
|
||||
end = bench('sanity');
|
||||
for (i = 0; i < 1000; i++)
|
||||
tx.isSane();
|
||||
end(i);
|
||||
|
||||
var end = bench('input hashes');
|
||||
for (var i = 0; i < 1000; i++)
|
||||
tx.getInputHashes('hex');
|
||||
end = bench('input hashes');
|
||||
for (i = 0; i < 1000; i++)
|
||||
tx.getInputHashes(null, 'hex');
|
||||
end(i);
|
||||
|
||||
var end = bench('output hashes');
|
||||
for (var i = 0; i < 1000; i++)
|
||||
end = bench('output hashes');
|
||||
for (i = 0; i < 1000; i++)
|
||||
tx.getOutputHashes('hex');
|
||||
end(i);
|
||||
|
||||
var end = bench('all hashes');
|
||||
for (var i = 0; i < 1000; i++)
|
||||
tx.getHashes('hex');
|
||||
end = bench('all hashes');
|
||||
for (i = 0; i < 1000; i++)
|
||||
tx.getHashes(null, 'hex');
|
||||
end(i);
|
||||
|
||||
var end = bench('verify');
|
||||
for (var i = 0; i < 3000; i++)
|
||||
tx1.verify(constants.flags.VERIFY_P2SH);
|
||||
end(i * tx1.inputs.length);
|
||||
end = bench('verify');
|
||||
for (i = 0; i < 3000; i++)
|
||||
tx1.tx.verify(tx1.view, constants.flags.VERIFY_P2SH);
|
||||
end(i * tx1.tx.inputs.length);
|
||||
|
||||
var flags = constants.flags.VERIFY_P2SH | constants.flags.VERIFY_DERSIG;
|
||||
var end = bench('verify multisig');
|
||||
for (var i = 0; i < 3000; i++)
|
||||
btx.verify(flags);
|
||||
end(i * btx.inputs.length);
|
||||
end = bench('fee');
|
||||
for (i = 0; i < 1000; i++)
|
||||
tx1.tx.getFee(tx1.view);
|
||||
end(i);
|
||||
|
||||
var tx = bcoin.mtx();
|
||||
flags = constants.flags.VERIFY_P2SH | constants.flags.VERIFY_DERSIG;
|
||||
end = bench('verify multisig');
|
||||
for (i = 0; i < 3000; i++)
|
||||
btx.tx.verify(btx.view, flags);
|
||||
end(i * btx.tx.inputs.length);
|
||||
|
||||
for (var i = 0; i < 100; i++) {
|
||||
tx = new MTX();
|
||||
|
||||
for (i = 0; i < 100; i++) {
|
||||
tx.addInput({
|
||||
prevout: {
|
||||
hash: constants.NULL_HASH,
|
||||
@ -104,28 +118,28 @@ for (var i = 0; i < 100; i++) {
|
||||
},
|
||||
script: [
|
||||
new Buffer(9),
|
||||
bcoin.crypto.randomBytes(33)
|
||||
crypto.randomBytes(33)
|
||||
]
|
||||
});
|
||||
tx.addOutput({
|
||||
address: bcoin.address.fromHash(bcoin.crypto.randomBytes(20)),
|
||||
address: Address.fromHash(crypto.randomBytes(20)),
|
||||
value: 0
|
||||
});
|
||||
}
|
||||
|
||||
tx = tx.toTX();
|
||||
|
||||
var end = bench('input hashes');
|
||||
for (var i = 0; i < 1000; i++)
|
||||
tx.getInputHashes('hex');
|
||||
end = bench('input hashes');
|
||||
for (i = 0; i < 1000; i++)
|
||||
tx.getInputHashes(null, 'hex');
|
||||
end(i);
|
||||
|
||||
var end = bench('output hashes');
|
||||
for (var i = 0; i < 1000; i++)
|
||||
end = bench('output hashes');
|
||||
for (i = 0; i < 1000; i++)
|
||||
tx.getOutputHashes('hex');
|
||||
end(i);
|
||||
|
||||
var end = bench('all hashes');
|
||||
for (var i = 0; i < 1000; i++)
|
||||
tx.getHashes('hex');
|
||||
end = bench('all hashes');
|
||||
for (i = 0; i < 1000; i++)
|
||||
tx.getHashes(null, 'hex');
|
||||
end(i);
|
||||
|
||||
@ -1,16 +1,13 @@
|
||||
'use strict';
|
||||
|
||||
var BN = require('bn.js');
|
||||
var bcoin = require('../').set('main');
|
||||
var constants = bcoin.constants;
|
||||
var util = bcoin.util;
|
||||
var assert = require('assert');
|
||||
var scriptTypes = constants.scriptTypes;
|
||||
var util = require('../lib/utils/util');
|
||||
var bench = require('./bench');
|
||||
var co = require('../lib/utils/co');
|
||||
var crypto = require('../lib/crypto/crypto');
|
||||
|
||||
bcoin.cache();
|
||||
var WalletDB = require('../lib/wallet/walletdb');
|
||||
var MTX = require('../lib/primitives/mtx');
|
||||
var walletdb, runBench;
|
||||
|
||||
function dummy() {
|
||||
var hash = crypto.randomBytes(32).toString('hex');
|
||||
@ -18,32 +15,18 @@ function dummy() {
|
||||
prevout: {
|
||||
hash: hash,
|
||||
index: 0
|
||||
},
|
||||
coin: {
|
||||
version: 1,
|
||||
height: 0,
|
||||
value: 50460 * 4,
|
||||
script: new bcoin.script(),
|
||||
coinbase: false,
|
||||
hash: hash,
|
||||
index: 0
|
||||
},
|
||||
script: new bcoin.script(),
|
||||
witness: new bcoin.witness(),
|
||||
sequence: 0xffffffff
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var walletdb = new bcoin.walletdb({
|
||||
walletdb = new WalletDB({
|
||||
name: 'wallet-test',
|
||||
// location: __dirname + '/../walletdb-bench',
|
||||
// db: 'leveldb'
|
||||
db: 'memory',
|
||||
resolution: false,
|
||||
verify: false
|
||||
});
|
||||
|
||||
var runBench = co(function* runBench() {
|
||||
runBench = co(function* runBench() {
|
||||
var i, j, wallet, addrs, jobs, end;
|
||||
var result, tx, options;
|
||||
|
||||
@ -81,7 +64,7 @@ var runBench = co(function* runBench() {
|
||||
// TX deposit
|
||||
jobs = [];
|
||||
for (i = 0; i < 10000; i++) {
|
||||
tx = bcoin.mtx()
|
||||
tx = MTX()
|
||||
.addInput(dummy())
|
||||
.addOutput(addrs[(i + 0) % addrs.length], 50460)
|
||||
.addOutput(addrs[(i + 1) % addrs.length], 50460)
|
||||
@ -99,7 +82,7 @@ var runBench = co(function* runBench() {
|
||||
// TX redemption
|
||||
jobs = [];
|
||||
for (i = 0; i < 10000; i++) {
|
||||
tx = bcoin.mtx()
|
||||
tx = MTX()
|
||||
.addInput(tx, 0)
|
||||
.addInput(tx, 1)
|
||||
.addInput(tx, 2)
|
||||
|
||||
@ -920,10 +920,11 @@ TX.prototype._getInputAddresses = function getInputAddresses(view) {
|
||||
TX.prototype._getOutputAddresses = function getOutputAddresses() {
|
||||
var table = {};
|
||||
var addrs = [];
|
||||
var i, address, hash;
|
||||
var i, output, address, hash;
|
||||
|
||||
for (i = 0; i < this.outputs.length; i++) {
|
||||
address = this.outputs[i].getAddress();
|
||||
output = this.outputs[i];
|
||||
address = output.getAddress();
|
||||
|
||||
if (!address)
|
||||
continue;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user