From da99f11be3077daf9ee587e6b0087794dc74f3c5 Mon Sep 17 00:00:00 2001 From: crypto-facs <84574577+crypto-facs@users.noreply.github.com> Date: Fri, 3 Jun 2022 15:31:57 +0200 Subject: [PATCH] rpc: Update `GetGasPrice` RPC endpoint with global `MinGasPrice` (#1108) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * return MinGasPrice as minium on GetGasPrice api * update logic * update changelog * globalmingsprice comment Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> --- CHANGELOG.md | 1 + rpc/backend/backend.go | 1 + rpc/backend/evm_backend.go | 9 +++++++++ rpc/namespaces/ethereum/eth/api.go | 10 ++++++++++ 4 files changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ecfee6d5..4860072d 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 e9692c8d..49b456f7 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 81887bd6..d5d8a84a 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 2086e37a..07add625 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 }