diff options
author | Gustav Simonsson <gustav.simonsson@gmail.com> | 2015-08-03 08:46:34 +0800 |
---|---|---|
committer | Gustav Simonsson <gustav.simonsson@gmail.com> | 2015-08-04 21:20:28 +0800 |
commit | 26c6e3b206bcf95b6b042ab529522ab7f2bc6f08 (patch) | |
tree | 1eaa6d5e07c1286f2d432ed178666ba4f401e105 /core/chain_util.go | |
parent | ff66e8fa2935d59d5104e324861d9e1bb517ffaa (diff) | |
download | dexon-26c6e3b206bcf95b6b042ab529522ab7f2bc6f08.tar.gz dexon-26c6e3b206bcf95b6b042ab529522ab7f2bc6f08.tar.zst dexon-26c6e3b206bcf95b6b042ab529522ab7f2bc6f08.zip |
miner: gas limit strategy, target 3141592 & def gas price 50 Shannon
Diffstat (limited to 'core/chain_util.go')
-rw-r--r-- | core/chain_util.go | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/core/chain_util.go b/core/chain_util.go index 326bf13fb..104670195 100644 --- a/core/chain_util.go +++ b/core/chain_util.go @@ -69,17 +69,30 @@ func CalcTD(block, parent *types.Block) *big.Int { // CalcGasLimit computes the gas limit of the next block after parent. // The result may be modified by the caller. +// This is miner strategy, not consensus protocol. func CalcGasLimit(parent *types.Block) *big.Int { - decay := new(big.Int).Div(parent.GasLimit(), params.GasLimitBoundDivisor) + // contrib = (parentGasUsed * 3 / 2) / 1024 contrib := new(big.Int).Mul(parent.GasUsed(), big.NewInt(3)) contrib = contrib.Div(contrib, big.NewInt(2)) contrib = contrib.Div(contrib, params.GasLimitBoundDivisor) + // decay = parentGasLimit / 1024 -1 + decay := new(big.Int).Div(parent.GasLimit(), params.GasLimitBoundDivisor) + decay.Sub(decay, big.NewInt(1)) + + /* + strategy: gasLimit of block-to-mine is set based on parent's + gasUsed value. if parentGasUsed > parentGasLimit * (2/3) then we + increase it, otherwise lower it (or leave it unchanged if it's right + at that usage) the amount increased/decreased depends on how far away + from parentGasLimit * (2/3) parentGasUsed is. + */ gl := new(big.Int).Sub(parent.GasLimit(), decay) gl = gl.Add(gl, contrib) - gl = gl.Add(gl, big.NewInt(1)) gl.Set(common.BigMax(gl, params.MinGasLimit)) + // however, if we're now below the target (GenesisGasLimit) we increase the + // limit as much as we can (parentGasLimit / 1024 -1) if gl.Cmp(params.GenesisGasLimit) < 0 { gl.Add(parent.GasLimit(), decay) gl.Set(common.BigMin(gl, params.GenesisGasLimit)) |