From 41a78fcc6d3cef3edd977678d0f4e8b6a095390a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Mon, 10 Feb 2025 21:49:41 +0100 Subject: [PATCH 1/3] Etherlink/Kernel/Stage 2: keep produced block in result of compute_bip --- etherlink/kernel_evm/kernel/src/block.rs | 37 +++++++++++++++++------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/etherlink/kernel_evm/kernel/src/block.rs b/etherlink/kernel_evm/kernel/src/block.rs index 331a1de16051..0e6bf287dead 100644 --- a/etherlink/kernel_evm/kernel/src/block.rs +++ b/etherlink/kernel_evm/kernel/src/block.rs @@ -28,6 +28,7 @@ use evm_execution::precompiles; use evm_execution::precompiles::PrecompileBTreeMap; use evm_execution::trace::TracerInput; use primitive_types::{H160, H256, U256}; +use tezos_ethereum::block::L2Block; use tezos_ethereum::transaction::TransactionHash; use tezos_evm_logging::{log, Level::*, Verbosity}; use tezos_evm_runtime::runtime::Runtime; @@ -59,11 +60,20 @@ impl TickCounter { } } +#[derive(PartialEq, Debug)] +pub enum BlockInProgressComputationResult { + RebootNeeded, + Finished { + included_delayed_transactions: Vec, + }, +} + #[derive(PartialEq, Debug)] pub enum BlockComputationResult { RebootNeeded, Finished { included_delayed_transactions: Vec, + block: Box, }, } @@ -109,7 +119,7 @@ fn compute( sequencer_pool_address: Option, limits: &Limits, tracer_input: Option, -) -> Result { +) -> Result { log!( host, Debug, @@ -149,7 +159,7 @@ fn compute( ); } - return Ok(BlockComputationResult::RebootNeeded); + return Ok(BlockInProgressComputationResult::RebootNeeded); } let execution_gas_limit = @@ -216,7 +226,7 @@ fn compute( current reboot but will be retried." ); block_in_progress.repush_tx(transaction); - return Ok(BlockComputationResult::RebootNeeded); + return Ok(BlockInProgressComputationResult::RebootNeeded); } ExecutionResult::Invalid => { on_invalid_transaction(host, &transaction, block_in_progress, data_size) @@ -224,7 +234,7 @@ fn compute( }; is_first_transaction = false; } - Ok(BlockComputationResult::Finished { + Ok(BlockInProgressComputationResult::Finished { included_delayed_transactions: block_in_progress.delayed_txs.clone(), }) } @@ -317,8 +327,8 @@ fn compute_bip( limits, tracer_input, )?; - match &result { - BlockComputationResult::RebootNeeded => { + match result { + BlockInProgressComputationResult::RebootNeeded => { log!(host, Info, "Ask for reboot."); log!( host, @@ -327,14 +337,15 @@ fn compute_bip( &block_in_progress.estimated_ticks_in_run ); storage::store_block_in_progress(host, &block_in_progress)?; + Ok(BlockComputationResult::RebootNeeded) } - BlockComputationResult::Finished { - included_delayed_transactions: _, + BlockInProgressComputationResult::Finished { + included_delayed_transactions, } => { crate::gas_price::register_block(host, &block_in_progress)?; *tick_counter = TickCounter::finalize(block_in_progress.estimated_ticks_in_run); - let _new_block = block_in_progress + let new_block = block_in_progress .finalize_and_store( host, &constants, @@ -342,9 +353,12 @@ fn compute_bip( previous_transactions_root, ) .context("Failed to finalize the block in progress")?; + Ok(BlockComputationResult::Finished { + included_delayed_transactions, + block: Box::new(new_block), + }) } } - Ok(result) } fn revert_block( @@ -523,6 +537,7 @@ pub fn produce( ) { Ok(BlockComputationResult::Finished { included_delayed_transactions, + block: _, }) => { promote_block( &mut safe_host, @@ -1309,7 +1324,7 @@ mod tests { assert_eq!( result, - BlockComputationResult::RebootNeeded, + BlockInProgressComputationResult::RebootNeeded, "Should have asked for a reboot" ); // block in progress should not have registered any gas or ticks -- GitLab From 35dab16af9f5276502baf8f087c52f12e266ee57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Mon, 10 Feb 2025 21:52:42 +0100 Subject: [PATCH 2/3] Etherlink/Kernel/Stage 2: promote_block gets the block to promote This commit passes as argument to the promote_block function the block being promoted. This avoids re-reading the block number and hash when producing the BlueprintApplied event. --- etherlink/kernel_evm/kernel/src/block.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/etherlink/kernel_evm/kernel/src/block.rs b/etherlink/kernel_evm/kernel/src/block.rs index 0e6bf287dead..9e0fbf9f52c6 100644 --- a/etherlink/kernel_evm/kernel/src/block.rs +++ b/etherlink/kernel_evm/kernel/src/block.rs @@ -402,7 +402,7 @@ fn promote_block( safe_host: &mut SafeStorage<&mut Host>, outbox_queue: &OutboxQueue<'_, impl Path>, block_in_progress_provenance: &BlockInProgressProvenance, - number: U256, + block: L2Block, config: &mut Configuration, delayed_txs: Vec, ) -> anyhow::Result<()> { @@ -411,11 +411,13 @@ fn promote_block( } safe_host.promote()?; safe_host.promote_trace()?; - drop_blueprint(safe_host.host, number)?; - - let hash = block_storage::read_current_hash(safe_host.host)?; + drop_blueprint(safe_host.host, block.number)?; - Event::BlueprintApplied { number, hash }.store(safe_host.host)?; + Event::BlueprintApplied { + number: block.number, + hash: block.hash, + } + .store(safe_host.host)?; let written = outbox_queue.flush_queue(safe_host.host); // Log to Info only if we flushed messages. @@ -537,13 +539,13 @@ pub fn produce( ) { Ok(BlockComputationResult::Finished { included_delayed_transactions, - block: _, + block, }) => { promote_block( &mut safe_host, &outbox_queue, &block_in_progress_provenance, - processed_blueprint, + *block, config, included_delayed_transactions, )?; -- GitLab From 4e7ca78b5a3d3ce463cd1c9f75855cbd071a51f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Tue, 11 Feb 2025 12:01:49 +0100 Subject: [PATCH 3/3] Etherlink/Kernel: update changelog --- etherlink/CHANGES_KERNEL.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/etherlink/CHANGES_KERNEL.md b/etherlink/CHANGES_KERNEL.md index 32c41f8aa83b..1592db6cbf37 100644 --- a/etherlink/CHANGES_KERNEL.md +++ b/etherlink/CHANGES_KERNEL.md @@ -8,6 +8,9 @@ ### Internal +- Rework block production to simplify data flow and remove unnecessary + IO. (!16661 !16684 !16685) + ## Next proposal This is a release candidate for a kernel upgrade proposal. -- GitLab