@@ -5,7 +5,7 @@ use alloy_primitives::{TxHash, B256};
55use alloy_rpc_types_engine:: ForkchoiceState ;
66use eyre:: OptionExt ;
77use futures_util:: { stream:: Fuse , StreamExt } ;
8- use reth_engine_primitives:: BeaconEngineMessage ;
8+ use reth_engine_primitives:: BeaconConsensusEngineHandle ;
99use reth_payload_builder:: PayloadBuilderHandle ;
1010use reth_payload_primitives:: {
1111 BuiltPayload , EngineApiMessageVersion , PayloadAttributesBuilder , PayloadKind , PayloadTypes ,
@@ -18,10 +18,7 @@ use std::{
1818 task:: { Context , Poll } ,
1919 time:: { Duration , UNIX_EPOCH } ,
2020} ;
21- use tokio:: {
22- sync:: { mpsc:: UnboundedSender , oneshot} ,
23- time:: Interval ,
24- } ;
21+ use tokio:: time:: Interval ;
2522use tokio_stream:: wrappers:: ReceiverStream ;
2623use tracing:: error;
2724
@@ -78,7 +75,7 @@ pub struct LocalMiner<T: PayloadTypes, B> {
7875 /// The payload attribute builder for the engine
7976 payload_attributes_builder : B ,
8077 /// Sender for events to engine.
81- to_engine : UnboundedSender < BeaconEngineMessage < T > > ,
78+ to_engine : BeaconConsensusEngineHandle < T > ,
8279 /// The mining mode for the engine
8380 mode : MiningMode ,
8481 /// The payload builder for the engine
@@ -95,31 +92,28 @@ where
9592 B : PayloadAttributesBuilder < <T as PayloadTypes >:: PayloadAttributes > ,
9693{
9794 /// Spawns a new [`LocalMiner`] with the given parameters.
98- pub fn spawn_new (
95+ pub fn new (
9996 provider : impl BlockReader ,
10097 payload_attributes_builder : B ,
101- to_engine : UnboundedSender < BeaconEngineMessage < T > > ,
98+ to_engine : BeaconConsensusEngineHandle < T > ,
10299 mode : MiningMode ,
103100 payload_builder : PayloadBuilderHandle < T > ,
104- ) {
101+ ) -> Self {
105102 let latest_header =
106103 provider. sealed_header ( provider. best_block_number ( ) . unwrap ( ) ) . unwrap ( ) . unwrap ( ) ;
107104
108- let miner = Self {
105+ Self {
109106 payload_attributes_builder,
110107 to_engine,
111108 mode,
112109 payload_builder,
113110 last_timestamp : latest_header. timestamp ( ) ,
114111 last_block_hashes : vec ! [ latest_header. hash( ) ] ,
115- } ;
116-
117- // Spawn the miner
118- tokio:: spawn ( miner. run ( ) ) ;
112+ }
119113 }
120114
121115 /// Runs the [`LocalMiner`] in a loop, polling the miner and building payloads.
122- async fn run ( mut self ) {
116+ pub async fn run ( mut self ) {
123117 let mut fcu_interval = tokio:: time:: interval ( Duration :: from_secs ( 1 ) ) ;
124118 loop {
125119 tokio:: select! {
@@ -156,16 +150,12 @@ where
156150
157151 /// Sends a FCU to the engine.
158152 async fn update_forkchoice_state ( & self ) -> eyre:: Result < ( ) > {
159- let ( tx, rx) = oneshot:: channel ( ) ;
160- self . to_engine . send ( BeaconEngineMessage :: ForkchoiceUpdated {
161- state : self . forkchoice_state ( ) ,
162- payload_attrs : None ,
163- tx,
164- version : EngineApiMessageVersion :: default ( ) ,
165- } ) ?;
166-
167- let res = rx. await ??;
168- if !res. forkchoice_status ( ) . is_valid ( ) {
153+ let res = self
154+ . to_engine
155+ . fork_choice_updated ( self . forkchoice_state ( ) , None , EngineApiMessageVersion :: default ( ) )
156+ . await ?;
157+
158+ if !res. is_valid ( ) {
169159 eyre:: bail!( "Invalid fork choice update" )
170160 }
171161
@@ -183,16 +173,16 @@ where
183173 . as_secs ( ) ,
184174 ) ;
185175
186- let ( tx, rx) = oneshot:: channel ( ) ;
187- self . to_engine . send ( BeaconEngineMessage :: ForkchoiceUpdated {
188- state : self . forkchoice_state ( ) ,
189- payload_attrs : Some ( self . payload_attributes_builder . build ( timestamp) ) ,
190- tx,
191- version : EngineApiMessageVersion :: default ( ) ,
192- } ) ?;
176+ let res = self
177+ . to_engine
178+ . fork_choice_updated (
179+ self . forkchoice_state ( ) ,
180+ Some ( self . payload_attributes_builder . build ( timestamp) ) ,
181+ EngineApiMessageVersion :: default ( ) ,
182+ )
183+ . await ?;
193184
194- let res = rx. await ??. await ?;
195- if !res. payload_status . is_valid ( ) {
185+ if !res. is_valid ( ) {
196186 eyre:: bail!( "Invalid payload status" )
197187 }
198188
@@ -206,11 +196,8 @@ where
206196
207197 let block = payload. block ( ) ;
208198
209- let ( tx, rx) = oneshot:: channel ( ) ;
210199 let payload = T :: block_to_payload ( payload. block ( ) . clone ( ) ) ;
211- self . to_engine . send ( BeaconEngineMessage :: NewPayload { payload, tx } ) ?;
212-
213- let res = rx. await ??;
200+ let res = self . to_engine . new_payload ( payload) . await ?;
214201
215202 if !res. is_valid ( ) {
216203 eyre:: bail!( "Invalid payload" )
0 commit comments