diff --git a/lib/bcoin/chain.js b/lib/bcoin/chain.js index f90f5eb2..3ec97558 100644 --- a/lib/bcoin/chain.js +++ b/lib/bcoin/chain.js @@ -1883,7 +1883,7 @@ Chain.prototype.getLocator = function getLocator(start, callback, force) { if (start == null) start = this.tip.hash; - return this.db.get(start, function(err, entry) { + this.db.get(start, function(err, entry) { if (err) return callback(err); @@ -1898,45 +1898,47 @@ Chain.prototype.getLocator = function getLocator(start, callback, force) { entry = self.tip; } + height = entry.height; + entry.isMainChain(function(err, main) { if (err) return callback(err); - (function next(err, entry) { + (function next(err, hash) { if (err) return callback(err); - if (!entry) + if (!hash) return callback(null, hashes); - hashes.push(entry.hash); + hashes.push(hash); - if (entry.height === 0) + if (height === 0) return callback(null, hashes); - height = Math.max(entry.height - step, 0); + height = Math.max(height - step, 0); if (hashes.length > 10) step *= 2; if (height === 0) - return next(null, { hash: self.network.genesis.hash, height: 0 }); + return next(null, self.network.genesis.hash); - if (!main) - return entry.getAncestorByHeight(height, next); + // If we're on the main chain, we can + // do a fast lookup of the hash. + if (main) + return self.db.getHash(height, next); - // If we're in the main chain, we can - // do an O(1) lookup of the hash. - self.db.getHash(height, function(err, hash) { + entry.getAncestorByHeight(height, function(err, entry) { if (err) - return next(err); + return callback(err); - if (!hash) + if (!entry) return next(); - next(null, { hash: hash, height: height }); + return next(null, entry.hash); }); - })(null, entry); + })(null, entry.hash); }); }); };