diff --git a/eth/filters/api.go b/eth/filters/api.go index e4ade96598..8ea01cbaa0 100644 --- a/eth/filters/api.go +++ b/eth/filters/api.go @@ -53,6 +53,7 @@ type invalidParamsError struct { func (e invalidParamsError) Error() string { return e.err.Error() } func (e invalidParamsError) ErrorCode() int { return -32602 } +func (e invalidParamsError) Unwrap() error { return e.err } func invalidParamsErr(format string, args ...any) error { return invalidParamsError{fmt.Errorf(format, args...)} @@ -450,11 +451,11 @@ func (api *FilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([]*type } if api.logQueryLimit != 0 { if len(crit.Addresses) > api.logQueryLimit { - return nil, errExceedLogQueryLimit + return nil, invalidParamsErr("%w", errExceedLogQueryLimit) } for _, topics := range crit.Topics { if len(topics) > api.logQueryLimit { - return nil, errExceedLogQueryLimit + return nil, invalidParamsErr("%w", errExceedLogQueryLimit) } } } diff --git a/eth/filters/filter_system_test.go b/eth/filters/filter_system_test.go index 6f97d5b664..ef07c404e9 100644 --- a/eth/filters/filter_system_test.go +++ b/eth/filters/filter_system_test.go @@ -591,8 +591,19 @@ func TestExceedLogQueryLimit(t *testing.T) { FromBlock: big.NewInt(0), ToBlock: big.NewInt(100), Addresses: addresses, - }); err != errExceedLogQueryLimit { + }); !errors.Is(err, errExceedLogQueryLimit) { t.Errorf("Expected GetLogs with 6 addresses to return errExceedLogQueryLimit, got: %v", err) + } else { + var re rpc.Error + if !errors.As(err, &re) { + t.Fatalf("expected rpc error, got %v", err) + } + if re.ErrorCode() != -32602 { + t.Fatalf("expected error code -32602, got %d", re.ErrorCode()) + } + if re.Error() != "exceed max addresses or topics per search position" { + t.Fatalf("expected error message %q, got %q", "exceed max addresses or topics per search position", re.Error()) + } } // Test that 5 topics at one position do not result in error @@ -611,8 +622,19 @@ func TestExceedLogQueryLimit(t *testing.T) { ToBlock: big.NewInt(100), Addresses: addresses[:1], Topics: [][]common.Hash{topics}, - }); err != errExceedLogQueryLimit { + }); !errors.Is(err, errExceedLogQueryLimit) { t.Errorf("Expected GetLogs with 6 topics at one position to return errExceedLogQueryLimit, got: %v", err) + } else { + var re rpc.Error + if !errors.As(err, &re) { + t.Fatalf("expected rpc error, got %v", err) + } + if re.ErrorCode() != -32602 { + t.Fatalf("expected error code -32602, got %d", re.ErrorCode()) + } + if re.Error() != "exceed max addresses or topics per search position" { + t.Fatalf("expected error message %q, got %q", "exceed max addresses or topics per search position", re.Error()) + } } }