Skip to content

Commit b46f464

Browse files
committed
Request announcement_signatures retransmission
During channel reestablishment, announcement_signatures may need to be retransmitted. The splicing spec allows doing so without retransmitting splice_locked first, which could normally trigger retransmitting announcement_signatures. Instead, my_current_funding_locked lets the sender request retransmitting it.
1 parent bc581d6 commit b46f464

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

lightning/src/ln/channel.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10584,7 +10584,24 @@ where
1058410584
.or_else(|| {
1058510585
self.is_our_channel_ready().then(|| self.funding.get_funding_txid()).flatten()
1058610586
})
10587-
.map(|txid| msgs::FundingLocked { txid, retransmit_flags: 0 })
10587+
.map(|txid| {
10588+
let mut funding_locked = msgs::FundingLocked { txid, retransmit_flags: 0 };
10589+
10590+
// - if `my_current_funding_locked` is included:
10591+
// - if `announce_channel` is set for this channel:
10592+
// - if it has not received `announcement_signatures` for that transaction:
10593+
// - MUST set the `announcement_signatures` bit to `1` in `retransmit_flags`.
10594+
// - otherwise:
10595+
// - MUST set the `announcement_signatures` bit to `0` in `retransmit_flags`.
10596+
if self.funding.get_funding_txid() == Some(txid)
10597+
&& self.context.config.announce_for_forwarding
10598+
&& self.context.announcement_sigs.is_none()
10599+
{
10600+
funding_locked.retransmit(msgs::FundingLockedFlags::AnnouncementSignatures);
10601+
}
10602+
10603+
funding_locked
10604+
})
1058810605
}
1058910606

1059010607
#[cfg(not(splicing))]

lightning/src/ln/msgs.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -977,12 +977,24 @@ pub struct FundingLocked {
977977

978978
/// A bitfield indicating which messages should be retransmitted by the receiving node.
979979
///
980-
/// | Bit Position | Name |
981-
/// | ------------- | --------------------------|
982-
/// | 0 | `announcement_signatures` |
980+
/// See [`FundingLockedFlags`] for details.
983981
pub retransmit_flags: u8,
984982
}
985983

984+
impl FundingLocked {
985+
/// Sets the bit in `retransmit_flags` for retransmitting the message corresponding to `flag`.
986+
pub fn retransmit(&mut self, flag: FundingLockedFlags) {
987+
self.retransmit_flags |= 1 << flag as u8;
988+
}
989+
}
990+
991+
/// Bit positions used in [`FundingLocked::retransmit_flags`] for requesting message retransmission.
992+
#[repr(u8)]
993+
pub enum FundingLockedFlags {
994+
/// Retransmit `announcement_signatures`.
995+
AnnouncementSignatures = 0,
996+
}
997+
986998
/// An [`announcement_signatures`] message to be sent to or received from a peer.
987999
///
9881000
/// [`announcement_signatures`]: https://github.com/lightning/bolts/blob/master/07-routing-gossip.md#the-announcement_signatures-message

0 commit comments

Comments
 (0)