Merge pull request #44 from maraoz/add/reporters
add transaction reporters
This commit is contained in:
commit
2b309baeb2
@ -3,6 +3,7 @@ BitcoreNode:
|
|||||||
network: livenet
|
network: livenet
|
||||||
host: localhost
|
host: localhost
|
||||||
port: 8333
|
port: 8333
|
||||||
|
Reporter: simple # none, simple, matrix
|
||||||
LevelUp: ./db
|
LevelUp: ./db
|
||||||
RPC:
|
RPC:
|
||||||
username: username
|
username: username
|
||||||
|
|||||||
12
index.js
12
index.js
@ -1,7 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
var BitcoreNode = require('./lib/node');
|
var BitcoreNode = require('./lib/node');
|
||||||
|
var reporters = require('./lib/reporters');
|
||||||
|
|
||||||
if (require.main === module) {
|
if (require.main === module) {
|
||||||
var config = require('config');
|
var config = require('config');
|
||||||
@ -11,9 +11,17 @@ if (require.main === module) {
|
|||||||
if (err.code === 'ECONNREFUSED') {
|
if (err.code === 'ECONNREFUSED') {
|
||||||
console.log('Connection to bitcoind failed');
|
console.log('Connection to bitcoind failed');
|
||||||
} else {
|
} 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@ var Networks = bitcore.Networks;
|
|||||||
var $ = bitcore.util.preconditions;
|
var $ = bitcore.util.preconditions;
|
||||||
var p2p = require('bitcore-p2p');
|
var p2p = require('bitcore-p2p');
|
||||||
var Peer = p2p.Peer;
|
var Peer = p2p.Peer;
|
||||||
var Messages = p2p.Messages;
|
var messages = new p2p.Messages();
|
||||||
|
|
||||||
function NetworkMonitor(eventBus, peer) {
|
function NetworkMonitor(eventBus, peer) {
|
||||||
$.checkArgument(eventBus);
|
$.checkArgument(eventBus);
|
||||||
@ -36,7 +36,7 @@ NetworkMonitor.prototype.setupPeer = function(peer) {
|
|||||||
});
|
});
|
||||||
peer.on('inv', function(m) {
|
peer.on('inv', function(m) {
|
||||||
// TODO only ask for data if tx or block is unknown
|
// 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) {
|
peer.on('tx', function(m) {
|
||||||
self.bus.process(m.transaction);
|
self.bus.process(m.transaction);
|
||||||
|
|||||||
11
lib/node.js
11
lib/node.js
@ -4,7 +4,6 @@ var util = require('util');
|
|||||||
var EventEmitter = require('eventemitter2').EventEmitter2;
|
var EventEmitter = require('eventemitter2').EventEmitter2;
|
||||||
|
|
||||||
var bitcore = require('bitcore');
|
var bitcore = require('bitcore');
|
||||||
var Unit = bitcore.Unit;
|
|
||||||
var $ = bitcore.util.preconditions;
|
var $ = bitcore.util.preconditions;
|
||||||
|
|
||||||
var NetworkMonitor = require('./networkmonitor');
|
var NetworkMonitor = require('./networkmonitor');
|
||||||
@ -17,16 +16,6 @@ var BitcoreNode = function(bus, nm) {
|
|||||||
this.bus = bus;
|
this.bus = bus;
|
||||||
this.nm = nm;
|
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) {
|
this.bus.onAny(function(value) {
|
||||||
self.emit(this.event, value);
|
self.emit(this.event, value);
|
||||||
});
|
});
|
||||||
|
|||||||
35
lib/reporters.js
Normal file
35
lib/reporters.js
Normal file
@ -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;
|
||||||
@ -51,11 +51,6 @@ describe('NetworkMonitor', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('instantiates correctly from create with opts', 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);
|
var nm = NetworkMonitor.create(busMock);
|
||||||
should.exist(nm);
|
should.exist(nm);
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user