@@ -88,59 +88,116 @@ defmodule Explorer.Periodically do
8888 end
8989
9090 def process_aggregated_proofs ( from_block , to_block ) do
91- "Processing aggregated proofs from #{ from_block } to #{ to_block } " |> Logger . debug ( )
92-
93- { :ok , proofs } =
94- AlignedProofAggregationService . get_aggregated_proof_event ( % {
95- from_block: from_block ,
96- to_block: to_block
97- } )
98-
99- blob_data =
100- proofs
101- |> Enum . map ( & AlignedProofAggregationService . get_blob_data! / 1 )
102-
103- proof_hashes =
104- blob_data
105- |> Enum . map ( fn x ->
106- AlignedProofAggregationService . decode_blob (
107- to_charlist ( String . replace_prefix ( x , "0x" , "" ) )
91+ Logger . info ( "[Aggregated Proofs] Starting fetch from block #{ from_block } to #{ to_block } " )
92+
93+ case AlignedProofAggregationService . get_aggregated_proof_event ( % {
94+ from_block: from_block ,
95+ to_block: to_block
96+ } ) do
97+ { :ok , [ ] } ->
98+ Logger . info ( "[Aggregated Proofs] No events found in block range #{ from_block } -#{ to_block } " )
99+
100+ { :ok , proofs } ->
101+ Logger . info (
102+ "[Aggregated Proofs] Found #{ length ( proofs ) } events in block range #{ from_block } -#{ to_block } "
108103 )
109- end )
110104
111- # Store aggregated proofs to db
112- proofs =
113- proofs
114- |> Enum . zip ( proof_hashes )
115- |> Enum . map ( fn { agg_proof , hashes } ->
116- aggregator = AlignedProofAggregationService . get_aggregator! ( agg_proof )
105+ process_aggregated_proof_events ( proofs )
117106
107+ { :error , reason } ->
108+ Logger . error (
109+ "[Aggregated Proofs] Failed to fetch events from block #{ from_block } to #{ to_block } : #{ inspect ( reason ) } "
110+ )
111+ end
112+ end
113+
114+ defp process_aggregated_proof_events ( proofs ) do
115+ proofs
116+ |> Enum . each ( fn proof ->
117+ Logger . info (
118+ "[Aggregated Proofs] Processing proof at block #{ proof . block_number } , merkle_root: #{ proof . merkle_root } "
119+ )
120+
121+ try do
122+ # Fetch blob data
123+ Logger . debug (
124+ "[Aggregated Proofs] Fetching blob data for versioned_hash: #{ proof . blob_versioned_hash } "
125+ )
126+
127+ blob_data = AlignedProofAggregationService . get_blob_data! ( proof )
128+
129+ # Decode blob to get proof hashes
130+ proof_hashes =
131+ AlignedProofAggregationService . decode_blob (
132+ to_charlist ( String . replace_prefix ( blob_data , "0x" , "" ) )
133+ )
134+
135+ Logger . info (
136+ "[Aggregated Proofs] Decoded #{ length ( proof_hashes ) } proof hashes from blob"
137+ )
138+
139+ # Get aggregator type
140+ aggregator = AlignedProofAggregationService . get_aggregator! ( proof )
141+
142+ Logger . debug (
143+ "[Aggregated Proofs] Aggregator type: #{ inspect ( aggregator ) } for merkle_root: #{ proof . merkle_root } "
144+ )
145+
146+ # Store aggregated proof to db
118147 agg_proof =
119- agg_proof
148+ proof
120149 |> Map . merge ( % { aggregator: aggregator } )
121- |> Map . merge ( % { number_of_proofs: length ( hashes ) } )
150+ |> Map . merge ( % { number_of_proofs: length ( proof_hashes ) } )
122151
123- { :ok , % { id: id } } = AggregatedProofs . insert_or_update ( agg_proof )
152+ case AggregatedProofs . insert_or_update ( agg_proof ) do
153+ { :ok , % { id: id } } ->
154+ Logger . info (
155+ "[Aggregated Proofs] Stored aggregated proof id=#{ id } , merkle_root: #{ proof . merkle_root } , proofs_count: #{ length ( proof_hashes ) } "
156+ )
124157
125- Map . merge ( agg_proof , % { id: id } )
126- end )
158+ # Store each individual proof hash
159+ store_individual_proofs ( id , proof_hashes , proof . merkle_root )
127160
128- # Store each individual proof
129- proofs
130- |> Enum . zip ( proof_hashes )
131- |> Enum . each ( fn { agg_proof , hashes } ->
132- hashes
133- |> Enum . with_index ( )
134- |> Enum . each ( fn { hash , index } ->
135- AggregationModeProof . insert_or_update ( % {
136- agg_proof_id: agg_proof . id ,
137- proof_hash: "0x" <> List . to_string ( hash ) ,
138- index: index
139- } )
140- end )
161+ { :error , reason } ->
162+ Logger . error (
163+ "[Aggregated Proofs] Failed to store aggregated proof merkle_root: #{ proof . merkle_root } : #{ inspect ( reason ) } "
164+ )
165+ end
166+ rescue
167+ error ->
168+ Logger . error (
169+ "[Aggregated Proofs] Error processing proof at block #{ proof . block_number } , merkle_root: #{ proof . merkle_root } : #{ Exception . message ( error ) } "
170+ )
171+
172+ Logger . debug (
173+ "[Aggregated Proofs] Stacktrace: #{ Exception . format_stacktrace ( __STACKTRACE__ ) } "
174+ )
175+ end
141176 end )
142177
143- "Done processing aggregated proofs from #{ from_block } to #{ to_block } " |> Logger . debug ( )
178+ Logger . info ( "[Aggregated Proofs] Finished processing #{ length ( proofs ) } events" )
179+ end
180+
181+ defp store_individual_proofs ( agg_proof_id , proof_hashes , merkle_root ) do
182+ proof_hashes
183+ |> Enum . with_index ( )
184+ |> Enum . each ( fn { hash , index } ->
185+ proof_hash = "0x" <> List . to_string ( hash )
186+
187+ case AggregationModeProof . insert_or_update ( % {
188+ agg_proof_id: agg_proof_id ,
189+ proof_hash: proof_hash ,
190+ index: index
191+ } ) do
192+ { :ok , _ } ->
193+ :ok
194+
195+ { :error , reason } ->
196+ Logger . error (
197+ "[Aggregated Proofs] Failed to store individual proof hash #{ proof_hash } for merkle_root: #{ merkle_root } : #{ inspect ( reason ) } "
198+ )
199+ end
200+ end )
144201 end
145202
146203 def process_batches ( fromBlock , toBlock ) do
0 commit comments