diff --git a/rpc/args.go b/rpc/args.go index d31773ff7..9f99456e6 100644 --- a/rpc/args.go +++ b/rpc/args.go @@ -145,12 +145,8 @@ func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) { return NewInsufficientParamsError(len(obj), 2) } - if v, ok := obj[0].(float64); ok { - args.BlockNumber = int64(v) - } else if v, ok := obj[0].(string); ok { - args.BlockNumber = common.Big(v).Int64() - } else { - return NewInvalidTypeError("blockNumber", "not a number or string") + if err := blockHeight(obj[0], &args.BlockNumber); err != nil { + return err } args.IncludeTxs = obj[1].(bool) diff --git a/rpc/args_test.go b/rpc/args_test.go index cfe6c0c45..e78981a41 100644 --- a/rpc/args_test.go +++ b/rpc/args_test.go @@ -355,6 +355,25 @@ func TestGetBlockByNumberArgsBlockHex(t *testing.T) { t.Errorf("IncludeTxs should be %v but is %v", expected.IncludeTxs, args.IncludeTxs) } } +func TestGetBlockByNumberArgsWords(t *testing.T) { + input := `["earliest", true]` + expected := new(GetBlockByNumberArgs) + expected.BlockNumber = 0 + expected.IncludeTxs = true + + args := new(GetBlockByNumberArgs) + if err := json.Unmarshal([]byte(input), &args); err != nil { + t.Error(err) + } + + if args.BlockNumber != expected.BlockNumber { + t.Errorf("BlockNumber should be %v but is %v", expected.BlockNumber, args.BlockNumber) + } + + if args.IncludeTxs != expected.IncludeTxs { + t.Errorf("IncludeTxs should be %v but is %v", expected.IncludeTxs, args.IncludeTxs) + } +} func TestGetBlockByNumberEmpty(t *testing.T) { input := `[]`