Skip to content

Commit 3a9ba9b

Browse files
committed
fix: fetch is batch is responded
chore: add useful logs
1 parent b3dc01d commit 3a9ba9b

File tree

1 file changed

+77
-25
lines changed

1 file changed

+77
-25
lines changed

explorer/lib/explorer/contract_managers/aligned_layer_service_manager.ex

Lines changed: 77 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -54,36 +54,47 @@ defmodule AlignedLayerServiceManager do
5454
end
5555

5656
def get_latest_block_number() do
57+
Logger.info("Fetching latest block number")
5758
{:ok, num} = Ethers.current_block_number()
59+
Logger.info("Latest block number: #{num}")
5860
num
5961
end
6062

6163
def get_new_batch_events(%{fromBlock: fromBlock, toBlock: toBlock}) do
64+
Logger.info("Fetching new batch events from #{fromBlock} to #{toBlock}")
6265
events =
6366
AlignedLayerServiceManager.EventFilters.new_batch_v3(nil)
6467
|> Ethers.get_logs(fromBlock: fromBlock, toBlock: toBlock)
6568

6669
case events do
6770
{:ok, []} ->
71+
Logger.info("No new batch events found in blocks #{fromBlock}-#{toBlock}")
6872
[]
6973

7074
{:ok, list} ->
75+
Logger.info("Found #{length(list)} new batch events in blocks #{fromBlock}-#{toBlock}")
7176
Enum.map(list, &extract_new_batch_event_info/1)
7277

7378
{:error, reason} ->
79+
Logger.error("Error fetching new batch events from #{fromBlock} to #{toBlock}: #{Map.get(reason, "message")}")
7480
raise("Error fetching events: #{Map.get(reason, "message")}")
7581
end
7682
end
7783

7884
def extract_new_batch_event_info(event) do
85+
block_number = event |> Map.get(:block_number)
86+
tx_hash = event |> Map.get(:transaction_hash)
87+
Logger.info("Extracting new batch event info for block #{block_number}, tx: #{tx_hash}")
88+
7989
new_batch = parse_new_batch_event(event)
90+
Logger.info("New batch event parsed: #{inspect(new_batch)}")
8091

8192
{:ok,
8293
%NewBatchInfo{
8394
address: event |> Map.get(:address),
84-
block_number: event |> Map.get(:block_number),
85-
block_timestamp: get_block_timestamp(event |> Map.get(:block_number)),
86-
transaction_hash: event |> Map.get(:transaction_hash),
95+
block_number: block_number,
96+
block_timestamp: get_block_timestamp(block_number),
97+
transaction_hash: tx_hash,
8798
new_batch: new_batch
8899
}}
89100
end
@@ -101,29 +112,42 @@ defmodule AlignedLayerServiceManager do
101112
}
102113
end
103114

104-
def is_batch_responded(merkle_root) do
115+
def is_batch_responded(merkle_root, fromBlock) do
116+
Logger.info("Checking if batch is responded for merkle_root: #{merkle_root}, fromBlock: #{fromBlock}")
117+
105118
event =
106119
Utils.string_to_bytes32(merkle_root)
107120
|> AlignedLayerServiceManager.EventFilters.batch_verified()
108-
|> Ethers.get_logs(fromBlock: @first_block)
121+
|> Ethers.get_logs(fromBlock: fromBlock)
109122

110123
case event do
111-
{:error, reason} -> {:error, reason}
112-
{_, []} -> false
113-
{:ok, _} -> true
124+
{:error, reason} ->
125+
Logger.error("Error checking batch response for #{merkle_root}: #{inspect(reason)}")
126+
{:error, reason}
127+
{_, []} ->
128+
Logger.info("Batch #{merkle_root} not responded yet")
129+
false
130+
{:ok, events} ->
131+
Logger.info("Batch #{merkle_root} responded, found #{length(events)} verification events")
132+
true
114133
end
115134
end
116135

117136
# for new batches
118137
def extract_batch_response({_status, %NewBatchInfo{} = batch_creation}) do
119138
created_batch = batch_creation.new_batch
120-
was_batch_responded = is_batch_responded(created_batch.batchMerkleRoot)
139+
Logger.info("Extracting batch response for new batch: #{created_batch.batchMerkleRoot}")
140+
was_batch_responded = is_batch_responded(created_batch.batchMerkleRoot, fromBlock: batch_creation.block_number)
121141

122142
batch_response =
123143
case was_batch_responded do
124-
true -> fetch_batch_response(created_batch.batchMerkleRoot)
144+
true ->
145+
Logger.info("Batch #{created_batch.batchMerkleRoot} was responded, fetching response details")
146+
fetch_batch_response(created_batch.batchMerkleRoot, batch_creation.block_number)
125147
# was not verified, fill with nils
126-
false -> %{block_number: nil, transaction_hash: nil, block_timestamp: nil}
148+
false ->
149+
Logger.info("Batch #{created_batch.batchMerkleRoot} was not responded yet")
150+
%{block_number: nil, transaction_hash: nil, block_timestamp: nil}
127151
end
128152

