-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: move beacon handle type (#13714)
- Loading branch information
Showing
5 changed files
with
115 additions
and
133 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,94 +1,3 @@ | ||
//! `BeaconConsensusEngine` external API | ||
use crate::BeaconForkChoiceUpdateError; | ||
use alloy_rpc_types_engine::{ | ||
ExecutionPayload, ExecutionPayloadSidecar, ForkchoiceState, ForkchoiceUpdated, PayloadStatus, | ||
}; | ||
use futures::TryFutureExt; | ||
use reth_engine_primitives::{ | ||
BeaconEngineMessage, BeaconOnNewPayloadError, EngineApiMessageVersion, EngineTypes, | ||
OnForkChoiceUpdated, | ||
}; | ||
use reth_errors::RethResult; | ||
use tokio::sync::{mpsc::UnboundedSender, oneshot}; | ||
|
||
/// A _shareable_ beacon consensus frontend type. Used to interact with the spawned beacon consensus | ||
/// engine task. | ||
/// | ||
/// See also `BeaconConsensusEngine` | ||
#[derive(Debug, Clone)] | ||
pub struct BeaconConsensusEngineHandle<Engine> | ||
where | ||
Engine: EngineTypes, | ||
{ | ||
pub(crate) to_engine: UnboundedSender<BeaconEngineMessage<Engine>>, | ||
} | ||
|
||
// === impl BeaconConsensusEngineHandle === | ||
|
||
impl<Engine> BeaconConsensusEngineHandle<Engine> | ||
where | ||
Engine: EngineTypes, | ||
{ | ||
/// Creates a new beacon consensus engine handle. | ||
pub const fn new(to_engine: UnboundedSender<BeaconEngineMessage<Engine>>) -> Self { | ||
Self { to_engine } | ||
} | ||
|
||
/// Sends a new payload message to the beacon consensus engine and waits for a response. | ||
/// | ||
/// See also <https://github.com/ethereum/execution-apis/blob/3d627c95a4d3510a8187dd02e0250ecb4331d27e/src/engine/shanghai.md#engine_newpayloadv2> | ||
pub async fn new_payload( | ||
&self, | ||
payload: ExecutionPayload, | ||
sidecar: ExecutionPayloadSidecar, | ||
) -> Result<PayloadStatus, BeaconOnNewPayloadError> { | ||
let (tx, rx) = oneshot::channel(); | ||
let _ = self.to_engine.send(BeaconEngineMessage::NewPayload { payload, sidecar, tx }); | ||
rx.await.map_err(|_| BeaconOnNewPayloadError::EngineUnavailable)? | ||
} | ||
|
||
/// Sends a forkchoice update message to the beacon consensus engine and waits for a response. | ||
/// | ||
/// See also <https://github.com/ethereum/execution-apis/blob/3d627c95a4d3510a8187dd02e0250ecb4331d27e/src/engine/shanghai.md#engine_forkchoiceupdatedv2> | ||
pub async fn fork_choice_updated( | ||
&self, | ||
state: ForkchoiceState, | ||
payload_attrs: Option<Engine::PayloadAttributes>, | ||
version: EngineApiMessageVersion, | ||
) -> Result<ForkchoiceUpdated, BeaconForkChoiceUpdateError> { | ||
Ok(self | ||
.send_fork_choice_updated(state, payload_attrs, version) | ||
.map_err(|_| BeaconForkChoiceUpdateError::EngineUnavailable) | ||
.await?? | ||
.await?) | ||
} | ||
|
||
/// Sends a forkchoice update message to the beacon consensus engine and returns the receiver to | ||
/// wait for a response. | ||
fn send_fork_choice_updated( | ||
&self, | ||
state: ForkchoiceState, | ||
payload_attrs: Option<Engine::PayloadAttributes>, | ||
version: EngineApiMessageVersion, | ||
) -> oneshot::Receiver<RethResult<OnForkChoiceUpdated>> { | ||
let (tx, rx) = oneshot::channel(); | ||
let _ = self.to_engine.send(BeaconEngineMessage::ForkchoiceUpdated { | ||
state, | ||
payload_attrs, | ||
tx, | ||
version, | ||
}); | ||
rx | ||
} | ||
|
||
/// Sends a transition configuration exchange message to the beacon consensus engine. | ||
/// | ||
/// See also <https://github.com/ethereum/execution-apis/blob/3d627c95a4d3510a8187dd02e0250ecb4331d27e/src/engine/paris.md#engine_exchangetransitionconfigurationv1> | ||
/// | ||
/// This only notifies about the exchange. The actual exchange is done by the engine API impl | ||
/// itself. | ||
pub fn transition_configuration_exchanged(&self) { | ||
let _ = self.to_engine.send(BeaconEngineMessage::TransitionConfigurationExchanged); | ||
} | ||
} | ||
pub use reth_engine_primitives::BeaconConsensusEngineHandle; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters