@@ -499,6 +499,7 @@ pub(super) struct Channel<Signer: ChannelSigner> {
499
499
user_id : u128 ,
500
500
501
501
channel_id : [ u8 ; 32 ] ,
502
+ temporary_channel_id : Option < [ u8 ; 32 ] > , // Will be `None` for channels created prior to 0.0.115.
502
503
channel_state : u32 ,
503
504
504
505
// When we reach max(6 blocks, minimum_depth), we need to send an AnnouncementSigs message to
@@ -729,6 +730,9 @@ pub(super) struct Channel<Signer: ChannelSigner> {
729
730
// blinded paths instead of simple scid+node_id aliases.
730
731
outbound_scid_alias : u64 ,
731
732
733
+ // We track whether we already emitted a `ChannelPending` event.
734
+ channel_pending_event_emitted : bool ,
735
+
732
736
// We track whether we already emitted a `ChannelReady` event.
733
737
channel_ready_event_emitted : bool ,
734
738
@@ -991,6 +995,8 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
991
995
}
992
996
}
993
997
998
+ let temporary_channel_id = entropy_source. get_secure_random_bytes ( ) ;
999
+
994
1000
Ok ( Channel {
995
1001
user_id,
996
1002
@@ -1004,7 +1010,8 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
1004
1010
1005
1011
inbound_handshake_limits_override : Some ( config. channel_handshake_limits . clone ( ) ) ,
1006
1012
1007
- channel_id : entropy_source. get_secure_random_bytes ( ) ,
1013
+ channel_id : temporary_channel_id,
1014
+ temporary_channel_id : Some ( temporary_channel_id) ,
1008
1015
channel_state : ChannelState :: OurInitSent as u32 ,
1009
1016
announcement_sigs_state : AnnouncementSigsState :: NotSent ,
1010
1017
secp_ctx,
@@ -1103,6 +1110,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
1103
1110
latest_inbound_scid_alias : None ,
1104
1111
outbound_scid_alias,
1105
1112
1113
+ channel_pending_event_emitted : false ,
1106
1114
channel_ready_event_emitted : false ,
1107
1115
1108
1116
#[ cfg( any( test, fuzzing) ) ]
@@ -1350,6 +1358,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
1350
1358
inbound_handshake_limits_override : None ,
1351
1359
1352
1360
channel_id : msg. temporary_channel_id ,
1361
+ temporary_channel_id : Some ( msg. temporary_channel_id ) ,
1353
1362
channel_state : ( ChannelState :: OurInitSent as u32 ) | ( ChannelState :: TheirInitSent as u32 ) ,
1354
1363
announcement_sigs_state : AnnouncementSigsState :: NotSent ,
1355
1364
secp_ctx,
@@ -1451,6 +1460,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
1451
1460
latest_inbound_scid_alias : None ,
1452
1461
outbound_scid_alias,
1453
1462
1463
+ channel_pending_event_emitted : false ,
1454
1464
channel_ready_event_emitted : false ,
1455
1465
1456
1466
#[ cfg( any( test, fuzzing) ) ]
@@ -4550,6 +4560,13 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
4550
4560
self . channel_id
4551
4561
}
4552
4562
4563
+ // Return the `temporary_channel_id` used during channel establishment.
4564
+ //
4565
+ // Will return `None` for channels created prior to LDK version 0.0.115.
4566
+ pub fn temporary_channel_id ( & self ) -> Option < [ u8 ; 32 ] > {
4567
+ self . temporary_channel_id
4568
+ }
4569
+
4553
4570
pub fn minimum_depth ( & self ) -> Option < u32 > {
4554
4571
self . minimum_depth
4555
4572
}
@@ -4694,6 +4711,21 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
4694
4711
self . prev_config . map ( |prev_config| prev_config. 0 )
4695
4712
}
4696
4713
4714
+ // Checks whether we should emit a `ChannelPending` event.
4715
+ pub ( crate ) fn should_emit_channel_pending_event ( & mut self ) -> bool {
4716
+ self . is_funding_initiated ( ) && !self . channel_pending_event_emitted
4717
+ }
4718
+
4719
+ // Returns whether we already emitted a `ChannelPending` event.
4720
+ pub ( crate ) fn channel_pending_event_emitted ( & self ) -> bool {
4721
+ self . channel_pending_event_emitted
4722
+ }
4723
+
4724
+ // Remembers that we already emitted a `ChannelPending` event.
4725
+ pub ( crate ) fn set_channel_pending_event_emitted ( & mut self ) {
4726
+ self . channel_pending_event_emitted = true ;
4727
+ }
4728
+
4697
4729
// Checks whether we should emit a `ChannelReady` event.
4698
4730
pub ( crate ) fn should_emit_channel_ready_event ( & mut self ) -> bool {
4699
4731
self . is_usable ( ) && !self . channel_ready_event_emitted
@@ -6420,6 +6452,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
6420
6452
if self . holder_max_htlc_value_in_flight_msat != Self :: get_holder_max_htlc_value_in_flight_msat ( self . channel_value_satoshis , & old_max_in_flight_percent_config)
6421
6453
{ Some ( self . holder_max_htlc_value_in_flight_msat ) } else { None } ;
6422
6454
6455
+ let channel_pending_event_emitted = Some ( self . channel_pending_event_emitted ) ;
6423
6456
let channel_ready_event_emitted = Some ( self . channel_ready_event_emitted ) ;
6424
6457
6425
6458
// `user_id` used to be a single u64 value. In order to remain backwards compatible with
@@ -6452,6 +6485,8 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
6452
6485
( 23 , channel_ready_event_emitted, option) ,
6453
6486
( 25 , user_id_high_opt, option) ,
6454
6487
( 27 , self . channel_keys_id, required) ,
6488
+ ( 29 , self . temporary_channel_id, option) ,
6489
+ ( 31 , channel_pending_event_emitted, option) ,
6455
6490
} ) ;
6456
6491
6457
6492
Ok ( ( ) )
@@ -6719,10 +6754,12 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
6719
6754
let mut announcement_sigs_state = Some ( AnnouncementSigsState :: NotSent ) ;
6720
6755
let mut latest_inbound_scid_alias = None ;
6721
6756
let mut outbound_scid_alias = None ;
6757
+ let mut channel_pending_event_emitted = None ;
6722
6758
let mut channel_ready_event_emitted = None ;
6723
6759
6724
6760
let mut user_id_high_opt: Option < u64 > = None ;
6725
6761
let mut channel_keys_id: Option < [ u8 ; 32 ] > = None ;
6762
+ let mut temporary_channel_id: Option < [ u8 ; 32 ] > = None ;
6726
6763
6727
6764
read_tlv_fields ! ( reader, {
6728
6765
( 0 , announcement_sigs, option) ,
@@ -6743,6 +6780,8 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
6743
6780
( 23 , channel_ready_event_emitted, option) ,
6744
6781
( 25 , user_id_high_opt, option) ,
6745
6782
( 27 , channel_keys_id, option) ,
6783
+ ( 29 , temporary_channel_id, option) ,
6784
+ ( 31 , channel_pending_event_emitted, option) ,
6746
6785
} ) ;
6747
6786
6748
6787
let ( channel_keys_id, holder_signer) = if let Some ( channel_keys_id) = channel_keys_id {
@@ -6807,6 +6846,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
6807
6846
inbound_handshake_limits_override : None ,
6808
6847
6809
6848
channel_id,
6849
+ temporary_channel_id,
6810
6850
channel_state,
6811
6851
announcement_sigs_state : announcement_sigs_state. unwrap ( ) ,
6812
6852
secp_ctx,
@@ -6899,6 +6939,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
6899
6939
// Later in the ChannelManager deserialization phase we scan for channels and assign scid aliases if its missing
6900
6940
outbound_scid_alias : outbound_scid_alias. unwrap_or ( 0 ) ,
6901
6941
6942
+ channel_pending_event_emitted : channel_pending_event_emitted. unwrap_or ( true ) ,
6902
6943
channel_ready_event_emitted : channel_ready_event_emitted. unwrap_or ( true ) ,
6903
6944
6904
6945
#[ cfg( any( test, fuzzing) ) ]
0 commit comments