@@ -1492,6 +1492,10 @@ pub(super) struct ChannelContext<SP: Deref> where SP::Target: SignerProvider {
14921492 /// If we can't release a [`ChannelMonitorUpdate`] until some external action completes, we
14931493 /// store it here and only release it to the `ChannelManager` once it asks for it.
14941494 blocked_monitor_updates: Vec<PendingChannelMonitorUpdate>,
1495+ // If we've sent `commtiment_signed` for an interactive transaction construction,
1496+ // but have not received `tx_signatures` we MUST set `next_funding_txid` to the
1497+ // txid of that interactive transaction, else we MUST NOT set it.
1498+ next_funding_txid: Option<Txid>,
14951499}
14961500
14971501pub(super) trait InteractivelyFunded<SP: Deref> where SP::Target: SignerProvider {
@@ -1992,6 +1996,8 @@ impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider {
19921996 blocked_monitor_updates: Vec::new(),
19931997
19941998 is_manual_broadcast: false,
1999+
2000+ next_funding_txid: None,
19952001 };
19962002
19972003 Ok(channel_context)
@@ -2223,6 +2229,7 @@ impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider {
22232229 blocked_monitor_updates: Vec::new(),
22242230 local_initiated_shutdown: None,
22252231 is_manual_broadcast: false,
2232+ next_funding_txid: None,
22262233 })
22272234 }
22282235
@@ -4426,6 +4433,14 @@ impl<SP: Deref> Channel<SP> where
44264433 self.context.channel_state.clear_waiting_for_batch();
44274434 }
44284435
4436+ pub fn set_next_funding_txid(&mut self, txid: &Txid) {
4437+ self.context.next_funding_txid = Some(*txid);
4438+ }
4439+
4440+ pub fn clear_next_funding_txid(&mut self) {
4441+ self.context.next_funding_txid = None;
4442+ }
4443+
44294444 /// Unsets the existing funding information.
44304445 ///
44314446 /// This must only be used if the channel has not yet completed funding and has not been used.
@@ -7569,10 +7584,7 @@ impl<SP: Deref> Channel<SP> where
75697584 next_remote_commitment_number: INITIAL_COMMITMENT_NUMBER - self.context.cur_counterparty_commitment_transaction_number - 1,
75707585 your_last_per_commitment_secret: remote_last_secret,
75717586 my_current_per_commitment_point: dummy_pubkey,
7572- // TODO(dual_funding): If we've sent `commtiment_signed` for an interactive transaction
7573- // construction but have not received `tx_signatures` we MUST set `next_funding_txid` to the
7574- // txid of that interactive transaction, else we MUST NOT set it.
7575- next_funding_txid: None,
7587+ next_funding_txid: self.context.next_funding_txid,
75767588 }
75777589 }
75787590
@@ -9475,7 +9487,8 @@ impl<SP: Deref> Writeable for Channel<SP> where SP::Target: SignerProvider {
94759487 (47, next_holder_commitment_point, option),
94769488 (49, self.context.local_initiated_shutdown, option), // Added in 0.0.122
94779489 (51, is_manual_broadcast, option), // Added in 0.0.124
9478- (53, funding_tx_broadcast_safe_event_emitted, option) // Added in 0.0.124
9490+ (53, funding_tx_broadcast_safe_event_emitted, option), // Added in 0.0.124
9491+ (55, self.context.next_funding_txid, option) // Added in 0.0.125
94799492 });
94809493
94819494 Ok(())
@@ -10084,6 +10097,10 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
1008410097
1008510098 blocked_monitor_updates: blocked_monitor_updates.unwrap(),
1008610099 is_manual_broadcast: is_manual_broadcast.unwrap_or(false),
10100+ // If we've sent `commtiment_signed` for an interactive transaction construction,
10101+ // but have not received `tx_signatures` we MUST set `next_funding_txid` to the
10102+ // txid of that interactive transaction, else we MUST NOT set it.
10103+ next_funding_txid: None,
1008710104 },
1008810105 dual_funding_channel_context: None,
1008910106 interactive_tx_constructor: None,
0 commit comments