forked from cerc-io/plugeth
cmd, eth: offer maxprice flag for overwritting price cap (#21531)
* cmd, eth: offer maxprice flag for overwritting price cap * eth: rename default price cap
This commit is contained in:
parent
3a98c6f6e6
commit
328901c24c
@ -154,6 +154,7 @@ var (
|
|||||||
utils.LegacyGpoBlocksFlag,
|
utils.LegacyGpoBlocksFlag,
|
||||||
utils.GpoPercentileFlag,
|
utils.GpoPercentileFlag,
|
||||||
utils.LegacyGpoPercentileFlag,
|
utils.LegacyGpoPercentileFlag,
|
||||||
|
utils.GpoMaxGasPriceFlag,
|
||||||
utils.EWASMInterpreterFlag,
|
utils.EWASMInterpreterFlag,
|
||||||
utils.EVMInterpreterFlag,
|
utils.EVMInterpreterFlag,
|
||||||
configFileFlag,
|
configFileFlag,
|
||||||
|
@ -189,6 +189,7 @@ var AppHelpFlagGroups = []flags.FlagGroup{
|
|||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
utils.GpoBlocksFlag,
|
utils.GpoBlocksFlag,
|
||||||
utils.GpoPercentileFlag,
|
utils.GpoPercentileFlag,
|
||||||
|
utils.GpoMaxGasPriceFlag,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -631,6 +631,11 @@ var (
|
|||||||
Usage: "Suggested gas price is the given percentile of a set of recent transaction gas prices",
|
Usage: "Suggested gas price is the given percentile of a set of recent transaction gas prices",
|
||||||
Value: eth.DefaultConfig.GPO.Percentile,
|
Value: eth.DefaultConfig.GPO.Percentile,
|
||||||
}
|
}
|
||||||
|
GpoMaxGasPriceFlag = cli.Int64Flag{
|
||||||
|
Name: "gpo.maxprice",
|
||||||
|
Usage: "Maximum gas price will be recommended by gpo",
|
||||||
|
Value: eth.DefaultConfig.GPO.MaxPrice.Int64(),
|
||||||
|
}
|
||||||
WhisperEnabledFlag = cli.BoolFlag{
|
WhisperEnabledFlag = cli.BoolFlag{
|
||||||
Name: "shh",
|
Name: "shh",
|
||||||
Usage: "Enable Whisper",
|
Usage: "Enable Whisper",
|
||||||
@ -1291,6 +1296,9 @@ func setGPO(ctx *cli.Context, cfg *gasprice.Config, light bool) {
|
|||||||
if ctx.GlobalIsSet(GpoPercentileFlag.Name) {
|
if ctx.GlobalIsSet(GpoPercentileFlag.Name) {
|
||||||
cfg.Percentile = ctx.GlobalInt(GpoPercentileFlag.Name)
|
cfg.Percentile = ctx.GlobalInt(GpoPercentileFlag.Name)
|
||||||
}
|
}
|
||||||
|
if ctx.GlobalIsSet(GpoMaxGasPriceFlag.Name) {
|
||||||
|
cfg.MaxPrice = big.NewInt(ctx.GlobalInt64(GpoMaxGasPriceFlag.Name))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func setTxPool(ctx *cli.Context, cfg *core.TxPoolConfig) {
|
func setTxPool(ctx *cli.Context, cfg *core.TxPoolConfig) {
|
||||||
|
@ -37,12 +37,14 @@ import (
|
|||||||
var DefaultFullGPOConfig = gasprice.Config{
|
var DefaultFullGPOConfig = gasprice.Config{
|
||||||
Blocks: 20,
|
Blocks: 20,
|
||||||
Percentile: 60,
|
Percentile: 60,
|
||||||
|
MaxPrice: gasprice.DefaultMaxPrice,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultLightGPOConfig contains default gasprice oracle settings for light client.
|
// DefaultLightGPOConfig contains default gasprice oracle settings for light client.
|
||||||
var DefaultLightGPOConfig = gasprice.Config{
|
var DefaultLightGPOConfig = gasprice.Config{
|
||||||
Blocks: 2,
|
Blocks: 2,
|
||||||
Percentile: 60,
|
Percentile: 60,
|
||||||
|
MaxPrice: gasprice.DefaultMaxPrice,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultConfig contains default settings for use on the Ethereum main net.
|
// DefaultConfig contains default settings for use on the Ethereum main net.
|
||||||
|
@ -24,18 +24,20 @@ import (
|
|||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
"github.com/ethereum/go-ethereum/rpc"
|
"github.com/ethereum/go-ethereum/rpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
const sampleNumber = 3 // Number of transactions sampled in a block
|
const sampleNumber = 3 // Number of transactions sampled in a block
|
||||||
|
|
||||||
var maxPrice = big.NewInt(500 * params.GWei)
|
var DefaultMaxPrice = big.NewInt(500 * params.GWei)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Blocks int
|
Blocks int
|
||||||
Percentile int
|
Percentile int
|
||||||
Default *big.Int `toml:",omitempty"`
|
Default *big.Int `toml:",omitempty"`
|
||||||
|
MaxPrice *big.Int `toml:",omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// OracleBackend includes all necessary background APIs for oracle.
|
// OracleBackend includes all necessary background APIs for oracle.
|
||||||
@ -51,6 +53,7 @@ type Oracle struct {
|
|||||||
backend OracleBackend
|
backend OracleBackend
|
||||||
lastHead common.Hash
|
lastHead common.Hash
|
||||||
lastPrice *big.Int
|
lastPrice *big.Int
|
||||||
|
maxPrice *big.Int
|
||||||
cacheLock sync.RWMutex
|
cacheLock sync.RWMutex
|
||||||
fetchLock sync.Mutex
|
fetchLock sync.Mutex
|
||||||
|
|
||||||
@ -64,17 +67,26 @@ func NewOracle(backend OracleBackend, params Config) *Oracle {
|
|||||||
blocks := params.Blocks
|
blocks := params.Blocks
|
||||||
if blocks < 1 {
|
if blocks < 1 {
|
||||||
blocks = 1
|
blocks = 1
|
||||||
|
log.Warn("Sanitizing invalid gasprice oracle sample blocks", "provided", params.Blocks, "updated", blocks)
|
||||||
}
|
}
|
||||||
percent := params.Percentile
|
percent := params.Percentile
|
||||||
if percent < 0 {
|
if percent < 0 {
|
||||||
percent = 0
|
percent = 0
|
||||||
|
log.Warn("Sanitizing invalid gasprice oracle sample percentile", "provided", params.Percentile, "updated", percent)
|
||||||
}
|
}
|
||||||
if percent > 100 {
|
if percent > 100 {
|
||||||
percent = 100
|
percent = 100
|
||||||
|
log.Warn("Sanitizing invalid gasprice oracle sample percentile", "provided", params.Percentile, "updated", percent)
|
||||||
|
}
|
||||||
|
maxPrice := params.MaxPrice
|
||||||
|
if maxPrice == nil || maxPrice.Int64() <= 0 {
|
||||||
|
maxPrice = DefaultMaxPrice
|
||||||
|
log.Warn("Sanitizing invalid gasprice oracle price cap", "provided", params.MaxPrice, "updated", maxPrice)
|
||||||
}
|
}
|
||||||
return &Oracle{
|
return &Oracle{
|
||||||
backend: backend,
|
backend: backend,
|
||||||
lastPrice: params.Default,
|
lastPrice: params.Default,
|
||||||
|
maxPrice: maxPrice,
|
||||||
checkBlocks: blocks,
|
checkBlocks: blocks,
|
||||||
percentile: percent,
|
percentile: percent,
|
||||||
}
|
}
|
||||||
@ -146,8 +158,8 @@ func (gpo *Oracle) SuggestPrice(ctx context.Context) (*big.Int, error) {
|
|||||||
sort.Sort(bigIntArray(txPrices))
|
sort.Sort(bigIntArray(txPrices))
|
||||||
price = txPrices[(len(txPrices)-1)*gpo.percentile/100]
|
price = txPrices[(len(txPrices)-1)*gpo.percentile/100]
|
||||||
}
|
}
|
||||||
if price.Cmp(maxPrice) > 0 {
|
if price.Cmp(gpo.maxPrice) > 0 {
|
||||||
price = new(big.Int).Set(maxPrice)
|
price = new(big.Int).Set(gpo.maxPrice)
|
||||||
}
|
}
|
||||||
gpo.cacheLock.Lock()
|
gpo.cacheLock.Lock()
|
||||||
gpo.lastHead = headHash
|
gpo.lastHead = headHash
|
||||||
|
Loading…
Reference in New Issue
Block a user