Skip to content

Commit 6fd2d9b

Browse files
committed
Don't send PaymentReceived events for rebalances
1 parent 4b12ae5 commit 6fd2d9b

4 files changed

Lines changed: 24 additions & 16 deletions

File tree

orange-sdk/src/event.rs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::logging::Logger;
2-
use crate::store::{self, PaymentId};
2+
use crate::store::{self, PaymentId, TxMetadataStore};
33

44
use ldk_node::bitcoin::secp256k1::PublicKey;
55
use ldk_node::bitcoin::{OutPoint, Txid};
@@ -308,6 +308,7 @@ impl Future for EventFuture {
308308
#[derive(Clone)]
309309
pub(crate) struct LdkEventHandler {
310310
pub(crate) event_queue: Arc<EventQueue>,
311+
pub(crate) tx_metadata: TxMetadataStore,
311312
pub(crate) ldk_node: Arc<ldk_node::Node>,
312313
pub(crate) payment_receipt_sender: watch::Sender<()>,
313314
pub(crate) channel_pending_sender: watch::Sender<u128>,
@@ -357,15 +358,24 @@ impl LdkEventHandler {
357358
None
358359
}
359360
});
360-
if let Err(e) = self.event_queue.add_event(Event::PaymentReceived {
361-
payment_id: PaymentId::Lightning(payment_id.0), // safe
362-
payment_hash,
363-
amount_msat,
364-
custom_records,
365-
lsp_fee_msats,
366-
}) {
367-
log_error!(self.logger, "Failed to add PaymentReceived event: {e:?}");
368-
return;
361+
362+
let payment_id = PaymentId::Trusted(payment_id.0);
363+
let is_rebalance = {
364+
let map = self.tx_metadata.read();
365+
map.get(&payment_id).is_some_and(|m| m.ty.is_rebalance())
366+
};
367+
368+
// If this is a rebalance payment, we do not emit a PaymentReceived event.
369+
if !is_rebalance {
370+
if let Err(e) = self.event_queue.add_event(Event::PaymentReceived {
371+
payment_id,
372+
payment_hash,
373+
amount_msat,
374+
custom_records,
375+
lsp_fee_msats,
376+
}) {
377+
log_error!(self.logger, "Failed to add PaymentReceived event: {e:?}");
378+
}
369379
}
370380
let _ = self.payment_receipt_sender.send(());
371381
},

orange-sdk/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,7 @@ impl Wallet {
556556
config,
557557
Arc::clone(&store),
558558
Arc::clone(&event_queue),
559+
tx_metadata.clone(),
559560
Arc::clone(&logger),
560561
)
561562
.await?,

orange-sdk/src/lightning_wallet.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::bitcoin::OutPoint;
22
use crate::event::{EventQueue, LdkEventHandler};
33
use crate::logging::Logger;
4-
use crate::store::TxStatus;
4+
use crate::store::{TxMetadataStore, TxStatus};
55
use crate::{ChainSource, InitFailure, PaymentType, Seed, WalletConfig};
66

77
use bitcoin_payment_instructions::PaymentMethod;
@@ -53,7 +53,7 @@ const DEFAULT_INVOICE_EXPIRY_SECS: u32 = 86_400; // 24 hours
5353
impl LightningWallet {
5454
pub(super) async fn init(
5555
runtime: Arc<Runtime>, config: WalletConfig, store: Arc<dyn KVStore + Sync + Send>,
56-
event_queue: Arc<EventQueue>, logger: Arc<Logger>,
56+
event_queue: Arc<EventQueue>, tx_metadata: TxMetadataStore, logger: Arc<Logger>,
5757
) -> Result<Self, InitFailure> {
5858
let anchor_channels_config = ldk_node::config::AnchorChannelsConfig {
5959
trusted_peers_no_reserve: vec![config.lsp.1],
@@ -154,6 +154,7 @@ impl LightningWallet {
154154
ldk_node: Arc::clone(&ldk_node),
155155
payment_receipt_sender,
156156
channel_pending_sender,
157+
tx_metadata,
157158
logger,
158159
});
159160
let inner = Arc::new(LightningWalletImpl {

orange-sdk/tests/integration_tests.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,6 @@ fn test_sweep_to_ln() {
159159
_ => panic!("Expected ChannelOpened event"),
160160
}
161161

162-
// LDK node receives the rebalance payment, todo we should probably not output this event
163-
let event = wait_next_event(&wallet).await;
164-
assert!(matches!(event, Event::PaymentReceived { .. }));
165-
166162
let event = wait_next_event(&wallet).await;
167163
match event {
168164
Event::RebalanceSuccessful { amount_msat, fee_msat, .. } => {

0 commit comments

Comments
 (0)