From: Matt Corallo Date: Fri, 7 Jul 2023 18:44:24 +0000 (+0000) Subject: Convert some `vec_type` TLVs to `required_vec` X-Git-Tag: v0.0.116-rc1~7^2~7 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=a04bf844d4e4bba836a2abb63197d8ebfd4c4d39;p=rust-lightning Convert some `vec_type` TLVs to `required_vec` This converts some required TLVs to `required_vec` which are, in fact, required (and have been written forever). * `HTLCFailReason` hasn't changed since many structs were converted to TLVs in 66784e32fe454e9a5b2080b85fc4d8816ac5e436. * `NodeInfo::channels` has been written since `NetworkGraph` structs were converted to TLVs in 321b19c4d96a49b39b5583d0f12fea. * Several test-only TLV writes were converted. --- diff --git a/lightning/src/ln/msgs.rs b/lightning/src/ln/msgs.rs index 672c6ae6..a514f492 100644 --- a/lightning/src/ln/msgs.rs +++ b/lightning/src/ln/msgs.rs @@ -3760,7 +3760,7 @@ mod tests { let test_bytes = vec![42u8; 1000]; if let OnionHopDataFormat::NonFinalNode { short_channel_id } = payload.format { _encode_varint_length_prefixed_tlv!(&mut encoded_payload, { - (1, test_bytes, vec_type), + (1, test_bytes, required_vec), (2, HighZeroBytesDroppedBigSize(payload.amt_to_forward), required), (4, HighZeroBytesDroppedBigSize(payload.outgoing_cltv_value), required), (6, short_channel_id, required) diff --git a/lightning/src/ln/onion_utils.rs b/lightning/src/ln/onion_utils.rs index 3b62c856..52eb7bcb 100644 --- a/lightning/src/ln/onion_utils.rs +++ b/lightning/src/ln/onion_utils.rs @@ -645,7 +645,7 @@ impl_writeable_tlv_based_enum!(HTLCFailReasonRepr, }, (1, Reason) => { (0, failure_code, required), - (2, data, vec_type), + (2, data, required_vec), }, ;); diff --git a/lightning/src/onion_message/packet.rs b/lightning/src/onion_message/packet.rs index 1c3595c3..8a5628f1 100644 --- a/lightning/src/onion_message/packet.rs +++ b/lightning/src/onion_message/packet.rs @@ -169,7 +169,7 @@ impl Writeable for (Payload, [u8; 32]) { match &self.0 { Payload::Forward(ForwardControlTlvs::Blinded(encrypted_bytes)) => { _encode_varint_length_prefixed_tlv!(w, { - (4, *encrypted_bytes, vec_type) + (4, *encrypted_bytes, required_vec) }) }, Payload::Receive { @@ -177,7 +177,7 @@ impl Writeable for (Payload, [u8; 32]) { } => { _encode_varint_length_prefixed_tlv!(w, { (2, reply_path, option), - (4, *encrypted_bytes, vec_type), + (4, *encrypted_bytes, required_vec), (message.tlv_type(), message, required) }) }, diff --git a/lightning/src/routing/gossip.rs b/lightning/src/routing/gossip.rs index 40969b18..644772b8 100644 --- a/lightning/src/routing/gossip.rs +++ b/lightning/src/routing/gossip.rs @@ -1120,26 +1120,26 @@ impl Writeable for NodeAnnouncementInfo { (4, self.rgb, required), (6, self.alias, required), (8, self.announcement_message, option), - (10, empty_addresses, vec_type), // Versions prior to 0.0.115 require this field + (10, empty_addresses, required_vec), // Versions prior to 0.0.115 require this field }); Ok(()) } } impl Readable for NodeAnnouncementInfo { - fn read(reader: &mut R) -> Result { + fn read(reader: &mut R) -> Result { _init_and_read_tlv_fields!(reader, { (0, features, required), (2, last_update, required), (4, rgb, required), (6, alias, required), (8, announcement_message, option), - (10, _addresses, vec_type), // deprecated, not used anymore + (10, _addresses, optional_vec), // deprecated, not used anymore }); let _: Option> = _addresses; Ok(Self { features: features.0.unwrap(), last_update: last_update.0.unwrap(), rgb: rgb.0.unwrap(), alias: alias.0.unwrap(), announcement_message }) - } + } } /// A user-defined name for a node, which may be used when displaying the node in a graph. @@ -1205,7 +1205,7 @@ impl Writeable for NodeInfo { write_tlv_fields!(writer, { // Note that older versions of LDK wrote the lowest inbound fees here at type 0 (2, self.announcement_info, option), - (4, self.channels, vec_type), + (4, self.channels, required_vec), }); Ok(()) } @@ -1236,19 +1236,17 @@ impl Readable for NodeInfo { // with zero inbound fees, causing that heuristic to provide little gain. Worse, because it // requires additional complexity and lookups during routing, it ends up being a // performance loss. Thus, we simply ignore the old field here and no longer track it. - let mut _lowest_inbound_channel_fees: Option = None; - let mut announcement_info_wrap: Option = None; - _init_tlv_field_var!(channels, vec_type); - - read_tlv_fields!(reader, { + _init_and_read_tlv_fields!(reader, { (0, _lowest_inbound_channel_fees, option), (2, announcement_info_wrap, upgradable_option), - (4, channels, vec_type), + (4, channels, required_vec), }); + let _: Option = _lowest_inbound_channel_fees; + let announcement_info_wrap: Option = announcement_info_wrap; Ok(NodeInfo { announcement_info: announcement_info_wrap.map(|w| w.0), - channels: _init_tlv_based_struct_field!(channels, vec_type), + channels, }) } } diff --git a/lightning/src/util/chacha20poly1305rfc.rs b/lightning/src/util/chacha20poly1305rfc.rs index 05296837..a5bec2c8 100644 --- a/lightning/src/util/chacha20poly1305rfc.rs +++ b/lightning/src/util/chacha20poly1305rfc.rs @@ -341,9 +341,9 @@ mod tests { field3: Vec, } impl_writeable_tlv_based!(TestWriteable, { - (1, field1, vec_type), - (2, field2, vec_type), - (3, field3, vec_type), + (1, field1, required_vec), + (2, field2, required_vec), + (3, field3, required_vec), }); #[test]