Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
8f305de
Early quit event validation (to test)
GiovanniTorrisi-ChainSecurity Jun 6, 2025
7472517
Add simple test for missing event occurrence
GiovanniTorrisi-ChainSecurity Jun 16, 2025
2cd8b90
Temporarily suppress debug print
GiovanniTorrisi-ChainSecurity Jul 4, 2025
7a0c761
Split get_events function, debug log
GiovanniTorrisi-ChainSecurity Jul 4, 2025
e5e31d4
Fix formatting
GiovanniTorrisi-ChainSecurity Jul 4, 2025
2fae3da
Fix double pagination in event validation, debug prints
GiovanniTorrisi-ChainSecurity Jul 7, 2025
baef630
Debug log
GiovanniTorrisi-ChainSecurity Jul 7, 2025
396a4bc
Put failing command first (debug)
GiovanniTorrisi-ChainSecurity Jul 7, 2025
07ec935
Up
GiovanniTorrisi-ChainSecurity Jul 7, 2025
375808c
Up
GiovanniTorrisi-ChainSecurity Jul 7, 2025
a87f3d2
Add verbose log
GiovanniTorrisi-ChainSecurity Jul 7, 2025
f3dd5f3
Debug log
GiovanniTorrisi-ChainSecurity Jul 7, 2025
3752607
Handle empty string response from eth_getLogs
GiovanniTorrisi-ChainSecurity Jul 7, 2025
c2d6e46
Print full web3 response
GiovanniTorrisi-ChainSecurity Jul 7, 2025
76213cd
Full response text log
GiovanniTorrisi-ChainSecurity Jul 7, 2025
61da67c
Fix formatting
GiovanniTorrisi-ChainSecurity Jul 7, 2025
5598bc0
Query same amount of blocks as main
GiovanniTorrisi-ChainSecurity Jul 7, 2025
6e74984
Fix formatting
GiovanniTorrisi-ChainSecurity Jul 7, 2025
181ed00
Decrease max block range from 10000 to 5000
GiovanniTorrisi-ChainSecurity Jul 7, 2025
8557f5e
Query odd block range
GiovanniTorrisi-ChainSecurity Jul 7, 2025
3463fc0
Decrease block range to 2000
GiovanniTorrisi-ChainSecurity Jul 7, 2025
a415fd6
Even block range
GiovanniTorrisi-ChainSecurity Jul 7, 2025
3ef3434
Follow query pattern 10'000 block-range, then 9998 block-range
GiovanniTorrisi-ChainSecurity Jul 7, 2025
b804201
Restore ci_tests.sh
GiovanniTorrisi-ChainSecurity Jul 8, 2025
f1432df
Refactor paginated event query
Jul 10, 2025
1ac8ca4
Try consistent init-validate block ranges
GiovanniTorrisi-ChainSecurity Jul 10, 2025
446ce65
Query 10k blocks instead of 9999
GiovanniTorrisi-ChainSecurity Jul 10, 2025
145af49
Show warning of cached proxy empty response
GiovanniTorrisi-ChainSecurity Jul 11, 2025
5355bb7
Revert "Query 10k blocks instead of 9999"
GiovanniTorrisi-ChainSecurity Jul 11, 2025
7926583
Update cached proxy cache
GiovanniTorrisi-ChainSecurity Jul 11, 2025
de6abad
Minor fix
GiovanniTorrisi-ChainSecurity Jul 11, 2025
7e6418b
Update cached proxy cache
GiovanniTorrisi-ChainSecurity Jul 11, 2025
1bf21ce
Push debug CI test
GiovanniTorrisi-ChainSecurity Jul 11, 2025
b3eb3d5
Revert "Update cached proxy cache"
GiovanniTorrisi-ChainSecurity Jul 11, 2025
2054828
Revert "Update cached proxy cache"
GiovanniTorrisi-ChainSecurity Jul 11, 2025
266a580
Correctly update cached proxy cache
GiovanniTorrisi-ChainSecurity Jul 11, 2025
699b6ef
Up
GiovanniTorrisi-ChainSecurity Jul 11, 2025
68bb9ad
Clean up
GiovanniTorrisi-ChainSecurity Jul 11, 2025
0724277
added check for fewer events than expected
Aug 14, 2025
98c56f1
format
Jan 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/dvf/discovery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ pub fn discover_storage_and_events(
// Event discovery logic
if params.event_topics.is_none() {
print_progress("Obtaining past events.", params.pc, params.progress_mode);
seen_events = web3::get_eth_events(
seen_events = web3::get_eth_events_paginated(
params.config,
params.address,
params.start_block_num,
Expand Down
83 changes: 55 additions & 28 deletions lib/web3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1317,42 +1317,69 @@ pub struct Web3Event {

// Fetches events, does multiple calls if necessary
// Inclusive for from_block and to_block
pub fn get_eth_events(
pub fn get_eth_events_paginated(
config: &DVFConfig,
address: &Address,
from_block: u64,
to_block: u64,
topics: &Vec<B256>,
) -> Result<Vec<Log>, ValidationError> {
if to_block - from_block > config.max_blocks_per_event_query {
let pb = ProgressBar::new(to_block - from_block);
if to_block - from_block > LARGE_BLOCK_RANGE {
let mut num_events = String::new();
if topics.is_empty() {
num_events.push_str("all");
} else {
num_events.push_str(&topics.len().to_string());
}
info!(
"You are querying {} event(s) for a range of {} blocks. This will take some time.",
num_events,
to_block - from_block + 1
);
}
let mut last_block = from_block + config.max_blocks_per_event_query;
let mut events = get_eth_events(config, address, from_block, last_block, topics)?;
while last_block < to_block {
let next_last_block =
std::cmp::min(last_block + config.max_blocks_per_event_query - 1, to_block);
let mut next_events =
get_eth_events(config, address, last_block + 1, next_last_block, topics)?;
last_block = next_last_block;
pb.set_position(next_last_block - from_block);
events.append(&mut next_events);
let mut events = Vec::new();

// If the range is small enough, just make a single request
if to_block - from_block <= config.max_blocks_per_event_query {
return get_eth_events(config, address, from_block, to_block, topics);
}

// Otherwise, if the range is larger than the maximum allowed for one request, paginate
let pb = ProgressBar::new(to_block - from_block);

// Inform user if the block range is large
if to_block - from_block > LARGE_BLOCK_RANGE {
let mut num_events = String::new();
if topics.is_empty() {
num_events.push_str("all");
} else {
num_events.push_str(&topics.len().to_string());
}
pb.finish_and_clear();
return Ok(events);
info!(
"You are querying {} event(s) for a range of {} blocks. This will take some time.",
num_events,
to_block - from_block + 1
);
}

let mut current_from = from_block;
while current_from <= to_block {
// Calculate the end of this chunk (either the max allowed or the to_block)
let current_to = std::cmp::min(
current_from + config.max_blocks_per_event_query - 1,
to_block,
);

let mut chunk_events = get_eth_events(config, address, current_from, current_to, topics)?;
events.append(&mut chunk_events);

pb.set_position(current_to - from_block + 1);

// Move the starting point to the next block after the current range
current_from = current_to + 1;
}

pb.finish_and_clear();

Ok(events)
}

// Fetches events, in a single call, does NOT paginate the block range.
pub fn get_eth_events(
config: &DVFConfig,
address: &Address,
from_block: u64,
to_block: u64,
topics: &Vec<B256>,
) -> Result<Vec<Log>, ValidationError> {
println!("Querying events from {} to {}", from_block, to_block);
let from_block_hex = format!("{:#x}", from_block);
let to_block_hex = format!("{:#x}", to_block);
let request_body = json!({
Expand Down
2 changes: 2 additions & 0 deletions src/cached_proxy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ async fn generic_function(

// If we are running in test mode, answer no non-cached queries
if url.len() < 2 {
println!("This RPC request is not cached and the proxy is running in cache-only mode!");
return web::Json("".into());
}

Expand Down Expand Up @@ -164,6 +165,7 @@ async fn generic_path_function<T: AsRef<str> + std::fmt::Display>(

// If we are running in test mode, answer no non-cached queries
if url.len() < 2 {
println!("This RPC request is not cached and the proxy is running in cache-only mode!");
return web::Json("".into());
}

Expand Down
107 changes: 67 additions & 40 deletions src/dvf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,53 +197,80 @@ fn validate_dvf(
// Validate events
print_progress("Validating Critical Events.", &mut pc, &progress_mode);
let pb = ProgressBar::new(filled.critical_events.len().try_into().unwrap());
let start_block = filled.deployment_block_num;
let end_block = validation_block_num;

for critical_event in &filled.critical_events {
let seen_events = web3::get_eth_events(
config,
&filled.address,
filled.deployment_block_num,
validation_block_num,
&vec![critical_event.topic0],
)?;
if seen_events.len() != critical_event.occurrences.len() {
return Err(ValidationError::Invalid(format!(
"Found {} occurrences of event {}, but expected {}.",
seen_events.len(),
critical_event.sig,
critical_event.occurrences.len()
)));
}
let mut num_occurrences = 0;
let num_occurrences_expected = critical_event.occurrences.len();

let mut current_from = start_block;
while current_from <= end_block {
let current_to = std::cmp::min(
current_from + config.max_blocks_per_event_query - 1,
end_block,
);
let seen_events = web3::get_eth_events(
config,
&filled.address,
current_from,
current_to,
&vec![critical_event.topic0],
)?;

#[allow(clippy::needless_range_loop)]
for i in 0..seen_events.len() {
let log_inner = &seen_events[i].inner;
if log_inner.topics() != critical_event.occurrences[i].topics {
let message = format!(
"Mismatching topics for event occurrence {} of {}.",
i, critical_event.sig
);
if continue_on_mismatch {
mismatch_found = true;
println!("{}", message);
} else {
return Err(ValidationError::Invalid(message));
}
if num_occurrences + seen_events.len() > num_occurrences_expected {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this no longer checks if the number of occurrences is lower than the expected ones. if a dvf has been set up correctly, this should never happen but there are no guarantees that the dvfs are set up correctly. you can now create a dvf with an additional event that has not been emitted yet and it will validate in the future once it is emitted.

return Err(ValidationError::Invalid(format!(
"Found more occurrences of event {} than expected ({}).",
critical_event.sig, num_occurrences_expected
)));
}
if log_inner.data.data != critical_event.occurrences[i].data {
let message = format!(
"Mismatching data for event occurrence {} of {}.",
i, critical_event.sig
);
if continue_on_mismatch {
mismatch_found = true;
println!("{}", message);
} else {
return Err(ValidationError::Invalid(message));

for event in seen_events {
let expected = &critical_event.occurrences[num_occurrences];
let log_inner = &event.inner;

if log_inner.topics() != expected.topics {
let message = format!(
"Mismatching topics for event occurrence {} of {}.",
num_occurrences, critical_event.sig
);
if continue_on_mismatch {
mismatch_found = true;
println!("{}", message);
} else {
return Err(ValidationError::Invalid(message));
}
}

if log_inner.data.data != expected.data {
let message = format!(
"Mismatching data for event occurrence {} of {}.",
num_occurrences, critical_event.sig
);
if continue_on_mismatch {
mismatch_found = true;
println!("{}", message);
} else {
return Err(ValidationError::Invalid(message));
}
}

num_occurrences += 1;
}

current_from = current_to + 1;
}

if num_occurrences < num_occurrences_expected {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed here

return Err(ValidationError::Invalid(format!(
"Found less occurrences of event {} than expected ({}).",
critical_event.sig, num_occurrences_expected
)));
}

pb.inc(1);
}

pb.finish_and_clear();

if mismatch_found {
Expand Down Expand Up @@ -281,7 +308,7 @@ fn validate_dvf(
registry,
seen_ids,
allow_untrusted,
false,
continue_on_mismatch,
Some(reference.contract_name.clone()),
));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"jsonrpc":"2.0","id":1,"result":[]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"jsonrpc":"2.0","id":1,"result":[]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"jsonrpc":"2.0","id":1,"result":[]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"jsonrpc":"2.0","id":1,"result":[]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"jsonrpc":"2.0","id":1,"result":[]}

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"jsonrpc":"2.0","id":1,"result":[{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000005180db0237291a6449dda9ed33ad90a38787621c"],"data":"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000","blockNumber":"0xeffe04","transactionHash":"0x4254dd24f8b5f9626ef36fcc8fa5942e799a101a31805b055cfff4c96abc3a02","transactionIndex":"0x3a","blockHash":"0x58389e7a967d7a21c788d7ade8dda06d7dab444cbaf6cf5ecc4072311f019fcc","logIndex":"0x5f","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0xe0dcb47e0eb67e20e87f3e34aab31c669ecec7466e8b7fb329d586dadebac6b6","0x000000000000000000000000bafa44efe7901e04e39dad13167d089c559c1138","0x0000000000000000000000005180db0237291a6449dda9ed33ad90a38787621c"],"data":"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000","blockNumber":"0xeffe04","transactionHash":"0x4254dd24f8b5f9626ef36fcc8fa5942e799a101a31805b055cfff4c96abc3a02","transactionIndex":"0x3a","blockHash":"0x58389e7a967d7a21c788d7ade8dda06d7dab444cbaf6cf5ecc4072311f019fcc","logIndex":"0x60","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","0x0000000000000000000000005180db0237291a6449dda9ed33ad90a38787621c","0x000000000000000000000000ac3e018457b222d93114458476f3e3416abbe38f"],"data":"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000","blockNumber":"0xeffe2e","transactionHash":"0xbf88046d7c09142ab075ba98a41a9f5df5fa64fe0806cbdb5e4c1689a9141e30","transactionIndex":"0x58","blockHash":"0x7fd46db75c931331680a7f5b4a9791a745931f138e9c16cd68fc472fbc242ee9","logIndex":"0x87","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","0x0000000000000000000000005180db0237291a6449dda9ed33ad90a38787621c","0x000000000000000000000000ac3e018457b222d93114458476f3e3416abbe38f"],"data":"0x0000000000000000000000000000000000000000000000000000000000000000","blockNumber":"0xeffe2e","transactionHash":"0xbf88046d7c09142ab075ba98a41a9f5df5fa64fe0806cbdb5e4c1689a9141e30","transactionIndex":"0x58","blockHash":"0x7fd46db75c931331680a7f5b4a9791a745931f138e9c16cd68fc472fbc242ee9","logIndex":"0x88","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000005180db0237291a6449dda9ed33ad90a38787621c","0x000000000000000000000000ac3e018457b222d93114458476f3e3416abbe38f"],"data":"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000","blockNumber":"0xeffe2e","transactionHash":"0xbf88046d7c09142ab075ba98a41a9f5df5fa64fe0806cbdb5e4c1689a9141e30","transactionIndex":"0x58","blockHash":"0x7fd46db75c931331680a7f5b4a9791a745931f138e9c16cd68fc472fbc242ee9","logIndex":"0x89","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0xb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c"],"data":"0x000000000000000000000000b1748c79709f4ba2dd82834b8c82d4a505003f270000000000000000000000008306300ffd616049fd7e4b0354a64da835c1a81c","blockNumber":"0xefff11","transactionHash":"0xab1e412c7757938bde78c46288091fd1ae46b5d8bde8fdfcd868416eadd34222","transactionIndex":"0x3f","blockHash":"0x82db4ee665687982a96e944e69b3edadc35cc6d3a234d014d44365e539dd54d3","logIndex":"0x8a","removed":false}]}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"jsonrpc":"2.0","id":1,"result":[]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"jsonrpc":"2.0","id":1,"result":[]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"jsonrpc":"2.0","id":1,"result":[{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0xb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c"],"data":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1748c79709f4ba2dd82834b8c82d4a505003f27","blockNumber":"0xef599e","transactionHash":"0x8b36720344797ed57f2e22cf2aa56a09662165567a6ade701259cde560cc4a9d","transactionIndex":"0x14","blockHash":"0xd7ed5e920920b64f5efbcc91a032dd0378d506088a00bba2fb1c66cd0dbae25b","logIndex":"0x34","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6"],"data":"0x000000000000000000000000bafa44efe7901e04e39dad13167d089c559c1138","blockNumber":"0xef5a6b","transactionHash":"0x198e6d0873d4521837bd014dacc4329b11297dd79a0f879d5049753f9f89e82b","transactionIndex":"0x12","blockHash":"0x768feaea2f3bf3d6a7627b3383902c032804427c65042e32fcc0de15d41296c8","logIndex":"0x1e","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000bafa44efe7901e04e39dad13167d089c559c1138"],"data":"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000","blockNumber":"0xef5a90","transactionHash":"0x9601f827bb4459bb7f636c844dede00786c5a076bce99516429fe50e3163ba93","transactionIndex":"0xbb","blockHash":"0x61bcedce14b858f9ce637263340a263bdc6f8c8a89c92773f14d3d03718f0b33","logIndex":"0x188","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0xe0dcb47e0eb67e20e87f3e34aab31c669ecec7466e8b7fb329d586dadebac6b6","0x000000000000000000000000bafa44efe7901e04e39dad13167d089c559c1138","0x000000000000000000000000bafa44efe7901e04e39dad13167d089c559c1138"],"data":"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000","blockNumber":"0xef5a90","transactionHash":"0x9601f827bb4459bb7f636c844dede00786c5a076bce99516429fe50e3163ba93","transactionIndex":"0xbb","blockHash":"0x61bcedce14b858f9ce637263340a263bdc6f8c8a89c92773f14d3d03718f0b33","logIndex":"0x189","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","0x000000000000000000000000bafa44efe7901e04e39dad13167d089c559c1138","0x000000000000000000000000ac3e018457b222d93114458476f3e3416abbe38f"],"data":"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000","blockNumber":"0xef5a90","transactionHash":"0x9601f827bb4459bb7f636c844dede00786c5a076bce99516429fe50e3163ba93","transactionIndex":"0xbb","blockHash":"0x61bcedce14b858f9ce637263340a263bdc6f8c8a89c92773f14d3d03718f0b33","logIndex":"0x18b","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","0x000000000000000000000000bafa44efe7901e04e39dad13167d089c559c1138","0x000000000000000000000000ac3e018457b222d93114458476f3e3416abbe38f"],"data":"0x0000000000000000000000000000000000000000000000000000000000000000","blockNumber":"0xef5a90","transactionHash":"0x9601f827bb4459bb7f636c844dede00786c5a076bce99516429fe50e3163ba93","transactionIndex":"0xbb","blockHash":"0x61bcedce14b858f9ce637263340a263bdc6f8c8a89c92773f14d3d03718f0b33","logIndex":"0x18d","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x000000000000000000000000bafa44efe7901e04e39dad13167d089c559c1138","0x000000000000000000000000ac3e018457b222d93114458476f3e3416abbe38f"],"data":"0x0000000000000000000000000000000000000000000000000de0b6b3a7640000","blockNumber":"0xef5a90","transactionHash":"0x9601f827bb4459bb7f636c844dede00786c5a076bce99516429fe50e3163ba93","transactionIndex":"0xbb","blockHash":"0x61bcedce14b858f9ce637263340a263bdc6f8c8a89c92773f14d3d03718f0b33","logIndex":"0x18e","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000005180db0237291a6449dda9ed33ad90a38787621c"],"data":"0x00000000000000000000000000000000000000000000000000038d7ea4c68000","blockNumber":"0xef5a98","transactionHash":"0x1488af0b2eb93b6c0e82de337d978781c8e5996eaecc653abf392d06ebe75c08","transactionIndex":"0x24","blockHash":"0x9383c3f7717b6ef88523f5a0f9ff69a492a43bdbf26adf40239b39e11d2c5438","logIndex":"0x81","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0xe0dcb47e0eb67e20e87f3e34aab31c669ecec7466e8b7fb329d586dadebac6b6","0x000000000000000000000000bafa44efe7901e04e39dad13167d089c559c1138","0x0000000000000000000000005180db0237291a6449dda9ed33ad90a38787621c"],"data":"0x00000000000000000000000000000000000000000000000000038d7ea4c68000","blockNumber":"0xef5a98","transactionHash":"0x1488af0b2eb93b6c0e82de337d978781c8e5996eaecc653abf392d06ebe75c08","transactionIndex":"0x24","blockHash":"0x9383c3f7717b6ef88523f5a0f9ff69a492a43bdbf26adf40239b39e11d2c5438","logIndex":"0x82","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000005180db0237291a6449dda9ed33ad90a38787621c","0x000000000000000000000000ac3e018457b222d93114458476f3e3416abbe38f"],"data":"0x00000000000000000000000000000000000000000000000000038d7ea4c68000","blockNumber":"0xef5a9e","transactionHash":"0x1d2add7b30b4d411ef95b948af5b6a13a60ec91dadbcbd87b6da5da8bc16a91b","transactionIndex":"0x4b","blockHash":"0xc836180c9370f03266774891a320275b87276b7a74fe937db3c848fbaf2c7df6","logIndex":"0xbb","removed":false},{"address":"0x5e8422345238f34275888049021821e8e08caa1f","topics":["0x906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22"],"data":"0x0000000000000000000000008306300ffd616049fd7e4b0354a64da835c1a81c","blockNumber":"0xef6ed1","transactionHash":"0xa5ab72433014588d5a41e73554c2915a483124d54321a8e6acf1912132c7718c","transactionIndex":"0x44","blockHash":"0x702b9dbae3879a1071e0c3443ef6c05d81874e42fa1170f003e98ad01c1234cb","logIndex":"0x29","removed":false}]}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"jsonrpc":"2.0","id":1,"result":[]}

Large diffs are not rendered by default.

Loading
Loading