Skip to content

Commit 269c0ed

Browse files
committed
f - only emit SpliceFailed when initiator
1 parent 5896aed commit 269c0ed

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

lightning/src/ln/channel.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1766,6 +1766,7 @@ where
17661766
.pending_splice
17671767
.as_mut()
17681768
.and_then(|pending_splice| pending_splice.funding_negotiation.take())
1769+
.filter(|funding_negotiation| funding_negotiation.is_initiator())
17691770
.map(|funding_negotiation| {
17701771
let funding = funding_negotiation.as_funding();
17711772
SpliceFundingFailed {
@@ -2001,6 +2002,7 @@ where
20012002
interactive_tx_constructor,
20022003
} = funding_negotiation
20032004
{
2005+
let is_initiator = interactive_tx_constructor.is_initiator();
20042006
let signing_session = interactive_tx_constructor.into_signing_session();
20052007
let commitment_signed_result = chan.context.funding_tx_constructed(
20062008
&mut funding,
@@ -2013,7 +2015,7 @@ where
20132015
// This must be set even if returning an Err. Otherwise,
20142016
// fail_interactive_tx_negotiation won't produce a SpliceFailed event.
20152017
pending_splice.funding_negotiation =
2016-
Some(FundingNegotiation::AwaitingSignatures { funding });
2018+
Some(FundingNegotiation::AwaitingSignatures { funding, is_initiator });
20172019

20182020
return commitment_signed_result;
20192021
} else {
@@ -2606,12 +2608,14 @@ enum FundingNegotiation {
26062608
},
26072609
AwaitingSignatures {
26082610
funding: FundingScope,
2611+
is_initiator: bool,
26092612
},
26102613
}
26112614

26122615
impl_writeable_tlv_based_enum_upgradable!(FundingNegotiation,
26132616
(0, AwaitingSignatures) => {
26142617
(1, funding, required),
2618+
(3, is_initiator, required),
26152619
},
26162620
unread_variants: AwaitingAck, ConstructingTransaction
26172621
);
@@ -2621,7 +2625,17 @@ impl FundingNegotiation {
26212625
match self {
26222626
FundingNegotiation::AwaitingAck { .. } => None,
26232627
FundingNegotiation::ConstructingTransaction { funding, .. } => Some(funding),
2624-
FundingNegotiation::AwaitingSignatures { funding } => Some(funding),
2628+
FundingNegotiation::AwaitingSignatures { funding, .. } => Some(funding),
2629+
}
2630+
}
2631+
2632+
fn is_initiator(&self) -> bool {
2633+
match self {
2634+
FundingNegotiation::AwaitingAck { context } => context.is_initiator,
2635+
FundingNegotiation::ConstructingTransaction { interactive_tx_constructor, .. } => {
2636+
interactive_tx_constructor.is_initiator()
2637+
},
2638+
FundingNegotiation::AwaitingSignatures { is_initiator, .. } => *is_initiator,
26252639
}
26262640
}
26272641
}
@@ -8627,7 +8641,7 @@ where
86278641

86288642
if let Some(pending_splice) = self.pending_splice.as_mut() {
86298643
self.context.channel_state.clear_quiescent();
8630-
if let Some(FundingNegotiation::AwaitingSignatures { mut funding }) =
8644+
if let Some(FundingNegotiation::AwaitingSignatures { mut funding, .. }) =
86318645
pending_splice.funding_negotiation.take()
86328646
{
86338647
funding.funding_transaction = Some(funding_tx);
@@ -9544,7 +9558,7 @@ where
95449558
.as_ref()
95459559
.and_then(|pending_splice| pending_splice.funding_negotiation.as_ref())
95469560
.and_then(|funding_negotiation| {
9547-
if let FundingNegotiation::AwaitingSignatures { funding } = &funding_negotiation {
9561+
if let FundingNegotiation::AwaitingSignatures { funding, .. } = &funding_negotiation {
95489562
Some(funding)
95499563
} else {
95509564
None

lightning/src/ln/interactivetxs.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1848,6 +1848,7 @@ impl InteractiveTxInput {
18481848

18491849
pub(super) struct InteractiveTxConstructor {
18501850
state_machine: StateMachine,
1851+
is_initiator: bool,
18511852
initiator_first_message: Option<InteractiveTxMessageSend>,
18521853
channel_id: ChannelId,
18531854
inputs_to_contribute: Vec<(SerialId, InputOwned)>,
@@ -2009,6 +2010,7 @@ impl InteractiveTxConstructor {
20092010

20102011
let mut constructor = Self {
20112012
state_machine,
2013+
is_initiator,
20122014
initiator_first_message: None,
20132015
channel_id,
20142016
inputs_to_contribute,
@@ -2021,6 +2023,10 @@ impl InteractiveTxConstructor {
20212023
Ok(constructor)
20222024
}
20232025

2026+
pub fn is_initiator(&self) -> bool {
2027+
self.is_initiator
2028+
}
2029+
20242030
pub fn take_initiator_first_message(&mut self) -> Option<InteractiveTxMessageSend> {
20252031
self.initiator_first_message.take()
20262032
}

0 commit comments

Comments
 (0)