|
|
|
@ -72,43 +72,56 @@ int64_t UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParam
@@ -72,43 +72,56 @@ int64_t UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParam
|
|
|
|
|
return nNewTime - nOldTime; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BlockAssembler::BlockAssembler(const CChainParams& _chainparams) |
|
|
|
|
: chainparams(_chainparams) |
|
|
|
|
BlockAssembler::Options::Options() { |
|
|
|
|
blockMinFeeRate = CFeeRate(DEFAULT_BLOCK_MIN_TX_FEE); |
|
|
|
|
nBlockMaxWeight = DEFAULT_BLOCK_MAX_WEIGHT; |
|
|
|
|
nBlockMaxSize = DEFAULT_BLOCK_MAX_SIZE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BlockAssembler::BlockAssembler(const CChainParams& params, const Options& options) : chainparams(params) |
|
|
|
|
{ |
|
|
|
|
blockMinFeeRate = options.blockMinFeeRate; |
|
|
|
|
// Limit weight to between 4K and MAX_BLOCK_WEIGHT-4K for sanity:
|
|
|
|
|
nBlockMaxWeight = std::max<size_t>(4000, std::min<size_t>(MAX_BLOCK_WEIGHT - 4000, options.nBlockMaxWeight)); |
|
|
|
|
// Limit size to between 1K and MAX_BLOCK_SERIALIZED_SIZE-1K for sanity:
|
|
|
|
|
nBlockMaxSize = std::max<size_t>(1000, std::min<size_t>(MAX_BLOCK_SERIALIZED_SIZE - 1000, options.nBlockMaxSize)); |
|
|
|
|
// Whether we need to account for byte usage (in addition to weight usage)
|
|
|
|
|
fNeedSizeAccounting = (nBlockMaxSize < MAX_BLOCK_SERIALIZED_SIZE - 1000); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static BlockAssembler::Options DefaultOptions(const CChainParams& params) |
|
|
|
|
{ |
|
|
|
|
// Block resource limits
|
|
|
|
|
// If neither -blockmaxsize or -blockmaxweight is given, limit to DEFAULT_BLOCK_MAX_*
|
|
|
|
|
// If only one is given, only restrict the specified resource.
|
|
|
|
|
// If both are given, restrict both.
|
|
|
|
|
nBlockMaxWeight = DEFAULT_BLOCK_MAX_WEIGHT; |
|
|
|
|
nBlockMaxSize = DEFAULT_BLOCK_MAX_SIZE; |
|
|
|
|
BlockAssembler::Options options; |
|
|
|
|
options.nBlockMaxWeight = DEFAULT_BLOCK_MAX_WEIGHT; |
|
|
|
|
options.nBlockMaxSize = DEFAULT_BLOCK_MAX_SIZE; |
|
|
|
|
bool fWeightSet = false; |
|
|
|
|
if (IsArgSet("-blockmaxweight")) { |
|
|
|
|
nBlockMaxWeight = GetArg("-blockmaxweight", DEFAULT_BLOCK_MAX_WEIGHT); |
|
|
|
|
nBlockMaxSize = MAX_BLOCK_SERIALIZED_SIZE; |
|
|
|
|
options.nBlockMaxWeight = GetArg("-blockmaxweight", DEFAULT_BLOCK_MAX_WEIGHT); |
|
|
|
|
options.nBlockMaxSize = MAX_BLOCK_SERIALIZED_SIZE; |
|
|
|
|
fWeightSet = true; |
|
|
|
|
} |
|
|
|
|
if (IsArgSet("-blockmaxsize")) { |
|
|
|
|
nBlockMaxSize = GetArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE); |
|
|
|
|
options.nBlockMaxSize = GetArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE); |
|
|
|
|
if (!fWeightSet) { |
|
|
|
|
nBlockMaxWeight = nBlockMaxSize * WITNESS_SCALE_FACTOR; |
|
|
|
|
options.nBlockMaxWeight = options.nBlockMaxSize * WITNESS_SCALE_FACTOR; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (IsArgSet("-blockmintxfee")) { |
|
|
|
|
CAmount n = 0; |
|
|
|
|
ParseMoney(GetArg("-blockmintxfee", ""), n); |
|
|
|
|
blockMinFeeRate = CFeeRate(n); |
|
|
|
|
options.blockMinFeeRate = CFeeRate(n); |
|
|
|
|
} else { |
|
|
|
|
blockMinFeeRate = CFeeRate(DEFAULT_BLOCK_MIN_TX_FEE); |
|
|
|
|
options.blockMinFeeRate = CFeeRate(DEFAULT_BLOCK_MIN_TX_FEE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Limit weight to between 4K and MAX_BLOCK_WEIGHT-4K for sanity:
|
|
|
|
|
nBlockMaxWeight = std::max((unsigned int)4000, std::min((unsigned int)(MAX_BLOCK_WEIGHT-4000), nBlockMaxWeight)); |
|
|
|
|
// Limit size to between 1K and MAX_BLOCK_SERIALIZED_SIZE-1K for sanity:
|
|
|
|
|
nBlockMaxSize = std::max((unsigned int)1000, std::min((unsigned int)(MAX_BLOCK_SERIALIZED_SIZE-1000), nBlockMaxSize)); |
|
|
|
|
// Whether we need to account for byte usage (in addition to weight usage)
|
|
|
|
|
fNeedSizeAccounting = (nBlockMaxSize < MAX_BLOCK_SERIALIZED_SIZE-1000); |
|
|
|
|
return options; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BlockAssembler::BlockAssembler(const CChainParams& params) : BlockAssembler(params, DefaultOptions(params)) {} |
|
|
|
|
|
|
|
|
|
void BlockAssembler::resetBlock() |
|
|
|
|
{ |
|
|
|
|
inBlock.clear(); |
|
|
|
|