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