Skip to content
Merged
Show file tree
Hide file tree
Changes from 147 commits
Commits
Show all changes
148 commits
Select commit Hold shift + click to select a range
40948ec
feat(l2): pay base fee to coinbase
MegaRedHand Sep 17, 2025
875ed1b
Revert "feat(l2): pay base fee to coinbase"
avilagaston9 Sep 22, 2025
2f11290
feat(l2): pay base_fee to fee_vault
avilagaston9 Sep 22, 2025
a99d587
Add fee_vault to blockchain
avilagaston9 Sep 22, 2025
d6a8571
Update modules to use fee_vault
avilagaston9 Sep 23, 2025
92319c0
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Sep 23, 2025
107336d
Impplement feeVault endpoint
avilagaston9 Sep 23, 2025
c562dd2
Update replay to use fee_vault
avilagaston9 Sep 24, 2025
2fb0a58
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Sep 24, 2025
c51c603
Fix tdx
avilagaston9 Sep 24, 2025
002f151
Rename fee vault to coinbase in tests
avilagaston9 Sep 24, 2025
605f14a
Fix linter
avilagaston9 Sep 24, 2025
bb68f7f
Update tests
avilagaston9 Sep 24, 2025
33930ee
Fix workflow
avilagaston9 Sep 24, 2025
57e8526
Fix integration tests
avilagaston9 Sep 24, 2025
818eb12
Fix based workflow
avilagaston9 Sep 24, 2025
d7b02b9
Remove fee_Vault from add_block
avilagaston9 Sep 24, 2025
df483ca
Rename base_fees to priority fees in test
avilagaston9 Sep 24, 2025
d29b1a0
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Sep 24, 2025
e7ffedd
Update cli.md
avilagaston9 Sep 25, 2025
061a617
Add disclaimer to docs
avilagaston9 Sep 25, 2025
80d57dc
Move fee_vault to blockchain struct
avilagaston9 Sep 25, 2025
7beb781
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Sep 25, 2025
9aa0407
Fix linter
avilagaston9 Sep 25, 2025
6445c83
Use cfg! macro to resolve fee_vault
avilagaston9 Sep 25, 2025
9ae2402
separate payload builder interfaces
avilagaston9 Sep 25, 2025
65da300
Store fee_vault in l2_hook
avilagaston9 Sep 25, 2025
ef38d69
Improve docs
avilagaston9 Sep 25, 2025
4316a28
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Sep 25, 2025
7c692f2
Add disclaimer
avilagaston9 Sep 25, 2025
39d3a1b
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Sep 29, 2025
a564e8a
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Sep 29, 2025
8f57e41
Add fee_config to blockchain and vm l2 type
avilagaston9 Sep 30, 2025
df122ef
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Sep 30, 2025
2846e16
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Sep 30, 2025
3b3d001
Fix ethrex replay for l2
avilagaston9 Sep 30, 2025
aa01211
Fix tdx build
avilagaston9 Sep 30, 2025
9eaf648
Minor improvements
avilagaston9 Sep 30, 2025
d4dc659
Fix linter
avilagaston9 Sep 30, 2025
228175a
feat(l2): implement operator fee
avilagaston9 Oct 1, 2025
a364d37
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Oct 2, 2025
88ab25e
Update deployer
avilagaston9 Oct 2, 2025
8d1d5a3
Fix clippy
avilagaston9 Oct 2, 2025
51809e4
Prove that the operator_fee is the configured one
avilagaston9 Oct 2, 2025
84f9d7a
Fix l2 hook
avilagaston9 Oct 2, 2025
b2aa76a
Style
avilagaston9 Oct 2, 2025
c6727ff
Merge branch 'l2/dont-burn-base-fee' into feat/l2/operator_fee
avilagaston9 Oct 2, 2025
dec1042
Set operator fee
avilagaston9 Oct 2, 2025
ff5af2b
Update cargo lock
avilagaston9 Oct 2, 2025
1e94dd6
Set fee vault address
avilagaston9 Oct 2, 2025
1db8ba7
Add operator fee to integration tests
avilagaston9 Oct 2, 2025
de54296
Fix env var
avilagaston9 Oct 2, 2025
6af8e5d
Pass operator fee address
avilagaston9 Oct 2, 2025
62e7148
Add test upgrade
avilagaston9 Oct 2, 2025
4b5dc0a
Fix dockers
avilagaston9 Oct 3, 2025
bd063f6
Fix public input length
avilagaston9 Oct 3, 2025
0075f72
Update docs
avilagaston9 Oct 3, 2025
4b536c2
Remove extra line
avilagaston9 Oct 3, 2025
39109f6
Update summary
avilagaston9 Oct 3, 2025
a02fcde
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Oct 3, 2025
ddb9a95
Restore replay
avilagaston9 Oct 3, 2025
82e4a39
Merge branch 'l2/dont-burn-base-fee' into feat/l2/operator_fee
avilagaston9 Oct 3, 2025
e765d7a
Update docs
avilagaston9 Oct 3, 2025
49b7525
Rename fee vault with base fee vault
avilagaston9 Oct 3, 2025
2537cce
Fix based deployment
avilagaston9 Oct 3, 2025
e955f21
Continue renaming fee vault to base fee vault
avilagaston9 Oct 3, 2025
7b64801
Don't call operator fee if based mode is enabled
avilagaston9 Oct 5, 2025
9abd637
Skip operator fee in tests
avilagaston9 Oct 5, 2025
fd2a5e1
Fix tests
avilagaston9 Oct 5, 2025
1fbb93f
feat(l2): implement l1 fee
avilagaston9 Oct 6, 2025
4032f86
Fix linter
avilagaston9 Oct 6, 2025
6dde382
Add mutable l1 fee
avilagaston9 Oct 6, 2025
af22348
Fix get_account_diff_size
avilagaston9 Oct 7, 2025
ea65cbe
pay l1 fee
avilagaston9 Oct 7, 2025
6ec2f2d
Store l1 blob base fee per block
avilagaston9 Oct 7, 2025
e51d177
Implement L1BlobBaseFee endpoint
avilagaston9 Oct 7, 2025
72765cf
Set l1 fee address by config
avilagaston9 Oct 7, 2025
44077b5
Add l1 fee integration tests
avilagaston9 Oct 9, 2025
6fb4e87
Fix clippy
avilagaston9 Oct 9, 2025
5769398
Run workflows with l1 fee
avilagaston9 Oct 9, 2025
37a15fa
Make l1 fee update interval configurable
avilagaston9 Oct 9, 2025
2ee9c6c
Improve readability
avilagaston9 Oct 9, 2025
8d00a1a
Add L1 fee documentation
avilagaston9 Oct 9, 2025
a9e1f53
Update prover to work with multiple fee configs
avilagaston9 Oct 9, 2025
c870603
Fix clippy
avilagaston9 Oct 9, 2025
ca0ce92
restore MAX_MEMPOOL_SIZE_DEFAULT
avilagaston9 Oct 11, 2025
39c196f
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Oct 11, 2025
7172748
Fix clippy
avilagaston9 Oct 11, 2025
652fa08
Restore genesis
avilagaston9 Oct 11, 2025
4eafeb4
register default fee vault pk
avilagaston9 Oct 11, 2025
950540e
Skip fee vault check in l2 dev tests
avilagaston9 Oct 13, 2025
11c9789
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Oct 13, 2025
749fda6
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Oct 13, 2025
1b71dd7
Merge branch 'main' into l2/dont-burn-base-fee
avilagaston9 Oct 13, 2025
c22ffc2
Free disk space in based
avilagaston9 Oct 13, 2025
29cacdf
Restore based workflow
avilagaston9 Oct 13, 2025
26e34c0
Merge based workflow in matrix
avilagaston9 Oct 14, 2025
704d9e6
Removed based from all-test
avilagaston9 Oct 14, 2025
e098174
Install rex in based
avilagaston9 Oct 14, 2025
e034fdc
Don't set fee vault in based
avilagaston9 Oct 14, 2025
717d838
Merge branch 'l2/dont-burn-base-fee' into feat/l2/operator_fee
avilagaston9 Oct 14, 2025
0b965c8
Fix clippy
avilagaston9 Oct 14, 2025
432e986
Merge branch 'main' into feat/l2/operator_fee
avilagaston9 Oct 14, 2025
f95a173
remove operator fee from onChainProposer
avilagaston9 Oct 14, 2025
c0652ab
Minor improvements
avilagaston9 Oct 14, 2025
a4ebd37
Change l2 hook behavior
avilagaston9 Oct 15, 2025
71290b6
Update tests
avilagaston9 Oct 15, 2025
d33a2e6
Merge branch 'main' into feat/l2/operator_fee
avilagaston9 Oct 15, 2025
df3bb70
Fix workflow linter
avilagaston9 Oct 15, 2025
a894ce9
Fix clippy
avilagaston9 Oct 15, 2025
c7bcf60
fix endpoint
avilagaston9 Oct 16, 2025
e413c06
Fix integration tests
avilagaston9 Oct 16, 2025
df4dc98
Update docs
avilagaston9 Oct 16, 2025
0fd9b2a
Correct env var
avilagaston9 Oct 16, 2025
64be8db
Fix clippy
avilagaston9 Oct 16, 2025
7e9e3f9
Merge branch 'feat/l2/operator_fee' into feat/implement_l1_fee
avilagaston9 Oct 16, 2025
120698a
Update prover to work with multiple fee configs
avilagaston9 Oct 16, 2025
79dea7e
Merge branch 'feat/l2/operator_fee' into feat/implement_l1_fee
avilagaston9 Oct 16, 2025
9635098
Merge branch 'main' into feat/l2/operator_fee
avilagaston9 Oct 16, 2025
121f052
Fix typo
avilagaston9 Oct 17, 2025
ff4a7dc
Merge branch 'main' into feat/l2/operator_fee
avilagaston9 Oct 17, 2025
371fc27
Add comment
avilagaston9 Oct 17, 2025
82dea9c
Merge branch 'feat/l2/operator_fee' into feat/implement_l1_fee
avilagaston9 Oct 17, 2025
0ada86d
add warning to docs
avilagaston9 Oct 17, 2025
bb08754
Modify l2 hook with the new functionallity
avilagaston9 Oct 17, 2025
b5f5e75
Update gas used
avilagaston9 Oct 17, 2025
b345417
Fix tests
avilagaston9 Oct 17, 2025
0ffcb45
Fix integration tests
avilagaston9 Oct 18, 2025
bb685b3
Minor improvements
avilagaston9 Oct 20, 2025
3bc5666
Update docs
avilagaston9 Oct 20, 2025
6bb86e8
Remove GetTransactionByHashTransaction
avilagaston9 Oct 22, 2025
4c76c1a
Change operator fee to u64
avilagaston9 Oct 23, 2025
16d0075
Remove clone
avilagaston9 Oct 23, 2025
8822d68
Improve operator fee disable
avilagaston9 Oct 23, 2025
1576933
Remove unneeded clone
avilagaston9 Oct 23, 2025
7bfeba6
Merge branch 'feat/l2/operator_fee' into feat/implement_l1_fee
avilagaston9 Oct 23, 2025
42416cd
Remove unneeded clone
avilagaston9 Oct 23, 2025
d9f85ca
Merge branch 'main' into feat/l2/operator_fee
avilagaston9 Oct 23, 2025
2ccc672
Update cli.md
avilagaston9 Oct 23, 2025
1bd1074
Merge branch 'feat/l2/operator_fee' into feat/implement_l1_fee
avilagaston9 Oct 23, 2025
df4f433
Merge branch 'main' into feat/implement_l1_fee
avilagaston9 Oct 23, 2025
7968a4d
Generate witness properly
avilagaston9 Oct 23, 2025
cbe92cd
Merge branch 'main' into feat/implement_l1_fee
avilagaston9 Oct 23, 2025
23dd25e
Update makefile
avilagaston9 Oct 23, 2025
6c34abb
Update l1 fee from watcher
avilagaston9 Oct 24, 2025
c51a759
Updates watcher docs
avilagaston9 Oct 24, 2025
3e594dd
Update comment
avilagaston9 Oct 24, 2025
83dcbd9
fix clippy
avilagaston9 Oct 24, 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
1 change: 1 addition & 0 deletions .github/workflows/main_prover.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ jobs:
ETHREX_BLOCK_PRODUCER_BASE_FEE_VAULT_ADDRESS=0x000c0d6b7c4516a5b274c51ea331a9410fe69127 \
ETHREX_BLOCK_PRODUCER_OPERATOR_FEE_VAULT_ADDRESS=0xd5d2a85751b6F158e5b9B8cD509206A865672362 \
ETHREX_BLOCK_PRODUCER_OPERATOR_FEE_PER_GAS=1000000000 \
ETHREX_BLOCK_PRODUCER_L1_FEE_VAULT_ADDRESS=0x45681AE1768a8936FB87aB11453B4755e322ceec \
docker compose up --build --detach --no-deps ethrex_l2

