From efd39f1b6ad27b74d5836321c9aea5f4a70d0e9a Mon Sep 17 00:00:00 2001 From: "amalraj.manigmail.com" Date: Fri, 5 Apr 2019 17:13:10 +0800 Subject: [PATCH 1/6] raft: pass gas floor and gas ceil to calcGasLimit when minting block --- cmd/geth/config.go | 2 +- raft/backend.go | 4 ++-- raft/minter.go | 7 +++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/cmd/geth/config.go b/cmd/geth/config.go index 8c2b26feb..176258c2e 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -252,7 +252,7 @@ func RegisterRaftService(stack *node.Node, ctx *cli.Context, cfg gethConfig, eth ethereum := <-ethChan - return raft.New(ctx, ethereum.ChainConfig(), myId, raftPort, joinExisting, blockTimeNanos, ethereum, peers, datadir) + return raft.New(ctx, ethereum.ChainConfig(), myId, raftPort, joinExisting, blockTimeNanos, ethereum, peers, datadir, &cfg.Eth) }); err != nil { utils.Fatalf("Failed to register the Raft service: %v", err) } diff --git a/raft/backend.go b/raft/backend.go index d9e54fb5b..de31219c3 100644 --- a/raft/backend.go +++ b/raft/backend.go @@ -36,7 +36,7 @@ type RaftService struct { nodeKey *ecdsa.PrivateKey } -func New(ctx *node.ServiceContext, chainConfig *params.ChainConfig, raftId, raftPort uint16, joinExisting bool, blockTime time.Duration, e *eth.Ethereum, startPeers []*enode.Node, datadir string) (*RaftService, error) { +func New(ctx *node.ServiceContext, chainConfig *params.ChainConfig, raftId, raftPort uint16, joinExisting bool, blockTime time.Duration, e *eth.Ethereum, startPeers []*enode.Node, datadir string, ethCfg *eth.Config) (*RaftService, error) { service := &RaftService{ eventMux: ctx.EventMux, chainDb: e.ChainDb(), @@ -48,7 +48,7 @@ func New(ctx *node.ServiceContext, chainConfig *params.ChainConfig, raftId, raft nodeKey: ctx.NodeKey(), } - service.minter = newMinter(chainConfig, service, blockTime) + service.minter = newMinter(chainConfig, service, blockTime, ethCfg) var err error if service.raftProtocolManager, err = NewProtocolManager(raftId, raftPort, service.blockchain, service.eventMux, startPeers, joinExisting, datadir, service.minter, service.downloader); err != nil { diff --git a/raft/minter.go b/raft/minter.go index 7aa3ef25d..d89bc35f4 100644 --- a/raft/minter.go +++ b/raft/minter.go @@ -18,6 +18,7 @@ package raft import ( "fmt" + "github.com/ethereum/go-ethereum/eth" "math/big" "sync" "sync/atomic" @@ -70,6 +71,7 @@ type minter struct { chainHeadSub event.Subscription txPreChan chan core.NewTxsEvent txPreSub event.Subscription + ethCfg *eth.Config } type extraSeal struct { @@ -77,7 +79,7 @@ type extraSeal struct { Signature []byte // Signature of the block minter } -func newMinter(config *params.ChainConfig, eth *RaftService, blockTime time.Duration) *minter { +func newMinter(config *params.ChainConfig, eth *RaftService, blockTime time.Duration, ethCfg *eth.Config) *minter { minter := &minter{ config: config, eth: eth, @@ -91,6 +93,7 @@ func newMinter(config *params.ChainConfig, eth *RaftService, blockTime time.Dura invalidRaftOrderingChan: make(chan InvalidRaftOrdering, 1), chainHeadChan: make(chan core.ChainHeadEvent, 1), txPreChan: make(chan core.NewTxsEvent, 4096), + ethCfg: ethCfg, } minter.chainHeadSub = eth.BlockChain().SubscribeChainHeadEvent(minter.chainHeadChan) @@ -262,7 +265,7 @@ func (minter *minter) createWork() *work { ParentHash: parent.Hash(), Number: parentNumber.Add(parentNumber, common.Big1), Difficulty: ethash.CalcDifficulty(minter.config, uint64(tstamp), parent.Header()), - GasLimit: core.CalcGasLimit(parent, parent.GasLimit(), parent.GasLimit()), + GasLimit: core.CalcGasLimit(parent, minter.ethCfg.MinerGasFloor, minter.ethCfg.MinerGasCeil), GasUsed: 0, Coinbase: minter.coinbase, Time: big.NewInt(tstamp), From 62c00b637cfebafb7447cb6d51ef39144eb867ca Mon Sep 17 00:00:00 2001 From: "amalraj.manigmail.com" Date: Tue, 16 Apr 2019 18:05:29 +0800 Subject: [PATCH 2/6] permission: set default gas ceil and floor to 700M which is the default minGasLimit --- eth/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eth/config.go b/eth/config.go index 8b659cabe..423fcfcf0 100644 --- a/eth/config.go +++ b/eth/config.go @@ -49,8 +49,8 @@ var DefaultConfig = Config{ DatabaseCache: 768, TrieCache: 256, TrieTimeout: 60 * time.Minute, - MinerGasFloor: 8000000, - MinerGasCeil: 8000000, + MinerGasFloor: 700000000, + MinerGasCeil: 700000000, MinerGasPrice: big.NewInt(params.GWei), MinerRecommit: 3 * time.Second, From 32c600bbeeaad9024d2cb7a199ef2e31649829ff Mon Sep 17 00:00:00 2001 From: "amalraj.manigmail.com" Date: Fri, 3 May 2019 11:29:11 +0800 Subject: [PATCH 3/6] set the default ceil and floor gas limit to 800M and 700M --- eth/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eth/config.go b/eth/config.go index 423fcfcf0..1cfbd394f 100644 --- a/eth/config.go +++ b/eth/config.go @@ -50,7 +50,7 @@ var DefaultConfig = Config{ TrieCache: 256, TrieTimeout: 60 * time.Minute, MinerGasFloor: 700000000, - MinerGasCeil: 700000000, + MinerGasCeil: 800000000, MinerGasPrice: big.NewInt(params.GWei), MinerRecommit: 3 * time.Second, From 57241d538817b560aa78df42e5c490d27284dd8d Mon Sep 17 00:00:00 2001 From: "amalraj.manigmail.com" Date: Fri, 3 May 2019 16:23:23 +0800 Subject: [PATCH 4/6] set the default ceil and floor gas limit to 800M and 700M --- eth/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eth/config.go b/eth/config.go index 8b659cabe..1cfbd394f 100644 --- a/eth/config.go +++ b/eth/config.go @@ -49,8 +49,8 @@ var DefaultConfig = Config{ DatabaseCache: 768, TrieCache: 256, TrieTimeout: 60 * time.Minute, - MinerGasFloor: 8000000, - MinerGasCeil: 8000000, + MinerGasFloor: 700000000, + MinerGasCeil: 800000000, MinerGasPrice: big.NewInt(params.GWei), MinerRecommit: 3 * time.Second, From 33ea9269845084381c5f520f846171be48abae4d Mon Sep 17 00:00:00 2001 From: Trung Nguyen Date: Mon, 20 May 2019 12:27:36 -0400 Subject: [PATCH 5/6] encapsulated calculate gas limit logic --- cmd/geth/config.go | 2 +- eth/backend.go | 4 ++++ eth/config.go | 2 +- raft/backend.go | 30 +++++++++++++++++------------- raft/minter.go | 7 ++----- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/cmd/geth/config.go b/cmd/geth/config.go index 176258c2e..8c2b26feb 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -252,7 +252,7 @@ func RegisterRaftService(stack *node.Node, ctx *cli.Context, cfg gethConfig, eth ethereum := <-ethChan - return raft.New(ctx, ethereum.ChainConfig(), myId, raftPort, joinExisting, blockTimeNanos, ethereum, peers, datadir, &cfg.Eth) + return raft.New(ctx, ethereum.ChainConfig(), myId, raftPort, joinExisting, blockTimeNanos, ethereum, peers, datadir) }); err != nil { utils.Fatalf("Failed to register the Raft service: %v", err) } diff --git a/eth/backend.go b/eth/backend.go index 245fda7c8..2483c43a0 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -557,3 +557,7 @@ func (s *Ethereum) Stop() error { close(s.shutdownChan) return nil } + +func (s *Ethereum) CalcGasLimit(block *types.Block) uint64 { + return core.CalcGasLimit(block, s.config.MinerGasFloor, s.config.MinerGasCeil) +} diff --git a/eth/config.go b/eth/config.go index 1cfbd394f..e362bc433 100644 --- a/eth/config.go +++ b/eth/config.go @@ -49,7 +49,7 @@ var DefaultConfig = Config{ DatabaseCache: 768, TrieCache: 256, TrieTimeout: 60 * time.Minute, - MinerGasFloor: 700000000, + MinerGasFloor: params.MinGasLimit, MinerGasCeil: 800000000, MinerGasPrice: big.NewInt(params.GWei), MinerRecommit: 3 * time.Second, diff --git a/raft/backend.go b/raft/backend.go index de31219c3..bfedecfad 100644 --- a/raft/backend.go +++ b/raft/backend.go @@ -5,6 +5,8 @@ import ( "sync" "time" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/eth" @@ -31,24 +33,26 @@ type RaftService struct { startPeers []*enode.Node // we need an event mux to instantiate the blockchain - eventMux *event.TypeMux - minter *minter - nodeKey *ecdsa.PrivateKey + eventMux *event.TypeMux + minter *minter + nodeKey *ecdsa.PrivateKey + calcGasLimitFunc func(block *types.Block) uint64 } -func New(ctx *node.ServiceContext, chainConfig *params.ChainConfig, raftId, raftPort uint16, joinExisting bool, blockTime time.Duration, e *eth.Ethereum, startPeers []*enode.Node, datadir string, ethCfg *eth.Config) (*RaftService, error) { +func New(ctx *node.ServiceContext, chainConfig *params.ChainConfig, raftId, raftPort uint16, joinExisting bool, blockTime time.Duration, e *eth.Ethereum, startPeers []*enode.Node, datadir string) (*RaftService, error) { service := &RaftService{ - eventMux: ctx.EventMux, - chainDb: e.ChainDb(), - blockchain: e.BlockChain(), - txPool: e.TxPool(), - accountManager: e.AccountManager(), - downloader: e.Downloader(), - startPeers: startPeers, - nodeKey: ctx.NodeKey(), + eventMux: ctx.EventMux, + chainDb: e.ChainDb(), + blockchain: e.BlockChain(), + txPool: e.TxPool(), + accountManager: e.AccountManager(), + downloader: e.Downloader(), + startPeers: startPeers, + nodeKey: ctx.NodeKey(), + calcGasLimitFunc: e.CalcGasLimit, } - service.minter = newMinter(chainConfig, service, blockTime, ethCfg) + service.minter = newMinter(chainConfig, service, blockTime) var err error if service.raftProtocolManager, err = NewProtocolManager(raftId, raftPort, service.blockchain, service.eventMux, startPeers, joinExisting, datadir, service.minter, service.downloader); err != nil { diff --git a/raft/minter.go b/raft/minter.go index d89bc35f4..983a0294f 100644 --- a/raft/minter.go +++ b/raft/minter.go @@ -18,7 +18,6 @@ package raft import ( "fmt" - "github.com/ethereum/go-ethereum/eth" "math/big" "sync" "sync/atomic" @@ -71,7 +70,6 @@ type minter struct { chainHeadSub event.Subscription txPreChan chan core.NewTxsEvent txPreSub event.Subscription - ethCfg *eth.Config } type extraSeal struct { @@ -79,7 +77,7 @@ type extraSeal struct { Signature []byte // Signature of the block minter } -func newMinter(config *params.ChainConfig, eth *RaftService, blockTime time.Duration, ethCfg *eth.Config) *minter { +func newMinter(config *params.ChainConfig, eth *RaftService, blockTime time.Duration) *minter { minter := &minter{ config: config, eth: eth, @@ -93,7 +91,6 @@ func newMinter(config *params.ChainConfig, eth *RaftService, blockTime time.Dura invalidRaftOrderingChan: make(chan InvalidRaftOrdering, 1), chainHeadChan: make(chan core.ChainHeadEvent, 1), txPreChan: make(chan core.NewTxsEvent, 4096), - ethCfg: ethCfg, } minter.chainHeadSub = eth.BlockChain().SubscribeChainHeadEvent(minter.chainHeadChan) @@ -265,7 +262,7 @@ func (minter *minter) createWork() *work { ParentHash: parent.Hash(), Number: parentNumber.Add(parentNumber, common.Big1), Difficulty: ethash.CalcDifficulty(minter.config, uint64(tstamp), parent.Header()), - GasLimit: core.CalcGasLimit(parent, minter.ethCfg.MinerGasFloor, minter.ethCfg.MinerGasCeil), + GasLimit: minter.eth.calcGasLimitFunc(parent), GasUsed: 0, Coinbase: minter.coinbase, Time: big.NewInt(tstamp), From 64c20b39100351d4488a1fad26cd5c52d7987216 Mon Sep 17 00:00:00 2001 From: Trung Nguyen Date: Mon, 20 May 2019 12:44:49 -0400 Subject: [PATCH 6/6] cross reference MinerGasCeil --- eth/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eth/config.go b/eth/config.go index e362bc433..751a659d5 100644 --- a/eth/config.go +++ b/eth/config.go @@ -50,7 +50,7 @@ var DefaultConfig = Config{ TrieCache: 256, TrieTimeout: 60 * time.Minute, MinerGasFloor: params.MinGasLimit, - MinerGasCeil: 800000000, + MinerGasCeil: params.GenesisGasLimit, MinerGasPrice: big.NewInt(params.GWei), MinerRecommit: 3 * time.Second,