diff --git a/CHANGELOG.md b/CHANGELOG.md index ecfee6d5ab..4860072df8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ - (rpc) [tharsis#1081](https://github.com/tharsis/ethermint/pull/1081) Deduplicate some json-rpc logic codes, cleanup several dead functions. - (ante) [tharsis#1062](https://github.com/tharsis/ethermint/pull/1062) Emit event of eth tx hash in ante handler to support query failed transactions. - (analytics) [tharsis#1106](https://github.com/tharsis/ethermint/pull/1106) Update telemetry to Ethermint modules. +- (rpc) [tharsis#1108](https://github.com/tharsis/ethermint/pull/1108) Update GetGasPrice RPC endpoint with global `MinGasPrice` ### Improvements diff --git a/rpc/backend/backend.go b/rpc/backend/backend.go index e9692c8dbf..49b456f731 100644 --- a/rpc/backend/backend.go +++ b/rpc/backend/backend.go @@ -69,6 +69,7 @@ type EVMBackend interface { GetTxByTxIndex(height int64, txIndex uint) (*tmrpctypes.ResultTx, error) EstimateGas(args evmtypes.TransactionArgs, blockNrOptional *types.BlockNumber) (hexutil.Uint64, error) BaseFee(height int64) (*big.Int, error) + GlobalMinGasPrice() (sdk.Dec, error) // Fee API FeeHistory(blockCount rpc.DecimalOrHex, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (*types.FeeHistoryResult, error) diff --git a/rpc/backend/evm_backend.go b/rpc/backend/evm_backend.go index 81887bd6ce..d5d8a84a86 100644 --- a/rpc/backend/evm_backend.go +++ b/rpc/backend/evm_backend.go @@ -818,6 +818,15 @@ func (b *Backend) BaseFee(height int64) (*big.Int, error) { return res.BaseFee.BigInt(), nil } +// GlobalMinGasPrice returns MinGasPrice param from FeeMarket +func (b *Backend) GlobalMinGasPrice() (sdk.Dec, error) { + res, err := b.queryClient.FeeMarket.Params(b.ctx, &feemarkettypes.QueryParamsRequest{}) + if err != nil { + return sdk.ZeroDec(), err + } + return res.Params.MinGasPrice, nil +} + // FeeHistory returns data relevant for fee estimation based on the specified range of blocks. func (b *Backend) FeeHistory( userBlockCount rpc.DecimalOrHex, // number blocks to fetch, maximum is 100 diff --git a/rpc/namespaces/ethereum/eth/api.go b/rpc/namespaces/ethereum/eth/api.go index 2086e37a42..07add625ac 100644 --- a/rpc/namespaces/ethereum/eth/api.go +++ b/rpc/namespaces/ethereum/eth/api.go @@ -211,6 +211,16 @@ func (e *PublicAPI) GasPrice() (*hexutil.Big, error) { result = big.NewInt(e.backend.RPCMinGasPrice()) } + // return at least GlobalMinGasPrice from FeeMarket module + minGasPrice, err := e.backend.GlobalMinGasPrice() + if err != nil { + return nil, err + } + minGasPriceInt := minGasPrice.BigInt() + if result.Cmp(minGasPriceInt) < 0 { + result = minGasPriceInt + } + return (*hexutil.Big)(result), nil }