diff --git a/config/default.yml b/config/default.yml index 73a9cd23..a5386a21 100644 --- a/config/default.yml +++ b/config/default.yml @@ -3,6 +3,7 @@ BitcoreNode: network: livenet host: localhost port: 8333 +Reporter: simple # none, simple, matrix LevelUp: ./db RPC: username: username diff --git a/index.js b/index.js index 51e4e9f8..aae7b25e 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,7 @@ 'use strict'; - var BitcoreNode = require('./lib/node'); +var reporters = require('./lib/reporters'); if (require.main === module) { var config = require('config'); @@ -11,9 +11,17 @@ if (require.main === module) { if (err.code === 'ECONNREFUSED') { console.log('Connection to bitcoind failed'); } else { - console.log('Unrecognized error: ', err); + console.log('Error: ', err); } }); + + var reporterName = config.get('Reporter'); + var reporter = reporters[reporterName]; + if (!reporter) { + throw new Error('Unrecognized network reporter: ' + reporterName + + '. Available: ' + Object.keys(reporters)); + } + node.on('Transaction', reporter); } diff --git a/lib/networkmonitor.js b/lib/networkmonitor.js index e0194b2f..84e48dfc 100644 --- a/lib/networkmonitor.js +++ b/lib/networkmonitor.js @@ -8,7 +8,7 @@ var Networks = bitcore.Networks; var $ = bitcore.util.preconditions; var p2p = require('bitcore-p2p'); var Peer = p2p.Peer; -var Messages = p2p.Messages; +var messages = new p2p.Messages(); function NetworkMonitor(eventBus, peer) { $.checkArgument(eventBus); @@ -36,7 +36,7 @@ NetworkMonitor.prototype.setupPeer = function(peer) { }); peer.on('inv', function(m) { // TODO only ask for data if tx or block is unknown - peer.sendMessage(new Messages.GetData(m.inventory)); + peer.sendMessage(messages.GetData(m.inventory)); }); peer.on('tx', function(m) { self.bus.process(m.transaction); diff --git a/lib/node.js b/lib/node.js index 198fbb76..6e67fc83 100644 --- a/lib/node.js +++ b/lib/node.js @@ -4,7 +4,6 @@ var util = require('util'); var EventEmitter = require('eventemitter2').EventEmitter2; var bitcore = require('bitcore'); -var Unit = bitcore.Unit; var $ = bitcore.util.preconditions; var NetworkMonitor = require('./networkmonitor'); @@ -17,16 +16,6 @@ var BitcoreNode = function(bus, nm) { this.bus = bus; this.nm = nm; - this.bus.register(bitcore.Transaction, function(tx) { - var tout = Unit.fromSatoshis(tx.outputAmount).toBTC(); - console.log('Transaction:', tx.id); - console.log('\ttotal_out:', tout, 'BTC'); - }); - - this.bus.register(bitcore.Block, function(block) { - console.log('Block:', block.id); - }); - this.bus.onAny(function(value) { self.emit(this.event, value); }); diff --git a/lib/reporters.js b/lib/reporters.js new file mode 100644 index 00000000..1e46849b --- /dev/null +++ b/lib/reporters.js @@ -0,0 +1,35 @@ +'use strict'; + +var bitcore = require('bitcore'); +var Unit = bitcore.Unit; + +var reporters = {}; +reporters.none = function() { + // do nothing +}; +reporters.matrix = function(tx) { + var s = tx.toString(); + for (var i = 0; i < s.length; i++) { + var slice = s.slice(4 * i, 4 * (i + 1)); + if (slice.length < 4) { + continue; + } + var c = JSON.parse('"\\u' + slice + '"'); + process.stdout.write(c); + } +}; +reporters.simple = function(tx) { + var tout = Unit.fromSatoshis(tx.outputAmount).toBTC(); + console.log('Transaction:', tx.id); + console.log('\ttotal_out:', tout, 'BTC'); + console.log('\tinput addresses:'); + tx.inputs.forEach(function(inp) { + console.log('\t\t' + inp.script.toAddress()); + }); + console.log('\toutput addresses:'); + tx.outputs.forEach(function(out) { + console.log('\t\t' + out.script.toAddress()); + }); +}; + +module.exports = reporters; diff --git a/test/networkmonitor.js b/test/networkmonitor.js index 28660ca1..732f8310 100644 --- a/test/networkmonitor.js +++ b/test/networkmonitor.js @@ -51,11 +51,6 @@ describe('NetworkMonitor', function() { }); it('instantiates correctly from create with opts', function() { - var opts = { - network: Networks.livenet, - host: '8.8.8.8', - port: 3001 - }; var nm = NetworkMonitor.create(busMock); should.exist(nm); });