From 64787fbd7334abe1ec45a4abb392c8d970a26094 Mon Sep 17 00:00:00 2001 From: Richard Holzeis Date: Wed, 17 Jan 2024 10:25:10 +0100 Subject: [PATCH 1/2] fix: Only consider a signed dlc channel with the counterparty --- coordinator/src/dlc_handler.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/coordinator/src/dlc_handler.rs b/coordinator/src/dlc_handler.rs index 3931ceaa1..12e6b62d0 100644 --- a/coordinator/src/dlc_handler.rs +++ b/coordinator/src/dlc_handler.rs @@ -8,7 +8,6 @@ use diesel::r2d2::Pool; use diesel::PgConnection; use dlc_manager::channel::signed_channel::SignedChannel; use dlc_manager::channel::signed_channel::SignedChannelState; -use dlc_manager::channel::Channel; use dlc_messages::Message; use futures::future::RemoteHandle; use futures::FutureExt; @@ -102,11 +101,13 @@ impl DlcHandler { } pub fn on_connect(&self, peer: PublicKey) -> Result<()> { - if let Some(Channel::Signed(SignedChannel { + let signed_dlc_channels = self.node.list_signed_dlc_channels()?; + + if let Some(SignedChannel { channel_id, state: SignedChannelState::CollaborativeCloseOffered { .. }, .. - })) = self.node.list_dlc_channels()?.first() + }) = signed_dlc_channels.iter().find(|c| c.counter_party == peer) { tracing::info!("Accepting pending dlc channel close offer."); // Pending dlc channel close offer with the intend to close the dlc channel From 250f3a59245355947c85255cc38e76fd8608b72d Mon Sep 17 00:00:00 2001 From: Richard Holzeis Date: Wed, 17 Jan 2024 10:51:44 +0100 Subject: [PATCH 2/2] fix: Only consider non-final dlc channels The user might have multiple non signed dlc channels. We do not care about those. --- mobile/native/src/dlc_handler.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/mobile/native/src/dlc_handler.rs b/mobile/native/src/dlc_handler.rs index c3806cbcd..a8ad338b0 100644 --- a/mobile/native/src/dlc_handler.rs +++ b/mobile/native/src/dlc_handler.rs @@ -90,7 +90,26 @@ impl DlcHandler { } pub fn on_connect(&self, peer: PublicKey) -> Result<()> { - if let Some(channel) = self.node.list_dlc_channels()?.first() { + let dlc_channels: Vec = self + .node + .list_dlc_channels()? + .into_iter() + .filter(|c| { + // Filter all dlc channels that have reached a somewhat final state. + !matches!( + c, + Channel::Closed(_) + | Channel::Closing(_) + | Channel::CounterClosed(_) + | Channel::ClosedPunished(_) + | Channel::CollaborativelyClosed(_) + | Channel::FailedAccept(_) + | Channel::FailedSign(_) + ) + }) + .collect(); + + if let Some(channel) = dlc_channels.first() { match channel { Channel::Offered(OfferedChannel { temporary_channel_id,