From bc7018b2cca227810abfcfd7343423cba23fbd47 Mon Sep 17 00:00:00 2001 From: Ferran Borreguero Date: Tue, 27 May 2025 12:31:58 +0200 Subject: [PATCH 1/3] Modity flashblocks ws bind/port flags --- crates/op-rbuilder/src/args/mod.rs | 2 +- crates/op-rbuilder/src/args/op.rs | 71 ++++++++++++------- .../src/builders/flashblocks/config.rs | 11 +-- .../src/tests/flashblocks/smoke.rs | 2 +- .../src/tests/framework/harness.rs | 12 ++-- crates/op-rbuilder/src/tests/framework/op.rs | 14 ++-- 6 files changed, 66 insertions(+), 46 deletions(-) diff --git a/crates/op-rbuilder/src/args/mod.rs b/crates/op-rbuilder/src/args/mod.rs index 5c87428f3..e2547432d 100644 --- a/crates/op-rbuilder/src/args/mod.rs +++ b/crates/op-rbuilder/src/args/mod.rs @@ -65,7 +65,7 @@ impl CliExt for Cli { /// Currently supports `Standard` and `Flashblocks` modes. fn builder_mode(&self) -> BuilderMode { if let Commands::Node(ref node_command) = self.command { - if node_command.ext.enable_flashblocks { + if node_command.ext.flashblocks.enable_flashblocks { return BuilderMode::Flashblocks; } } diff --git a/crates/op-rbuilder/src/args/op.rs b/crates/op-rbuilder/src/args/op.rs index caf25cf4f..f3b2d9240 100644 --- a/crates/op-rbuilder/src/args/op.rs +++ b/crates/op-rbuilder/src/args/op.rs @@ -19,25 +19,6 @@ pub struct OpRbuilderArgs { #[arg(long = "rollup.builder-secret-key", env = "BUILDER_SECRET_KEY")] pub builder_signer: Option, - /// When set to true, the builder will build flashblocks - /// and will build standard blocks at the chain block time. - /// - /// The default value will change in the future once the flashblocks - /// feature is stable. - #[arg( - long = "rollup.enable-flashblocks", - default_value = "false", - env = "ENABLE_FLASHBLOCKS" - )] - pub enable_flashblocks: bool, - - /// Websocket port for flashblock payload builder - #[arg( - long = "rollup.flashblocks-ws-url", - env = "FLASHBLOCKS_WS_URL", - default_value = "127.0.0.1:1111" - )] - pub flashblocks_ws_url: String, /// chain block time in milliseconds #[arg( long = "rollup.chain-block-time", @@ -45,13 +26,7 @@ pub struct OpRbuilderArgs { env = "CHAIN_BLOCK_TIME" )] pub chain_block_time: u64, - /// flashblock block time in milliseconds - #[arg( - long = "rollup.flashblock-block-time", - default_value = "250", - env = "FLASHBLOCK_BLOCK_TIME" - )] - pub flashblock_block_time: u64, + /// Signals whether to log pool transaction events #[arg(long = "builder.log-pool-transactions", default_value = "false")] pub log_pool_transactions: bool, @@ -71,6 +46,9 @@ pub struct OpRbuilderArgs { env = "PLAYGROUND_DIR", )] pub playground: Option, + + #[command(flatten)] + pub flashblocks: FlashblocksArgs, } fn expand_path(s: &str) -> Result { @@ -80,3 +58,44 @@ fn expand_path(s: &str) -> Result { .parse() .map_err(|e| format!("invalid path after expansion: {e}")) } + +/// Parameters for Flashblocks configuration +#[derive(Debug, Clone, Default, PartialEq, Eq, clap::Args)] +pub struct FlashblocksArgs { + /// When set to true, the builder will build flashblocks + /// and will build standard blocks at the chain block time. + /// + /// The default value will change in the future once the flashblocks + /// feature is stable. + #[arg( + long = "rollup.enable-flashblocks", + default_value = "false", + env = "ENABLE_FLASHBLOCKS" + )] + pub enable_flashblocks: bool, + + /// The port that we bind to for the websocket server that provides flashblocks + #[arg( + long = "flashblocks.port", + env = "FLASHBLOCKS_WS_PORT", + default_value = "1111" + )] + pub port: u16, + + /// The address that we bind to for the websocket server that provides flashblocks + #[arg(long = "flashblocks.addr", env = "FLASHBLOCKS_WS_ADDR")] + pub addr: String, + + /// flashblock block time in milliseconds + #[arg( + long = "rollup.flashblock-block-time", + default_value = "250", + env = "FLASHBLOCK_BLOCK_TIME" + )] + pub block_time: u64, + + /// Websocket port for flashblock payload builder + #[arg(long = "rollup.flashblocks-ws-url", env = "FLASHBLOCKS_WS_URL")] + #[deprecated = "Use --flashblocks.port and --flashblocks.addr instead"] + pub url_deprecated: Option, +} diff --git a/crates/op-rbuilder/src/builders/flashblocks/config.rs b/crates/op-rbuilder/src/builders/flashblocks/config.rs index 18c9ea6d2..f7508d683 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/config.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/config.rs @@ -30,12 +30,13 @@ impl TryFrom for FlashblocksConfig { type Error = eyre::Report; fn try_from(args: OpRbuilderArgs) -> Result { - let ws_addr = args - .flashblocks_ws_url - .parse() - .map_err(|_| eyre::eyre!("Invalid flashblocks websocket address"))?; + let interval = Duration::from_millis(args.flashblocks.block_time); - let interval = Duration::from_millis(args.flashblock_block_time); + #[allow(deprecated)] + let ws_addr = match args.flashblocks.url_deprecated { + Some(url) => url.parse()?, + None => SocketAddr::new(args.flashblocks.addr.parse()?, args.flashblocks.port), + }; Ok(Self { ws_addr, interval }) } diff --git a/crates/op-rbuilder/src/tests/flashblocks/smoke.rs b/crates/op-rbuilder/src/tests/flashblocks/smoke.rs index 63e71cb3b..6b972eb5f 100644 --- a/crates/op-rbuilder/src/tests/flashblocks/smoke.rs +++ b/crates/op-rbuilder/src/tests/flashblocks/smoke.rs @@ -12,7 +12,7 @@ use crate::tests::TestHarnessBuilder; #[ignore = "Flashblocks tests need more work"] async fn chain_produces_blocks() -> eyre::Result<()> { let harness = TestHarnessBuilder::new("flashbots_chain_produces_blocks") - .with_flashblocks_ws_url("ws://localhost:1239") + .with_flashblocks_port(1239) .with_chain_block_time(2000) .with_flashbots_block_time(200) .build() diff --git a/crates/op-rbuilder/src/tests/framework/harness.rs b/crates/op-rbuilder/src/tests/framework/harness.rs index f55da367c..30fb084ee 100644 --- a/crates/op-rbuilder/src/tests/framework/harness.rs +++ b/crates/op-rbuilder/src/tests/framework/harness.rs @@ -22,7 +22,7 @@ use uuid::Uuid; pub struct TestHarnessBuilder { name: String, use_revert_protection: bool, - flashblocks_ws_url: Option, + flashblocks_port: Option, chain_block_time: Option, flashbots_block_time: Option, namespaces: Option, @@ -34,7 +34,7 @@ impl TestHarnessBuilder { Self { name: name.to_string(), use_revert_protection: false, - flashblocks_ws_url: None, + flashblocks_port: None, chain_block_time: None, flashbots_block_time: None, namespaces: None, @@ -47,8 +47,8 @@ impl TestHarnessBuilder { self } - pub fn with_flashblocks_ws_url(mut self, url: &str) -> Self { - self.flashblocks_ws_url = Some(url.to_string()); + pub fn with_flashblocks_port(mut self, port: u16) -> Self { + self.flashblocks_port = Some(port); self } @@ -96,8 +96,8 @@ impl TestHarnessBuilder { .with_revert_protection(self.use_revert_protection) .with_namespaces(self.namespaces) .with_extra_params(self.extra_params); - if let Some(flashblocks_ws_url) = self.flashblocks_ws_url { - op_rbuilder_config = op_rbuilder_config.with_flashblocks_ws_url(&flashblocks_ws_url); + if let Some(flashblocks_port) = self.flashblocks_port { + op_rbuilder_config = op_rbuilder_config.with_flashblocks_port(flashblocks_port); } if let Some(chain_block_time) = self.chain_block_time { diff --git a/crates/op-rbuilder/src/tests/framework/op.rs b/crates/op-rbuilder/src/tests/framework/op.rs index 3dea0513b..d4f8a2240 100644 --- a/crates/op-rbuilder/src/tests/framework/op.rs +++ b/crates/op-rbuilder/src/tests/framework/op.rs @@ -23,7 +23,7 @@ pub struct OpRbuilderConfig { http_port: Option, network_port: Option, builder_private_key: Option, - flashblocks_ws_url: Option, + flashblocks_port: Option, chain_block_time: Option, flashbots_block_time: Option, with_revert_protection: Option, @@ -71,8 +71,8 @@ impl OpRbuilderConfig { self } - pub fn with_flashblocks_ws_url(mut self, url: &str) -> Self { - self.flashblocks_ws_url = Some(url.to_string()); + pub fn with_flashblocks_port(mut self, port: u16) -> Self { + self.flashblocks_port = Some(port); self } @@ -152,11 +152,11 @@ impl Service for OpRbuilderConfig { .arg(http_port.to_string()); } - if let Some(flashblocks_ws_url) = &self.flashblocks_ws_url { + if let Some(flashblocks_port) = &self.flashblocks_port { cmd.arg("--rollup.enable-flashblocks").arg("true"); - - cmd.arg("--rollup.flashblocks-ws-url") - .arg(flashblocks_ws_url); + cmd.arg("--flashblocks.addr").arg("127.0.0.1"); + cmd.arg("--flashblocks.port") + .arg(flashblocks_port.to_string()); } if let Some(chain_block_time) = self.chain_block_time { From a9f472d4ad87b225bfdc4bd7ef2a9a8502d3bdc4 Mon Sep 17 00:00:00 2001 From: Ferran Borreguero Date: Tue, 27 May 2025 12:42:42 +0200 Subject: [PATCH 2/3] Update --- crates/op-rbuilder/src/args/mod.rs | 2 +- crates/op-rbuilder/src/args/op.rs | 11 +++-------- crates/op-rbuilder/src/builders/flashblocks/config.rs | 7 +------ crates/op-rbuilder/src/tests/framework/op.rs | 2 +- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/crates/op-rbuilder/src/args/mod.rs b/crates/op-rbuilder/src/args/mod.rs index e2547432d..806a49da5 100644 --- a/crates/op-rbuilder/src/args/mod.rs +++ b/crates/op-rbuilder/src/args/mod.rs @@ -65,7 +65,7 @@ impl CliExt for Cli { /// Currently supports `Standard` and `Flashblocks` modes. fn builder_mode(&self) -> BuilderMode { if let Commands::Node(ref node_command) = self.command { - if node_command.ext.flashblocks.enable_flashblocks { + if node_command.ext.flashblocks.enabled { return BuilderMode::Flashblocks; } } diff --git a/crates/op-rbuilder/src/args/op.rs b/crates/op-rbuilder/src/args/op.rs index f3b2d9240..9f1979f44 100644 --- a/crates/op-rbuilder/src/args/op.rs +++ b/crates/op-rbuilder/src/args/op.rs @@ -68,11 +68,11 @@ pub struct FlashblocksArgs { /// The default value will change in the future once the flashblocks /// feature is stable. #[arg( - long = "rollup.enable-flashblocks", + long = "flashblocks.enabled", default_value = "false", env = "ENABLE_FLASHBLOCKS" )] - pub enable_flashblocks: bool, + pub enabled: bool, /// The port that we bind to for the websocket server that provides flashblocks #[arg( @@ -88,14 +88,9 @@ pub struct FlashblocksArgs { /// flashblock block time in milliseconds #[arg( - long = "rollup.flashblock-block-time", + long = "flashblock.block-time", default_value = "250", env = "FLASHBLOCK_BLOCK_TIME" )] pub block_time: u64, - - /// Websocket port for flashblock payload builder - #[arg(long = "rollup.flashblocks-ws-url", env = "FLASHBLOCKS_WS_URL")] - #[deprecated = "Use --flashblocks.port and --flashblocks.addr instead"] - pub url_deprecated: Option, } diff --git a/crates/op-rbuilder/src/builders/flashblocks/config.rs b/crates/op-rbuilder/src/builders/flashblocks/config.rs index f7508d683..54d6b10de 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/config.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/config.rs @@ -32,12 +32,7 @@ impl TryFrom for FlashblocksConfig { fn try_from(args: OpRbuilderArgs) -> Result { let interval = Duration::from_millis(args.flashblocks.block_time); - #[allow(deprecated)] - let ws_addr = match args.flashblocks.url_deprecated { - Some(url) => url.parse()?, - None => SocketAddr::new(args.flashblocks.addr.parse()?, args.flashblocks.port), - }; - + let ws_addr = SocketAddr::new(args.flashblocks.addr.parse()?, args.flashblocks.port); Ok(Self { ws_addr, interval }) } } diff --git a/crates/op-rbuilder/src/tests/framework/op.rs b/crates/op-rbuilder/src/tests/framework/op.rs index d4f8a2240..30aae7a87 100644 --- a/crates/op-rbuilder/src/tests/framework/op.rs +++ b/crates/op-rbuilder/src/tests/framework/op.rs @@ -153,7 +153,7 @@ impl Service for OpRbuilderConfig { } if let Some(flashblocks_port) = &self.flashblocks_port { - cmd.arg("--rollup.enable-flashblocks").arg("true"); + cmd.arg("--flashblocks.enabled").arg("true"); cmd.arg("--flashblocks.addr").arg("127.0.0.1"); cmd.arg("--flashblocks.port") .arg(flashblocks_port.to_string()); From b6267f3bc880487ef701f921bc974f3fdb3b7343 Mon Sep 17 00:00:00 2001 From: Ferran Borreguero Date: Tue, 27 May 2025 13:05:08 +0200 Subject: [PATCH 3/3] Fix --- crates/op-rbuilder/src/args/op.rs | 15 +++++++++++---- .../src/builders/flashblocks/config.rs | 7 +++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/crates/op-rbuilder/src/args/op.rs b/crates/op-rbuilder/src/args/op.rs index 9f1979f44..136e58ad1 100644 --- a/crates/op-rbuilder/src/args/op.rs +++ b/crates/op-rbuilder/src/args/op.rs @@ -60,6 +60,9 @@ fn expand_path(s: &str) -> Result { } /// Parameters for Flashblocks configuration +/// The names in the struct are prefixed with `flashblocks` to avoid conflicts +/// with the standard block building configuration since these args are flattened +/// into the main `OpRbuilderArgs` struct with the other rollup/node args. #[derive(Debug, Clone, Default, PartialEq, Eq, clap::Args)] pub struct FlashblocksArgs { /// When set to true, the builder will build flashblocks @@ -80,11 +83,15 @@ pub struct FlashblocksArgs { env = "FLASHBLOCKS_WS_PORT", default_value = "1111" )] - pub port: u16, + pub flashblocks_port: u16, /// The address that we bind to for the websocket server that provides flashblocks - #[arg(long = "flashblocks.addr", env = "FLASHBLOCKS_WS_ADDR")] - pub addr: String, + #[arg( + long = "flashblocks.addr", + env = "FLASHBLOCKS_WS_ADDR", + default_value = "127.0.0.1" + )] + pub flashblocks_addr: String, /// flashblock block time in milliseconds #[arg( @@ -92,5 +99,5 @@ pub struct FlashblocksArgs { default_value = "250", env = "FLASHBLOCK_BLOCK_TIME" )] - pub block_time: u64, + pub flashblocks_block_time: u64, } diff --git a/crates/op-rbuilder/src/builders/flashblocks/config.rs b/crates/op-rbuilder/src/builders/flashblocks/config.rs index 54d6b10de..1c2af41b2 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/config.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/config.rs @@ -30,9 +30,12 @@ impl TryFrom for FlashblocksConfig { type Error = eyre::Report; fn try_from(args: OpRbuilderArgs) -> Result { - let interval = Duration::from_millis(args.flashblocks.block_time); + let interval = Duration::from_millis(args.flashblocks.flashblocks_block_time); - let ws_addr = SocketAddr::new(args.flashblocks.addr.parse()?, args.flashblocks.port); + let ws_addr = SocketAddr::new( + args.flashblocks.flashblocks_addr.parse()?, + args.flashblocks.flashblocks_port, + ); Ok(Self { ws_addr, interval }) } }