logs for deployment activation.

This commit is contained in:
Christopher Jeffrey 2016-07-14 18:26:10 -07:00
parent 74c999abe3
commit f4a70df1a0
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -213,14 +213,16 @@ Chain.prototype._open = function open(callback) {
self.logger.memory(); self.logger.memory();
self.getInitialState(function(err) { self.getDeploymentState(function(err, state) {
if (err) if (err)
return callback(err); return callback(err);
if (self.state.hasCSV()) self.state = state;
if (state.hasCSV())
self.logger.info('CSV is active.'); self.logger.info('CSV is active.');
if (self.state.hasWitness()) if (state.hasWitness())
self.logger.info('Segwit is active.'); self.logger.info('Segwit is active.');
self.logger.memory(); self.logger.memory();
@ -432,6 +434,9 @@ Chain.prototype.verifyContext = function verifyContext(block, prev, callback) {
if (err) if (err)
return callback(err); return callback(err);
// Expose the state globally.
self.state = state;
return callback(null, view); return callback(null, view);
}); });
}); });
@ -509,9 +514,6 @@ Chain.prototype.verify = function verify(block, prev, callback) {
if (err) if (err)
return callback(err); return callback(err);
// Expose the state globally.
self.state = state;
// Can't verify any further when merkleblock or headers. // Can't verify any further when merkleblock or headers.
if (self.options.spv) if (self.options.spv)
return callback(null, state); return callback(null, state);
@ -609,8 +611,11 @@ Chain.prototype.getDeployments = function getDeployments(block, prev, ancestors,
// not have a signature. See: // not have a signature. See:
// 6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192 // 6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192
// 9c08a4d78931342b37fd5f72900fb9983087e6f46c4a097d8a1f52c74e28eaf6 // 9c08a4d78931342b37fd5f72900fb9983087e6f46c4a097d8a1f52c74e28eaf6
if (block.ts >= constants.block.BIP16_TIME) if (block.ts >= constants.block.BIP16_TIME) {
state.flags |= constants.flags.VERIFY_P2SH; state.flags |= constants.flags.VERIFY_P2SH;
if (!this.state.hasP2SH())
this.logger.warning('P2SH has been activated.');
}
// Only allow version 2 blocks (coinbase height) // Only allow version 2 blocks (coinbase height)
// once the majority of blocks are using it. // once the majority of blocks are using it.
@ -635,21 +640,33 @@ Chain.prototype.getDeployments = function getDeployments(block, prev, ancestors,
} }
// Make sure the height contained in the coinbase is correct. // Make sure the height contained in the coinbase is correct.
if (block.version >= 2 && prev.isUpgraded(2, ancestors)) if (block.version >= 2 && prev.isUpgraded(2, ancestors)) {
state.bip34 = true; state.bip34 = true;
if (!this.state.hasBIP34())
this.logger.warning('BIP34 has been activated.');
}
// Signature validation is now enforced (bip66) // Signature validation is now enforced (bip66)
if (block.version >= 3 && prev.isUpgraded(3, ancestors)) if (block.version >= 3 && prev.isUpgraded(3, ancestors)) {
state.flags |= constants.flags.VERIFY_DERSIG; state.flags |= constants.flags.VERIFY_DERSIG;
if (!this.state.hasBIP66())
this.logger.warning('BIP66 has been activated.');
}
// CHECKLOCKTIMEVERIFY is now usable (bip65) // CHECKLOCKTIMEVERIFY is now usable (bip65)
if (block.version >= 4 && prev.isUpgraded(4, ancestors)) if (block.version >= 4 && prev.isUpgraded(4, ancestors)) {
state.flags |= constants.flags.VERIFY_CHECKLOCKTIMEVERIFY; state.flags |= constants.flags.VERIFY_CHECKLOCKTIMEVERIFY;
if (!this.state.hasCLTV())
this.logger.warning('BIP65 has been activated.');
}
// Segregrated witness is now usable (bip141 - segnet3) // Segregrated witness is now usable (bip141 - segnet3)
if (this.network.segwitHeight !== -1 && height >= this.network.segwitHeight) { if (this.network.segwitHeight !== -1 && height >= this.network.segwitHeight) {
if (block.version >= 5 && prev.isUpgraded(5, ancestors)) if (block.version >= 5 && prev.isUpgraded(5, ancestors)) {
state.flags |= constants.flags.VERIFY_WITNESS; state.flags |= constants.flags.VERIFY_WITNESS;
if (!this.state.hasWitness())
this.logger.warning('Segwit has been activated.');
}
} }
utils.serial([ utils.serial([
@ -664,6 +681,8 @@ Chain.prototype.getDeployments = function getDeployments(block, prev, ancestors,
state.flags |= constants.flags.VERIFY_CHECKSEQUENCEVERIFY; state.flags |= constants.flags.VERIFY_CHECKSEQUENCEVERIFY;
state.lockFlags |= constants.flags.VERIFY_SEQUENCE; state.lockFlags |= constants.flags.VERIFY_SEQUENCE;
state.lockFlags |= constants.flags.MEDIAN_TIME_PAST; state.lockFlags |= constants.flags.MEDIAN_TIME_PAST;
if (!self.state.hasCSV())
self.logger.warning('CSV has been activated.');
} }
return next(); return next();
@ -675,8 +694,11 @@ Chain.prototype.getDeployments = function getDeployments(block, prev, ancestors,
if (err) if (err)
return next(err); return next(err);
if (active) if (active) {
state.flags |= constants.flags.VERIFY_WITNESS; state.flags |= constants.flags.VERIFY_WITNESS;
if (!self.state.hasWitness())
self.logger.warning('Segwit has been activated.');
}
return next(); return next();
}); });
@ -2247,36 +2269,29 @@ Chain.prototype.computeBlockVersion = function computeBlockVersion(prev, callbac
}; };
/** /**
* Get the initial deployment state of the chain. Called on load. * Get the current deployment state of the chain. Called on load.
* @private * @private
* @param {Function} callback - Returns [Error, {@link DeploymentState}]. * @param {Function} callback - Returns [Error, {@link DeploymentState}].
*/ */
Chain.prototype.getInitialState = function getInitialState(callback) { Chain.prototype.getDeploymentState = function getDeploymentState(callback) {
var self = this; var self = this;
if (!this.tip) if (!this.tip)
return utils.nextTick(callback); return callback(null, this.state);
this.tip.getPrevious(function(err, prev) { this.tip.getPrevious(function(err, prev) {
if (err) if (err)
return callback(err); return callback(err);
if (!prev) if (!prev)
return callback(); return callback(null, self.state);
prev.getRetargetAncestors(function(err, ancestors) { prev.getRetargetAncestors(function(err, ancestors) {
if (err) if (err)
return callback(err); return callback(err);
self.getDeployments(self.tip, prev, ancestors, function(err, state) { self.getDeployments(self.tip, prev, ancestors, callback);
if (err)
return callback(err);
self.state = state;
return callback(null, state);
});
}); });
}); });
}; };