diff --git a/crates/op-rbuilder/src/custom_payload_builder.rs b/crates/op-rbuilder/src/custom_payload_builder.rs new file mode 100644 index 000000000..c54baa873 --- /dev/null +++ b/crates/op-rbuilder/src/custom_payload_builder.rs @@ -0,0 +1,77 @@ +use crate::tx_signer::Signer; +use url::Url; + +#[derive(Debug, Clone, Default)] +#[non_exhaustive] +pub struct CustomOpPayloadBuilderBuilder { + pub builder_signer: Option, + pub flashblocks_ws_url: Option, + pub chain_block_time: Option, + pub flashblock_block_time: Option, + pub supervisor_url: Option, + pub supervisor_safety_level: Option, +} + +impl CustomOpPayloadBuilderBuilder { + pub fn new() -> Self { + Self::default() + } + + pub fn builder_signer(mut self, signer: Option) -> Self { + self.builder_signer = signer; + self + } + + pub fn supervisor_url(mut self, url: Option) -> Self { + self.supervisor_url = url; + self + } + + pub fn supervisor_safety_level(mut self, level: Option) -> Self { + self.supervisor_safety_level = level; + self + } + + pub fn flashblocks_ws_url(mut self, url: String) -> Self { + self.flashblocks_ws_url = Some(url); + self + } + + pub fn chain_block_time(mut self, time: u64) -> Self { + self.chain_block_time = Some(time); + self + } + + pub fn flashblock_block_time(mut self, time: u64) -> Self { + self.flashblock_block_time = Some(time); + self + } + + pub fn build(self) -> CustomOpPayloadBuilder { + CustomOpPayloadBuilder { + builder_signer: self.builder_signer, + #[cfg(feature = "flashblocks")] + flashblocks_ws_url: self.flashblocks_ws_url.unwrap_or_default(), + #[cfg(feature = "flashblocks")] + chain_block_time: self.chain_block_time.unwrap_or_default(), + #[cfg(feature = "flashblocks")] + flashblock_block_time: self.flashblock_block_time.unwrap_or_default(), + supervisor_url: self.supervisor_url, + supervisor_safety_level: self.supervisor_safety_level, + } + } +} + +#[derive(Debug, Clone, Default)] +#[non_exhaustive] +pub struct CustomOpPayloadBuilder { + pub builder_signer: Option, + #[cfg(feature = "flashblocks")] + pub flashblocks_ws_url: String, + #[cfg(feature = "flashblocks")] + pub chain_block_time: u64, + #[cfg(feature = "flashblocks")] + pub flashblock_block_time: u64, + pub supervisor_url: Option, + pub supervisor_safety_level: Option, +} diff --git a/crates/op-rbuilder/src/main.rs b/crates/op-rbuilder/src/main.rs index a248f0e4c..c66f162b7 100644 --- a/crates/op-rbuilder/src/main.rs +++ b/crates/op-rbuilder/src/main.rs @@ -1,18 +1,20 @@ use clap::Parser; +use custom_payload_builder::CustomOpPayloadBuilderBuilder; use monitoring::Monitoring; use reth::providers::CanonStateSubscriptions; use reth_optimism_cli::{chainspec::OpChainSpecParser, Cli}; use reth_optimism_node::node::OpAddOnsBuilder; use reth_optimism_node::OpNode; +#[cfg(not(feature = "flashblocks"))] +use custom_payload_builder::CustomOpPayloadBuilder; #[cfg(feature = "flashblocks")] use payload_builder::CustomOpPayloadBuilder; -#[cfg(not(feature = "flashblocks"))] -use payload_builder_vanilla::CustomOpPayloadBuilder; use reth_transaction_pool::TransactionPool; /// CLI argument parsing. pub mod args; +pub mod custom_payload_builder; pub mod generator; #[cfg(test)] mod integration; @@ -37,14 +39,15 @@ fn main() { let op_node = OpNode::new(rollup_args.clone()); let handle = builder .with_types::() - .with_components(op_node.components().payload(CustomOpPayloadBuilder::new( - builder_args.builder_signer, - builder_args.flashblocks_ws_url, - builder_args.chain_block_time, - builder_args.flashblock_block_time, - builder_args.supervisor_url, - builder_args.supervisor_safety_level, - ))) + .with_components( + op_node.components().payload( + CustomOpPayloadBuilderBuilder::new() + .builder_signer(builder_args.builder_signer) + .supervisor_url(builder_args.supervisor_url) + .supervisor_safety_level(builder_args.supervisor_safety_level) + .build(), + ), + ) .with_add_ons( OpAddOnsBuilder::default() .with_sequencer(rollup_args.sequencer_http.clone()) diff --git a/crates/op-rbuilder/src/payload_builder.rs b/crates/op-rbuilder/src/payload_builder.rs index 82613c1ad..c828c2f73 100644 --- a/crates/op-rbuilder/src/payload_builder.rs +++ b/crates/op-rbuilder/src/payload_builder.rs @@ -69,6 +69,7 @@ use std::error::Error as StdError; use tokio_util::sync::CancellationToken; use tracing::{debug, trace, warn}; +use crate::custom_payload_builder::CustomOpPayloadBuilder; use futures_util::FutureExt; use futures_util::SinkExt; use tokio::net::{TcpListener, TcpStream}; @@ -86,40 +87,6 @@ struct FlashblocksMetadata { block_number: u64, } -#[derive(Debug, Clone, Default)] -#[non_exhaustive] -pub struct CustomOpPayloadBuilder { - #[expect(dead_code)] - builder_signer: Option, - flashblocks_ws_url: String, - chain_block_time: u64, - flashblock_block_time: u64, - #[expect(dead_code)] - supervisor_url: Option, - #[expect(dead_code)] - supervisor_safety_level: Option, -} - -impl CustomOpPayloadBuilder { - pub fn new( - builder_signer: Option, - flashblocks_ws_url: String, - chain_block_time: u64, - flashblock_block_time: u64, - supervisor_url: Option, - supervisor_safety_level: Option, - ) -> Self { - Self { - builder_signer, - flashblocks_ws_url, - chain_block_time, - flashblock_block_time, - supervisor_url, - supervisor_safety_level, - } - } -} - impl PayloadServiceBuilder for CustomOpPayloadBuilder where Node: FullNodeTypes< diff --git a/crates/op-rbuilder/src/payload_builder_vanilla.rs b/crates/op-rbuilder/src/payload_builder_vanilla.rs index 4113b7629..bc6988d10 100644 --- a/crates/op-rbuilder/src/payload_builder_vanilla.rs +++ b/crates/op-rbuilder/src/payload_builder_vanilla.rs @@ -1,3 +1,4 @@ +use crate::custom_payload_builder::CustomOpPayloadBuilder; use crate::{ generator::{BlockCell, BlockPayloadJobGenerator, BuildArguments, PayloadBuilder}, metrics::OpRBuilderMetrics, @@ -81,57 +82,6 @@ use tokio_util::sync::CancellationToken; use tracing::{error, info, trace, warn}; use url::Url; -#[derive(Debug, Clone, Default)] -#[non_exhaustive] -pub struct CustomOpPayloadBuilder { - builder_signer: Option, - #[cfg(feature = "flashblocks")] - flashblocks_ws_url: String, - #[cfg(feature = "flashblocks")] - chain_block_time: u64, - #[cfg(feature = "flashblocks")] - flashblock_block_time: u64, - supervisor_url: Option, - supervisor_safety_level: Option, -} - -impl CustomOpPayloadBuilder { - #[cfg(feature = "flashblocks")] - pub fn new( - builder_signer: Option, - flashblocks_ws_url: String, - chain_block_time: u64, - flashblock_block_time: u64, - supervisor_url: Option, - supervisor_safety_level: Option, - ) -> Self { - Self { - builder_signer, - flashblocks_ws_url, - chain_block_time, - flashblock_block_time, - supervisor_url, - supervisor_safety_level, - } - } - - #[cfg(not(feature = "flashblocks"))] - pub fn new( - builder_signer: Option, - _flashblocks_ws_url: String, - _chain_block_time: u64, - _flashblock_block_time: u64, - supervisor_url: Option, - supervisor_safety_level: Option, - ) -> Self { - Self { - builder_signer, - supervisor_url, - supervisor_safety_level, - } - } -} - impl PayloadServiceBuilder for CustomOpPayloadBuilder where Node: FullNodeTypes<