@@ -1030,19 +1030,22 @@ impl ChannelManager {
1030
1030
}
1031
1031
}
1032
1032
1033
- fn get_announcement_sigs ( & self , chan : & Channel ) -> Result < Option < msgs:: AnnouncementSignatures > , HandleError > {
1034
- if !chan. is_usable ( ) || !chan . should_announce ( ) { return Ok ( None ) }
1033
+ fn get_announcement_sigs ( & self , chan : & Channel ) -> Option < msgs:: AnnouncementSignatures > {
1034
+ if !chan. should_announce ( ) { return None }
1035
1035
1036
- let ( announcement, our_bitcoin_sig) = chan. get_channel_announcement ( self . get_our_node_id ( ) , self . genesis_hash . clone ( ) ) ?;
1036
+ let ( announcement, our_bitcoin_sig) = match chan. get_channel_announcement ( self . get_our_node_id ( ) , self . genesis_hash . clone ( ) ) {
1037
+ Ok ( res) => res,
1038
+ Err ( _) => return None , // Only in case of state precondition violations eg channel is closing
1039
+ } ;
1037
1040
let msghash = Message :: from_slice ( & Sha256dHash :: from_data ( & announcement. encode ( ) [ ..] ) [ ..] ) . unwrap ( ) ;
1038
1041
let our_node_sig = self . secp_ctx . sign ( & msghash, & self . our_network_key ) ;
1039
1042
1040
- Ok ( Some ( msgs:: AnnouncementSignatures {
1043
+ Some ( msgs:: AnnouncementSignatures {
1041
1044
channel_id : chan. channel_id ( ) ,
1042
1045
short_channel_id : chan. get_short_channel_id ( ) . unwrap ( ) ,
1043
1046
node_signature : our_node_sig,
1044
1047
bitcoin_signature : our_bitcoin_sig,
1045
- } ) )
1048
+ } )
1046
1049
}
1047
1050
1048
1051
/// Processes HTLCs which are pending waiting on random forward delay.
@@ -1379,14 +1382,7 @@ impl ChainListener for ChannelManager {
1379
1382
channel_state. by_id . retain ( |_, channel| {
1380
1383
let chan_res = channel. block_connected ( header, height, txn_matched, indexes_of_txn_matched) ;
1381
1384
if let Ok ( Some ( funding_locked) ) = chan_res {
1382
- let announcement_sigs = match self . get_announcement_sigs ( channel) {
1383
- Ok ( res) => res,
1384
- Err ( e) => {
1385
- log_error ! ( self , "Got error handling message: {}!" , e. err) ;
1386
- //TODO: push e on events and blow up the channel (it has bad keys)
1387
- return true ;
1388
- }
1389
- } ;
1385
+ let announcement_sigs = self . get_announcement_sigs ( channel) ;
1390
1386
new_events. push ( events:: Event :: SendFundingLocked {
1391
1387
node_id : channel. get_their_node_id ( ) ,
1392
1388
msg : funding_locked,
@@ -1626,7 +1622,7 @@ impl ChannelMessageHandler for ChannelManager {
1626
1622
return Err ( HandleError { err : "Got a message for a channel from the wrong node!" , action : None } )
1627
1623
}
1628
1624
chan. funding_locked ( & msg) ?;
1629
- return Ok ( self . get_announcement_sigs ( chan) ? ) ;
1625
+ return Ok ( self . get_announcement_sigs ( chan) ) ;
1630
1626
} ,
1631
1627
None => return Err ( HandleError { err : "Failed to find corresponding channel" , action : None } )
1632
1628
} ;
0 commit comments