Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
26fc1c4
Suppress logs from forge inspect
GiovanniTorrisi-ChainSecurity Jun 12, 2025
44ebcc8
Early quit event validation (to test)
GiovanniTorrisi-ChainSecurity Jun 6, 2025
ebe8c00
Add simple test for missing event occurrence
GiovanniTorrisi-ChainSecurity Jun 16, 2025
c473b83
Merge branch 'main' into 28-early-quit-event-validation
GiovanniTorrisi-ChainSecurity Jul 4, 2025
d641bd0
Temporarily suppress debug print
GiovanniTorrisi-ChainSecurity Jul 4, 2025
2bfd5bf
Split get_events function, debug log
GiovanniTorrisi-ChainSecurity Jul 4, 2025
883fb58
Fix formatting
GiovanniTorrisi-ChainSecurity Jul 4, 2025
928a0b2
Fix double pagination in event validation, debug prints
GiovanniTorrisi-ChainSecurity Jul 7, 2025
90524a5
Debug log
GiovanniTorrisi-ChainSecurity Jul 7, 2025
aa171e1
Put failing command first (debug)
GiovanniTorrisi-ChainSecurity Jul 7, 2025
3800e63
Up
GiovanniTorrisi-ChainSecurity Jul 7, 2025
2518fdc
Up
GiovanniTorrisi-ChainSecurity Jul 7, 2025
0da5d64
Add verbose log
GiovanniTorrisi-ChainSecurity Jul 7, 2025
db0081b
Debug log
GiovanniTorrisi-ChainSecurity Jul 7, 2025
d17fdbe
Handle empty string response from eth_getLogs
GiovanniTorrisi-ChainSecurity Jul 7, 2025
1f2d8ff
Print full web3 response
GiovanniTorrisi-ChainSecurity Jul 7, 2025
bb15e1d
Full response text log
GiovanniTorrisi-ChainSecurity Jul 7, 2025
da987df
Fix formatting
GiovanniTorrisi-ChainSecurity Jul 7, 2025
97d06da
Restore original .rs files for debugging
GiovanniTorrisi-ChainSecurity Jul 7, 2025
5241dbd
Revert "Restore original .rs files for debugging"
GiovanniTorrisi-ChainSecurity Jul 7, 2025
4569c5d
Query same amount of blocks as main
GiovanniTorrisi-ChainSecurity Jul 7, 2025
7e604aa
Fix formatting
GiovanniTorrisi-ChainSecurity Jul 7, 2025
98b435a
Decrease max block range from 10000 to 5000
GiovanniTorrisi-ChainSecurity Jul 7, 2025
f8d9c0d
Query odd block range
GiovanniTorrisi-ChainSecurity Jul 7, 2025
315ad19
Decrease block range to 2000
GiovanniTorrisi-ChainSecurity Jul 7, 2025
5c1e6e4
Even block range
GiovanniTorrisi-ChainSecurity Jul 7, 2025
f8898b7
Follow query pattern 10'000 block-range, then 9998 block-range
GiovanniTorrisi-ChainSecurity Jul 7, 2025
bf756c2
Restore ci_tests.sh
GiovanniTorrisi-ChainSecurity Jul 8, 2025
a389d70
Merge branch 'main' into 28-early-quit-event-validation
Jul 8, 2025
487bce9
Refactor paginated event query
Jul 10, 2025
e9ab3ea
Try consistent init-validate block ranges
GiovanniTorrisi-ChainSecurity Jul 10, 2025
bb7a83b
Query 10k blocks instead of 9999
GiovanniTorrisi-ChainSecurity Jul 10, 2025
50d9f89
Show warning of cached proxy empty response
GiovanniTorrisi-ChainSecurity Jul 11, 2025
7f3e4ae
Revert "Query 10k blocks instead of 9999"
GiovanniTorrisi-ChainSecurity Jul 11, 2025
3414b3f
Update cached proxy cache
GiovanniTorrisi-ChainSecurity Jul 11, 2025
f606f8b
Minor fix
GiovanniTorrisi-ChainSecurity Jul 11, 2025
84a01c8
Update cached proxy cache
GiovanniTorrisi-ChainSecurity Jul 11, 2025
653a093
Push debug CI test
GiovanniTorrisi-ChainSecurity Jul 11, 2025
724b1fa
Fix
GiovanniTorrisi-ChainSecurity Jul 11, 2025
074e94d
Revert "Update cached proxy cache"
GiovanniTorrisi-ChainSecurity Jul 11, 2025
7fbcedf
Revert "Update cached proxy cache"
GiovanniTorrisi-ChainSecurity Jul 11, 2025
8af01c5
Correctly update cached proxy cache
GiovanniTorrisi-ChainSecurity Jul 11, 2025
d338746
Up
GiovanniTorrisi-ChainSecurity Jul 11, 2025
2c3a648
Clean up
GiovanniTorrisi-ChainSecurity Jul 11, 2025
d44b257
Delete DVF file regardless of test outcome
GiovanniTorrisi-ChainSecurity Jul 11, 2025
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
83 changes: 55 additions & 28 deletions lib/web3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1163,42 +1163,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!("Quering 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
105 changes: 64 additions & 41 deletions src/dvf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -196,53 +196,76 @@ 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;
println!("Max_block per event {}", config.max_blocks_per_event_query);

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 {
return Err(ValidationError::Invalid(format!(
"Found at least {} occurrences of event {}, but expected {}.",
num_occurrences + seen_events.len(),
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;
}

pb.inc(1);
}

pb.finish_and_clear();

if mismatch_found {
Expand Down Expand Up @@ -1057,7 +1080,7 @@ fn process(matches: ArgMatches) -> Result<(), ValidationError> {

if event_topics.is_none() {
print_progress("Obtaining past events.", &mut pc, &progress_mode);
seen_events = web3::get_eth_events(
seen_events = web3::get_eth_events_paginated(
&config,
&dumped.address,
deployment_block_num,
Expand Down Expand Up @@ -1436,7 +1459,7 @@ fn process(matches: ArgMatches) -> Result<(), ValidationError> {
print_progress("Checking Events.", &mut pc, &progress_mode);
// Validate events
for critical_event in updated.critical_events.iter_mut() {
let seen_events = web3::get_eth_events(
let seen_events = web3::get_eth_events_paginated(
&config,
&filled.address,
filled.deployment_block_num,
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