Fix `Route` serialization round-trip 2024-02-fix-route-ser-117-bindings
authorMatt Corallo <git@bluematt.me>
Fri, 16 Feb 2024 19:26:22 +0000 (19:26 +0000)
committerMatt Corallo <git@bluematt.me>
Fri, 16 Feb 2024 19:53:28 +0000 (19:53 +0000)
When the `max_total_routing_fee_msat` parameter was added to
`RouteParameters`, the serialization used `map` to get the max fee,
accidentally writing an `Option<Option<u64>>`, but then read it as
an `Option<u64>`. Thus, any `Route`s with a `route_params` written
will fail to be read back.

Luckily, this is an incredibly rarely-used bit of code, so only one
user managed to hit it.

lightning/src/routing/router.rs

index dcd7b2e5b7e16a199081794a215ccdb388ea41e8..d52917f3e8ea26f110db1294c723a5c0c6f60c6a 100644 (file)
@@ -411,7 +411,7 @@ impl Writeable for Route {
                        (1, self.route_params.as_ref().map(|p| &p.payment_params), option),
                        (2, blinded_tails, optional_vec),
                        (3, self.route_params.as_ref().map(|p| p.final_value_msat), option),
-                       (5, self.route_params.as_ref().map(|p| p.max_total_routing_fee_msat), option),
+                       (5, self.route_params.as_ref().and_then(|p| p.max_total_routing_fee_msat), option),
                });
                Ok(())
        }