From bdc508deb70af3c1daab206d7df4b04fbf6d4e48 Mon Sep 17 00:00:00 2001 From: pinglamb Date: Fri, 12 Sep 2025 04:08:32 +0800 Subject: [PATCH] Fix missing trigger if there are both polling and once block handlers --- chain/ethereum/src/ethereum_adapter.rs | 29 ++++++++++++++------------ 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/chain/ethereum/src/ethereum_adapter.rs b/chain/ethereum/src/ethereum_adapter.rs index 7c4d2d38f73..42456b7bf5f 100644 --- a/chain/ethereum/src/ethereum_adapter.rs +++ b/chain/ethereum/src/ethereum_adapter.rs @@ -1005,28 +1005,31 @@ impl EthereumAdapter { // Create a HashMap of block numbers to Vec let matching_blocks = (from..=to) .filter_map(|block_number| { + let mut triggers = Vec::new(); + filter .polling_intervals .iter() - .find_map(|(start_block, interval)| { + .for_each(|(start_block, interval)| { let has_once_trigger = (*interval == 0) && (block_number == *start_block); let has_polling_trigger = block_number >= *start_block && *interval > 0 && ((block_number - start_block) % *interval) == 0; - if has_once_trigger || has_polling_trigger { - let mut triggers = Vec::new(); - if has_once_trigger { - triggers.push(EthereumBlockTriggerType::Start); - } - if has_polling_trigger { - triggers.push(EthereumBlockTriggerType::End); - } - Some((block_number, triggers)) - } else { - None + if has_once_trigger { + triggers.push(EthereumBlockTriggerType::Start); } - }) + + if has_polling_trigger { + triggers.push(EthereumBlockTriggerType::End); + } + }); + + if triggers.is_empty() { + None + } else { + Some((block_number, triggers)) + } }) .collect::>();