From 13791448067babf22d86ff2f77c3edc27b281f62 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Mon, 1 Jun 2026 15:08:10 -0700 Subject: [PATCH 1/2] Ignore stale splice signing fuzz events Now that the fuzz target supports canceling splice funding attempts, we may see failed signing attempts due to the cancellation. --- fuzz/src/chanmon_consistency.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/fuzz/src/chanmon_consistency.rs b/fuzz/src/chanmon_consistency.rs index a0aa7bbe7ef..da622eaff0d 100644 --- a/fuzz/src/chanmon_consistency.rs +++ b/fuzz/src/chanmon_consistency.rs @@ -2814,9 +2814,20 @@ impl<'a, Out: Output + MaybeSend + MaybeSync> Harness<'a, Out> { .. } => { let signed_tx = nodes[node_idx].wallet.sign_tx(unsigned_transaction).unwrap(); - nodes[node_idx] - .funding_transaction_signed(&channel_id, &counterparty_node_id, signed_tx) - .unwrap(); + match nodes[node_idx].funding_transaction_signed( + &channel_id, + &counterparty_node_id, + signed_tx, + ) { + Ok(()) => {}, + Err(APIError::APIMisuseError { ref err }) + if err.contains("not expecting funding signatures") => + { + // A queued signing event can be invalidated by a later `tx_abort` + // before the application handles it. + }, + Err(e) => panic!("{e:?}"), + } }, events::Event::SpliceNegotiated { new_funding_txo, .. } => { let mut txs = nodes[node_idx].broadcaster.txn_broadcasted.borrow_mut(); From 099bb09e2a0f3d35cffa79ecb32cee06c61b76c4 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Mon, 1 Jun 2026 15:08:15 -0700 Subject: [PATCH 2/2] Raise iteration capacity in chanmon consistency when settling state LDK and the chanmon_consistency fuzz target have grown in complexity recently and thus require more iterations than previously assumed to fully settle the state of all active channels. --- fuzz/src/chanmon_consistency.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fuzz/src/chanmon_consistency.rs b/fuzz/src/chanmon_consistency.rs index da622eaff0d..519ae515e7f 100644 --- a/fuzz/src/chanmon_consistency.rs +++ b/fuzz/src/chanmon_consistency.rs @@ -102,6 +102,7 @@ use std::sync::atomic; use std::sync::{Arc, Mutex}; const MAX_FEE: u32 = 10_000; +const MAX_SETTLE_ITERATIONS: usize = 256; struct FuzzEstimator { ret_val: atomic::AtomicU32, } @@ -2865,9 +2866,9 @@ impl<'a, Out: Output + MaybeSend + MaybeSync> Harness<'a, Out> { fn process_all_events(&mut self) { let mut last_pass_no_updates = false; for i in 0..std::usize::MAX { - if i == 100 { + if i == MAX_SETTLE_ITERATIONS { panic!( - "It may take may iterations to settle the state, but it should not take forever" + "It may take many iterations to settle the state, but it should not take forever" ); } let mut made_progress = self.checkpoint_manager_persistences();