gbt: fix deps check. do not mutate version.

This commit is contained in:
Christopher Jeffrey 2017-03-15 09:14:32 -07:00
parent 89cbdac61e
commit 2e4a759487
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -1068,7 +1068,7 @@ RPC.prototype.getBlockTemplate = co(function* getBlockTemplate(args, help) {
var data = valid.buf('data');
var rules = valid.array('rules');
var capabilities = valid.array('capabilities');
var version = valid.u32('maxversion', -1);
var maxVersion = valid.u32('maxversion', -1);
var coinbase = false;
var txnCap = false;
var valueCap = false;
@ -1103,7 +1103,7 @@ RPC.prototype.getBlockTemplate = co(function* getBlockTemplate(args, help) {
}
if (rules)
version = -1;
maxVersion = -1;
if (capabilities) {
for (i = 0; i < capabilities.length; i++) {
@ -1157,20 +1157,21 @@ RPC.prototype.getBlockTemplate = co(function* getBlockTemplate(args, help) {
if (lpid)
yield this.handleLongpoll(lpid);
return yield this.createTemplate(version, coinbase, rules);
return yield this.createTemplate(maxVersion, coinbase, rules);
});
RPC.prototype.createTemplate = co(function* createTemplate(version, coinbase, rules) {
RPC.prototype.createTemplate = co(function* createTemplate(maxVersion, coinbase, rules) {
var unlock = yield this.locker.lock();
try {
return yield this._createTemplate(version, coinbase, rules);
return yield this._createTemplate(maxVersion, coinbase, rules);
} finally {
unlock();
}
});
RPC.prototype._createTemplate = co(function* _createTemplate(version, coinbase, rules) {
RPC.prototype._createTemplate = co(function* _createTemplate(maxVersion, coinbase, rules) {
var attempt = yield this.getTemplate();
var version = attempt.version;
var scale = attempt.witness ? 1 : consensus.WITNESS_SCALE_FACTOR;
var mutable = ['time', 'transactions', 'prevblock'];
var txs = [];
@ -1184,7 +1185,7 @@ RPC.prototype._createTemplate = co(function* _createTemplate(version, coinbase,
// The miner doesn't support
// versionbits. Force them to
// encode our version.
if (version >= 2)
if (maxVersion >= 2)
mutable.push('version/force');
// Allow the miner to change
@ -1212,7 +1213,7 @@ RPC.prototype._createTemplate = co(function* _createTemplate(version, coinbase,
for (j = 0; j < tx.inputs.length; j++) {
input = tx.inputs[j];
dep = index[input.prevout.hash];
if (dep != null && deps.indexOf(dep) === -1) {
if (dep != null && deps.indexOf(dep + 1) === -1) {
assert(dep < i);
deps.push(dep + 1);
}
@ -1240,11 +1241,11 @@ RPC.prototype._createTemplate = co(function* _createTemplate(version, coinbase,
case common.thresholdStates.FAILED:
break;
case common.thresholdStates.LOCKED_IN:
attempt.version |= 1 << deploy.bit;
version |= 1 << deploy.bit;
case common.thresholdStates.STARTED:
if (!deploy.force) {
if (!rules || rules.indexOf(name) === -1)
attempt.version &= ~(1 << deploy.bit);
version &= ~(1 << deploy.bit);
name = '!' + name;
}
vbavailable[name] = deploy.bit;
@ -1265,12 +1266,12 @@ RPC.prototype._createTemplate = co(function* _createTemplate(version, coinbase,
}
}
attempt.version >>>= 0;
version >>>= 0;
json = {
capabilities: ['proposal'],
mutable: mutable,
version: attempt.version,
version: version,
rules: vbrules,
vbavailable: vbavailable,
vbrequired: 0,