From: Jeffrey Czyz Date: Fri, 16 Dec 2022 20:06:33 +0000 (-0600) Subject: Define blinded hop features for use in BOLT 12 X-Git-Tag: v0.0.114-beta~72^2 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=b50fc4e32c8b19566fe699cb7cccfe3887928fa3;p=rust-lightning Define blinded hop features for use in BOLT 12 BOLT 12 invoices may contain blinded_payinfo for each hop in a blinded path. Each blinded_payinfo contains features, whose length must be encoded since there may be multiple hops. Note these features are also needed in the BOLT 4 encrypted_data_tlv stream. But since they are a single TLV record, the length must *not* be encoded there. --- diff --git a/lightning/src/ln/features.rs b/lightning/src/ln/features.rs index 4cfe5d8d..a3c1b7f6 100644 --- a/lightning/src/ln/features.rs +++ b/lightning/src/ln/features.rs @@ -167,6 +167,7 @@ mod sealed { // Byte 2 BasicMPP, ]); + define_context!(BlindedHopContext, []); // This isn't a "real" feature context, and is only used in the channel_type field in an // `OpenChannel` message. define_context!(ChannelTypeContext, [ @@ -377,7 +378,7 @@ mod sealed { #[cfg(test)] define_feature!(123456789, UnknownFeature, - [NodeContext, ChannelContext, InvoiceContext, OfferContext, InvoiceRequestContext, Bolt12InvoiceContext], + [NodeContext, ChannelContext, InvoiceContext, OfferContext, InvoiceRequestContext, Bolt12InvoiceContext, BlindedHopContext], "Feature flags for an unknown feature used in testing.", set_unknown_feature_optional, set_unknown_feature_required, supports_unknown_test_feature, requires_unknown_test_feature); } @@ -442,6 +443,8 @@ pub type OfferFeatures = Features; pub type InvoiceRequestFeatures = Features; /// Features used within an `invoice`. pub type Bolt12InvoiceFeatures = Features; +/// Features used within BOLT 4 encrypted_data_tlv and BOLT 12 blinded_payinfo +pub type BlindedHopFeatures = Features; /// Features used within the channel_type field in an OpenChannel message. /// @@ -729,6 +732,7 @@ impl_feature_len_prefixed_write!(InitFeatures); impl_feature_len_prefixed_write!(ChannelFeatures); impl_feature_len_prefixed_write!(NodeFeatures); impl_feature_len_prefixed_write!(InvoiceFeatures); +impl_feature_len_prefixed_write!(BlindedHopFeatures); // Some features only appear inside of TLVs, so they don't have a length prefix when serialized. macro_rules! impl_feature_tlv_write {