- メモ
バージョン
- geth 1.0.0/1.0.1
- 2015/08/06時点
コードの場所
chain_util.go
コード: chain_util.go
// CalcGasLimit computes the gas limit of the next block after parent.
// The result may be modified by the caller.
func CalcGasLimit(parent *types.Block) *big.Int {
decay := new(big.Int).Div(parent.GasLimit(), params.GasLimitBoundDivisor)
contrib := new(big.Int).Mul(parent.GasUsed(), big.NewInt(3))
contrib = contrib.Div(contrib, big.NewInt(2))
contrib = contrib.Div(contrib, params.GasLimitBoundDivisor)
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))
if gl.Cmp(params.GenesisGasLimit) < 0 {
gl.Add(parent.GasLimit(), decay)
gl.Set(common.BigMin(gl, params.GenesisGasLimit))
}
return gl
}
eth_estimateGas
gas limit Pull Request #1578
v1.0.0 -> v1.0.1 での変更
計算方法?
- parentGasLimit / 1024 -1
- 5000/1024 = 4
- 4 -1 = 3
マイナーのアップデート状況を推測するスクリプト
strategy
v1.0.1で追加されたコメントから
- block-to-mineのgasLimitは、親のgasUsedの値によって決定
- もし parentGasUsed > parentGasLimit * (2/3) だったら増やす。そうでない場合は減らす(まはた、変更なし。)
- 増減量は、parentGasLimit * (2/3) parentGasUsed からどれだけ離れているかによる
/*
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.
*/