Skip to content

Commit e20557c

Browse files
committed
Add fee_paid_msat to PaymentSuccessful event
The fee as returned from `PaymentSent` event generated by LDK and is saved in `PaymentSuccessful` event.
1 parent 71a3e32 commit e20557c

File tree

4 files changed

+49
-5
lines changed

4 files changed

+49
-5
lines changed

bindings/ldk_node.udl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ enum BuildError {
154154

155155
[Enum]
156156
interface Event {
157-
PaymentSuccessful(PaymentHash payment_hash);
157+
PaymentSuccessful(PaymentHash payment_hash, u64? fee_paid_msat);
158158
PaymentFailed(PaymentHash payment_hash, PaymentFailureReason? reason);
159159
PaymentReceived(PaymentHash payment_hash, u64 amount_msat);
160160
ChannelPending(ChannelId channel_id, UserChannelId user_channel_id, ChannelId former_temporary_channel_id, PublicKey counterparty_node_id, OutPoint funding_txo);

src/event.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ pub enum Event {
4747
PaymentSuccessful {
4848
/// The hash of the payment.
4949
payment_hash: PaymentHash,
50+
/// The total fee which was spent at intermediate hops in this payment.
51+
fee_paid_msat: Option<u64>,
5052
},
5153
/// A sent payment has failed.
5254
PaymentFailed {
@@ -106,6 +108,7 @@ pub enum Event {
106108
impl_writeable_tlv_based_enum!(Event,
107109
(0, PaymentSuccessful) => {
108110
(0, payment_hash, required),
111+
(1, fee_paid_msat, option),
109112
},
110113
(1, PaymentFailed) => {
111114
(0, payment_hash, required),
@@ -611,7 +614,7 @@ where
611614
);
612615
}
613616
self.event_queue
614-
.add_event(Event::PaymentSuccessful { payment_hash })
617+
.add_event(Event::PaymentSuccessful { payment_hash, fee_paid_msat })
615618
.unwrap_or_else(|e| {
616619
log_error!(self.logger, "Failed to push to event queue: {}", e);
617620
panic!("Failed to push to event queue");

tests/common.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,43 @@ macro_rules! expect_channel_ready_event {
8080

8181
pub(crate) use expect_channel_ready_event;
8282

83+
macro_rules! expect_payment_received_event {
84+
($node: expr, $amount_msat: expr) => {{
85+
match $node.wait_next_event() {
86+
ref e @ Event::PaymentReceived { payment_hash, amount_msat } => {
87+
println!("{} got event {:?}", $node.node_id(), e);
88+
assert_eq!(amount_msat, $amount_msat);
89+
$node.event_handled();
90+
let result = Ok(payment_hash);
91+
result
92+
},
93+
ref e => {
94+
panic!("{} got unexpected event!: {:?}", std::stringify!(node_b), e);
95+
},
96+
}
97+
}};
98+
}
99+
100+
pub(crate) use expect_payment_received_event;
101+
102+
macro_rules! expect_payment_successful_event {
103+
($node: expr, $payment_hash: expr, $fee_paid_msat: expr) => {{
104+
match $node.wait_next_event() {
105+
ref e @ Event::PaymentSuccessful { payment_hash, fee_paid_msat } => {
106+
println!("{} got event {:?}", $node.node_id(), e);
107+
assert_eq!(fee_paid_msat, $fee_paid_msat);
108+
assert_eq!(payment_hash, $payment_hash);
109+
$node.event_handled();
110+
},
111+
ref e => {
112+
panic!("{} got unexpected event!: {:?}", std::stringify!(node_b), e);
113+
},
114+
}
115+
}};
116+
}
117+
118+
pub(crate) use expect_payment_successful_event;
119+
83120
pub(crate) fn setup_bitcoind_and_electrsd() -> (BitcoinD, ElectrsD) {
84121
let bitcoind_exe =
85122
env::var("BITCOIND_EXE").ok().or_else(|| bitcoind::downloaded_exe_path().ok()).expect(

tests/integration_tests_rust.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
mod common;
22

33
use common::{
4-
do_channel_full_cycle, expect_event, generate_blocks_and_wait, open_channel,
4+
do_channel_full_cycle, expect_event, expect_payment_received_event,
5+
expect_payment_successful_event, generate_blocks_and_wait, open_channel,
56
premine_and_distribute_funds, random_config, setup_bitcoind_and_electrsd, setup_builder,
67
setup_node, setup_two_nodes, wait_for_tx, TestSyncStore,
78
};
89

910
use ldk_node::{Builder, Event, NodeError};
1011

1112
use bitcoin::{Amount, Network};
13+
use lightning::ln::PaymentHash;
1214

1315
use std::sync::Arc;
1416

@@ -133,8 +135,10 @@ fn multi_hop_sending() {
133135
let invoice = nodes[4].receive_payment(2_500_000, &"asdf", 9217).unwrap();
134136
nodes[0].send_payment(&invoice).unwrap();
135137

136-
expect_event!(nodes[4], PaymentReceived);
137-
expect_event!(nodes[0], PaymentSuccessful);
138+
let payment_hash: Result<PaymentHash, ()> =
139+
expect_payment_received_event!(&nodes[4], 2_500_000);
140+
let fee_paid_msat = Some(2000);
141+
expect_payment_successful_event!(nodes[0], payment_hash.unwrap(), fee_paid_msat);
138142
}
139143

140144
#[test]

0 commit comments

Comments
 (0)