124 lines
3.4 KiB
JavaScript
124 lines
3.4 KiB
JavaScript
'use strict';
|
|
|
|
var benchmark = require('benchmark');
|
|
var bitcoin = require('bitcoin');
|
|
var async = require('async');
|
|
var maxTime = 20;
|
|
|
|
console.log('Benchmarking Bitcoind.js native interface versus Bitcoind JSON RPC interface');
|
|
console.log('----------------------------------------------------------------------');
|
|
|
|
// To run the benchmarks a fully synced Bitcore Core directory is needed. The RPC comands
|
|
// can be modified to match the settings in bitcoin.conf.
|
|
|
|
// The primary methods that are needed:
|
|
// getInfo === works
|
|
// getRawTransaction === getrawtransaction "txid" ( verbose )
|
|
// sendRawTransaction === sendrawtransaction "hexstring" ( allowhighfees )
|
|
// getTransaction === either I need txindex turned on -or- the wallet turned on
|
|
// Wallet functionality isn't needed, and libbitcoind.so could be compiled with the --disable-wallet flag.
|
|
|
|
var blockHashes = [
|
|
'00000000fa7a4acea40e5d0591d64faf48fd862fa3561d111d967fc3a6a94177',
|
|
'000000000017e9e0afc4bc55339f60ffffb9cbe883f7348a9fbc198a486d5488',
|
|
'000000000019ddb889b534c5d85fca2c91a73feef6fd775cd228dea45353bae1',
|
|
'0000000000977ac3d9f5261efc88a3c2d25af92a91350750d00ad67744fa8d03'
|
|
];
|
|
|
|
var fixtureData = {
|
|
transactions: [
|
|
'5523b432c1bd6c101bee704ad6c560fd09aefc483f8a4998df6741feaa74e6eb',
|
|
'ff48393e7731507c789cfa9cbfae045b10e023ce34ace699a63cdad88c8b43f8',
|
|
'5d35c5eebf704877badd0a131b0a86588041997d40dbee8ccff21ca5b7e5e333',
|
|
'88842f2cf9d8659c3434f6bc0c515e22d87f33e864e504d2d7117163a572a3aa',
|
|
]
|
|
};
|
|
|
|
var bitcoind = require('../')({
|
|
directory: '~/.bitcoin',
|
|
testnet: true
|
|
});
|
|
|
|
bitcoind.on('error', function(err) {
|
|
bitcoind.log('error="%s"', err.message);
|
|
});
|
|
|
|
bitcoind.on('open', function(status) {
|
|
bitcoind.log('status="%s"', status);
|
|
});
|
|
|
|
bitcoind.on('ready', function() {
|
|
|
|
bitcoind.log('status="%s"', 'chaintip ready.');
|
|
|
|
var client = new bitcoin.Client({
|
|
host: 'localhost',
|
|
port: 18332,
|
|
user: 'bitcoin',
|
|
pass: 'local321'
|
|
});
|
|
|
|
async.series([
|
|
function(next) {
|
|
|
|
var c = 0;
|
|
var hashesLength = blockHashes.length;
|
|
|
|
function bitcoindGetBlockNative(deffered) {
|
|
if (c >= hashesLength) {
|
|
c = 0;
|
|
}
|
|
var hash = blockHashes[c];
|
|
bitcoind.getBlock(hash, function(err, block) {
|
|
if (err) {
|
|
throw err;
|
|
}
|
|
deffered.resolve();
|
|
});
|
|
c++;
|
|
}
|
|
|
|
function bitcoindGetBlockJsonRpc(deffered) {
|
|
if (c >= hashesLength) {
|
|
c = 0;
|
|
}
|
|
var hash = blockHashes[c];
|
|
client.getBlock(hash, false, function(err, block) {
|
|
if (err) {
|
|
throw err;
|
|
}
|
|
deffered.resolve();
|
|
});
|
|
c++;
|
|
}
|
|
|
|
var suite = new benchmark.Suite();
|
|
|
|
suite.add('bitcoind getblock (native)', bitcoindGetBlockNative, {
|
|
defer: true,
|
|
maxTime: maxTime
|
|
});
|
|
|
|
suite.add('bitcoind getblock (json rpc)', bitcoindGetBlockJsonRpc, {
|
|
defer: true,
|
|
maxTime: maxTime
|
|
});
|
|
|
|
suite
|
|
.on('cycle', function(event) {
|
|
console.log(String(event.target));
|
|
})
|
|
.on('complete', function() {
|
|
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
|
|
console.log('----------------------------------------------------------------------');
|
|
next();
|
|
})
|
|
.run();
|
|
}
|
|
], function(err) {
|
|
console.log('Finished');
|
|
bitcoind.stop();
|
|
process.exit();
|
|
});
|
|
});
|