pool: refactor reject handling.

This commit is contained in:
Christopher Jeffrey 2017-01-05 04:47:33 -08:00
parent 94d4e80373
commit 5fb64e7bac
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -1022,15 +1022,22 @@ Pool.prototype.handleTX = co(function* handleTX(peer, tx) {
var missing; var missing;
if (!requested) { if (!requested) {
peer.invFilter.add(tx.hash());
if (!this.mempool)
this.txFilter.add(tx.hash());
this.logger.warning('Peer sent unrequested tx: %s (%s).', this.logger.warning('Peer sent unrequested tx: %s (%s).',
tx.txid(), peer.hostname); tx.txid(), peer.hostname);
if (this.hasReject(tx.hash())) { peer.invFilter.add(tx.hash());
}
if (!this.mempool) {
if (!requested)
this.txFilter.add(tx.hash());
this.emit('tx', tx, peer);
this.scheduleRequests(peer);
return;
}
if (!requested) {
if (this.mempool.hasReject(tx.hash())) {
throw new VerifyError(tx, throw new VerifyError(tx,
'alreadyknown', 'alreadyknown',
'txn-already-in-mempool', 'txn-already-in-mempool',
@ -1038,12 +1045,6 @@ Pool.prototype.handleTX = co(function* handleTX(peer, tx) {
} }
} }
if (!this.mempool) {
this.emit('tx', tx, peer);
this.scheduleRequests(peer);
return;
}
try { try {
missing = yield this.mempool.addTX(tx); missing = yield this.mempool.addTX(tx);
} catch (err) { } catch (err) {
@ -1356,19 +1357,6 @@ Pool.prototype.handleAlert = function handleAlert(peer, alert) {
this.emit('alert', alert, peer); this.emit('alert', alert, peer);
}; };
/**
* Test the mempool to see if it
* contains a recent reject.
* @param {Hash} hash
* @returns {Boolean}
*/
Pool.prototype.hasReject = function hasReject(hash) {
if (!this.mempool)
return false;
return this.mempool.hasReject(hash);
};
/** /**
* Create an inbound peer from an existing socket. * Create an inbound peer from an existing socket.
* @private * @private
@ -1650,8 +1638,6 @@ Pool.prototype.getBlock = function getBlock(peer, hash) {
/** /**
* Test whether the chain has or has seen an item. * Test whether the chain has or has seen an item.
* @param {Peer} peer
* @param {InvType} type
* @param {Hash} hash * @param {Hash} hash
* @returns {Promise} - Returns Boolean. * @returns {Promise} - Returns Boolean.
*/ */
@ -1710,8 +1696,6 @@ Pool.prototype.getTX = function getTX(peer, hashes) {
/** /**
* Test whether the mempool has or has seen an item. * Test whether the mempool has or has seen an item.
* @param {Peer} peer
* @param {InvType} type
* @param {Hash} hash * @param {Hash} hash
* @returns {Promise} - Returns Boolean. * @returns {Promise} - Returns Boolean.
*/ */
@ -1726,12 +1710,12 @@ Pool.prototype.hasTX = function hasTX(hash) {
// Check the mempool. // Check the mempool.
if (this.mempool.has(hash)) if (this.mempool.has(hash))
return true; return true;
}
// If we recently rejected this item. Ignore. // If we recently rejected this item. Ignore.
if (this.hasReject(hash)) { if (this.mempool.hasReject(hash)) {
this.logger.spam('Saw known reject of %s.', util.revHex(hash)); this.logger.spam('Saw known reject of %s.', util.revHex(hash));
return true; return true;
}
} }
// Check the pending requests. // Check the pending requests.