From dd0c0daaa7f6c3e4adc4964ebd9d1b0a437c3c95 Mon Sep 17 00:00:00 2001 From: erhant Date: Tue, 14 Jul 2026 16:21:23 +0300 Subject: [PATCH] docs(sequencer): clarify queued semantics of adminConfigureChannel --- lez/sequencer/core/src/block_publisher.rs | 3 +++ lez/sequencer/core/src/tests.rs | 3 +++ lez/sequencer/service/rpc/src/lib.rs | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/lez/sequencer/core/src/block_publisher.rs b/lez/sequencer/core/src/block_publisher.rs index 6230d32c..f429e780 100644 --- a/lez/sequencer/core/src/block_publisher.rs +++ b/lez/sequencer/core/src/block_publisher.rs @@ -109,6 +109,9 @@ pub trait BlockPublisherTrait: Clone { /// admin (`keys[0]`); the L1 rejects non-admin signers, so this is not /// re-validated here. /// + /// `Ok(())` only means the signed op was queued locally, not that the + /// L1 accepted it — acceptance is asynchronous. + /// /// Desugared (not `async fn`) so the returned future is provably `Send` — /// generic callers awaiting it inside jsonrpsee handlers require that. fn configure_channel( diff --git a/lez/sequencer/core/src/tests.rs b/lez/sequencer/core/src/tests.rs index 177b2783..a5dd971b 100644 --- a/lez/sequencer/core/src/tests.rs +++ b/lez/sequencer/core/src/tests.rs @@ -1561,6 +1561,9 @@ async fn configure_channel_delegates_to_publisher() { let calls = sequencer.block_publisher().configure_channel_calls(); assert_eq!(calls.len(), 1); assert_eq!(calls[0].keys.len(), 2); + assert_eq!(calls[0].keys[0], admin); assert_eq!(calls[0].posting_timeframe, 20); assert_eq!(calls[0].posting_timeout, 30); + assert_eq!(calls[0].configuration_threshold, 1); + assert_eq!(calls[0].withdraw_threshold, 1); } diff --git a/lez/sequencer/service/rpc/src/lib.rs b/lez/sequencer/service/rpc/src/lib.rs index 40b9d2bd..ccf015bc 100644 --- a/lez/sequencer/service/rpc/src/lib.rs +++ b/lez/sequencer/service/rpc/src/lib.rs @@ -95,6 +95,11 @@ pub trait Rpc { /// Admin-only in effect: the L1 rejects the config op unless this /// sequencer's key is the channel admin (`keys[0]` of the current roster). + /// + /// `Ok(())` only means the signed config op was queued locally (like + /// block publishing), not that L1 accepted it: acceptance is asynchronous, + /// and a rejection (e.g. non-admin signer) is not reported here — it only + /// shows up in node logs and on-chain behavior. #[method(name = "adminConfigureChannel")] async fn admin_configure_channel( &self,