Skip to content

Commit e162278

Browse files
Pass context into held_htlc_available message handling.
Useful for using the payment_id within to look up the corresponding outbound async payment so we know we can safely release the HTLCs to the now-onlinen recipient.
1 parent a3216ac commit e162278

File tree

6 files changed

+21
-10
lines changed

6 files changed

+21
-10
lines changed

fuzz/src/onion_message.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ use bitcoin::secp256k1::ecdsa::RecoverableSignature;
55
use bitcoin::secp256k1::schnorr;
66
use bitcoin::secp256k1::{self, PublicKey, Scalar, Secp256k1, SecretKey};
77

8-
use lightning::blinded_path::message::{BlindedMessagePath, MessageContext, OffersContext};
8+
use lightning::blinded_path::message::{
9+
AsyncPaymentsContext, BlindedMessagePath, MessageContext, OffersContext,
10+
};
911
use lightning::blinded_path::EmptyNodeIdLookUp;
1012
use lightning::ln::features::InitFeatures;
1113
use lightning::ln::msgs::{self, DecodeError, OnionMessageHandler};
@@ -129,7 +131,7 @@ impl AsyncPaymentsMessageHandler for TestAsyncPaymentsMessageHandler {
129131
responder.respond(),
130132
))
131133
}
132-
fn release_held_htlc(&self, _message: ReleaseHeldHtlc) {}
134+
fn release_held_htlc(&self, _message: ReleaseHeldHtlc, _context: AsyncPaymentsContext) {}
133135
}
134136

135137
#[derive(Debug)]

lightning/src/ln/channelmanager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use bitcoin::secp256k1::Secp256k1;
3333
use bitcoin::{secp256k1, Sequence};
3434

3535
use crate::events::FundingInfo;
36-
use crate::blinded_path::message::{MessageContext, OffersContext};
36+
use crate::blinded_path::message::{AsyncPaymentsContext, MessageContext, OffersContext};
3737
use crate::blinded_path::NodeIdLookUp;
3838
use crate::blinded_path::message::{BlindedMessagePath, MessageForwardNode};
3939
use crate::blinded_path::payment::{BlindedPaymentPath, Bolt12OfferContext, Bolt12RefundContext, PaymentConstraints, PaymentContext, ReceiveTlvs};
@@ -11094,7 +11094,7 @@ where
1109411094
None
1109511095
}
1109611096

11097-
fn release_held_htlc(&self, _message: ReleaseHeldHtlc) {}
11097+
fn release_held_htlc(&self, _message: ReleaseHeldHtlc, _context: AsyncPaymentsContext) {}
1109811098

1109911099
fn release_pending_messages(&self) -> Vec<(AsyncPaymentsMessage, MessageSendInstructions)> {
1110011100
Vec::new()

lightning/src/ln/peer_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
use bitcoin::constants::ChainHash;
1919
use bitcoin::secp256k1::{self, Secp256k1, SecretKey, PublicKey};
2020

21-
use crate::blinded_path::message::OffersContext;
21+
use crate::blinded_path::message::{AsyncPaymentsContext, OffersContext};
2222
use crate::sign::{NodeSigner, Recipient};
2323
use crate::events::{MessageSendEvent, MessageSendEventsProvider};
2424
use crate::ln::types::ChannelId;
@@ -152,7 +152,7 @@ impl AsyncPaymentsMessageHandler for IgnoringMessageHandler {
152152
) -> Option<(ReleaseHeldHtlc, ResponseInstruction)> {
153153
None
154154
}
155-
fn release_held_htlc(&self, _message: ReleaseHeldHtlc) {}
155+
fn release_held_htlc(&self, _message: ReleaseHeldHtlc, _context: AsyncPaymentsContext) {}
156156
}
157157
impl CustomOnionMessageHandler for IgnoringMessageHandler {
158158
type CustomMessage = Infallible;

lightning/src/onion_message/async_payments.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
//! Message handling for async payments.
1111
12+
use crate::blinded_path::message::AsyncPaymentsContext;
1213
use crate::io;
1314
use crate::ln::msgs::DecodeError;
1415
use crate::onion_message::messenger::{MessageSendInstructions, Responder, ResponseInstruction};
@@ -32,7 +33,7 @@ pub trait AsyncPaymentsMessageHandler {
3233

3334
/// Handle a [`ReleaseHeldHtlc`] message. If authentication of the message succeeds, an HTLC
3435
/// should be released to the corresponding payee.
35-
fn release_held_htlc(&self, message: ReleaseHeldHtlc);
36+
fn release_held_htlc(&self, message: ReleaseHeldHtlc, context: AsyncPaymentsContext);
3637

3738
/// Release any [`AsyncPaymentsMessage`]s that need to be sent.
3839
///

lightning/src/onion_message/functional_tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
//! Onion message testing and test utilities live here.
1111
1212
use crate::blinded_path::EmptyNodeIdLookUp;
13-
use crate::blinded_path::message::{BlindedMessagePath, MessageForwardNode, MessageContext, OffersContext};
13+
use crate::blinded_path::message::{AsyncPaymentsContext, BlindedMessagePath, MessageForwardNode, MessageContext, OffersContext};
1414
use crate::events::{Event, EventsProvider};
1515
use crate::ln::features::{ChannelFeatures, InitFeatures};
1616
use crate::ln::msgs::{self, DecodeError, OnionMessageHandler};
@@ -87,7 +87,7 @@ impl AsyncPaymentsMessageHandler for TestAsyncPaymentsMessageHandler {
8787
) -> Option<(ReleaseHeldHtlc, ResponseInstruction)> {
8888
None
8989
}
90-
fn release_held_htlc(&self, _message: ReleaseHeldHtlc) {}
90+
fn release_held_htlc(&self, _message: ReleaseHeldHtlc, _context: AsyncPaymentsContext) {}
9191
}
9292

9393
#[derive(Clone, Debug, PartialEq)]

lightning/src/onion_message/messenger.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1612,7 +1612,15 @@ where
16121612
},
16131613
#[cfg(async_payments)]
16141614
ParsedOnionMessageContents::AsyncPayments(AsyncPaymentsMessage::ReleaseHeldHtlc(msg)) => {
1615-
self.async_payments_handler.release_held_htlc(msg);
1615+
let context = match context {
1616+
Some(MessageContext::AsyncPayments(context)) => context,
1617+
Some(_) => {
1618+
debug_assert!(false, "Checked in peel_onion_message");
1619+
return
1620+
},
1621+
None => return,
1622+
};
1623+
self.async_payments_handler.release_held_htlc(msg, context);
16161624
},
16171625
ParsedOnionMessageContents::Custom(msg) => {
16181626
let context = match context {

0 commit comments

Comments
 (0)