From 2e4a7594870bcbcf04c7d51599a7852e7bc65cfa Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 15 Mar 2017 09:14:32 -0700 Subject: [PATCH] gbt: fix deps check. do not mutate version. --- lib/http/rpc.js | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/http/rpc.js b/lib/http/rpc.js index 506954f0..84779369 100644 --- a/lib/http/rpc.js +++ b/lib/http/rpc.js @@ -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,