diff --git a/lib/node.js b/lib/node.js index a3200fda..984ab2b6 100644 --- a/lib/node.js +++ b/lib/node.js @@ -26,7 +26,6 @@ var BitcoreNode = function(bus, networkMonitor, blockService, transactionService $.checkArgument(blockService, 'blockService is required'); $.checkArgument(transactionService, 'transactionService is required'); $.checkArgument(addressService, 'addressService is required'); - var self = this; this.bus = bus; this.networkMonitor = networkMonitor; @@ -38,18 +37,43 @@ var BitcoreNode = function(bus, networkMonitor, blockService, transactionService this.blockCache = {}; this.inventory = {}; // blockHash -> bool (has data) + this.initialize(); +}; +util.inherits(BitcoreNode, EventEmitter); - /* - this.networkMonitor.on('inv', function(inventory) { - _.each(inventory, function(info) { - var hash = bitcore.util.buffer.reverse(info.hash).toString('hex'); - $.checkState(_.isUndefined(self.inventory[hash]), hash); - if (self.inventory[hash] && info.type === 2) { // TODO: use static field from bitcore-p2p - self.inventory[hash] = false; - } - }); +BitcoreNode.create = function(opts) { + opts = opts || {}; + + var bus = new EventBus(); + + var networkMonitor = NetworkMonitor.create(bus, opts.NetworkMonitor); + + var database = opts.database || Promise.promisifyAll( + new LevelUp(opts.LevelUp || './db') + ); + var rpc = opts.rpc || Promise.promisifyAll(new RPC(opts.RPC)); + + var transactionService = opts.transactionService || new TransactionService({ + rpc: rpc, + database: database }); - */ + var blockService = opts.blockService || new BlockService({ + rpc: rpc, + database: database, + transactionService: transactionService + }); + var addressService = opts.addressService || new AddressService({ + rpc: rpc, + database: database, + transactionService: transactionService, + blockService: blockService + }); + return new BitcoreNode(bus, networkMonitor, blockService, transactionService, addressService); +}; + + +BitcoreNode.prototype.initialize = function() { + var self = this; setInterval(function() { if (!self.blockchain) { @@ -112,38 +136,6 @@ var BitcoreNode = function(bus, networkMonitor, blockService, transactionService this.networkMonitor.on('disconnect', function() { console.log('network monitor disconnected'); }); - -}; -util.inherits(BitcoreNode, EventEmitter); - -BitcoreNode.create = function(opts) { - opts = opts || {}; - - var bus = new EventBus(); - - var networkMonitor = NetworkMonitor.create(bus, opts.NetworkMonitor); - - var database = Promise.promisifyAll( - new LevelUp(opts.LevelUp || './db') - ); - var rpc = Promise.promisifyAll(new RPC(opts.RPC)); - - var transactionService = new TransactionService({ - rpc: rpc, - database: database - }); - var blockService = new BlockService({ - rpc: rpc, - database: database, - transactionService: transactionService - }); - var addressService = new AddressService({ - rpc: rpc, - database: database, - transactionService: transactionService, - blockService: blockService - }); - return new BitcoreNode(bus, networkMonitor, blockService, transactionService, addressService); }; BitcoreNode.prototype.start = function() { diff --git a/test/node.js b/test/node.js index 929e8a99..8170c1f7 100644 --- a/test/node.js +++ b/test/node.js @@ -34,25 +34,13 @@ describe('BitcoreNode', function() { }); it('from create', function() { + var dbMock = {}; + var rpcMock = {}; var opts = { - LevelUp: './db-test', - network: 'testnet', - NetworkMonitor: { - host: 'localhost', - port: 8555, - }, - Reporter: 'none', - BitcoreHTTP: { - host: 'somehost', - port: 9090, - }, - RPC: { - user: 'test-user', - pass: 'test-password', - protocol: 'http', - host: '8.8.8.8', - port: 8552, - } + database: dbMock, + rpc: rpcMock, + blockService: bsMock, + transactionService: tsMock }; var node = BitcoreNode.create(opts); should.exist(node);