diff --git a/rpc/backend/blocks.go b/rpc/backend/blocks.go index d4a09ab81a..d3f415929d 100644 --- a/rpc/backend/blocks.go +++ b/rpc/backend/blocks.go @@ -315,7 +315,7 @@ func (b *Backend) BlockNumberFromTendermintByHash(blockHash common.Hash) (*big.I if err != nil { return nil, err } - if resHeader.Header == nil { + if resHeader == nil || resHeader.Header == nil { return nil, errors.Errorf("header not found for hash %s", blockHash.Hex()) } return big.NewInt(resHeader.Header.Height), nil @@ -405,7 +405,7 @@ func (b *Backend) HeaderByHash(blockHash common.Hash) (*ethtypes.Header, error) if err != nil { return nil, err } - if resHeader.Header == nil { + if resHeader == nil || resHeader.Header == nil { return nil, errors.Errorf("header not found for hash %s", blockHash.Hex()) } blockRes, err := b.TendermintBlockResultByNumber(&resHeader.Header.Height) diff --git a/rpc/backend/blocks_test.go b/rpc/backend/blocks_test.go index a529b2f042..45d0638f55 100644 --- a/rpc/backend/blocks_test.go +++ b/rpc/backend/blocks_test.go @@ -776,6 +776,15 @@ func (suite *BackendTestSuite) TestBlockNumberFromTendermintByHash() { }, false, }, + { + "fail - nil response from client", + common.BytesToHash(block.Hash()), + func(hash common.Hash) { + client := suite.backend.clientCtx.Client.(*mocks.Client) + RegisterHeaderByHashNilResult(client, hash) + }, + false, + }, { "pass - block without tx", common.BytesToHash(emptyBlock.Hash()), @@ -1334,6 +1343,16 @@ func (suite *BackendTestSuite) TestHeaderByHash() { }, false, }, + { + "fail - nil response from client", + common.BytesToHash(block.Hash()), + sdkmath.NewInt(1).BigInt(), + func(hash common.Hash, baseFee sdkmath.Int) { + client := suite.backend.clientCtx.Client.(*mocks.Client) + RegisterHeaderByHashNilResult(client, hash) + }, + false, + }, { "fail - header not found for height", common.BytesToHash(block.Hash()), diff --git a/rpc/backend/client_test.go b/rpc/backend/client_test.go index 0e1d8b2a36..c5d074805c 100644 --- a/rpc/backend/client_test.go +++ b/rpc/backend/client_test.go @@ -294,6 +294,11 @@ func RegisterHeaderByHashNotFound(client *mocks.Client, hash common.Hash, tx []b Return(&tmrpctypes.ResultHeader{Header: nil}, nil) } +func RegisterHeaderByHashNilResult(client *mocks.Client, hash common.Hash) { + client.On("HeaderByHash", rpc.ContextWithHeight(1), bytes.HexBytes(hash.Bytes())). + Return(nil, nil) +} + // Header func RegisterHeader(client *mocks.Client, height *int64, tx []byte) (*tmrpctypes.ResultHeader, error) { block := types.MakeBlock(*height, []types.Tx{tx}, nil, nil)