1 | 'use strict';
|
2 |
|
3 | var benchmark = require('benchmark');
|
4 | var bitcore = require('..');
|
5 | var bitcoinjs = require('bitcoinjs-lib');
|
6 | var bcoin = require('bcoin');
|
7 | var async = require('async');
|
8 | var fullnode = require('fullnode');
|
9 | var blockData = require('./block-357238.json');
|
10 |
|
11 | var maxTime = 20;
|
12 |
|
13 | console.log('Benchmarking Block/Transaction Serialization');
|
14 | console.log('---------------------------------------');
|
15 |
|
16 | async.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 |
|
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 |
|
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;
|
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 | });
|