Skip to content

Commit ed1163a

Browse files
committed
Make Channel::get_announcement_sigs return an Option and log
Channel::get_announcement_sigs is only used in contexts where we have a logger already, and the error returned is always ignored, so instead of returning an ignored error message we return an `Option` directly and log when it won't be too verbose.
1 parent ee7cfa5 commit ed1163a

File tree

1 file changed

+31
-17
lines changed

1 file changed

+31
-17
lines changed

lightning/src/ln/channel.rs

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)