From 2468cedde42dc04981f249892da9d09a6f63321d Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Thu, 19 Mar 2015 14:39:34 -0300 Subject: [PATCH] first prototype architecture --- config/default.yml | 2 +- index.js | 2 ++ lib/networkmonitor.js | 12 ++++++++++-- lib/node.js | 35 +++++++++++++++++++++++++++++++++++ lib/services/block.js | 9 +++++++++ 5 files changed, 57 insertions(+), 3 deletions(-) diff --git a/config/default.yml b/config/default.yml index 5b0d42ac..d97beb8c 100644 --- a/config/default.yml +++ b/config/default.yml @@ -1,6 +1,6 @@ BitcoreNode: + network: testnet NetworkMonitor: - network: livenet host: localhost port: 8333 Reporter: simple # none, simple, matrix diff --git a/index.js b/index.js index aae7b25e..30884880 100644 --- a/index.js +++ b/index.js @@ -2,9 +2,11 @@ var BitcoreNode = require('./lib/node'); var reporters = require('./lib/reporters'); +var bitcore = require('bitcore'); if (require.main === module) { var config = require('config'); + bitcore.Networks.defaultNetwork = bitcore.Networks.get(config.network); var node = BitcoreNode.create(config.get('BitcoreNode')); node.start(); node.on('error', function(err) { diff --git a/lib/networkmonitor.js b/lib/networkmonitor.js index 84e48dfc..bdb7812f 100644 --- a/lib/networkmonitor.js +++ b/lib/networkmonitor.js @@ -21,10 +21,9 @@ util.inherits(NetworkMonitor, EventEmitter); NetworkMonitor.create = function(eventBus, opts) { opts = opts || {}; - var network = Networks.get(opts.network) || Networks.defaultNetwork; var host = opts.host || 'localhost'; var port = opts.port || Networks.defaultNetwork.port; - var peer = new Peer(host, port, network); + var peer = new Peer(host, port, Networks.defaultNetwork); return new NetworkMonitor(eventBus, peer); }; @@ -47,12 +46,21 @@ NetworkMonitor.prototype.setupPeer = function(peer) { peer.on('error', function(err) { self.emit('error', err); }); + peer.on('disconnect', function() { + self.emit('disconnect'); + }); }; NetworkMonitor.prototype.start = function() { this.peer.connect(); }; +NetworkMonitor.prototype.stop = function() { + this.peer.disconnect(); +}; +NetworkMonitor.prototype.syncFrom = function(start) { + this.peer.sendMessage(messages.GetBlocks([start])); +}; module.exports = NetworkMonitor; diff --git a/lib/node.js b/lib/node.js index 6e67fc83..e6580483 100644 --- a/lib/node.js +++ b/lib/node.js @@ -4,10 +4,13 @@ var util = require('util'); var EventEmitter = require('eventemitter2').EventEmitter2; var bitcore = require('bitcore'); +var p2p = require('bitcore-p2p'); +var messages = new p2p.Messages(); var $ = bitcore.util.preconditions; var NetworkMonitor = require('./networkmonitor'); var EventBus = require('./eventbus'); +var BlockService = require('./services/block.js'); var BitcoreNode = function(bus, nm) { $.checkArgument(bus); @@ -16,12 +19,20 @@ var BitcoreNode = function(bus, nm) { this.bus = bus; this.nm = nm; + this.bs = new BlockService(); + + this.bus.register(bitcore.Block, this.bs.onBlock.bind(this.bs)); + this.bus.onAny(function(value) { self.emit(this.event, value); }); this.nm.on('error', function(err) { self.emit('error', err); }); + this.nm.on('disconnect', function() { + console.log('network monitor disconnected'); + }); + }; util.inherits(BitcoreNode, EventEmitter); @@ -33,7 +44,31 @@ BitcoreNode.create = function(opts) { }; BitcoreNode.prototype.start = function() { + this.sync(); this.nm.start(); }; +BitcoreNode.prototype.sync = function() { + var genesis = bitcore.Networks.defaultNetwork.genesis; + console.log(bitcore.Networks.defaultNetwork.name); + console.log(genesis); + var self = this; + this.nm.on('ready', function() { + console.log('ready'); + self.bs.getLatest().then(function(latest) { + var start = genesis; + if (latest) { + start = latest.rawHash; + } + console.log('Starting sync from', start); + self.nm.syncFrom(start); + }) + .catch(function(err) { + self.nm.disconnect(); + throw err; + }); + }); +}; + + module.exports = BitcoreNode; diff --git a/lib/services/block.js b/lib/services/block.js index d95edd7c..2f163986 100644 --- a/lib/services/block.js +++ b/lib/services/block.js @@ -214,6 +214,15 @@ BlockService.prototype.getLatest = function() { }); }; +/** + * Handle a block from the network + * + * @param {bitcore.Block} block + * @return a list of events back to the event bus + */ +BlockService.prototype.onBlock = function(block) { + console.log('block', block); +}; /** * Save a new block