Skip to content

Commit 39953b5

Browse files
Support (de)serializing Path::blinded_tails in Routes
1 parent 4a0112a commit 39953b5

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
@@ -357,14 +357,23 @@ impl Writeable for Route {
357357
fn write<W: crate::util::ser::Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
358358
write_ver_prefix!(writer, SERIALIZATION_VERSION, MIN_SERIALIZATION_VERSION);
359359
(self.paths.len() as u64).write(writer)?;
360+
let mut blinded_tails = None;
360361
for path in self.paths.iter() {
361362
(path.hops.len() as u8).write(writer)?;
362363
for hop in path.hops.iter() {
363364
hop.write(writer)?;
365+
if let Some(blinded_tail) = &path.blinded_tail {
366+
if blinded_tails.is_none() { blinded_tails = Some(Vec::new()); }
367+
blinded_tails.as_mut().map(|tails| tails.push(blinded_tail));
368+
}
364369
}
365370
}
371+
if blinded_tails.is_some() && blinded_tails.as_ref().unwrap().len() != self.paths.len() {
372+
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)"))
373+
}
366374
write_tlv_fields!(writer, {
367375
(1, self.payment_params, option),
376+
(2, blinded_tails, option),
368377
});
369378
Ok(())
370379
}
@@ -388,10 +397,17 @@ impl Readable for Route {
388397
cmp::min(min_final_cltv_expiry_delta, hops.last().unwrap().cltv_expiry_delta);
389398
paths.push(Path { hops, blinded_tail: None });
390399
}
391-
let mut payment_params = None;
392-
read_tlv_fields!(reader, {
400+
_init_and_read_tlv_fields!(reader, {
393401
(1, payment_params, (option: ReadableArgs, min_final_cltv_expiry_delta)),
402+
(2, blinded_tails, vec_type),
394403
});
404+
let blinded_tails = blinded_tails.unwrap_or(Vec::new());
405+
if blinded_tails.len() != 0 {
406+
if blinded_tails.len() != paths.len() { return Err(DecodeError::InvalidValue) }
407+
for (mut path, blinded_tail) in paths.iter_mut().zip(blinded_tails.into_iter()) {
408+
path.blinded_tail = Some(blinded_tail);
409+
}
410+
}
395411
Ok(Route { paths, payment_params })
396412
}
397413
}

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)