From 59fcb4404515dcdbb5816afcc4efc89bac694aa2 Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Thu, 19 Mar 2015 10:29:33 -0300 Subject: [PATCH] add reporters --- config/default.yml | 1 + index.js | 40 +++++++++++++++++++++++++++++++++++++++- lib/node.js | 11 ----------- 3 files changed, 40 insertions(+), 12 deletions(-) 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..fd0aeff4 100644 --- a/index.js +++ b/index.js @@ -2,8 +2,38 @@ var BitcoreNode = require('./lib/node'); +var bitcore = require('bitcore'); +var Unit = bitcore.Unit; if (require.main === module) { + 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()); + }); + }; var config = require('config'); var node = BitcoreNode.create(config.get('BitcoreNode')); node.start(); @@ -11,9 +41,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/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); });