headers sync.
This commit is contained in:
parent
373e474f59
commit
8c8b62a57f
2
bin/node
2
bin/node
@ -14,7 +14,7 @@ var node = new bcoin.fullnode({
|
||||
useCheckpoints: process.argv.indexOf('--checkpoints') !== -1,
|
||||
listen: process.argv.indexOf('--listen') !== -1,
|
||||
selfish: process.argv.indexOf('--selfish') !== -1,
|
||||
broadcast: process.argv.indexOf('--broadcast') !== -1,
|
||||
headers: process.argv.indexOf('--headers') !== -1,
|
||||
mine: process.argv.indexOf('--mine') !== -1,
|
||||
parallel: process.argv.indexOf('--parallel') !== -1
|
||||
});
|
||||
|
||||
@ -17,7 +17,7 @@ var constants = bcoin.protocol.constants;
|
||||
* @global
|
||||
* @constructor
|
||||
* @extends Error
|
||||
* @param {Block|TX} object
|
||||
* @param {Block|TX} msg
|
||||
* @param {String} code - Reject packet ccode.
|
||||
* @param {String} reason - Reject packet reason.
|
||||
* @param {Number} score - Ban score increase
|
||||
@ -29,7 +29,7 @@ var constants = bcoin.protocol.constants;
|
||||
* @property {String} message
|
||||
*/
|
||||
|
||||
function VerifyError(object, code, reason, score) {
|
||||
function VerifyError(msg, code, reason, score) {
|
||||
Error.call(this);
|
||||
|
||||
if (Error.captureStackTrace)
|
||||
@ -37,11 +37,14 @@ function VerifyError(object, code, reason, score) {
|
||||
|
||||
this.type = 'VerifyError';
|
||||
|
||||
this.hash = object.hash();
|
||||
this.height = object.height;
|
||||
this.hash = msg.hash();
|
||||
this.height = msg.height;
|
||||
|
||||
if (object.getCoinbaseHeight && this.height === -1)
|
||||
this.height = object.getCoinbaseHeight();
|
||||
if (msg.getCoinbaseHeight && this.height === -1)
|
||||
this.height = msg.getCoinbaseHeight();
|
||||
|
||||
if (score == null)
|
||||
score = -1;
|
||||
|
||||
this.code = code;
|
||||
this.reason = score === -1 ? null : reason;
|
||||
|
||||
@ -86,7 +86,7 @@ Fullnode.prototype._init = function _init() {
|
||||
mempool: this.mempool,
|
||||
witness: this.network.witness,
|
||||
selfish: this.options.selfish,
|
||||
broadcast: this.options.broadcast,
|
||||
headers: this.options.headers,
|
||||
spv: false
|
||||
});
|
||||
|
||||
|
||||
@ -690,11 +690,16 @@ Pool.prototype._handleHeaders = function _handleHeaders(headers, peer, callback)
|
||||
utils.forEachSerial(headers, function(header, next) {
|
||||
var hash = header.hash('hex');
|
||||
|
||||
if (last && header.prevBlock !== last)
|
||||
if (last && header.prevBlock !== last) {
|
||||
peer.sendReject(block, 'invalid', 'bad-prevblk', 100);
|
||||
return next(new Error('Bad header chain.'));
|
||||
}
|
||||
|
||||
if (!header.verify(ret))
|
||||
if (!header.verify(ret)) {
|
||||
peer.sendReject(block, 'invalid', ret.reason, 100);
|
||||
self.rejects.add(header.hash());
|
||||
return next(new VerifyError(header, 'invalid', ret.reason, ret.score));
|
||||
}
|
||||
|
||||
last = hash;
|
||||
|
||||
@ -838,21 +843,28 @@ Pool.prototype._handleBlock = function _handleBlock(block, peer, callback) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
if (err.score >= 0)
|
||||
if (err.score !== -1)
|
||||
peer.sendReject(block, err.code, err.reason, err.score);
|
||||
|
||||
self.rejects.add(block.hash());
|
||||
|
||||
if (err.reason === 'bad-prevblk' && peer === self.peers.load) {
|
||||
self.resolveOrphan(peer, null, block.hash('hex'), function(e) {
|
||||
self.scheduleRequests(peer);
|
||||
return callback(e || err);
|
||||
});
|
||||
return;
|
||||
if (err.reason === 'bad-prevblk') {
|
||||
if (self.options.headers) {
|
||||
peer.setMisbehavior(10);
|
||||
peer.destroy();
|
||||
return callback(err);
|
||||
}
|
||||
if (peer === self.peers.load) {
|
||||
self.resolveOrphan(peer, null, block.hash('hex'), function(e) {
|
||||
self.scheduleRequests(peer);
|
||||
return callback(e || err);
|
||||
});
|
||||
return;
|
||||
}
|
||||
self.scheduleRequests(peer);
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
self.rejects.add(block.hash());
|
||||
self.scheduleRequests(peer);
|
||||
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
@ -1078,7 +1090,7 @@ Pool.prototype._handleTX = function _handleTX(tx, peer, callback) {
|
||||
addMempool(tx, function(err) {
|
||||
if (err) {
|
||||
if (err.type === 'VerifyError') {
|
||||
if (err.score >= 0)
|
||||
if (err.score !== -1)
|
||||
peer.sendReject(tx, err.code, err.reason, err.score);
|
||||
self.rejects.add(tx.hash());
|
||||
return callback(err);
|
||||
@ -2109,7 +2121,7 @@ function LoadRequest(pool, peer, type, hash, callback) {
|
||||
*/
|
||||
|
||||
LoadRequest.prototype.destroy = function destroy() {
|
||||
this.finish(new Error('Timeout or closed.'));
|
||||
return this.finish(new Error('Destroyed.'));
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user