WIP
This commit is contained in:
parent
de62831851
commit
8121f52c38
@ -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) {
|
||||||
|
|||||||
11
lib/node.js
11
lib/node.js
@ -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;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user