1- use crate :: config:: { BuilderConfig , RuProvider } ;
1+ use crate :: config:: { BuilderConfig , HostProvider , RuProvider } ;
22use alloy:: {
33 consensus:: Header ,
44 eips:: eip1559:: BaseFeeParams ,
55 primitives:: { B256 , U256 } ,
66 providers:: Provider ,
77} ;
88use init4_bin_base:: deps:: tracing:: { Instrument , debug, error, info_span} ;
9+ use signet_constants:: SignetSystemConstants ;
910use tokio:: { sync:: watch, task:: JoinHandle } ;
1011use tokio_stream:: StreamExt ;
12+ use tracing:: warn;
1113use trevm:: revm:: { context:: BlockEnv , context_interface:: block:: BlobExcessGasAndPrice } ;
1214
1315/// A task that constructs a BlockEnv for the next block in the rollup chain.
1416#[ derive( Debug , Clone ) ]
1517pub struct EnvTask {
1618 /// Builder configuration values.
1719 config : BuilderConfig ,
18- /// Rollup provider is used to get the latest rollup block header for simulation.
20+
21+ /// Signet system constants.
22+ constants : SignetSystemConstants ,
23+
24+ /// Host provider is used to get the latest host block header for
25+ /// constructing the next block environment.
26+ host_provider : HostProvider ,
27+
28+ /// Rollup provider is used to get the latest rollup block header for
29+ /// simulation.
1930 ru_provider : RuProvider ,
2031}
2132
@@ -26,12 +37,19 @@ pub struct SimEnv {
2637 pub block_env : BlockEnv ,
2738 /// The header of the previous rollup block.
2839 pub prev_header : Header ,
40+ /// The header of the previous host block.
41+ pub prev_host : Header ,
2942}
3043
3144impl EnvTask {
3245 /// Create a new [`EnvTask`] with the given config and providers.
33- pub const fn new ( config : BuilderConfig , ru_provider : RuProvider ) -> Self {
34- Self { config, ru_provider }
46+ pub const fn new (
47+ config : BuilderConfig ,
48+ constants : SignetSystemConstants ,
49+ host_provider : HostProvider ,
50+ ru_provider : RuProvider ,
51+ ) -> Self {
52+ Self { config, constants, host_provider, ru_provider }
3553 }
3654
3755 /// Construct a [`BlockEnv`] by from the previous block header.
@@ -74,10 +92,23 @@ impl EnvTask {
7492 while let Some ( rollup_header) =
7593 headers. next ( ) . instrument ( info_span ! ( "EnvTask::task_fut::stream" ) ) . await
7694 {
77- let span =
78- info_span ! ( "EnvTask::task_fut::loop" , %rollup_header . hash , % rollup_header. number) ;
95+ let host_block_number =
96+ self . constants . rollup_block_to_host_block_num ( rollup_header. number ) ;
7997
80- span. record ( "rollup_block_number" , rollup_header. number ) ;
98+ let span = info_span ! ( "EnvTask::task_fut::loop" , %host_block_number, %rollup_header. hash, %rollup_header. number) ;
99+
100+ let host_block_opt = res_unwrap_or_continue ! (
101+ self . host_provider. get_block_by_number( host_block_number. into( ) ) . await ,
102+ span,
103+ error!( "error fetching previous host block - skipping block submission" )
104+ ) ;
105+ let prev_host = opt_unwrap_or_continue ! (
106+ host_block_opt,
107+ span,
108+ warn!( "previous host block not found - skipping block submission" )
109+ )
110+ . header
111+ . inner ;
81112
82113 // Construct the block env using the previous block header
83114 let signet_env = self . construct_block_env ( & rollup_header) ;
@@ -88,7 +119,11 @@ impl EnvTask {
88119 ) ;
89120
90121 if sender
91- . send ( Some ( SimEnv { block_env : signet_env, prev_header : rollup_header. inner } ) )
122+ . send ( Some ( SimEnv {
123+ block_env : signet_env,
124+ prev_header : rollup_header. inner ,
125+ prev_host,
126+ } ) )
92127 . is_err ( )
93128 {
94129 // The receiver has been dropped, so we can stop the task.
0 commit comments