Some(msgs::FundingLocked {
channel_id: self.channel_id(),
next_per_commitment_point,
+ short_channel_id_alias: None,
})
} else { None };
funding_locked: Some(msgs::FundingLocked {
channel_id: self.channel_id(),
next_per_commitment_point,
+ short_channel_id_alias: None,
}),
raa: None, commitment_update: None, mon_update: None,
order: RAACommitmentOrder::CommitmentFirst,
Some(msgs::FundingLocked {
channel_id: self.channel_id(),
next_per_commitment_point,
+ short_channel_id_alias: None,
})
} else { None };
return Some(msgs::FundingLocked {
channel_id: self.channel_id,
next_per_commitment_point,
+ short_channel_id_alias: None,
});
}
} else {
use util::events::MessageSendEventsProvider;
use util::logger;
-use util::ser::{Readable, Writeable, Writer, FixedLengthReader, HighZeroBytesDroppedVarInt};
+use util::ser::{U48, Readable, Writeable, Writer, FixedLengthReader, HighZeroBytesDroppedVarInt};
use ln::{PaymentPreimage, PaymentHash, PaymentSecret};
pub channel_id: [u8; 32],
/// The per-commitment point of the second commitment transaction
pub next_per_commitment_point: PublicKey,
+ /// If set, provides a short_channel_id alias for this channel. The sender will accept payments
+ /// which are to be forwarded over this channel ID alias and forward them to us.
+ pub short_channel_id_alias: Option<U48>,
}
/// A shutdown message to be sent or received from a peer
impl_writeable_msg!(FundingLocked, {
channel_id,
next_per_commitment_point,
-}, {});
+}, {
+ (1, short_channel_id_alias, option),
+});
impl Writeable for Init {
fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
let funding_locked = msgs::FundingLocked {
channel_id: [2; 32],
next_per_commitment_point: pubkey_1,
+ short_channel_id_alias: None,
};
let encoded_value = funding_locked.encode();
let target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f").unwrap();
}
}
-pub(crate) struct U48(pub u64);
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+/// A 48-bit unsigned integer. This is used in lightning largely to represent the "short channel
+/// ID" values.
+pub struct U48(pub(crate) u64);
+impl U48 {
+ /// Construts a new U48 from a u64, checking that it is in range or returning `Err(())`
+ #[inline]
+ pub fn from_u64(src: u64) -> Result<Self, ()> {
+ if src < (1 << 48) - 1 { Ok(Self(src)) } else { Err(()) }
+ }
+ /// Gets the current value as a u64
+ pub fn as_u64(&self) -> u64 { self.0 }
+}
impl Writeable for U48 {
#[inline]
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {