Skip to content

Commit 641526d

Browse files
committed
Reject duplicated payment on receiver side
1 parent 9e541d0 commit 641526d

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

mutiny-core/src/event.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,18 @@ impl<S: MutinyStorage> EventHandler<S> {
255255
} => {
256256
log_debug!(self.logger, "EVENT: PaymentReceived received payment from payment hash {} of {amount_msat} millisatoshis to {receiver_node_id:?}", payment_hash);
257257

258+
if let Some(payment_info) =
259+
read_payment_info(&self.persister.storage, &payment_hash.0, true, &self.logger)
260+
{
261+
if matches!(
262+
payment_info.status,
263+
HTLCStatus::Succeeded | HTLCStatus::Failed
264+
) {
265+
self.channel_manager.fail_htlc_backwards(&payment_hash);
266+
return Ok(());
267+
}
268+
}
269+
258270
let expected_skimmed_fee_msat = self
259271
.lsp_client
260272
.as_ref()
@@ -265,6 +277,7 @@ impl<S: MutinyStorage> EventHandler<S> {
265277

266278
if counterparty_skimmed_fee_msat > expected_skimmed_fee_msat {
267279
log_error!(self.logger, "ERROR: Payment with hash {} skimmed a fee of {} millisatoshis when we expected a fee of {} millisatoshis", payment_hash, counterparty_skimmed_fee_msat, expected_skimmed_fee_msat);
280+
self.channel_manager.fail_htlc_backwards(&payment_hash);
268281
return Ok(());
269282
}
270283

@@ -276,11 +289,13 @@ impl<S: MutinyStorage> EventHandler<S> {
276289
PaymentPurpose::Bolt12OfferPayment { .. }
277290
| PaymentPurpose::Bolt12RefundPayment { .. } => {
278291
log_error!(self.logger, "Not support Bolt12");
292+
self.channel_manager.fail_htlc_backwards(&payment_hash);
279293
return Ok(());
280294
}
281295
} {
282296
self.channel_manager.claim_funds(payment_preimage);
283297
} else {
298+
self.channel_manager.fail_htlc_backwards(&payment_hash);
284299
log_error!(self.logger, "ERROR: No payment preimage found");
285300
};
286301
}

0 commit comments

Comments
 (0)