miner: use bigger reserve defaults.

This commit is contained in:
Christopher Jeffrey 2017-02-22 20:55:56 -08:00
parent f2964e06fb
commit 7104e4c02f
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
2 changed files with 36 additions and 13 deletions

View File

@ -300,7 +300,9 @@ Miner.prototype._createBlock = co(function* createBlock(tip, address) {
address: address,
coinbaseFlags: this.options.coinbaseFlags,
witness: this.chain.state.hasWitness(),
network: this.network
network: this.network,
weight: this.options.reservedWeight,
sigops: this.options.reservedSigops
});
this.build(attempt);
@ -465,7 +467,8 @@ Miner.prototype.build = function build(attempt) {
attempt.refresh();
assert(block.getWeight() <= attempt.weight);
assert(block.getWeight() <= attempt.weight,
'Block exceeds reserved weight!');
};
/**
@ -493,6 +496,8 @@ function MinerOptions(options) {
this.priorityWeight = policy.PRIORITY_BLOCK_WEIGHT;
this.minPriority = policy.MIN_BLOCK_PRIORITY;
this.maxSigops = consensus.MAX_BLOCK_SIGOPS_COST;
this.reservedWeight = 4000;
this.reservedSigops = 400;
this.fromOptions(options);
}
@ -580,6 +585,16 @@ MinerOptions.prototype.fromOptions = function fromOptions(options) {
this.minPriority = options.minPriority;
}
if (options.reservedWeight != null) {
assert(util.isNumber(options.reservedWeight));
this.reservedWeight = options.reservedWeight;
}
if (options.reservedSigops != null) {
assert(util.isNumber(options.reservedSigops));
this.reservedSigops = options.reservedSigops;
}
return this;
};

View File

@ -67,8 +67,8 @@ function MinerBlock(options) {
this.destroyed = false;
this.committed = false;
this.sigops = 0;
this.weight = 0;
this.sigops = options.sigops;
this.weight = options.weight;
this.fees = 0;
this.items = [];
@ -119,6 +119,8 @@ MinerBlock.prototype._init = function _init() {
var hash = encoding.ZERO_HASH;
var block = this.block;
var cb = this.coinbase;
var weight = 0;
var sigops = 0;
var input, output, commit, padding;
assert(this.coinbaseFlags.length <= 20);
@ -176,16 +178,16 @@ MinerBlock.prototype._init = function _init() {
block.txs.push(cb);
// Initialize weight.
this.weight = block.getWeight();
weight = block.getWeight();
// 4 extra bytes for varint tx count.
this.weight += 4 * scale;
weight += 4 * scale;
// Padding for the CB height (constant size).
padding = 5 - input.script.code[0].getSize();
assert(padding >= 0);
this.weight += padding * scale;
weight += padding * scale;
// Reserved size.
// Without segwit:
@ -205,14 +207,14 @@ MinerBlock.prototype._init = function _init() {
// CB size = 208
// Sigops cost = 4
if (!this.witness) {
assert.equal(this.weight, 840);
assert.equal(weight, 840);
assert.equal(block.getBaseSize() + 4 + padding, 210);
assert.equal(block.getSize() + 4 + padding, 210);
assert.equal(cb.getWeight() + padding * scale, 500);
assert.equal(cb.getBaseSize() + padding, 125);
assert.equal(cb.getSize() + padding, 125);
} else {
assert.equal(this.weight, 1064);
assert.equal(weight, 1064);
assert.equal(block.getBaseSize() + 4 + padding, 257);
assert.equal(block.getSize() + 4 + padding, 293);
assert.equal(cb.getWeight() + padding * scale, 724);
@ -221,7 +223,7 @@ MinerBlock.prototype._init = function _init() {
}
// Initialize sigops weight.
this.sigops = 4;
sigops = 4;
// Setup coinbase flags (variable size).
input.script.set(1, this.coinbaseFlags);
@ -236,11 +238,17 @@ MinerBlock.prototype._init = function _init() {
// Ensure the variable size
// stuff didn't break anything.
assert(block.getWeight() <= this.weight,
assert(block.getWeight() <= weight,
'Coinbase exceeds reserved size!');
assert(cb.getSigopsCost(null, this.flags) <= this.sigops,
'Coinbase exceeds reserved sigops');
assert(cb.getSigopsCost(null, this.flags) <= sigops,
'Coinbase exceeds reserved sigops!');
assert(this.weight >= weight,
'Coinbase exceeds reserved size!');
assert(this.sigops >= sigops,
'Coinbase exceeds reserved sigops!');
};
/**