Make `FinalOnionHopData` public
authorMatt Corallo <git@bluematt.me>
Fri, 15 Dec 2023 18:23:42 +0000 (18:23 +0000)
committerMatt Corallo <git@bluematt.me>
Fri, 15 Dec 2023 22:31:51 +0000 (22:31 +0000)
In 4b5db8c3ce, `channelmanager::PendingHTLCRouting` was made
public, exposing a `FinalOnionHopData` field to the world. However,
`FinalOnionHopData` was left crate-private, making the enum
impossible to construct.

There isn't a strong reason for this (even though the
`FinalOnionHopData` API is somewhat confusing, being separated from
the rest of the onion structs), so we expose it here.

lightning/src/ln/msgs.rs

index 689058c7e4a14ea7e52f73c794d1127581181650..2e56e2fc2c0c95d2e3cb3380d1f8b50138404ead 100644 (file)
@@ -1668,23 +1668,31 @@ pub trait OnionMessageHandler: EventsProvider {
        fn provided_init_features(&self, their_node_id: &PublicKey) -> InitFeatures;
 }
 
+#[derive(Clone)]
+#[cfg_attr(test, derive(Debug, PartialEq))]
+/// Information communicated in the onion to the recipient for multi-part tracking and proof that
+/// the payment is associated with an invoice.
+pub struct FinalOnionHopData {
+       /// When sending a multi-part payment, this secret is used to identify a payment across HTLCs.
+       /// Because it is generated by the recipient and included in the invoice, it also provides
+       /// proof to the recipient that the payment was sent by someone with the generated invoice.
+       pub payment_secret: PaymentSecret,
+       /// The intended total amount that this payment is for.
+       ///
+       /// Message serialization may panic if this value is more than 21 million Bitcoin.
+       pub total_msat: u64,
+}
+
 mod fuzzy_internal_msgs {
        use bitcoin::secp256k1::PublicKey;
        use crate::blinded_path::payment::{PaymentConstraints, PaymentRelay};
        use crate::prelude::*;
        use crate::ln::{PaymentPreimage, PaymentSecret};
        use crate::ln::features::BlindedHopFeatures;
+       use super::FinalOnionHopData;
 
        // These types aren't intended to be pub, but are exposed for direct fuzzing (as we deserialize
        // them from untrusted input):
-       #[derive(Clone)]
-       #[cfg_attr(test, derive(Debug, PartialEq))]
-       pub struct FinalOnionHopData {
-               pub payment_secret: PaymentSecret,
-               /// The total value, in msat, of the payment as received by the ultimate recipient.
-               /// Message serialization may panic if this value is more than 21 million Bitcoin.
-               pub total_msat: u64,
-       }
 
        pub enum InboundOnionPayload {
                Forward {