129153
%BatchDB{
@@ -147,15 +171,18 @@ defmodule AlignedLayerServiceManager do
147171

148172
# for existing but unverified batches
149173
def extract_batch_response(%Batches{} = unverified_batch) do
150-
was_batch_responded = is_batch_responded(unverified_batch.merkle_root)
174+
Logger.info("Extracting batch response for existing unverified batch: #{unverified_batch.merkle_root}")
175+
was_batch_responded = is_batch_responded(unverified_batch.merkle_root, unverified_batch.submission_block_number)
151176

152177
case was_batch_responded do
153178
# Do nothing since unverified batch was not yet verified
154179
false ->
180+
Logger.info("Unverified batch #{unverified_batch.merkle_root} still not responded")
155181
nil
156182

157183
true ->
158-
batch_response = fetch_batch_response(unverified_batch.merkle_root)
184+
Logger.info("Unverified batch #{unverified_batch.merkle_root} now responded, updating status")
185+
batch_response = fetch_batch_response(unverified_batch.merkle_root, unverified_batch.submission_block_number)
159186

160187
%BatchDB{
161188
merkle_root: unverified_batch.merkle_root,
@@ -177,29 +204,46 @@ defmodule AlignedLayerServiceManager do
177204
end
178205
end
179206

180-
def fetch_batch_response(merkle_root) do
181-
case get_batch_verified_events(%{merkle_root: merkle_root}) do
182-
{:ok, batch_verified_info} -> batch_verified_info
183-
{:empty, _} -> nil
184-
{:error, error} -> raise("Error fetching batch response: #{error}")
207+
def fetch_batch_response(merkle_root, fromBlock \\ @first_block) do
208+
Logger.info("Fetching batch response for merkle_root: #{merkle_root}, fromBlock: #{fromBlock}")
209+
case get_batch_verified_events(%{merkle_root: merkle_root, fromBlock: fromBlock}) do
210+
{:ok, batch_verified_info} ->
211+
Logger.info("Successfully fetched batch response for #{merkle_root}")
212+
batch_verified_info
213+
{:empty, _} ->
214+
Logger.info("No batch verified events found for #{merkle_root}")
215+
nil
216+
{:error, error} ->
217+
Logger.error("Error fetching batch response for #{merkle_root}: #{error}")
218+
raise("Error fetching batch response: #{error}")
185219
end
186220
end
187221

188-
def get_batch_verified_events(%{merkle_root: merkle_root}) do
222+
def get_batch_verified_events(%{merkle_root: merkle_root, fromBlock: fromBlock}) do
223+
Logger.info("Getting batch verified events for merkle_root: #{merkle_root}, fromBlock: #{fromBlock}")
189224
event =
190225
AlignedLayerServiceManager.EventFilters.batch_verified(Utils.string_to_bytes32(merkle_root))
191-
|> Ethers.get_logs(fromBlock: @first_block)
226+
|> Ethers.get_logs(fromBlock: fromBlock)
192227

193228
case event do
194-
{:error, reason} -> {:error, reason}
195-
{_, []} -> {:empty, "No task found"}
196-
{:ok, event} -> extract_batch_verified_event_info(event |> List.first())
229+
{:error, reason} ->
230+
Logger.error("Error getting batch verified events for #{merkle_root}: #{inspect(reason)}")
231+
{:error, reason}
232+
{_, []} ->
233+
Logger.info("No batch verified events found for #{merkle_root}")
234+
{:empty, "No task found"}
235+
{:ok, events} ->
236+
Logger.info("Found #{length(events)} batch verified events for #{merkle_root}")
237+
extract_batch_verified_event_info(events |> List.first())
197238
end
198239
end
199240

200241
defp extract_batch_verified_event_info(event) do
201242
batch_merkle_root = event |> Map.get(:topics_raw) |> Enum.at(1)
202243
sender_address = event |> Map.get(:data) |> Enum.at(0)
244+
block_number = event |> Map.get(:block_number)
245+
tx_hash = event |> Map.get(:transaction_hash)
246+
Logger.info("Extracting batch verified event info for block #{block_number}, tx: #{tx_hash}, merkle_root: #{batch_merkle_root}")
203247

204248
{:ok,
205249
%BatchVerifiedInfo{
@@ -213,9 +257,15 @@ defmodule AlignedLayerServiceManager do
213257
end
214258

215259
def get_block_timestamp(block_number) do
260+
Logger.info("Fetching block timestamp for block #{block_number}")
216261
case Ethers.Utils.get_block_timestamp(block_number) do
217-
{:ok, timestamp} -> DateTime.from_unix!(timestamp)
218-
{:error, error} -> raise("Error fetching block timestamp: #{error}")
262+
{:ok, timestamp} ->
263+
datetime = DateTime.from_unix!(timestamp)
264+
Logger.info("Block #{block_number} timestamp: #{datetime}")
265+
datetime
266+
{:error, error} ->
267+
Logger.error("Error fetching block timestamp for block #{block_number}: #{error}")
268+
raise("Error fetching block timestamp: #{error}")
219269
end
220270
end
221271

@@ -230,8 +280,10 @@ defmodule AlignedLayerServiceManager do
230280
end
231281

232282
def update_restakeable_strategies() do
283+
Logger.info("Updating restakeable strategies")
233284
case AlignedLayerServiceManager.get_restakeable_strategies() |> Ethers.call() do
234285
{:ok, restakeable_strategies} ->
286+
Logger.info("Successfully fetched #{length(restakeable_strategies)} restakeable strategies")
235287
Strategies.update(restakeable_strategies)
236288

237289
{:error, error} ->

0 commit comments

Comments
 (0)