@@ -2142,7 +2142,7 @@ impl<Signer: Sign> Channel<Signer> {
21422142
21432143 log_info ! ( logger, "Received funding_locked from peer for channel {}" , log_bytes!( self . channel_id( ) ) ) ;
21442144
2145- Ok ( self . get_announcement_sigs ( node_pk, genesis_block_hash, best_block. height ( ) ) . ok ( ) )
2145+ Ok ( self . get_announcement_sigs ( node_pk, genesis_block_hash, best_block. height ( ) , logger ) )
21462146 }
21472147
21482148 /// Returns transaction if there is pending funding transaction that is yet to broadcast
@@ -3416,7 +3416,7 @@ impl<Signer: Sign> Channel<Signer> {
34163416 } )
34173417 } else { None } ;
34183418
3419- let announcement_sigs = self . get_announcement_sigs ( node_pk, genesis_block_hash, best_block_height) . ok ( ) ;
3419+ let announcement_sigs = self . get_announcement_sigs ( node_pk, genesis_block_hash, best_block_height, logger ) ;
34203420
34213421 let mut accepted_htlcs = Vec :: new ( ) ;
34223422 mem:: swap ( & mut accepted_htlcs, & mut self . monitor_pending_forwards ) ;
@@ -3609,7 +3609,7 @@ impl<Signer: Sign> Channel<Signer> {
36093609 } )
36103610 } else { None } ;
36113611
3612- let announcement_sigs = self . get_announcement_sigs ( node_pk, genesis_block_hash, best_block. height ( ) ) . ok ( ) ;
3612+ let announcement_sigs = self . get_announcement_sigs ( node_pk, genesis_block_hash, best_block. height ( ) , logger ) ;
36133613
36143614 if self . channel_state & ( ChannelState :: FundingSent as u32 ) == ChannelState :: FundingSent as u32 {
36153615 // If we're waiting on a monitor update, we shouldn't re-send any funding_locked's.
@@ -4464,7 +4464,7 @@ impl<Signer: Sign> Channel<Signer> {
44644464 // may have already happened for this block).
44654465 if let Some ( funding_locked) = self . check_get_funding_locked ( height) {
44664466 log_info ! ( logger, "Sending a funding_locked to our peer for channel {}" , log_bytes!( self . channel_id) ) ;
4467- let announcement_sigs = self . get_announcement_sigs ( node_pk, genesis_block_hash, height) . ok ( ) ;
4467+ let announcement_sigs = self . get_announcement_sigs ( node_pk, genesis_block_hash, height, logger ) ;
44684468 return Ok ( ( Some ( funding_locked) , announcement_sigs) ) ;
44694469 }
44704470 }
@@ -4518,7 +4518,7 @@ impl<Signer: Sign> Channel<Signer> {
45184518
45194519 if let Some ( funding_locked) = self . check_get_funding_locked ( height) {
45204520 let announcement_sigs = if let Some ( ( genesis_block_hash, node_pk) ) = genesis_node_pk {
4521- self . get_announcement_sigs ( node_pk, genesis_block_hash, height) . ok ( )
4521+ self . get_announcement_sigs ( node_pk, genesis_block_hash, height, logger )
45224522 } else { None } ;
45234523 log_info ! ( logger, "Sending a funding_locked to our peer for channel {}" , log_bytes!( self . channel_id) ) ;
45244524 return Ok ( ( Some ( funding_locked) , timed_out_htlcs, announcement_sigs) ) ;
@@ -4554,7 +4554,7 @@ impl<Signer: Sign> Channel<Signer> {
45544554 }
45554555
45564556 let announcement_sigs = if let Some ( ( genesis_block_hash, node_pk) ) = genesis_node_pk {
4557- self . get_announcement_sigs ( node_pk, genesis_block_hash, height) . ok ( )
4557+ self . get_announcement_sigs ( node_pk, genesis_block_hash, height, logger )
45584558 } else { None } ;
45594559 Ok ( ( None , timed_out_htlcs, announcement_sigs) )
45604560 }
@@ -4725,8 +4725,8 @@ impl<Signer: Sign> Channel<Signer> {
47254725
47264726 /// Gets an UnsignedChannelAnnouncement for this channel. The channel must be publicly
47274727 /// announceable and available for use (have exchanged FundingLocked messages in both
4728- /// directions). Should be used for both loose and in response to an AnnouncementSignatures
4729- /// message from the remote peer.
4728+ /// directions). Should be used for both broadcasted announcements and in response to an
4729+ /// AnnouncementSignatures message from the remote peer.
47304730 ///
47314731 /// Will only fail if we're not in a state where channel_announcement may be sent (including
47324732 /// closing).
@@ -4759,29 +4759,43 @@ impl<Signer: Sign> Channel<Signer> {
47594759 Ok ( msg)
47604760 }
47614761
4762- fn get_announcement_sigs ( & mut self , node_pk : PublicKey , genesis_block_hash : BlockHash , best_block_height : u32 ) -> Result < msgs:: AnnouncementSignatures , ChannelError > {
4762+ fn get_announcement_sigs < L : Deref > ( & mut self , node_pk : PublicKey , genesis_block_hash : BlockHash , best_block_height : u32 , logger : & L )
4763+ -> Option < msgs:: AnnouncementSignatures > where L :: Target : Logger {
47634764 if self . funding_tx_confirmation_height == 0 || self . funding_tx_confirmation_height + 5 > best_block_height {
4764- return Err ( ChannelError :: Ignore ( "Funding not yet fully confirmed" . to_owned ( ) ) ) ;
4765+ return None ;
47654766 }
47664767
47674768 if !self . is_usable ( ) {
4768- return Err ( ChannelError :: Ignore ( "Channel not yet available for use" . to_owned ( ) ) ) ;
4769+ return None ;
47694770 }
47704771
47714772 if self . channel_state & ChannelState :: PeerDisconnected as u32 != 0 {
4772- return Err ( ChannelError :: Ignore ( "Peer currently disconnected" . to_owned ( ) ) ) ;
4773+ log_trace ! ( logger, "Cannot create an announcement_signatures as our peer is disconnected" ) ;
4774+ return None ;
47734775 }
47744776
47754777 if self . announcement_sigs_state != AnnouncementSigsState :: NotSent {
4776- return Err ( ChannelError :: Ignore ( "Announcement signatures already sent" . to_owned ( ) ) ) ;
4778+ return None ;
47774779 }
47784780
4779- let announcement = self . get_channel_announcement ( node_pk, genesis_block_hash) ?;
4780- let ( our_node_sig, our_bitcoin_sig) = self . holder_signer . sign_channel_announcement ( & announcement, & self . secp_ctx )
4781- . map_err ( |_| ChannelError :: Ignore ( "Signer rejected channel_announcement" . to_owned ( ) ) ) ?;
4781+ log_trace ! ( logger, "Creating an announcement_signatures message for channel {}" , log_bytes!( self . channel_id( ) ) ) ;
4782+ let announcement = match self . get_channel_announcement ( node_pk, genesis_block_hash) {
4783+ Ok ( a) => a,
4784+ Err ( _) => {
4785+ log_trace ! ( logger, "Cannot create an announcement_signatures as channel is not public." ) ;
4786+ return None ;
4787+ }
4788+ } ;
4789+ let ( our_node_sig, our_bitcoin_sig) = match self . holder_signer . sign_channel_announcement ( & announcement, & self . secp_ctx ) {
4790+ Err ( _) => {
4791+ log_error ! ( logger, "Signer rejected channel_announcement signing. Channel will not be announced!" ) ;
4792+ return None ;
4793+ } ,
4794+ Ok ( v) => v
4795+ } ;
47824796 self . announcement_sigs_state = AnnouncementSigsState :: MessageSent ;
47834797
4784- Ok ( msgs:: AnnouncementSignatures {
4798+ Some ( msgs:: AnnouncementSignatures {
47854799 channel_id : self . channel_id ( ) ,
47864800 short_channel_id : self . get_short_channel_id ( ) . unwrap ( ) ,
47874801 node_signature : our_node_sig,
0 commit comments