From 42a4e66522333b89a98b0c25107e4fdb8e485345 Mon Sep 17 00:00:00 2001 From: Arsenii Kulikov Date: Fri, 27 Mar 2026 21:05:14 +0400 Subject: [PATCH] feat: add a method to get payload resolve future --- crates/payload/builder/src/service.rs | 11 +++++++++++ crates/payload/primitives/src/error.rs | 8 +++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/crates/payload/builder/src/service.rs b/crates/payload/builder/src/service.rs index 229bf96153a..8805651f345 100644 --- a/crates/payload/builder/src/service.rs +++ b/crates/payload/builder/src/service.rs @@ -158,6 +158,17 @@ impl PayloadBuilderHandle { } } + /// Same as [`Self::resolve_kind`] but returns the underlying future. + pub async fn resolve_kind_fut( + &self, + id: PayloadId, + kind: PayloadKind, + ) -> Result>, PayloadBuilderError> { + let (tx, rx) = oneshot::channel(); + self.to_service.send(PayloadServiceCommand::Resolve(id, kind, tx))?; + rx.await.map_err(Into::into) + } + /// Sends a message to the service to subscribe to payload events. /// Returns a receiver that will receive them. pub async fn subscribe(&self) -> Result, PayloadBuilderError> { diff --git a/crates/payload/primitives/src/error.rs b/crates/payload/primitives/src/error.rs index e87dfc55cbd..883dfd5e880 100644 --- a/crates/payload/primitives/src/error.rs +++ b/crates/payload/primitives/src/error.rs @@ -5,7 +5,7 @@ use alloy_primitives::B256; use alloy_rpc_types_engine::{ForkchoiceUpdateError, PayloadError, PayloadStatusEnum}; use core::error; use reth_errors::{BlockExecutionError, ProviderError, RethError}; -use tokio::sync::oneshot; +use tokio::sync::{mpsc, oneshot}; /// Possible error variants during payload building. #[derive(Debug, thiserror::Error)] @@ -69,6 +69,12 @@ impl From for PayloadBuilderError { } } +impl From> for PayloadBuilderError { + fn from(_: mpsc::error::SendError) -> Self { + Self::ChannelClosed + } +} + /// Thrown when the payload or attributes are known to be invalid __before__ processing. /// /// This is used mainly for