- name: Copy env to host
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/pr-main_l2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ jobs:
export ETHREX_BLOCK_PRODUCER_BASE_FEE_VAULT_ADDRESS=0x000c0d6b7c4516a5b274c51ea331a9410fe69127
export ETHREX_BLOCK_PRODUCER_OPERATOR_FEE_VAULT_ADDRESS=0xd5d2a85751b6F158e5b9B8cD509206A865672362
export ETHREX_BLOCK_PRODUCER_OPERATOR_FEE_PER_GAS=1000000000
export ETHREX_BLOCK_PRODUCER_L1_FEE_VAULT_ADDRESS=0x45681AE1768a8936FB87aB11453B4755e322ceec
fi
cd crates/l2
DOCKER_ETHREX_WORKDIR=/usr/local/bin \
Expand Down Expand Up @@ -393,6 +394,7 @@ jobs:
ETHREX_BLOCK_PRODUCER_BASE_FEE_VAULT_ADDRESS=0x000c0d6b7c4516a5b274c51ea331a9410fe69127 \
ETHREX_BLOCK_PRODUCER_OPERATOR_FEE_VAULT_ADDRESS=0xd5d2a85751b6F158e5b9B8cD509206A865672362 \
ETHREX_BLOCK_PRODUCER_OPERATOR_FEE_PER_GAS=1000000000 \
ETHREX_BLOCK_PRODUCER_L1_FEE_VAULT_ADDRESS=0x45681AE1768a8936FB87aB11453B4755e322ceec \
ETHREX_PROOF_COORDINATOR_ADDRESS=0.0.0.0 \
docker compose -f docker-compose.yaml -f docker-compose-l2-tdx.yaml up --detach --no-deps ethrex_l2

Expand Down
6 changes: 3 additions & 3 deletions cmd/ethrex/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ use std::{
};

use clap::{ArgAction, Parser as ClapParser, Subcommand as ClapSubcommand};
use ethrex_blockchain::{BlockchainOptions, BlockchainType, error::ChainError};
use ethrex_common::types::{Block, DEFAULT_BUILDER_GAS_CEIL, Genesis, fee_config::FeeConfig};
use ethrex_blockchain::{BlockchainOptions, BlockchainType, L2Config, error::ChainError};
use ethrex_common::types::{Block, DEFAULT_BUILDER_GAS_CEIL, Genesis};
use ethrex_p2p::{
discv4::peer_table::TARGET_PEERS, sync::SyncMode, tx_broadcaster::BROADCAST_INTERVAL_MS,
types::Node,
Expand Down Expand Up @@ -402,7 +402,7 @@ impl Subcommand {
let network = get_network(opts);
let genesis = network.get_genesis()?;
let blockchain_type = if l2 {
BlockchainType::L2(FeeConfig::default())
BlockchainType::L2(L2Config::default())
} else {
BlockchainType::L1
};
Expand Down
30 changes: 26 additions & 4 deletions cmd/ethrex/l2/initializers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ use crate::l2::{L2Options, SequencerOptions};
use crate::utils::{
NodeConfigFile, get_client_version, init_datadir, read_jwtsecret_file, store_node_config_file,
};
use ethrex_blockchain::{Blockchain, BlockchainType};
use ethrex_common::types::fee_config::{FeeConfig, OperatorFeeConfig};
use ethrex_blockchain::{Blockchain, BlockchainType, L2Config};
use ethrex_common::types::fee_config::{FeeConfig, L1FeeConfig, OperatorFeeConfig};
use ethrex_common::{Address, types::DEFAULT_BUILDER_GAS_CEIL};
use ethrex_l2::SequencerConfig;
use ethrex_p2p::{
Expand Down Expand Up @@ -157,18 +157,26 @@ pub async fn init_l2(
let rollup_store = init_rollup_store(&rollup_store_dir).await;

let operator_fee_config = get_operator_fee_config(&opts.sequencer_opts).await?;
let l1_fee_config = get_l1_fee_config(&opts.sequencer_opts);

let fee_config = FeeConfig {
base_fee_vault: opts
.sequencer_opts
.block_producer_opts
.base_fee_vault_address,
operator_fee_config,
l1_fee_config,
};

// We wrap fee_config in an Arc<RwLock> to let the watcher
// update the L1 fee periodically.
let l2_config = L2Config {
fee_config: Arc::new(tokio::sync::RwLock::new(fee_config)),
};

let blockchain_opts = ethrex_blockchain::BlockchainOptions {
max_mempool_size: opts.node_opts.mempool_max_size,
r#type: BlockchainType::L2(fee_config),
r#type: BlockchainType::L2(l2_config),
perf_logs_enabled: true,
};

Expand Down Expand Up @@ -296,11 +304,25 @@ pub async fn init_l2(
Ok(())
}

pub fn get_l1_fee_config(sequencer_opts: &SequencerOptions) -> Option<L1FeeConfig> {
if sequencer_opts.based {
// If based is enabled, skip L1 fee configuration
return None;
}

sequencer_opts
.block_producer_opts
.l1_fee_vault_address
.map(|addr| L1FeeConfig {
l1_fee_vault: addr,
l1_fee_per_blob_gas: 0, // This is set by the L1 watcher
}

pub async fn get_operator_fee_config(
sequencer_opts: &SequencerOptions,
) -> eyre::Result<Option<OperatorFeeConfig>> {
if sequencer_opts.based {
// If based is enabled, operator fee is not applicable
// If based is enabled, skip operator fee configuration
return Ok(None);
}

Expand Down
20 changes: 19 additions & 1 deletion cmd/ethrex/l2/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ impl TryFrom<SequencerOptions> for SequencerConfig {
check_interval_ms: opts.watcher_opts.watch_interval_ms,
max_block_step: opts.watcher_opts.max_block_step.into(),
watcher_block_delay: opts.watcher_opts.watcher_block_delay,
l1_blob_base_fee_update_interval: opts.watcher_opts.l1_fee_update_interval_ms,
},
proof_coordinator: ProofCoordinatorConfig {
listen_ip: opts.proof_coordinator_opts.listen_ip,
Expand Down Expand Up @@ -399,6 +400,14 @@ pub struct WatcherOptions {
help_heading = "L1 Watcher options"
)]
pub watcher_block_delay: u64,
#[arg(
long = "watcher.l1-fee-update-interval-ms",
value_name = "ADDRESS",
default_value = "60000",
env = "ETHREX_WATCHER_L1_FEE_UPDATE_INTERVAL_MS",
help_heading = "Block producer options"
)]
pub l1_fee_update_interval_ms: u64,
}

impl Default for WatcherOptions {
Expand All @@ -408,6 +417,7 @@ impl Default for WatcherOptions {
watch_interval_ms: 1000,
max_block_step: 5000,
watcher_block_delay: 0,
l1_fee_update_interval_ms: 60000,
}
}
}
Expand Down Expand Up @@ -453,14 +463,21 @@ pub struct BlockProducerOptions {
)]
pub operator_fee_vault_address: Option<Address>,
#[arg(
long,
long = "block-producer.operator-fee-per-gas",
value_name = "UINT64",
env = "ETHREX_BLOCK_PRODUCER_OPERATOR_FEE_PER_GAS",
requires = "operator_fee_vault_address",
help_heading = "Block producer options",
help = "Fee that the operator will receive for each unit of gas consumed in a block."
)]
pub operator_fee_per_gas: Option<u64>,
#[arg(
long = "block-producer.l1-fee-vault-address",
value_name = "ADDRESS",
env = "ETHREX_BLOCK_PRODUCER_L1_FEE_VAULT_ADDRESS",
help_heading = "Block producer options"
)]
pub l1_fee_vault_address: Option<Address>,
#[arg(
long,
default_value = "2",
Expand Down Expand Up @@ -492,6 +509,7 @@ impl Default for BlockProducerOptions {
base_fee_vault_address: None,
operator_fee_vault_address: None,
operator_fee_per_gas: None,
l1_fee_vault_address: None,
elasticity_multiplier: 2,
block_gas_limit: DEFAULT_BUILDER_GAS_CEIL,
}
Expand Down
49 changes: 38 additions & 11 deletions crates/blockchain/blockchain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ use std::collections::{BTreeMap, HashMap};
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::{Arc, Mutex};
use std::time::Instant;
use tokio::sync::Mutex as TokioMutex;
use tokio::sync::{Mutex as TokioMutex, RwLock};
use tokio_util::sync::CancellationToken;

