hardfork: remove IsSuperMajority soft fork check.

This commit is contained in:
Christopher Jeffrey 2016-10-21 18:54:36 -07:00
parent 083c5ea8f5
commit b0b8d333a5
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
3 changed files with 18 additions and 138 deletions

View File

@ -439,6 +439,7 @@ Chain.prototype.verify = co(function* verify(block, prev) {
*/
Chain.prototype.getDeployments = co(function* getDeployments(block, prev, ancestors) {
var height = prev.height + 1;
var state = new DeploymentState();
var active;
@ -458,42 +459,42 @@ Chain.prototype.getDeployments = co(function* getDeployments(block, prev, ancest
// Only allow version 2 blocks (coinbase height)
// once the majority of blocks are using it.
if (block.version < 2 && prev.isOutdated(2, ancestors))
if (block.version < 2 && height >= this.network.block.bip34height)
throw new VerifyError(block, 'obsolete', 'bad-version', 0);
// Only allow version 3 blocks (sig validation)
// once the majority of blocks are using it.
if (block.version < 3 && prev.isOutdated(3, ancestors))
if (block.version < 3 && height >= this.network.block.bip66height)
throw new VerifyError(block, 'obsolete', 'bad-version', 0);
// Only allow version 4 blocks (checklocktimeverify)
// once the majority of blocks are using it.
if (block.version < 4 && prev.isOutdated(4, ancestors))
if (block.version < 4 && height >= this.network.block.bip65height)
throw new VerifyError(block, 'obsolete', 'bad-version', 0);
// Only allow version 5 blocks (bip141 - segnet3)
// once the majority of blocks are using it.
if (this.options.witness && this.network.oldWitness) {
if (block.version < 5 && prev.isOutdated(5, ancestors))
if (block.version < 5 && height >= this.network.block.bip141height)
throw new VerifyError(block, 'obsolete', 'bad-version', 0);
}
// Make sure the height contained in the coinbase is correct.
if (block.version >= 2 && prev.isUpgraded(2, ancestors)) {
if (height >= this.network.block.bip34height) {
state.bip34 = true;
if (!this.state.hasBIP34())
this.logger.warning('BIP34 has been activated.');
}
// Signature validation is now enforced (bip66)
if (block.version >= 3 && prev.isUpgraded(3, ancestors)) {
if (height >= this.network.block.bip66height) {
state.flags |= constants.flags.VERIFY_DERSIG;
if (!this.state.hasBIP66())
this.logger.warning('BIP66 has been activated.');
}
// CHECKLOCKTIMEVERIFY is now usable (bip65)
if (block.version >= 4 && prev.isUpgraded(4, ancestors)) {
if (height >= this.network.block.bip65height) {
state.flags |= constants.flags.VERIFY_CHECKLOCKTIMEVERIFY;
if (!this.state.hasCLTV())
this.logger.warning('BIP65 has been activated.');
@ -501,7 +502,7 @@ Chain.prototype.getDeployments = co(function* getDeployments(block, prev, ancest
// Segregrated witness is now usable (bip141 - segnet3)
if (this.options.witness && this.network.oldWitness) {
if (block.version >= 5 && prev.isUpgraded(5, ancestors)) {
if (height >= this.network.block.bip141height) {
state.flags |= constants.flags.VERIFY_WITNESS;
if (!this.state.hasWitness())
this.logger.warning('Segwit has been activated.');
@ -525,13 +526,13 @@ Chain.prototype.getDeployments = co(function* getDeployments(block, prev, ancest
// Segregrated witness is now usable (bip141 - segnet4)
active = yield this.isActive(prev, 'witness');
if (active) {
// BIP147
// state.flags |= constants.flags.VERIFY_NULLDUMMY;
if (this.options.witness) {
state.flags |= constants.flags.VERIFY_WITNESS;
if (!this.state.hasWitness())
this.logger.warning('Segwit has been activated.');
}
// BIP147
state.flags |= constants.flags.VERIFY_NULLDUMMY;
}
return state;

View File

@ -163,13 +163,14 @@ ChainEntry.prototype.isGenesis = function isGenesis() {
*/
ChainEntry.prototype.getRetargetAncestors = function getRetargetAncestors() {
var majorityWindow = this.network.block.majorityWindow;
var medianTimespan = constants.block.MEDIAN_TIMESPAN;
var powDiffInterval = this.network.pow.retargetInterval;
var retargetInterval = this.network.pow.retargetInterval;
var diffReset = this.network.pow.difficultyReset;
var max = Math.max(majorityWindow, medianTimespan);
if ((this.height + 1) % powDiffInterval === 0 || diffReset)
max = Math.max(max, powDiffInterval);
var max = medianTimespan;
if ((this.height + 1) % retargetInterval === 0 || diffReset)
max = Math.max(max, retargetInterval);
return this.getAncestors(max);
};
@ -330,93 +331,6 @@ ChainEntry.prototype.getMedianTimeAsync = co(function* getMedianTimeAsync() {
return this.getMedianTime(ancestors);
});
/**
* Check isSuperMajority against majorityRejectOutdated.
* @param {Number} version
* @param {ChainEntry[]} ancestors
* @returns {Boolean}
*/
ChainEntry.prototype.isOutdated = function isOutdated(version, ancestors) {
return this.isSuperMajority(version,
this.network.block.majorityRejectOutdated,
ancestors);
};
/**
* Check {@link ChainEntry#isUpgraded asynchronously}.
* @param {Number} version
* @returns {Promise} - Returns Boolean.
* @returns {Boolean}
*/
ChainEntry.prototype.isOutdatedAsync = function isOutdatedAsync(version) {
return this.isSuperMajorityAsync(version,
this.network.block.majorityRejectOutdated);
};
/**
* Check isSuperMajority against majorityEnforceUpgrade.
* @param {Number} version
* @param {ChainEntry[]} ancestors
* @returns {Boolean}
*/
ChainEntry.prototype.isUpgraded = function isUpgraded(version, ancestors) {
return this.isSuperMajority(version,
this.network.block.majorityEnforceUpgrade,
ancestors);
};
/**
* Check {@link ChainEntry#isUpgraded} asynchronously.
* @param {Number} version
* @returns {Promise}
* @returns {Boolean}
*/
ChainEntry.prototype.isUpgradedAsync = function isUpgradedAsync(version) {
return this.isSuperMajorityAsync(version,
this.network.block.majorityEnforceUpgrade);
};
/**
* Calculate found number of block versions within the majority window.
* @param {Number} version
* @param {Number} required
* @param {ChainEntry[]} ancestors
* @returns {Boolean}
*/
ChainEntry.prototype.isSuperMajority = function isSuperMajority(version, required, ancestors) {
var entry = this;
var found = 0;
var majorityWindow = this.network.block.majorityWindow;
var i;
for (i = 0; i < majorityWindow && found < required && entry; i++) {
if (entry.version >= version)
found++;
entry = ancestors[i + 1];
}
return found >= required;
};
/**
* Calculate {@link ChainEntry#isSuperMajority asynchronously}.
* @param {Number} version
* @param {Number} required
* @returns {Promise} - Returns Boolean.
* @returns {Boolean}
*/
ChainEntry.prototype.isSuperMajorityAsync = co(function* isSuperMajorityAsync(version, required) {
var majorityWindow = this.network.block.majorityWindow;
var ancestors = yield this.getAncestors(majorityWindow);
return this.isSuperMajority(version, required, ancestors);
});
/**
* Test whether the entry is potentially
* an ancestor of a checkpoint.

View File

@ -228,26 +228,6 @@ main.pow = {
*/
main.block = {
/**
* Required versions to upgrade (see {@link ChainEntry#IsUpgraded}).
*/
majorityEnforceUpgrade: 750,
/**
* Required versions to consider block
* outdated (see {@link ChainEntry#IsOutdated}).
*/
majorityRejectOutdated: 950,
/**
* Majority window to check for upgraded and outdated
* blocks (see {@link ChainEntry#IsSuperMajority}).
*/
majorityWindow: 1000,
/**
* Height at which bip34 was activated.
* Used for avoiding bip30 checks.
@ -543,9 +523,6 @@ testnet.pow = {
};
testnet.block = {
majorityEnforceUpgrade: 51,
majorityRejectOutdated: 75,
majorityWindow: 100,
bip34height: 21111,
bip34hash: 'f88ecd9912d00d3f5c2a8e0f50417d3e415c75b3abe584346da9b32300000000',
bip65height: 581885,
@ -690,10 +667,7 @@ regtest.pow = {
};
regtest.block = {
majorityEnforceUpgrade: 750,
majorityRejectOutdated: 950,
majorityWindow: 1000,
bip34height: -1,
bip34height: 100000000,
bip34hash: null,
bip65height: 1351,
bip65hash: null,
@ -834,9 +808,6 @@ segnet3.pow = {
};
segnet3.block = {
majorityEnforceUpgrade: 7,
majorityRejectOutdated: 9,
majorityWindow: 10,
bip34height: 8,
bip34hash: '1c2a2898cebca152f872fa71b756903711ad778c7d63ba6b73c140f800000000',
bip65height: 8,
@ -956,9 +927,6 @@ segnet4.pow = {
};
segnet4.block = {
majorityEnforceUpgrade: 7,
majorityRejectOutdated: 9,
majorityWindow: 10,
bip34height: 8,
bip34hash: '6c48386dc7c460defabb5640e28b6510a5f238cdbe6756c2976a7e0913000000',
bip65height: 8,
@ -1098,9 +1066,6 @@ simnet.pow = {
};
simnet.block = {
majorityEnforceUpgrade: 51,
majorityRejectOutdated: 75,
majorityWindow: 100,
bip34height: 0,
bip34hash: 'f67ad7695d9b662a72ff3d8edbbb2de0bfa67b13974bb9910d116d5cbd863e68',
bip65height: 0,