Skip to content

Commit 412af63

Browse files
Support (de)serializing Path::blinded_tails in Routes
1 parent 158f4c6 commit 412af63

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

lightning/src/routing/router.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,14 +346,23 @@ impl Writeable for Route {
346346
fn write<W: crate::util::ser::Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
347347
write_ver_prefix!(writer, SERIALIZATION_VERSION, MIN_SERIALIZATION_VERSION);
348348
(self.paths.len() as u64).write(writer)?;
349+
let mut blinded_tails = None;
349350
for path in self.paths.iter() {
350351
(path.hops.len() as u8).write(writer)?;
351352
for hop in path.hops.iter() {
352353
hop.write(writer)?;
354+
if let Some(blinded_tail) = &path.blinded_tail {
355+
if blinded_tails.is_none() { blinded_tails = Some(Vec::new()); }
356+
blinded_tails.as_mut().map(|tails| tails.push(blinded_tail));
357+
}
353358
}
354359
}
360+
if blinded_tails.is_some() && blinded_tails.as_ref().unwrap().len() != self.paths.len() {
361+
return Err(io::Error::new(io::ErrorKind::Other, "Missing blinded tail for path (if blinded tails are included, there must be 1 set per path)"))
362+
}
355363
write_tlv_fields!(writer, {
356364
(1, self.payment_params, option),
365+
(2, blinded_tails, option),
357366
});
358367
Ok(())
359368
}
@@ -377,10 +386,17 @@ impl Readable for Route {
377386
cmp::min(min_final_cltv_expiry_delta, hops.last().unwrap().cltv_expiry_delta);
378387
paths.push(Path { hops, blinded_tail: None });
379388
}
380-
let mut payment_params = None;
381-
read_tlv_fields!(reader, {
389+
_init_and_read_tlv_fields!(reader, {
382390
(1, payment_params, (option: ReadableArgs, min_final_cltv_expiry_delta)),
391+
(2, blinded_tails, vec_type),
383392
});
393+
let blinded_tails = blinded_tails.unwrap_or(Vec::new());
394+
if blinded_tails.len() != 0 {
395+
if blinded_tails.len() != paths.len() { return Err(DecodeError::InvalidValue) }
396+
for (mut path, blinded_tail) in paths.iter_mut().zip(blinded_tails.into_iter()) {
397+
path.blinded_tail = Some(blinded_tail);
398+
}
399+
}
384400
Ok(Route { paths, payment_params })
385401
}
386402
}

lightning/src/util/ser.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,8 @@ impl Readable for Vec<u8> {
814814
impl_for_vec!(ecdsa::Signature);
815815
impl_for_vec!(crate::ln::channelmanager::MonitorUpdateCompletionAction);
816816
impl_for_vec!((A, B), A, B);
817+
impl_writeable_for_vec!(&crate::routing::router::BlindedTail);
818+
impl_readable_for_vec!(crate::routing::router::BlindedTail);
817819

818820
impl Writeable for Script {
819821
fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {

0 commit comments

Comments
 (0)