encapsulated calculate gas limit logic

This commit is contained in:
Trung Nguyen 2019-05-20 12:27:36 -04:00
parent 32c600bbee
commit 33ea926984
No known key found for this signature in database
GPG Key ID: 4636434ED9505EB7
5 changed files with 25 additions and 20 deletions

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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,

View File

@ -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 {

View File

@ -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),