This commit is contained in:
Manuel Araoz 2015-03-26 12:57:45 -03:00
parent de62831851
commit 8121f52c38
4 changed files with 48 additions and 43 deletions

View File

@ -45,20 +45,18 @@ NetworkMonitor.prototype.setupPeer = function(peer) {
peer.on('tx', function(m) { peer.on('tx', function(m) {
self.bus.process(m.transaction) self.bus.process(m.transaction)
.catch(function(err) { .catch(function(err) {
self.stop(err); self.abort(err);
}); });
//.catch(self.stop.bind(self));
}); });
peer.on('block', function(m) { peer.on('block', function(m) {
self.bus.process(m.block) self.bus.process(m.block)
.catch(function(err) { .catch(function(err) {
self.stop(err); self.abort(err);
}); });
//.catch(self.stop.bind(self));
}); });
peer.on('error', function(err) { peer.on('error', function(err) {
self.emit('error', err); self.emit('error', err);
self.stop(err); self.abort(err);
}); });
peer.on('disconnect', function() { peer.on('disconnect', function() {
self.emit('disconnect'); self.emit('disconnect');
@ -70,11 +68,13 @@ NetworkMonitor.prototype.start = function() {
this.peer.connect(); this.peer.connect();
}; };
NetworkMonitor.prototype.stop = function(reason) { NetworkMonitor.prototype.stop = function(reason) {
console.trace();
this.peer.disconnect(); this.peer.disconnect();
if (reason) { console.log('Stopping network, reason:', reason);
throw reason; };
} NetworkMonitor.prototype.abort = function(reason) {
this.peer.disconnect();
console.log('Unexpected error, aborting:', reason);
process.exit(1);
}; };
NetworkMonitor.prototype.syncFrom = function(start) { NetworkMonitor.prototype.syncFrom = function(start) {

View File

@ -52,7 +52,7 @@ BitcoreNode.create = function(opts) {
var networkMonitor = NetworkMonitor.create(bus, opts.NetworkMonitor); var networkMonitor = NetworkMonitor.create(bus, opts.NetworkMonitor);
var database = new LevelUp(opts.LevelUp || config.get('LevelUp')); var database = Promise.promisifyAll(new LevelUp(opts.LevelUp || config.get('LevelUp')));
var rpc = Promise.promisifyAll(new RPC(config.get('RPC'))); var rpc = Promise.promisifyAll(new RPC(config.get('RPC')));
var transactionService = new TransactionService({ var transactionService = new TransactionService({
@ -79,20 +79,21 @@ BitcoreNode.prototype.start = function() {
}; };
BitcoreNode.prototype.sync = function() { BitcoreNode.prototype.sync = function() {
var genesis = bitcore.Networks.defaultNetwork.genesis; var genesis = bitcore.Block.fromBuffer(bitcore.Networks.defaultNetwork.genesis);
var self = this; var self = this;
this.networkMonitor.on('ready', function() { this.networkMonitor.on('ready', function() {
console.log('ready'); console.log('ready');
self.blockService.getLatest().then(function(latest) { self.blockService.getLatest().then(function(latest) {
var start = genesis; var start = genesis.hash;
console.log('latest', latest);
if (latest) { if (latest) {
start = latest.rawHash; start = latest.hash;
} }
console.log('Starting sync from', start); console.log('Starting sync from', start);
self.networkMonitor.syncFrom(start); self.networkMonitor.syncFrom(start);
}) })
.catch(function(err) { .catch(function(err) {
self.networkMonitor.disconnect(); self.networkMonitor.stop();
throw err; throw err;
}); });
}); });

View File

@ -183,16 +183,16 @@ BlockService.prototype.getBlockByHeight = function(height) {
return Promise.try(function() { return Promise.try(function() {
return self.rpc.getBlockHashAsync(height); return self.rpc.getBlockHashAsync(height);
}) })
.catch(blockNotFound) .catch(blockNotFound)
.then(function(result) { .then(function(result) {
var blockHash = result.result; var blockHash = result.result;
return self.getBlock(blockHash); return self.getBlock(blockHash);
}); });
}; };
/** /**
@ -227,7 +227,7 @@ BlockService.prototype.onBlock = function(block) {
var events = []; var events = [];
return this.save(block) return this.save(block)
.then(function(block) { .then(function(block) {
return undefined; console.log('block', block.id, 'saved');
block.transactions.forEach(function(tx) { block.transactions.forEach(function(tx) {
events.push(tx); events.push(tx);
}); });
@ -261,38 +261,41 @@ BlockService.prototype._confirmBlock = function(block) {
var ops = []; var ops = [];
return this.writeLock().then(function() { return this.writeLock().then(function() {
return self._setNextBlock(ops, block.header.prevHash, block);
return self._setNextBlock(ops, block.header.prevHash, block); }).then(function() {
}).then(function() { if (block.header.prevHash.toString('hex') !== NULLBLOCKHASH) {
return self.getBlock(block.header.prevHash, {
withoutTransactions: true
});
} else {
return GENESISPARENT;
}
if (block.header.prevHash.toString('hex') !== NULLBLOCKHASH) { }).then(function(parent) {
return self.getBlock(block.header.prevHash, {
withoutTransactions: true
});
} else {
return GENESISPARENT;
}
}).then(function(parent) { return self._setBlockHeight(ops, block, parent.height + 1);
return self._setBlockHeight(ops, block, parent.height + 1); }).then(function() {
}).then(function() { return self._setBlockByTs(ops, block);
return self._setBlockByTs(ops, block); }).then(function() {
}).then(function() { return Promise.all(block.transactions.map(function(transaction) {
return self.transactionService._confirmTransaction(ops, block, transaction);
}));
return Promise.all(block.transactions.map(function(transaction) { }).then(function() {
return self.transactionService._confirmTransaction(ops, block, transaction);
}));
}).then(function() { return self.database.batchAsync(ops);
return self.database.batchAsync(ops); })
.then(this.unlock.bind(this))
}).then(this.unlock.bind(this)); .then(function() {
return block;
});
}; };
BlockService.prototype._setNextBlock = function(ops, prevBlockHash, block) { BlockService.prototype._setNextBlock = function(ops, prevBlockHash, block) {

View File

@ -60,6 +60,7 @@
"glob": "*", "glob": "*",
"js-yaml": "^3.2.7", "js-yaml": "^3.2.7",
"leveldown": "^1.0.1", "leveldown": "^1.0.1",
"levelup": "git://github.com/rvagg/node-levelup",
"moment": "~2.5.0", "moment": "~2.5.0",
"morgan": "^1.5.1", "morgan": "^1.5.1",
"request": "^2.48.0", "request": "^2.48.0",