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.
}
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,