From 4a1a645819fa18609ccaf9f6a9c4ddfd55519dd5 Mon Sep 17 00:00:00 2001 From: Elias Rohrer Date: Fri, 8 Mar 2024 14:32:39 +0100 Subject: [PATCH] Generate random `PaymentId` for outbound offers Previously, we'd deterministically derive the `offer_hash` as a `PaymentId` for outbound BOLT 12 payments. However, as offers may be paid multiple times, this could result in collisions in our `outbound_payments` store. Here, we therefore use random `PaymentId`s to avoid collisions, even if offers are paid multiple times. --- src/cli.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index a70d772..b9fbf77 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -175,8 +175,8 @@ pub(crate) fn poll_for_user_input( } if let Ok(offer) = Offer::from_str(invoice_str.unwrap()) { - let offer_hash = Sha256::hash(invoice_str.unwrap().as_bytes()); - let payment_id = PaymentId(*offer_hash.as_ref()); + let random_bytes = keys_manager.get_secure_random_bytes(); + let payment_id = PaymentId(random_bytes); let amt_msat = match (offer.amount(), user_provided_amt) { (Some(offer::Amount::Bitcoin { amount_msats }), _) => *amount_msats, -- 2.30.2