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];
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)

View file

@ -645,7 +645,7 @@ impl_writeable_tlv_based_enum!(HTLCFailReasonRepr,
},
(1, Reason) => {
(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 {
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<T: CustomOnionMessageContents> Writeable for (Payload<T>, [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)
})
},

View file

@ -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<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, {
(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<Vec<NetAddress>> = _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<RoutingFees> = None;
let mut announcement_info_wrap: Option<NodeAnnouncementInfoDeserWrapper> = 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<RoutingFees> = _lowest_inbound_channel_fees;
let announcement_info_wrap: Option<NodeAnnouncementInfoDeserWrapper> = announcement_info_wrap;
Ok(NodeInfo {
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>,
}
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]