UNPKG

3.29 kBJavaScriptView Raw
1'use strict';
2
3var benchmark = require('benchmark');
4var bitcore = require('..');
5var bitcoinjs = require('bitcoinjs-lib');
6var bcoin = require('bcoin');
7var async = require('async');
8var fullnode = require('fullnode');
9var blockData = require('./block-357238.json');
10
11var maxTime = 20;
12
13console.log('Benchmarking Block/Transaction Serialization');
14console.log('---------------------------------------');
15
16async.series([
17 function(next) {
18
19 var buffers = [];
20 var hashBuffers = [];
21 console.log('Generating Random Test Data...');
22 for (var i = 0; i < 100; i++) {
23
24 // uint64le
25 var br = new bitcore.encoding.BufferWriter();
26 var num = Math.round(Math.random() * 10000000000000);
27 br.writeUInt64LEBN(new bitcore.crypto.BN(num));
28 buffers.push(br.toBuffer());
29
30 // hashes
31 var data = bitcore.crypto.Hash.sha256sha256(new Buffer(32));
32 hashBuffers.push(data);
33 }
34
35 var c = 0;
36 var bn;
37
38 function readUInt64LEBN() {
39 if (c >= buffers.length) {
40 c = 0;
41 }
42 var buf = buffers[c];
43 var br = new bitcore.encoding.BufferReader(buf);
44 bn = br.readUInt64LEBN();
45 c++;
46 }
47
48 var reversed;
49
50 function readReverse() {
51 if (c >= hashBuffers.length) {
52 c = 0;
53 }
54 var buf = hashBuffers[c];
55 var br = new bitcore.encoding.BufferReader(buf);
56 reversed = br.readReverse();
57 c++;
58 }
59
60 console.log('Starting benchmark...');
61
62 var suite = new benchmark.Suite();
63 suite.add('bufferReader.readUInt64LEBN()', readUInt64LEBN, {maxTime: maxTime});
64 suite.add('bufferReader.readReverse()', readReverse, {maxTime: maxTime});
65 suite
66 .on('cycle', function(event) {
67 console.log(String(event.target));
68 })
69 .on('complete', function() {
70 console.log('Done');
71 console.log('----------------------------------------------------------------------');
72 next();
73 })
74 .run();
75 },
76 function(next) {
77
78 var block1;
79 var block2;
80 var block3;
81
82 function bitcoreTest() {
83 block1 = bitcore.Block.fromString(blockData);
84 }
85
86 function bitcoinJSTest() {
87 block2 = bitcoinjs.Block.fromHex(blockData);
88 }
89
90 var parser = new bcoin.protocol.parser();
91
92 function bcoinTest() {
93 var raw = bcoin.utils.toArray(blockData, 'hex');
94 var data = parser.parseBlock(raw);
95 block3 = new bcoin.block(data, 'block');
96 }
97
98 var blockDataMessage = '0000000000000000' + blockData; // add mock leading magic and size
99
100 function fullnodeTest() {
101 fullnode.Block().fromHex(blockDataMessage);
102 }
103
104 var suite = new benchmark.Suite();
105 suite.add('bitcore', bitcoreTest, {maxTime: maxTime});
106 suite.add('bitcoinjs', bitcoinJSTest, {maxTime: maxTime});
107 suite.add('bcoin', bcoinTest, {maxTime: maxTime});
108 suite.add('fullnode', fullnodeTest, {maxTime: maxTime});
109 suite
110 .on('cycle', function(event) {
111 console.log(String(event.target));
112 })
113 .on('complete', function() {
114 console.log('Fastest is ' + this.filter('fastest').pluck('name'));
115 console.log('----------------------------------------------------------------------');
116 next();
117 })
118 .run();
119 }
120], function(err) {
121 console.log('Finished');
122});