From 17d2f1586b7c21ac393f8fd0d0c755c8d1966918 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 30 Mar 2016 19:52:32 -0700 Subject: [PATCH] refactor. --- lib/bcoin/chain.js | 76 +++++++++++++++++++++++++--------------------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/lib/bcoin/chain.js b/lib/bcoin/chain.js index 523e5298..61bcce70 100644 --- a/lib/bcoin/chain.js +++ b/lib/bcoin/chain.js @@ -503,7 +503,7 @@ Chain.prototype._verify = function _verify(block, prev, callback) { // lockFlags |= constants.flags.MEDIAN_TIME_PAST; if (network.type === 'segnet4') { - self.getState(prev, null, 'witness', function(err, state) { + self.getState(prev, 'witness', function(err, state) { if (err) return callback(err); @@ -1777,7 +1777,7 @@ Chain.prototype.retarget = function retarget(last, first) { }; // https://github.com/bitcoin/bitcoin/pull/7648/files -Chain.prototype.getState = function getState(prev, block, id, callback) { +Chain.prototype.getState = function getState(prev, id, callback) { var self = this; var period = network.minerConfirmationWindow; var threshold = network.ruleChangeActivationThreshold; @@ -1803,7 +1803,7 @@ Chain.prototype.getState = function getState(prev, block, id, callback) { assert(ancestor.height === height); assert(((ancestor.height + 1) % period) === 0); } - return self.getState(ancestor, block, id, callback); + return self.getState(ancestor, id, callback); }); } @@ -1912,7 +1912,7 @@ Chain.prototype.computeBlockVersion = function computeBlockVersion(prev, callbac utils.forEachSerial(Object.keys(network.deployments), function(id, next) { var deployment = network.deployments[id]; - self.getState(prev, null, id, function(err, state) { + self.getState(prev, id, function(err, state) { if (err) return next(err); @@ -1931,6 +1931,7 @@ Chain.prototype.computeBlockVersion = function computeBlockVersion(prev, callbac return callback(null, constants.versionbits.LAST_OLD_BLOCK_VERSION); version |= constants.versionbits.TOP_BITS; + version >>>= 0; return callback(null, version); }); @@ -1938,34 +1939,17 @@ Chain.prototype.computeBlockVersion = function computeBlockVersion(prev, callbac Chain.prototype.isSegwitActive = function isSegwitActive(callback) { var self = this; - var tip = this.tip; var unlock; + if (this.segwitActive != null) + return utils.asyncify(callback)(null, this.segwitActive); + if (!network.witness) { this.segwitActive = false; return utils.asyncify(callback)(null, false); } - if (network.type === 'segnet4') { - return this.tip.getPrevious(function(err, prev) { - if (err) - return callback(err); - - return self.getState(prev, null, 'witness', function(err, state) { - if (err) - return callback(err); - return callback(null, state === constants.thresholdStates.ACTIVE); - }); - }); - } - - if (this.segwitActive != null) - return utils.asyncify(callback)(null, this.segwitActive); - - if (!tip) - return utils.asyncify(callback)(null, false); - - if (!(network.segwitHeight !== -1 && tip.height >= network.segwitHeight)) + if (!this.tip) return utils.asyncify(callback)(null, false); unlock = this._lock(isSegwitActive, [callback]); @@ -1974,24 +1958,48 @@ Chain.prototype.isSegwitActive = function isSegwitActive(callback) { callback = utils.wrap(callback, unlock); - if (tip.ancestors.length) { - self.segwitActive = tip.isUpgraded(5); - return callback(null, self.segwitActive); + if (network.type === 'segnet4') { + return this.tip.getPrevious(function(err, prev) { + if (err) + return callback(err); + + return self.getState(prev, 'witness', function(err, state) { + if (err) + return callback(err); + self.segwitActive = state === constants.thresholdStates.ACTIVE; + return callback(null, self.segwitActive); + }); + }); } - tip.ensureAncestors(function(err) { + assert(network.type === 'segnet3'); + + if (!(network.segwitHeight !== -1 && this.tip.height >= network.segwitHeight)) + return utils.asyncify(callback)(null, false); + + return this.tip.getPrevious(function(err, prev) { if (err) return callback(err); - if (!tip.isUpgraded(5)) { - tip.free(); + if (!prev) { self.segwitActive = false; return callback(null, false); } - tip.free(); - self.segwitActive = true; - return callback(null, true); + prev.ensureAncestors(function(err) { + if (err) + return callback(err); + + if (!prev.isUpgraded(5)) { + prev.free(); + self.segwitActive = false; + return callback(null, false); + } + + prev.free(); + self.segwitActive = true; + return callback(null, true); + }); }); };