Skip to content

Commit 939a931

Browse files
authored
Merge branch 'main' into storage_request_chunking
2 parents 387fa17 + 9a03e4c commit 939a931

File tree

42 files changed

+314
-325
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+314
-325
lines changed

.tool-versions

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
rust 1.87.0
1+
rust 1.90.0
22
# golang 1.23.2

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM rust:1.87 AS chef
1+
FROM rust:1.90 AS chef
22

33
RUN apt-get update && apt-get install -y \
44
build-essential \
@@ -58,7 +58,7 @@ RUN cargo build --release $BUILD_FLAGS
5858
# --- Final Image ---
5959
# Copy the ethrex binary into a minimalist image to reduce bloat size.
6060
# This image must have glibc and libssl
61-
FROM debian:12-slim
61+
FROM ubuntu:24.04
6262
WORKDIR /usr/local/bin
6363

6464
RUN apt-get update && apt-get install -y --no-install-recommends libssl3

crates/blockchain/blockchain.rs

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -275,23 +275,21 @@ impl Blockchain {
275275
ChainError::WitnessGeneration("Failed to access account from trie".to_string())
276276
})?;
277277
// Get storage trie at before updates
278-
if !acc_keys.is_empty() {
279-
if let Ok(Some(storage_trie)) = self.storage.storage_trie(parent_hash, *account)
280-
{
281-
let (storage_trie_witness, storage_trie) =
282-
TrieLogger::open_trie(storage_trie);
283-
// Access all the keys
284-
for storage_key in acc_keys {
285-
let hashed_key = hash_key(storage_key);
286-
storage_trie.get(&hashed_key).map_err(|_e| {
287-
ChainError::WitnessGeneration(
288-
"Failed to access storage key".to_string(),
289-
)
290-
})?;
291-
}
292-
// Store the tries to reuse when applying account updates
293-
used_storage_tries.insert(*account, (storage_trie_witness, storage_trie));
278+
if !acc_keys.is_empty()
279+
&& let Ok(Some(storage_trie)) = self.storage.storage_trie(parent_hash, *account)
280+
{
281+
let (storage_trie_witness, storage_trie) = TrieLogger::open_trie(storage_trie);
282+
// Access all the keys
283+
for storage_key in acc_keys {
284+
let hashed_key = hash_key(storage_key);
285+
storage_trie.get(&hashed_key).map_err(|_e| {
286+
ChainError::WitnessGeneration(
287+
"Failed to access storage key".to_string(),
288+
)
289+
})?;
294290
}
291+
// Store the tries to reuse when applying account updates
292+
used_storage_tries.insert(*account, (storage_trie_witness, storage_trie));
295293
}
296294
}
297295
// Store all the accessed evm bytecodes
@@ -343,10 +341,10 @@ impl Blockchain {
343341
let state_trie_witness = std::mem::take(&mut *state_trie_witness);
344342
used_trie_nodes.extend_from_slice(&Vec::from_iter(state_trie_witness.into_iter()));
345343
// If the witness is empty at least try to store the root
346-
if used_trie_nodes.is_empty() {
347-
if let Some(root) = root_node {
348-
used_trie_nodes.push(root.encode_raw());
349-
}
344+
if used_trie_nodes.is_empty()
345+
&& let Some(root) = root_node
346+
{
347+
used_trie_nodes.push(root.encode_raw());
350348
}
351349

352350
let mut needed_block_numbers = block_hashes.keys().collect::<Vec<_>>();
@@ -361,10 +359,10 @@ impl Blockchain {
361359
.saturating_sub(1);
362360
// The first block number we need is either the parent of the first block number or the earliest block number used by BLOCKHASH
363361
let mut first_needed_block_number = first_block_header.number.saturating_sub(1);
364-
if let Some(block_number_from_logger) = needed_block_numbers.first() {
365-
if **block_number_from_logger < first_needed_block_number {
366-
first_needed_block_number = **block_number_from_logger;
367-
}
362+
if let Some(block_number_from_logger) = needed_block_numbers.first()
363+
&& **block_number_from_logger < first_needed_block_number
364+
{
365+
first_needed_block_number = **block_number_from_logger;
368366
}
369367
let mut block_headers_bytes = Vec::new();
370368
for block_number in first_needed_block_number..=last_needed_block_number {
@@ -851,10 +849,11 @@ impl Blockchain {
851849
// If it exists check if the new tx has higher fees
852850
let tx_to_replace_hash = self.mempool.find_tx_to_replace(sender, nonce, tx)?;
853851

854-
if let Some(chain_id) = tx.chain_id() {
855-
if chain_id != config.chain_id {
856-
return Err(MempoolError::InvalidChainId(config.chain_id));
857-
}
852+
if tx
853+
.chain_id()
854+
.is_some_and(|chain_id| chain_id != config.chain_id)
855+
{
856+
return Err(MempoolError::InvalidChainId(config.chain_id));
858857
}
859858

860859
Ok(tx_to_replace_hash)
@@ -1072,12 +1071,12 @@ pub fn validate_gas_used(
10721071
receipts: &[Receipt],
10731072
block_header: &BlockHeader,
10741073
) -> Result<(), ChainError> {
1075-
if let Some(last) = receipts.last() {
1076-
if last.cumulative_gas_used != block_header.gas_used {
1077-
return Err(ChainError::InvalidBlock(
1078-
InvalidBlockError::GasUsedMismatch(last.cumulative_gas_used, block_header.gas_used),
1079-
));
1080-
}
1074+
if let Some(last) = receipts.last()
1075+
&& last.cumulative_gas_used != block_header.gas_used
1076+
{
1077+
return Err(ChainError::InvalidBlock(
1078+
InvalidBlockError::GasUsedMismatch(last.cumulative_gas_used, block_header.gas_used),
1079+
));
10811080
}
10821081
Ok(())
10831082
}

crates/blockchain/fork_choice.rs

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -72,30 +72,28 @@ pub async fn apply_fork_choice(
7272
};
7373

7474
// Check that finalized and safe blocks are part of the new canonical chain.
75-
if let Some(ref finalized) = finalized_res {
76-
if !((is_canonical(store, finalized.number, finalized_hash).await?
75+
if let Some(ref finalized) = finalized_res
76+
&& !((is_canonical(store, finalized.number, finalized_hash).await?
7777
&& finalized.number <= link_block_number)
7878
|| (finalized.number == head.number && finalized_hash == head_hash)
7979
|| new_canonical_blocks.contains(&(finalized.number, finalized_hash)))
80-
{
81-
return Err(InvalidForkChoice::Disconnected(
82-
error::ForkChoiceElement::Head,
83-
error::ForkChoiceElement::Finalized,
84-
));
85-
};
80+
{
81+
return Err(InvalidForkChoice::Disconnected(
82+
error::ForkChoiceElement::Head,
83+
error::ForkChoiceElement::Finalized,
84+
));
8685
}
8786

88-
if let Some(ref safe) = safe_res {
89-
if !((is_canonical(store, safe.number, safe_hash).await?
87+
if let Some(ref safe) = safe_res
88+
&& !((is_canonical(store, safe.number, safe_hash).await?
9089
&& safe.number <= link_block_number)
9190
|| (safe.number == head.number && safe_hash == head_hash)
9291
|| new_canonical_blocks.contains(&(safe.number, safe_hash)))
93-
{
94-
return Err(InvalidForkChoice::Disconnected(
95-
error::ForkChoiceElement::Head,
96-
error::ForkChoiceElement::Safe,
97-
));
98-
};
92+
{
93+
return Err(InvalidForkChoice::Disconnected(
94+
error::ForkChoiceElement::Head,
95+
error::ForkChoiceElement::Safe,
96+
));
9997
}
10098

10199
// Finished all validations.

crates/blockchain/mempool.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,11 @@ impl Mempool {
200200
}
201201

202202
// Filter by blob gas fee
203-
if let (true, Some(blob_fee)) = (is_blob_tx, filter.blob_fee) {
204-
if tx.max_fee_per_blob_gas().is_none_or(|fee| fee < blob_fee) {
205-
return false;
206-
}
203+
if is_blob_tx
204+
&& let Some(blob_fee) = filter.blob_fee
205+
&& tx.max_fee_per_blob_gas().is_none_or(|fee| fee < blob_fee)
206+
{
207+
return false;
207208
}
208209
true
209210
};

crates/blockchain/metrics/metrics_process.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,18 @@ impl MetricsProcess {
4242
})?;
4343
}
4444

45-
if let Some(path) = DATADIR_PATH.get() {
46-
if let Ok(size) = directory_size(path) {
47-
let gauge = IntGauge::new(
48-
"datadir_size_bytes",
49-
"Total size in bytes consumed by the configured datadir.",
50-
)
45+
if let Some(path) = DATADIR_PATH.get()
46+
&& let Ok(size) = directory_size(path)
47+
{
48+
let gauge = IntGauge::new(
49+
"datadir_size_bytes",
50+
"Total size in bytes consumed by the configured datadir.",
51+
)
52+
.map_err(|e| MetricsError::PrometheusErr(e.to_string()))?;
53+
let clamped = size.min(i64::MAX as u64);
54+
gauge.set(clamped as i64);
55+
r.register(Box::new(gauge))
5156
.map_err(|e| MetricsError::PrometheusErr(e.to_string()))?;
52-
let clamped = size.min(i64::MAX as u64);
53-
gauge.set(clamped as i64);
54-
r.register(Box::new(gauge))
55-
.map_err(|e| MetricsError::PrometheusErr(e.to_string()))?;
56-
}
5757
}
5858

5959
let encoder = TextEncoder::new();

crates/blockchain/metrics/profiling.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@ where
3232
S: Subscriber + for<'a> LookupSpan<'a>,
3333
{
3434
fn on_enter(&self, id: &Id, ctx: Context<'_, S>) {
35-
if let Some(span) = ctx.span(id) {
36-
if span.metadata().target().starts_with("ethrex") {
37-
let name = span.metadata().name();
35+
if let Some(span) = ctx.span(id)
36+
&& span.metadata().target().starts_with("ethrex")
37+
{
38+
let name = span.metadata().name();
3839

39-
let timer = METRICS_BLOCK_PROCESSING_PROFILE
40-
.with_label_values(&[name])
41-
.start_timer();
42-
let mut timers = self.function_timers.lock().unwrap();
43-
timers.insert(id.clone(), timer);
44-
}
40+
let timer = METRICS_BLOCK_PROCESSING_PROFILE
41+
.with_label_values(&[name])
42+
.start_timer();
43+
let mut timers = self.function_timers.lock().unwrap();
44+
timers.insert(id.clone(), timer);
4545
}
4646
}
4747

crates/common/trie/logger.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ impl TrieLogger {
3535
impl TrieDB for TrieLogger {
3636
fn get(&self, key: NodeHash) -> Result<Option<Vec<u8>>, TrieError> {
3737
let result = self.inner_db.get(key)?;
38-
if let Some(result) = result.as_ref() {
39-
if let Ok(decoded) = Node::decode(result) {
40-
let mut lock = self.witness.lock().map_err(|_| TrieError::LockError)?;
41-
lock.insert(decoded.encode_raw());
42-
};
38+
if let Some(result) = result.as_ref()
39+
&& let Ok(decoded) = Node::decode(result)
40+
{
41+
let mut lock = self.witness.lock().map_err(|_| TrieError::LockError)?;
42+
lock.insert(decoded.encode_raw());
4343
}
4444
Ok(result)
4545
}

crates/common/types/genesis.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -631,11 +631,11 @@ impl Genesis {
631631
let mut blob_gas_used: Option<u64> = None;
632632
let mut excess_blob_gas: Option<u64> = None;
633633

634-
if let Some(cancun_time) = self.config.cancun_time {
635-
if cancun_time <= self.timestamp {
636-
blob_gas_used = Some(self.blob_gas_used.unwrap_or(0));
637-
excess_blob_gas = Some(self.excess_blob_gas.unwrap_or(0));
638-
}
634+
if let Some(cancun_time) = self.config.cancun_time
635+
&& cancun_time <= self.timestamp
636+
{
637+
blob_gas_used = Some(self.blob_gas_used.unwrap_or(0));
638+
excess_blob_gas = Some(self.excess_blob_gas.unwrap_or(0));
639639
}
640640
let base_fee_per_gas = self.base_fee_per_gas.or_else(|| {
641641
self.config

crates/l2/sdk/src/calldata.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ impl DataType {
248248
.consume_u256()?
249249
.try_into()
250250
.map_err(|_| CalldataDecodeError::OutOfBounds)?;
251-
let size = if n % 32 == 0 {
251+
let size = if n.is_multiple_of(32) {
252252
n
253253
} else {
254254
n.next_multiple_of(32)

0 commit comments

Comments
 (0)