From 916bd9b1fb4ce87e55fb9a4571213fee4bb4cc54 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Fri, 22 Nov 2024 16:53:21 +0100 Subject: [PATCH 1/2] EVM node: always fallback to fetching events one by one on 404 If the rollup node does not support the durable storage values RPC, we don't attempt to fetch events all at once in the future. --- .../bin_node/lib_dev/evm_events_follower.ml | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/etherlink/bin_node/lib_dev/evm_events_follower.ml b/etherlink/bin_node/lib_dev/evm_events_follower.ml index bce185c26e83..d829be2ba735 100644 --- a/etherlink/bin_node/lib_dev/evm_events_follower.ml +++ b/etherlink/bin_node/lib_dev/evm_events_follower.ml @@ -148,16 +148,26 @@ let fetch_events_at_once |> List.filter_map (fun (_, e) -> if filter_event e then Some e else None) |> return -let fetch_events state rollup_block_lvl = - let open Lwt_result_syntax in - let*! res = - protect @@ fun () -> fetch_events_at_once state rollup_block_lvl - in - match res with - | Ok events -> return events - | Error _ -> - let*! () = Evm_events_follower_events.fallback () in - fetch_events_one_by_one state rollup_block_lvl +let fetch_events = + let always_fallback = ref false in + fun state rollup_block_lvl -> + let open Lwt_result_syntax in + if !always_fallback then fetch_events_one_by_one state rollup_block_lvl + else + let*! res = + protect @@ fun () -> fetch_events_at_once state rollup_block_lvl + in + match res with + | Ok events -> return events + | Error e -> + (match e with + | Tezos_rpc.Context.Not_found _ :: _ -> + (* 404, Rollup node is too old to support fetching all at + once. Always fallback in the future. *) + always_fallback := true + | _ -> ()) ; + let*! () = Evm_events_follower_events.fallback () in + fetch_events_one_by_one state rollup_block_lvl let on_new_head state rollup_block_lvl = let open Lwt_result_syntax in -- GitLab From 9561824f2d91ca9c76df213607a5a922e9f95b6b Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Fri, 22 Nov 2024 16:56:14 +0100 Subject: [PATCH 2/2] Doc: changelog --- etherlink/CHANGES_NODE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etherlink/CHANGES_NODE.md b/etherlink/CHANGES_NODE.md index c5b6e4354d2d..587d58cbfd96 100644 --- a/etherlink/CHANGES_NODE.md +++ b/etherlink/CHANGES_NODE.md @@ -11,7 +11,7 @@ ### Internals - Use a single RPC (if the rollup node supports it) when fetching EVM events. - (!15629) + (!15629, !15703) - Private RPC `produceBlock` can produce a block without delayed transactions, useful for testing purposes. (!15681) -- GitLab