From ae544e58f91be1e5bf51f18d3e914ce418a83fc3 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Tue, 28 Sep 2021 11:56:40 +0200 Subject: [PATCH 1/2] rpc: fix truncation --- ethereum/rpc/types/block.go | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/ethereum/rpc/types/block.go b/ethereum/rpc/types/block.go index 96364f7f34..f368951d36 100644 --- a/ethereum/rpc/types/block.go +++ b/ethereum/rpc/types/block.go @@ -9,13 +9,15 @@ import ( "math/big" "strings" - "github.com/ethereum/go-ethereum/common" - - grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" "github.com/spf13/cast" "google.golang.org/grpc/metadata" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + + ethermint "github.com/tharsis/ethermint/types" ) // BlockNumber represents decoding hex string to block values @@ -35,6 +37,11 @@ const ( // NewBlockNumber creates a new BlockNumber instance. func NewBlockNumber(n *big.Int) BlockNumber { + if !n.IsInt64() { + // default to latest block if it overflows + return EthLatestBlockNumber + } + return BlockNumber(n.Int64()) } @@ -176,10 +183,13 @@ func (bnh *BlockNumberOrHash) decodeFromString(input string) error { if err != nil { return err } - if blockNumber > math.MaxInt64 { - return fmt.Errorf("blocknumber %d is too high", blockNumber) + + bnInt, err := ethermint.SafeInt64(blockNumber) + if err != nil { + return err } - bn := BlockNumber(blockNumber) + + bn := BlockNumber(bnInt) bnh.BlockNumber = &bn } return nil From f811f6c98c16dd46b99beae4ce8923327c4cd2f9 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Tue, 28 Sep 2021 11:58:43 +0200 Subject: [PATCH 2/2] c++ --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5ee57963b..cfb1d6723b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes +* (rpc) [tharsis#598](https://github.com/tharsis/ethermint/pull/598) Check truncation when creating a `BlockNumber` from `big.Int` * (evm) [tharsis#597](https://github.com/tharsis/ethermint/pull/597) Check for `uint64` -> `int64` block height overflow on `GetHashFn` * (evm) [tharsis#579](https://github.com/tharsis/ethermint/pull/579) Update `DeriveChainID` function to handle `v` signature values `< 35`. * (encoding) [tharsis#478](https://github.com/tharsis/ethermint/pull/478) Register `Evidence` to amino codec.