go-ethereum/eth
Ceyhun Onur 1f4ea4d162
eth/filters: add address limit to filters (#31876)
The address filter was never checked against a maximum limit, which can
be somewhat abusive for API nodes. This PR adds a limit similar to
topics

## Description (AI generated)

This pull request introduces a new validation to enforce a maximum limit
on the number of addresses allowed in filter criteria for Ethereum logs.
It includes updates to the `FilterAPI` and `EventSystem` logic, as well
as corresponding test cases to ensure the new constraint is properly
enforced.

### Core functionality changes:

* **Validation for maximum addresses in filter criteria**:
- Added a new constant, `maxAddresses`, set to 100, to define the
maximum allowable addresses in a filter.
- Introduced a new error, `errExceedMaxAddresses`, to handle cases where
the number of addresses exceeds the limit.
- Updated the `GetLogs` method in `FilterAPI` to validate the number of
addresses against `maxAddresses`.
- Modified the `UnmarshalJSON` method to return an error if the number
of addresses in the input JSON exceeds `maxAddresses`.
- Added similar validation to the `SubscribeLogs` method in
`EventSystem`.

### Test updates:

* **New test cases for address limit validation**:
- Added a test in `TestUnmarshalJSONNewFilterArgs` to verify that
exceeding the maximum number of addresses triggers the
`errExceedMaxAddresses` error.
- Updated `TestInvalidLogFilterCreation` to include a test case for an
invalid filter with more than `maxAddresses` addresses.
- Updated `TestInvalidGetLogsRequest` to test for invalid log requests
with excessive addresses.

These changes ensure that the system enforces a reasonable limit on the
number of addresses in filter criteria, improving robustness and
preventing potential performance issues.

---------

Co-authored-by: zsfelfoldi <zsfelfoldi@gmail.com>
2025-07-01 08:13:19 +02:00
..
catalyst eth/catalyst: fetch header on forkchoiceUpdated (#31928) 2025-06-18 15:06:49 +08:00
downloader all: incorporate state history indexing status into eth_syncing response (#32099) 2025-06-26 17:20:20 +02:00
ethconfig all: replace override.prague with osaka (#32093) 2025-06-27 15:18:05 +08:00
fetcher eth/fetcher: define BatchSize as a constant (#31742) 2025-04-30 11:02:11 +08:00
filters eth/filters: add address limit to filters (#31876) 2025-07-01 08:13:19 +02:00
gasestimator core, eth/gasestimator: introduce MaxGasUsed for estimation (#31735) 2025-05-02 17:43:06 +02:00
gasprice core: consolidate BlockChain constructor options (#31925) 2025-06-19 12:21:15 +02:00
protocols core: consolidate BlockChain constructor options (#31925) 2025-06-19 12:21:15 +02:00
tracers eth/tracers: prestate lookup EIP7702 delegation account (#32080) 2025-06-24 13:52:18 +08:00
api_admin.go eth: ignore genesis block on importChain (#27956) 2023-08-21 13:32:34 -04:00
api_backend.go all: incorporate state history indexing status into eth_syncing response (#32099) 2025-06-26 17:20:20 +02:00
api_backend_test.go core: consolidate BlockChain constructor options (#31925) 2025-06-19 12:21:15 +02:00
api_debug.go eth: use headers in debug.GetModifiedAccountsBy* (#31765) 2025-05-16 19:35:17 +02:00
api_debug_test.go core: consolidate BlockChain constructor options (#31925) 2025-06-19 12:21:15 +02:00
api_miner.go miner: refactor the miner, make the pending block on demand (#28623) 2024-03-06 14:45:03 +02:00
backend.go eth: correct tracer initialization in BlockchainConfig (#32107) 2025-06-28 06:56:20 +08:00
dropper.go eth: add logic to drop peers randomly when saturated (#31476) 2025-04-14 12:45:27 +02:00
handler.go eth/protocols/eth: implement eth/69 (#29158) 2025-05-16 17:10:47 +02:00
handler_eth.go eth: check blob transaction validity on the peer goroutine when received (#31219) 2025-03-01 14:10:38 +01:00
handler_eth_test.go core: consolidate BlockChain constructor options (#31925) 2025-06-19 12:21:15 +02:00
handler_snap.go eth: check snap satelliteness, delegate drop to eth (#22235) 2021-02-02 10:44:36 +02:00
handler_test.go core: consolidate BlockChain constructor options (#31925) 2025-06-19 12:21:15 +02:00
peer.go eth/protocols/eth: implement eth/69 (#29158) 2025-05-16 17:10:47 +02:00
peerset.go consensus, cmd, core, eth: remove support for non-merge mode of operation (#29169) 2024-03-05 16:13:28 +02:00
state_accessor.go core, eth, triedb: serve historical states over RPC (#31161) 2025-06-25 16:50:54 +08:00
sync.go consensus, cmd, core, eth: remove support for non-merge mode of operation (#29169) 2024-03-05 16:13:28 +02:00
sync_test.go eth/protocols/eth: prevent hanging dispatch (#30918) 2025-01-06 16:31:53 +01:00