@@ -969,6 +969,13 @@ pub struct ChannelDetails {
969
969
/// [`inbound_scid_alias`]: Self::inbound_scid_alias
970
970
/// [`get_inbound_payment_scid`]: Self::get_inbound_payment_scid
971
971
pub short_channel_id : Option < u64 > ,
972
+ /// An optional [`short_channel_id`] alias for this channel, randomly generated by us and
973
+ /// usable in place of [`short_channel_id`] to reference the channel in outbound routes even if
974
+ /// the channel has not yet been confirmed (as long as [`confirmations_required`] is
975
+ /// `Some(0)`).
976
+ ///
977
+ /// This will be `None` as long as the channel is not available for routing outbound payments.
978
+ pub outbound_scid_alias : Option < u64 > ,
972
979
/// An optional [`short_channel_id`] alias for this channel, randomly generated by our
973
980
/// counterparty and usable in place of [`short_channel_id`] in invoice route hints. Our
974
981
/// counterparty will recognize the alias provided here in place of the [`short_channel_id`]
@@ -1086,6 +1093,16 @@ impl ChannelDetails {
1086
1093
pub fn get_inbound_payment_scid ( & self ) -> Option < u64 > {
1087
1094
self . inbound_scid_alias . or ( self . short_channel_id )
1088
1095
}
1096
+
1097
+ /// Gets the current SCID which should be used to identify this channel for outbound payments.
1098
+ /// This should be used in [`Route`]s to describe the first hop or in other contexts where
1099
+ /// we're sending or forwarding a payment outbound over this channel.
1100
+ ///
1101
+ /// This is either the [`ChannelDetails::short_channel_id`], if set, or the
1102
+ /// [`ChannelDetails::outbound_scid_alias`]. See those for more information.
1103
+ pub fn get_outbound_payment_scid ( & self ) -> Option < u64 > {
1104
+ self . short_channel_id . or ( self . outbound_scid_alias )
1105
+ }
1089
1106
}
1090
1107
1091
1108
/// If a payment fails to send, it can be in one of several states. This enum is returned as the
@@ -1712,6 +1729,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
1712
1729
// `have_received_message` indicates that type negotiation has completed.
1713
1730
channel_type : if channel. have_received_message ( ) { Some ( channel. get_channel_type ( ) . clone ( ) ) } else { None } ,
1714
1731
short_channel_id : channel. get_short_channel_id ( ) ,
1732
+ outbound_scid_alias : if channel. is_live ( ) { Some ( channel. outbound_scid_alias ( ) ) } else { None } ,
1715
1733
inbound_scid_alias : channel. latest_inbound_scid_alias ( ) ,
1716
1734
channel_value_satoshis : channel. get_value_satoshis ( ) ,
1717
1735
unspendable_punishment_reserve : to_self_reserve_satoshis,
@@ -5982,6 +6000,7 @@ impl_writeable_tlv_based!(ChannelDetails, {
5982
6000
( 2 , channel_id, required) ,
5983
6001
( 3 , channel_type, option) ,
5984
6002
( 4 , counterparty, required) ,
6003
+ ( 5 , outbound_scid_alias, option) ,
5985
6004
( 6 , funding_txo, option) ,
5986
6005
( 8 , short_channel_id, option) ,
5987
6006
( 10 , channel_value_satoshis, required) ,
0 commit comments