@@ -2142,7 +2142,7 @@ impl<Signer: Sign> Channel<Signer> {
2142
2142
2143
2143
log_info ! ( logger, "Received funding_locked from peer for channel {}" , log_bytes!( self . channel_id( ) ) ) ;
2144
2144
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 ) )
2146
2146
}
2147
2147
2148
2148
/// Returns transaction if there is pending funding transaction that is yet to broadcast
@@ -3416,7 +3416,7 @@ impl<Signer: Sign> Channel<Signer> {
3416
3416
} )
3417
3417
} else { None } ;
3418
3418
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 ) ;
3420
3420
3421
3421
let mut accepted_htlcs = Vec :: new ( ) ;
3422
3422
mem:: swap ( & mut accepted_htlcs, & mut self . monitor_pending_forwards ) ;
@@ -3609,7 +3609,7 @@ impl<Signer: Sign> Channel<Signer> {
3609
3609
} )
3610
3610
} else { None } ;
3611
3611
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 ) ;
3613
3613
3614
3614
if self . channel_state & ( ChannelState :: FundingSent as u32 ) == ChannelState :: FundingSent as u32 {
3615
3615
// 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> {
4464
4464
// may have already happened for this block).
4465
4465
if let Some ( funding_locked) = self . check_get_funding_locked ( height) {
4466
4466
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 ) ;
4468
4468
return Ok ( ( Some ( funding_locked) , announcement_sigs) ) ;
4469
4469
}
4470
4470
}
@@ -4518,7 +4518,7 @@ impl<Signer: Sign> Channel<Signer> {
4518
4518
4519
4519
if let Some ( funding_locked) = self . check_get_funding_locked ( height) {
4520
4520
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 )
4522
4522
} else { None } ;
4523
4523
log_info ! ( logger, "Sending a funding_locked to our peer for channel {}" , log_bytes!( self . channel_id) ) ;
4524
4524
return Ok ( ( Some ( funding_locked) , timed_out_htlcs, announcement_sigs) ) ;
@@ -4554,7 +4554,7 @@ impl<Signer: Sign> Channel<Signer> {
4554
4554
}
4555
4555
4556
4556
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 )
4558
4558
} else { None } ;
4559
4559
Ok ( ( None , timed_out_htlcs, announcement_sigs) )
4560
4560
}
@@ -4725,8 +4725,8 @@ impl<Signer: Sign> Channel<Signer> {
4725
4725
4726
4726
/// Gets an UnsignedChannelAnnouncement for this channel. The channel must be publicly
4727
4727
/// 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.
4730
4730
///
4731
4731
/// Will only fail if we're not in a state where channel_announcement may be sent (including
4732
4732
/// closing).
@@ -4759,29 +4759,43 @@ impl<Signer: Sign> Channel<Signer> {
4759
4759
Ok ( msg)
4760
4760
}
4761
4761
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 {
4763
4764
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 ;
4765
4766
}
4766
4767
4767
4768
if !self . is_usable ( ) {
4768
- return Err ( ChannelError :: Ignore ( "Channel not yet available for use" . to_owned ( ) ) ) ;
4769
+ return None ;
4769
4770
}
4770
4771
4771
4772
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 ;
4773
4775
}
4774
4776
4775
4777
if self . announcement_sigs_state != AnnouncementSigsState :: NotSent {
4776
- return Err ( ChannelError :: Ignore ( "Announcement signatures already sent" . to_owned ( ) ) ) ;
4778
+ return None ;
4777
4779
}
4778
4780
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
+ } ;
4782
4796
self . announcement_sigs_state = AnnouncementSigsState :: MessageSent ;
4783
4797
4784
- Ok ( msgs:: AnnouncementSignatures {
4798
+ Some ( msgs:: AnnouncementSignatures {
4785
4799
channel_id : self . channel_id ( ) ,
4786
4800
short_channel_id : self . get_short_channel_id ( ) . unwrap ( ) ,
4787
4801
node_signature : our_node_sig,
0 commit comments