refactor.
This commit is contained in:
parent
f62ceb8515
commit
17d2f1586b
@ -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);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user