@@ -499,6 +499,7 @@ pub(super) struct Channel<Signer: ChannelSigner> {
499499	user_id :  u128 , 
500500
501501	channel_id :  [ u8 ;  32 ] , 
502+ 	temporary_channel_id :  Option < [ u8 ;  32 ] > ,  // Will be `None` for channels created prior to 0.0.115. 
502503	channel_state :  u32 , 
503504
504505	// 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> {
729730	// blinded paths instead of simple scid+node_id aliases. 
730731	outbound_scid_alias :  u64 , 
731732
733+ 	// We track whether we already emitted a `ChannelPending` event. 
734+ 	channel_pending_event_emitted :  bool , 
735+ 
732736	// We track whether we already emitted a `ChannelReady` event. 
733737	channel_ready_event_emitted :  bool , 
734738
@@ -991,6 +995,8 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
991995			} 
992996		} 
993997
998+ 		let  temporary_channel_id = entropy_source. get_secure_random_bytes ( ) ; 
999+ 
9941000		Ok ( Channel  { 
9951001			user_id, 
9961002
@@ -1004,7 +1010,8 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
10041010
10051011			inbound_handshake_limits_override :  Some ( config. channel_handshake_limits . clone ( ) ) , 
10061012
1007- 			channel_id :  entropy_source. get_secure_random_bytes ( ) , 
1013+ 			channel_id :  temporary_channel_id, 
1014+ 			temporary_channel_id :  Some ( temporary_channel_id) , 
10081015			channel_state :  ChannelState :: OurInitSent  as  u32 , 
10091016			announcement_sigs_state :  AnnouncementSigsState :: NotSent , 
10101017			secp_ctx, 
@@ -1103,6 +1110,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
11031110			latest_inbound_scid_alias :  None , 
11041111			outbound_scid_alias, 
11051112
1113+ 			channel_pending_event_emitted :  false , 
11061114			channel_ready_event_emitted :  false , 
11071115
11081116			#[ cfg( any( test,  fuzzing) ) ]  
@@ -1350,6 +1358,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
13501358			inbound_handshake_limits_override :  None , 
13511359
13521360			channel_id :  msg. temporary_channel_id , 
1361+ 			temporary_channel_id :  Some ( msg. temporary_channel_id ) , 
13531362			channel_state :  ( ChannelState :: OurInitSent  as  u32 )  | ( ChannelState :: TheirInitSent  as  u32 ) , 
13541363			announcement_sigs_state :  AnnouncementSigsState :: NotSent , 
13551364			secp_ctx, 
@@ -1451,6 +1460,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
14511460			latest_inbound_scid_alias :  None , 
14521461			outbound_scid_alias, 
14531462
1463+ 			channel_pending_event_emitted :  false , 
14541464			channel_ready_event_emitted :  false , 
14551465
14561466			#[ cfg( any( test,  fuzzing) ) ]  
@@ -4550,6 +4560,13 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
45504560		self . channel_id 
45514561	} 
45524562
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+ 
45534570	pub  fn  minimum_depth ( & self )  -> Option < u32 >  { 
45544571		self . minimum_depth 
45554572	} 
@@ -4694,6 +4711,21 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
46944711		self . prev_config . map ( |prev_config| prev_config. 0 ) 
46954712	} 
46964713
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+ 
46974729	// Checks whether we should emit a `ChannelReady` event. 
46984730	pub ( crate )  fn  should_emit_channel_ready_event ( & mut  self )  -> bool  { 
46994731		self . is_usable ( )  && !self . channel_ready_event_emitted 
@@ -6420,6 +6452,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
64206452			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) 
64216453			{  Some ( self . holder_max_htlc_value_in_flight_msat )  }  else  {  None  } ; 
64226454
6455+ 		let  channel_pending_event_emitted = Some ( self . channel_pending_event_emitted ) ; 
64236456		let  channel_ready_event_emitted = Some ( self . channel_ready_event_emitted ) ; 
64246457
64256458		// `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> {
64526485			( 23 ,  channel_ready_event_emitted,  option) , 
64536486			( 25 ,  user_id_high_opt,  option) , 
64546487			( 27 ,  self . channel_keys_id,  required) , 
6488+ 			( 29 ,  self . temporary_channel_id,  option) , 
6489+ 			( 31 ,  channel_pending_event_emitted,  option) , 
64556490		} ) ; 
64566491
64576492		Ok ( ( ) ) 
@@ -6719,10 +6754,12 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
67196754		let  mut  announcement_sigs_state = Some ( AnnouncementSigsState :: NotSent ) ; 
67206755		let  mut  latest_inbound_scid_alias = None ; 
67216756		let  mut  outbound_scid_alias = None ; 
6757+ 		let  mut  channel_pending_event_emitted = None ; 
67226758		let  mut  channel_ready_event_emitted = None ; 
67236759
67246760		let  mut  user_id_high_opt:  Option < u64 >  = None ; 
67256761		let  mut  channel_keys_id:  Option < [ u8 ;  32 ] >  = None ; 
6762+ 		let  mut  temporary_channel_id:  Option < [ u8 ;  32 ] >  = None ; 
67266763
67276764		read_tlv_fields ! ( reader,  { 
67286765			( 0 ,  announcement_sigs,  option) , 
@@ -6743,6 +6780,8 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
67436780			( 23 ,  channel_ready_event_emitted,  option) , 
67446781			( 25 ,  user_id_high_opt,  option) , 
67456782			( 27 ,  channel_keys_id,  option) , 
6783+ 			( 29 ,  temporary_channel_id,  option) , 
6784+ 			( 31 ,  channel_pending_event_emitted,  option) , 
67466785		} ) ; 
67476786
67486787		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
68076846			inbound_handshake_limits_override :  None , 
68086847
68096848			channel_id, 
6849+ 			temporary_channel_id, 
68106850			channel_state, 
68116851			announcement_sigs_state :  announcement_sigs_state. unwrap ( ) , 
68126852			secp_ctx, 
@@ -6899,6 +6939,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
68996939			// Later in the ChannelManager deserialization phase we scan for channels and assign scid aliases if its missing 
69006940			outbound_scid_alias :  outbound_scid_alias. unwrap_or ( 0 ) , 
69016941
6942+ 			channel_pending_event_emitted :  channel_pending_event_emitted. unwrap_or ( true ) , 
69026943			channel_ready_event_emitted :  channel_ready_event_emitted. unwrap_or ( true ) , 
69036944
69046945			#[ cfg( any( test,  fuzzing) ) ]  
0 commit comments