chain: minor refactor.

This commit is contained in:
Christopher Jeffrey 2017-05-21 09:05:35 -07:00
parent 75c279169c
commit 1eaafb1a09
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -1236,7 +1236,7 @@ Chain.prototype._add = co(function* add(block, flags, id) {
} }
// Do not revalidate known invalid blocks. // Do not revalidate known invalid blocks.
if (this.hasInvalid(hash, block)) { if (this.hasInvalid(block)) {
this.logger.debug('Invalid ancestors for block: %s.', block.rhash()); this.logger.debug('Invalid ancestors for block: %s.', block.rhash());
throw new VerifyError(block, 'duplicate', 'duplicate', 100); throw new VerifyError(block, 'duplicate', 'duplicate', 100);
} }
@ -1499,7 +1499,7 @@ Chain.prototype.storeOrphan = function storeOrphan(block, flags, id) {
'Removing forked orphan block: %s (%d).', 'Removing forked orphan block: %s (%d).',
orphan.block.rhash(), height); orphan.block.rhash(), height);
this.removeOrphan(orphan.block.hash('hex')); this.removeOrphan(orphan);
} }
this.limitOrphans(); this.limitOrphans();
@ -1540,13 +1540,13 @@ Chain.prototype.addOrphan = function addOrphan(orphan) {
/** /**
* Remove an orphan. * Remove an orphan.
* @private * @private
* @param {Hash} hash * @param {Orphan} orphan
* @returns {Orphan} * @returns {Orphan}
*/ */
Chain.prototype.removeOrphan = function removeOrphan(hash) { Chain.prototype.removeOrphan = function removeOrphan(orphan) {
var orphan = this.orphanMap[hash];
var block = orphan.block; var block = orphan.block;
var hash = block.hash('hex');
assert(this.orphanMap[hash]); assert(this.orphanMap[hash]);
assert(this.orphanPrev[block.prevBlock]); assert(this.orphanPrev[block.prevBlock]);
@ -1583,7 +1583,7 @@ Chain.prototype.resolveOrphan = function resolveOrphan(hash) {
if (!orphan) if (!orphan)
return; return;
return this.removeOrphan(orphan.block.hash('hex')); return this.removeOrphan(orphan);
}; };
/** /**
@ -1611,7 +1611,6 @@ Chain.prototype.purgeOrphans = function purgeOrphans() {
Chain.prototype.limitOrphans = function limitOrphans() { Chain.prototype.limitOrphans = function limitOrphans() {
var now = util.now(); var now = util.now();
var hashes = Object.keys(this.orphanMap); var hashes = Object.keys(this.orphanMap);
var total = 0;
var i, hash, orphan, oldest; var i, hash, orphan, oldest;
for (i = 0; i < hashes.length; i++) { for (i = 0; i < hashes.length; i++) {
@ -1624,33 +1623,28 @@ Chain.prototype.limitOrphans = function limitOrphans() {
continue; continue;
} }
this.removeOrphan(hash); this.removeOrphan(orphan);
total++;
} }
if (this.orphanCount >= this.options.maxOrphans) { if (this.orphanCount < this.options.maxOrphans)
if (total === 0 && oldest) { return;
hash = oldest.block.hash('hex');
this.removeOrphan(hash);
}
}
if (total > 0) if (!oldest)
this.logger.warning('Pruned %d orphans!', total); return;
return total; this.removeOrphan(oldest);
}; };
/** /**
* Test whether an invalid block hash has been seen. * Test whether an invalid block hash has been seen.
* @private * @private
* @param {Hash} hash
* @param {Block} block * @param {Block} block
* @returns {Boolean} * @returns {Boolean}
*/ */
Chain.prototype.hasInvalid = function hasInvalid(hash, block) { Chain.prototype.hasInvalid = function hasInvalid(block) {
var hash = block.hash('hex');
if (this.invalid.has(hash)) if (this.invalid.has(hash))
return true; return true;