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 66784e32fe.
* `NodeInfo::channels` has been written since `NetworkGraph`
  structs were converted to TLVs in 321b19c4d9.
* Several test-only TLV writes were converted.
This commit is contained in:
Matt Corallo 2023-07-07 18:44:24 +00:00
parent 32846d33db
commit a04bf844d4
5 changed files with 17 additions and 19 deletions

View file

@ -3760,7 +3760,7 @@ mod tests {
let test_bytes = vec![42u8; 1000]; let test_bytes = vec![42u8; 1000];
if let OnionHopDataFormat::NonFinalNode { short_channel_id } = payload.format { if let OnionHopDataFormat::NonFinalNode { short_channel_id } = payload.format {
_encode_varint_length_prefixed_tlv!(&mut encoded_payload, { _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), (2, HighZeroBytesDroppedBigSize(payload.amt_to_forward), required),
(4, HighZeroBytesDroppedBigSize(payload.outgoing_cltv_value), required), (4, HighZeroBytesDroppedBigSize(payload.outgoing_cltv_value), required),
(6, short_channel_id, required) (6, short_channel_id, required)

View file

@ -645,7 +645,7 @@ impl_writeable_tlv_based_enum!(HTLCFailReasonRepr,
}, },
(1, Reason) => { (1, Reason) => {
(0, failure_code, required), (0, failure_code, required),
(2, data, vec_type), (2, data, required_vec),
}, },
;); ;);

View file

@ -169,7 +169,7 @@ impl<T: CustomOnionMessageContents> Writeable for (Payload<T>, [u8; 32]) {
match &self.0 { match &self.0 {
Payload::Forward(ForwardControlTlvs::Blinded(encrypted_bytes)) => { Payload::Forward(ForwardControlTlvs::Blinded(encrypted_bytes)) => {
_encode_varint_length_prefixed_tlv!(w, { _encode_varint_length_prefixed_tlv!(w, {
(4, *encrypted_bytes, vec_type) (4, *encrypted_bytes, required_vec)
}) })
}, },
Payload::Receive { Payload::Receive {
@ -177,7 +177,7 @@ impl<T: CustomOnionMessageContents> Writeable for (Payload<T>, [u8; 32]) {
} => { } => {
_encode_varint_length_prefixed_tlv!(w, { _encode_varint_length_prefixed_tlv!(w, {
(2, reply_path, option), (2, reply_path, option),
(4, *encrypted_bytes, vec_type), (4, *encrypted_bytes, required_vec),
(message.tlv_type(), message, required) (message.tlv_type(), message, required)
}) })
}, },

View file

@ -1120,26 +1120,26 @@ impl Writeable for NodeAnnouncementInfo {
(4, self.rgb, required), (4, self.rgb, required),
(6, self.alias, required), (6, self.alias, required),
(8, self.announcement_message, option), (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(()) Ok(())
} }
} }
impl Readable for NodeAnnouncementInfo { impl Readable for NodeAnnouncementInfo {
fn read<R: io::Read>(reader: &mut R) -> Result<Self, DecodeError> { fn read<R: io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
_init_and_read_tlv_fields!(reader, { _init_and_read_tlv_fields!(reader, {
(0, features, required), (0, features, required),
(2, last_update, required), (2, last_update, required),
(4, rgb, required), (4, rgb, required),
(6, alias, required), (6, alias, required),
(8, announcement_message, option), (8, announcement_message, option),
(10, _addresses, vec_type), // deprecated, not used anymore (10, _addresses, optional_vec), // deprecated, not used anymore
}); });
let _: Option<Vec<NetAddress>> = _addresses; let _: Option<Vec<NetAddress>> = _addresses;
Ok(Self { features: features.0.unwrap(), last_update: last_update.0.unwrap(), rgb: rgb.0.unwrap(), Ok(Self { features: features.0.unwrap(), last_update: last_update.0.unwrap(), rgb: rgb.0.unwrap(),
alias: alias.0.unwrap(), announcement_message }) alias: alias.0.unwrap(), announcement_message })
} }
} }
/// A user-defined name for a node, which may be used when displaying the node in a graph. /// 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, { write_tlv_fields!(writer, {
// Note that older versions of LDK wrote the lowest inbound fees here at type 0 // Note that older versions of LDK wrote the lowest inbound fees here at type 0
(2, self.announcement_info, option), (2, self.announcement_info, option),
(4, self.channels, vec_type), (4, self.channels, required_vec),
}); });
Ok(()) Ok(())
} }
@ -1236,19 +1236,17 @@ impl Readable for NodeInfo {
// with zero inbound fees, causing that heuristic to provide little gain. Worse, because it // 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 // 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. // performance loss. Thus, we simply ignore the old field here and no longer track it.
let mut _lowest_inbound_channel_fees: Option<RoutingFees> = None; _init_and_read_tlv_fields!(reader, {
let mut announcement_info_wrap: Option<NodeAnnouncementInfoDeserWrapper> = None;
_init_tlv_field_var!(channels, vec_type);
read_tlv_fields!(reader, {
(0, _lowest_inbound_channel_fees, option), (0, _lowest_inbound_channel_fees, option),
(2, announcement_info_wrap, upgradable_option), (2, announcement_info_wrap, upgradable_option),
(4, channels, vec_type), (4, channels, required_vec),
}); });
let _: Option<RoutingFees> = _lowest_inbound_channel_fees;
let announcement_info_wrap: Option<NodeAnnouncementInfoDeserWrapper> = announcement_info_wrap;
Ok(NodeInfo { Ok(NodeInfo {
announcement_info: announcement_info_wrap.map(|w| w.0), announcement_info: announcement_info_wrap.map(|w| w.0),
channels: _init_tlv_based_struct_field!(channels, vec_type), channels,
}) })
} }
} }

View file

@ -341,9 +341,9 @@ mod tests {
field3: Vec<u8>, field3: Vec<u8>,
} }
impl_writeable_tlv_based!(TestWriteable, { impl_writeable_tlv_based!(TestWriteable, {
(1, field1, vec_type), (1, field1, required_vec),
(2, field2, vec_type), (2, field2, required_vec),
(3, field3, vec_type), (3, field3, required_vec),
}); });
#[test] #[test]