From 3fc69aecb17219efdbd9d2634d0f88c1d3ca8916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Tue, 18 Feb 2025 17:36:53 +0100 Subject: [PATCH] Etherlink/Kernel: store block header --- etherlink/kernel_evm/kernel/src/block.rs | 11 +++++++---- etherlink/kernel_evm/kernel/src/blueprint_storage.rs | 10 ++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/etherlink/kernel_evm/kernel/src/block.rs b/etherlink/kernel_evm/kernel/src/block.rs index 12bababd81e8..a6975712ee0f 100644 --- a/etherlink/kernel_evm/kernel/src/block.rs +++ b/etherlink/kernel_evm/kernel/src/block.rs @@ -10,7 +10,8 @@ use crate::apply::{ }; use crate::block_storage; use crate::blueprint_storage::{ - drop_blueprint, read_blueprint, BlockHeader, BlueprintHeader, EVMBlockHeader, + drop_blueprint, read_blueprint, store_current_block_header, BlockHeader, + BlueprintHeader, EVMBlockHeader, }; use crate::configuration::ConfigurationMode; use crate::configuration::Limits; @@ -440,13 +441,15 @@ fn promote_block( if let BlockInProgressProvenance::Storage = block_in_progress_provenance { storage::delete_block_in_progress(safe_host)?; } + let block_header = BlockHeader::from(block); safe_host.promote()?; safe_host.promote_trace()?; - drop_blueprint(safe_host.host, block.number)?; + drop_blueprint(safe_host.host, block_header.blueprint_header.number)?; + store_current_block_header(safe_host.host, &block_header)?; Event::BlueprintApplied { - number: block.number, - hash: block.hash, + number: block_header.blueprint_header.number, + hash: block_header.evm_block_header.hash, } .store(safe_host.host)?; diff --git a/etherlink/kernel_evm/kernel/src/blueprint_storage.rs b/etherlink/kernel_evm/kernel/src/blueprint_storage.rs index 729109a78b32..5a2dc0879a48 100644 --- a/etherlink/kernel_evm/kernel/src/blueprint_storage.rs +++ b/etherlink/kernel_evm/kernel/src/blueprint_storage.rs @@ -36,6 +36,9 @@ pub const EVM_BLUEPRINTS: RefPath = RefPath::assert_from(b"/evm/blueprints"); const EVM_BLUEPRINT_NB_CHUNKS: RefPath = RefPath::assert_from(b"/nb_chunks"); +const EVM_CURRENT_BLOCK_HEADER: RefPath = + RefPath::assert_from(b"/evm/current_block_header"); + /// The store representation of a blueprint. /// It's designed to support storing sequencer blueprints, /// which can be chunked, and blueprints constructed from @@ -296,6 +299,13 @@ impl Decodable for BlockHeader { } } +pub fn store_current_block_header( + host: &mut Host, + current_block_header: &BlockHeader, +) -> Result<(), Error> { + store_rlp(current_block_header, host, &EVM_CURRENT_BLOCK_HEADER).map_err(Error::from) +} + /// For the tick model we only accept blueprints where cumulative size of chunks /// less or equal than 512kB. A chunk weights 4kB, then (512 * 1024) / 4096 = /// 128. -- GitLab