Browse Source

Merge pull request #1578 from Gustav-Simonsson/frontier_thawing

miner: gas limit strategy, target 3141592 & def gas price 50 Shannon
Jeffrey Wilcke 10 years ago
parent
commit
56219a5e7a
4 changed files with 22 additions and 8 deletions
  1. 3 3
      cmd/utils/flags.go
  2. 15 2
      core/chain_util.go
  3. 2 1
      eth/fetcher/fetcher_test.go
  4. 2 2
      params/protocol_params.go

+ 3 - 3
cmd/utils/flags.go

@@ -158,7 +158,7 @@ var (
 	GasPriceFlag = cli.StringFlag{
 		Name:  "gasprice",
 		Usage: "Sets the minimal gasprice when mining transactions",
-		Value: new(big.Int).Mul(big.NewInt(500), common.Shannon).String(),
+		Value: new(big.Int).Mul(big.NewInt(50), common.Shannon).String(),
 	}
 
 	UnlockedAccountFlag = cli.StringFlag{
@@ -318,12 +318,12 @@ var (
 	GpoMinGasPriceFlag = cli.StringFlag{
 		Name:  "gpomin",
 		Usage: "Minimum suggested gas price",
-		Value: new(big.Int).Mul(big.NewInt(1), common.Szabo).String(),
+		Value: new(big.Int).Mul(big.NewInt(50), common.Shannon).String(),
 	}
 	GpoMaxGasPriceFlag = cli.StringFlag{
 		Name:  "gpomax",
 		Usage: "Maximum suggested gas price",
-		Value: new(big.Int).Mul(big.NewInt(100), common.Szabo).String(),
+		Value: new(big.Int).Mul(big.NewInt(500), common.Shannon).String(),
 	}
 	GpoFullBlockRatioFlag = cli.IntFlag{
 		Name:  "gpofull",

+ 15 - 2
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))

+ 2 - 1
eth/fetcher/fetcher_test.go

@@ -28,12 +28,13 @@ import (
 	"github.com/ethereum/go-ethereum/core"
 	"github.com/ethereum/go-ethereum/core/types"
 	"github.com/ethereum/go-ethereum/ethdb"
+	"github.com/ethereum/go-ethereum/params"
 )
 
 var (
 	testdb, _    = ethdb.NewMemDatabase()
 	genesis      = core.GenesisBlockForTesting(testdb, common.Address{}, big.NewInt(0))
-	unknownBlock = types.NewBlock(&types.Header{}, nil, nil, nil)
+	unknownBlock = types.NewBlock(&types.Header{GasLimit: params.GenesisGasLimit}, nil, nil, nil)
 )
 
 // makeChain creates a chain of n blocks starting at and including parent.

+ 2 - 2
params/protocol_params.go

@@ -39,8 +39,8 @@ var (
 	EcrecoverGas           = big.NewInt(3000)   //
 	Sha256WordGas          = big.NewInt(12)     //
 
-	MinGasLimit     = big.NewInt(5000) // Minimum the gas limit may ever be.
-	GenesisGasLimit = big.NewInt(5000) // Gas limit of the Genesis block.
+	MinGasLimit     = big.NewInt(5000)    // Minimum the gas limit may ever be.
+	GenesisGasLimit = big.NewInt(3141592) // Gas limit of the Genesis block.
 
 	Sha3Gas              = big.NewInt(30)     // Once per SHA3 operation.
 	Sha256Gas            = big.NewInt(60)     //