201 lines
3.3 KiB
JavaScript
201 lines
3.3 KiB
JavaScript
'use strict';
|
|
|
|
const random = require('bcrypto/lib/random');
|
|
const Address = require('../lib/primitives/address');
|
|
const TX = require('../lib/primitives/tx');
|
|
const Script = require('../lib/script/script');
|
|
const MTX = require('../lib/primitives/mtx');
|
|
const consensus = require('../lib/protocol/consensus');
|
|
const common = require('../test/util/common');
|
|
const bench = require('./bench');
|
|
|
|
const tx3 = common.readTX('tx3');
|
|
const tx5 = common.readTX('tx5');
|
|
const tx10 = common.readTX('tx10');
|
|
|
|
{
|
|
const raw = tx5.getRaw();
|
|
const end = bench('parse');
|
|
|
|
for (let i = 0; i < 10000; i++)
|
|
TX.fromRaw(raw);
|
|
|
|
end(10000);
|
|
}
|
|
|
|
{
|
|
const [tx, view] = tx5.getTX();
|
|
const end = bench('sigops');
|
|
|
|
for (let i = 0; i < 100000; i++)
|
|
tx.getSigopsCost(view);
|
|
|
|
end(100000);
|
|
}
|
|
|
|
{
|
|
const [tx] = tx5.getTX();
|
|
const end = bench('serialize');
|
|
|
|
for (let i = 0; i < 10000; i++) {
|
|
tx._raw = null;
|
|
tx.toRaw();
|
|
}
|
|
|
|
end(10000);
|
|
}
|
|
|
|
{
|
|
const [tx] = tx3.getTX();
|
|
const end = bench('hash');
|
|
|
|
for (let i = 0; i < 30000; i++) {
|
|
tx.hash();
|
|
tx._hash = null;
|
|
}
|
|
|
|
end(30000);
|
|
}
|
|
|
|
{
|
|
const [tx] = tx5.getTX();
|
|
const end = bench('witness hash');
|
|
|
|
for (let i = 0; i < 30000; i++) {
|
|
tx.witnessHash();
|
|
tx._whash = null;
|
|
}
|
|
|
|
end(30000);
|
|
}
|
|
|
|
{
|
|
const [tx] = tx5.getTX();
|
|
const end = bench('sanity');
|
|
|
|
for (let i = 0; i < 10000; i++)
|
|
tx.isSane();
|
|
|
|
end(10000);
|
|
}
|
|
|
|
{
|
|
const [tx] = tx5.getTX();
|
|
const end = bench('input hashes');
|
|
|
|
for (let i = 0; i < 10000; i++)
|
|
tx.getInputHashes();
|
|
|
|
end(10000);
|
|
}
|
|
|
|
{
|
|
const [tx] = tx5.getTX();
|
|
const end = bench('output hashes');
|
|
|
|
for (let i = 0; i < 10000; i++)
|
|
tx.getOutputHashes();
|
|
|
|
end(10000);
|
|
}
|
|
|
|
{
|
|
const [tx] = tx5.getTX();
|
|
const end = bench('all hashes');
|
|
|
|
for (let i = 0; i < 10000; i++)
|
|
tx.getHashes();
|
|
|
|
end(10000);
|
|
}
|
|
|
|
{
|
|
const [tx, view] = tx3.getTX();
|
|
const end = bench('verify');
|
|
|
|
for (let i = 0; i < 30000; i++)
|
|
tx.verify(view, Script.flags.VERIFY_P2SH);
|
|
|
|
end(30000 * tx.inputs.length);
|
|
}
|
|
|
|
{
|
|
const [tx, view] = tx3.getTX();
|
|
const {script} = view.getOutputFor(tx.inputs[0]);
|
|
const end = bench('sighash');
|
|
|
|
for (let i = 0; i < 1000000; i++)
|
|
tx.signatureHashV0(0, script, Script.hashType.ALL);
|
|
|
|
end(1000000);
|
|
}
|
|
|
|
{
|
|
const [tx, view] = tx3.getTX();
|
|
const end = bench('fee');
|
|
|
|
for (let i = 0; i < 10000; i++)
|
|
tx.getFee(view);
|
|
|
|
end(10000);
|
|
}
|
|
|
|
{
|
|
const [tx, view] = tx10.getTX();
|
|
const flags = Script.flags.VERIFY_P2SH | Script.flags.VERIFY_DERSIG;
|
|
const end = bench('verify multisig');
|
|
|
|
for (let i = 0; i < 30000; i++)
|
|
tx.verify(view, flags);
|
|
|
|
end(30000 * tx.inputs.length);
|
|
}
|
|
|
|
const mtx = new MTX();
|
|
|
|
for (let i = 0; i < 100; i++) {
|
|
mtx.addInput({
|
|
prevout: {
|
|
hash: consensus.ZERO_HASH,
|
|
index: 0
|
|
},
|
|
script: new Script()
|
|
.pushData(Buffer.allocUnsafe(9))
|
|
.pushData(random.randomBytes(33))
|
|
.compile()
|
|
});
|
|
mtx.addOutput({
|
|
address: Address.fromHash(random.randomBytes(20)),
|
|
value: 0
|
|
});
|
|
}
|
|
|
|
const tx2 = mtx.toTX();
|
|
|
|
{
|
|
const end = bench('input hashes');
|
|
|
|
for (let i = 0; i < 10000; i++)
|
|
tx2.getInputHashes();
|
|
|
|
end(10000);
|
|
}
|
|
|
|
{
|
|
const end = bench('output hashes');
|
|
|
|
for (let i = 0; i < 10000; i++)
|
|
tx2.getOutputHashes();
|
|
|
|
end(10000);
|
|
}
|
|
|
|
{
|
|
const end = bench('all hashes');
|
|
|
|
for (let i = 0; i < 10000; i++)
|
|
tx2.getHashes();
|
|
|
|
end(10000);
|
|
}
|