aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGustav Simonsson <gustav.simonsson@gmail.com>2015-08-03 08:46:34 +0800
committerGustav Simonsson <gustav.simonsson@gmail.com>2015-08-04 21:20:28 +0800
commit26c6e3b206bcf95b6b042ab529522ab7f2bc6f08 (patch)
tree1eaa6d5e07c1286f2d432ed178666ba4f401e105 /core
parentff66e8fa2935d59d5104e324861d9e1bb517ffaa (diff)
downloaddexon-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')
-rw-r--r--core/chain_util.go17
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))