diff --git a/crates/evm/fuzz/src/strategies/invariants.rs b/crates/evm/fuzz/src/strategies/invariants.rs index f739b4f86dac1..d9e5a2de387de 100644 --- a/crates/evm/fuzz/src/strategies/invariants.rs +++ b/crates/evm/fuzz/src/strategies/invariants.rs @@ -97,9 +97,20 @@ fn select_random_sender( 100 - dictionary_weight => fuzz_param(&alloy_dyn_abi::DynSolType::Address), dictionary_weight => fuzz_param_from_state(&alloy_dyn_abi::DynSolType::Address, fuzz_state), ] - .prop_map(move |addr| addr.as_address().unwrap()) - // Too many exclusions can slow down testing. - .prop_filter("excluded sender", move |addr| !senders.excluded.contains(addr)) + .prop_map(move |addr| { + let mut addr = addr.as_address().unwrap(); + // Make sure the selected address is not in the list of excluded senders. + // We don't use proptest's filter to avoid reaching the `PROPTEST_MAX_LOCAL_REJECTS` + // max rejects and exiting test before all runs completes. + // See . + loop { + if !senders.excluded.contains(&addr) { + break; + } + addr = Address::random(); + } + addr + }) .boxed() } }