From 9f899445072efe0a9336515b653cf91a67ce2109 Mon Sep 17 00:00:00 2001 From: crypto-facs <84574577+crypto-facs@users.noreply.github.com> Date: Mon, 11 Jul 2022 11:04:45 -0400 Subject: [PATCH 1/2] fix(rpc): optimize `eth_getBalance` endpoint (#1169) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * optimize get balance endpoint * add comment * add changelog Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> --- CHANGELOG.md | 6 ++++++ rpc/ethereum/namespaces/eth/api.go | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ad253413b..8494b06a79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,12 @@ Ref: https://keepachangelog.com/en/1.0.0/ # Changelog +## [v0.14.1] - 2022-07-13 + +### Improvements + +* (rpc) [\#1169](https://github.com/evmos/ethermint/pull/1169) Remove unnecessary queries from `getBlockNumber` function + ## [v0.14.0] - 2022-04-19 ### API Breaking diff --git a/rpc/ethereum/namespaces/eth/api.go b/rpc/ethereum/namespaces/eth/api.go index 2cbbb24732..7fb2d91bcf 100644 --- a/rpc/ethereum/namespaces/eth/api.go +++ b/rpc/ethereum/namespaces/eth/api.go @@ -1102,11 +1102,11 @@ func (e *PublicAPI) getBlockNumber(blockNrOrHash rpctypes.BlockNumberOrHash) (rp case blockNrOrHash.BlockHash == nil && blockNrOrHash.BlockNumber == nil: return rpctypes.EthEarliestBlockNumber, fmt.Errorf("types BlockHash and BlockNumber cannot be both nil") case blockNrOrHash.BlockHash != nil: - blockHeader, err := e.backend.HeaderByHash(*blockNrOrHash.BlockHash) + blockNumber, err := e.backend.GetBlockNumberByHash(*blockNrOrHash.BlockHash) if err != nil { return rpctypes.EthEarliestBlockNumber, err } - return rpctypes.NewBlockNumber(blockHeader.Number), nil + return rpctypes.NewBlockNumber(blockNumber), nil case blockNrOrHash.BlockNumber != nil: return *blockNrOrHash.BlockNumber, nil default: From 805a1a9315869f4d27fdb92b368fb4aa4bb637d4 Mon Sep 17 00:00:00 2001 From: Daniel Burckhardt Date: Wed, 13 Jul 2022 11:08:06 +0200 Subject: [PATCH 2/2] add backport changes --- rpc/ethereum/backend/backend.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/rpc/ethereum/backend/backend.go b/rpc/ethereum/backend/backend.go index 51565b28f0..818a3c416e 100644 --- a/rpc/ethereum/backend/backend.go +++ b/rpc/ethereum/backend/backend.go @@ -62,6 +62,7 @@ type Backend interface { BlockByHash(blockHash common.Hash) (*ethtypes.Block, error) CurrentHeader() *ethtypes.Header HeaderByNumber(blockNum types.BlockNumber) (*ethtypes.Header, error) + GetBlockNumberByHash(blockHash common.Hash) (*big.Int, error) HeaderByHash(blockHash common.Hash) (*ethtypes.Header, error) PendingTransactions() ([]*sdk.Tx, error) GetTransactionCount(address common.Address, blockNum types.BlockNumber) (*hexutil.Uint64, error) @@ -508,6 +509,18 @@ func (e *EVMBackend) HeaderByNumber(blockNum types.BlockNumber) (*ethtypes.Heade return ethHeader, nil } +// GetBlockNumberByHash returns the block height of given block hash +func (e *EVMBackend) GetBlockNumberByHash(blockHash common.Hash) (*big.Int, error) { + resBlock, err := e.GetTendermintBlockByHash(blockHash) + if err != nil { + return nil, err + } + if resBlock == nil { + return nil, errors.Errorf("block not found for hash %s", blockHash.Hex()) + } + return big.NewInt(resBlock.Block.Height), nil +} + // HeaderByHash returns the block header identified by hash. func (e *EVMBackend) HeaderByHash(blockHash common.Hash) (*ethtypes.Header, error) { resBlock, err := e.clientCtx.Client.BlockByHash(e.ctx, blockHash.Bytes())