use vm::StoreVmDatabase;
Expand All @@ -58,7 +58,13 @@ const MAX_MEMPOOL_SIZE_DEFAULT: usize = 10_000;
pub enum BlockchainType {
#[default]
L1,
L2(FeeConfig),
L2(L2Config),
}

#[derive(Debug, Clone, Default)]
pub struct L2Config {
/// We use a RwLock because the Watcher updates the L1 fee config periodically
pub fee_config: Arc<RwLock<FeeConfig>>,
}

#[derive(Debug)]
Expand Down Expand Up @@ -150,7 +156,7 @@ impl Blockchain {
validate_block(block, &parent_header, &chain_config, ELASTICITY_MULTIPLIER)?;

let vm_db = StoreVmDatabase::new(self.storage.clone(), block.header.parent_hash);
let mut vm = self.new_evm(vm_db)?;
let mut vm = self.new_evm(vm_db).await?;

let execution_result = vm.execute_block(block)?;
let account_updates = vm.get_state_transitions()?;
Expand Down Expand Up @@ -185,6 +191,15 @@ impl Blockchain {
pub async fn generate_witness_for_blocks(
&self,
blocks: &[Block],
) -> Result<ExecutionWitness, ChainError> {
self.generate_witness_for_blocks_with_fee_configs(blocks, None)
.await
}

pub async fn generate_witness_for_blocks_with_fee_configs(
&self,
blocks: &[Block],
fee_configs: Option<&[FeeConfig]>,
) -> Result<ExecutionWitness, ChainError> {
let first_block_header = blocks
.first()
Expand Down Expand Up @@ -215,15 +230,25 @@ impl Blockchain {
let mut block_hashes = HashMap::new();
let mut codes = Vec::new();

for block in blocks {
for (i, block) in blocks.iter().enumerate() {
let parent_hash = block.header.parent_hash;
let vm_db: DynVmDatabase =
Box::new(StoreVmDatabase::new(self.storage.clone(), parent_hash));
let logger = Arc::new(DatabaseLogger::new(Arc::new(Mutex::new(Box::new(vm_db)))));
let mut vm = match self.options.r#type {
let mut vm = match &self.options.r#type {
BlockchainType::L1 => Evm::new_from_db_for_l1(logger.clone()),
BlockchainType::L2(fee_config) => {
Evm::new_from_db_for_l2(logger.clone(), fee_config)
BlockchainType::L2(_) => {
let l2_config = match fee_configs {
Some(fee_configs) => {
fee_configs.get(i).ok_or(ChainError::WitnessGeneration(
"FeeConfig not found for witness generation".to_string(),
))?
}
None => Err(ChainError::WitnessGeneration(
"L2Config not found for witness generation".to_string(),
))?,
};
Evm::new_from_db_for_l2(logger.clone(), *l2_config)
}
};

Expand Down Expand Up @@ -540,7 +565,7 @@ impl Blockchain {
first_block_header.parent_hash,
block_hash_cache,
);
let mut vm = self.new_evm(vm_db).map_err(|e| (e.into(), None))?;
let mut vm = self.new_evm(vm_db).await.map_err(|e| (e.into(), None))?;

let blocks_len = blocks.len();
let mut all_receipts: Vec<(BlockHash, Vec<Receipt>)> = Vec::with_capacity(blocks_len);
Expand Down Expand Up @@ -917,10 +942,12 @@ impl Blockchain {
Ok(result)
}

pub fn new_evm(&self, vm_db: StoreVmDatabase) -> Result<Evm, EvmError> {
let evm = match self.options.r#type {
pub async fn new_evm(&self, vm_db: StoreVmDatabase) -> Result<Evm, EvmError> {
let evm = match &self.options.r#type {
BlockchainType::L1 => Evm::new_for_l1(vm_db),
BlockchainType::L2(fee_config) => Evm::new_for_l2(vm_db, fee_config)?,
BlockchainType::L2(l2_config) => {
Evm::new_for_l2(vm_db, *l2_config.fee_config.read().await)?
}
};
Ok(evm)
}
Expand Down
8 changes: 5 additions & 3 deletions crates/blockchain/payload.rs
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ pub struct PayloadBuildContext {
}

impl PayloadBuildContext {
pub fn new(
pub async fn new(
payload: Block,
storage: &Store,
blockchain_type: BlockchainType,
Expand All @@ -238,7 +238,9 @@ impl PayloadBuildContext {
let vm_db = StoreVmDatabase::new(storage.clone(), payload.header.parent_hash);
let vm = match blockchain_type {
BlockchainType::L1 => Evm::new_for_l1(vm_db),
BlockchainType::L2(fee_config) => Evm::new_for_l2(vm_db, fee_config)?,
BlockchainType::L2(l2_config) => {
Evm::new_for_l2(vm_db, *l2_config.fee_config.read().await)?
}
};

Ok(PayloadBuildContext {
Expand Down Expand Up @@ -392,7 +394,7 @@ impl Blockchain {
debug!("Building payload");
let base_fee = payload.header.base_fee_per_gas.unwrap_or_default();
let mut context =
PayloadBuildContext::new(payload, &self.storage, self.options.r#type.clone())?;
PayloadBuildContext::new(payload, &self.storage, self.options.r#type.clone()).await?;

if let BlockchainType::L1 = self.options.r#type {
self.apply_system_operations(&mut context)?;
Expand Down
2 changes: 1 addition & 1 deletion crates/blockchain/tracing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ impl Blockchain {
parent_hash,
block_hash_cache,
);
let mut vm = self.new_evm(vm_db)?;
let mut vm = self.new_evm(vm_db).await?;
// Run parents to rebuild pre-state
for block in blocks_to_re_execute.iter().rev() {
vm.rerun_block(block, None)?;
Expand Down
1 change: 1 addition & 0 deletions crates/common/types/l2.rs
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
pub mod account_diff;
pub mod batch;
pub mod fee_config;
Loading
Loading