@@ -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