@@ -7109,16 +7109,17 @@ where
7109
7109
}
7110
7110
7111
7111
/// Creates a [`RefundBuilder`] such that the [`Refund`] it builds is recognized by the
7112
- /// [`ChannelManager`] when handling [`Bolt12Invoice`] messages for the refund. The refund will
7113
- /// not have an expiration unless otherwise set on the builder.
7112
+ /// [`ChannelManager`] when handling [`Bolt12Invoice`] messages for the refund. The builder will
7113
+ /// have an expiration set, if provided. Any changes to the expiration on the returned builder
7114
+ /// will not be honored by [`ChannelManager`].
7114
7115
///
7115
7116
/// The provided `payment_id` is used to ensure that only one invoice is paid for the refund.
7116
7117
///
7117
7118
/// [`Refund`]: crate::offers::refund::Refund
7118
7119
/// [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
7119
7120
pub fn create_refund_builder(
7120
- &self, description: String, amount_msats: u64, payment_id: PaymentId, retry_strategy: Retry ,
7121
- max_total_routing_fee_msat: Option<u64>
7121
+ &self, description: String, amount_msats: u64, absolute_expiry: Option<Duration> ,
7122
+ payment_id: PaymentId, retry_strategy: Retry, max_total_routing_fee_msat: Option<u64>
7122
7123
) -> Result<RefundBuilder<secp256k1::All>, Bolt12SemanticError> {
7123
7124
let node_id = self.get_our_node_id();
7124
7125
let expanded_key = &self.inbound_payment_key;
@@ -7129,8 +7130,21 @@ where
7129
7130
let builder = RefundBuilder::deriving_payer_id(
7130
7131
description, node_id, expanded_key, entropy, secp_ctx, amount_msats, payment_id
7131
7132
)?.chain_hash(self.chain_hash);
7133
+
7134
+ let builder = match absolute_expiry {
7135
+ Some(absolute_expiry) => builder.absolute_expiry(absolute_expiry),
7136
+ None => builder,
7137
+ };
7138
+
7139
+ const SECONDS_PER_TIMER_TICK: u64 = 60;
7140
+ let timer_ticks_before_expiration =
7141
+ absolute_expiry.map(|expiry| expiry.as_secs() / SECONDS_PER_TIMER_TICK);
7142
+
7132
7143
self.pending_outbound_payments
7133
- .add_new_awaiting_invoice(payment_id, retry_strategy, max_total_routing_fee_msat)
7144
+ .add_new_awaiting_invoice_for_refund(
7145
+ payment_id, retry_strategy, max_total_routing_fee_msat,
7146
+ timer_ticks_before_expiration
7147
+ )
7134
7148
.map_err(|_| Bolt12SemanticError::DuplicatePaymentId)?;
7135
7149
7136
7150
Ok(builder)
0 commit comments