gbt: fix deps check. do not mutate version.
This commit is contained in:
parent
89cbdac61e
commit
2e4a759487
@ -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,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user