Skip to content

Commit 224ffe4

Browse files
authored
feat(probe): expose probe route fees in events (#86)
1 parent 53003dc commit 224ffe4

3 files changed

Lines changed: 23 additions & 6 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,4 @@ swift.swiftdoc
4040
.claude
4141
*.local.*
4242
.ai
43+
.vscode

bindings/ldk_node.udl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -539,8 +539,8 @@ interface Event {
539539
PaymentClaimable(PaymentId payment_id, PaymentHash payment_hash, u64 claimable_amount_msat, u32? claim_deadline, sequence<CustomTlvRecord> custom_records);
540540
PaymentForwarded(ChannelId prev_channel_id, ChannelId next_channel_id, UserChannelId?
541541
prev_user_channel_id, UserChannelId? next_user_channel_id, PublicKey? prev_node_id, PublicKey? next_node_id, u64? total_fee_earned_msat, u64? skimmed_fee_msat, boolean claim_from_onchain_tx, u64? outbound_amount_forwarded_msat);
542-
ProbeSuccessful(PaymentId payment_id, PaymentHash payment_hash);
543-
ProbeFailed(PaymentId payment_id, PaymentHash payment_hash, u64? short_channel_id);
542+
ProbeSuccessful(PaymentId payment_id, PaymentHash payment_hash, u64? route_fee_msat);
543+
ProbeFailed(PaymentId payment_id, PaymentHash payment_hash, u64? short_channel_id, u64? route_fee_msat);
544544
ChannelPending(ChannelId channel_id, UserChannelId user_channel_id, ChannelId former_temporary_channel_id, PublicKey counterparty_node_id, OutPoint funding_txo);
545545
ChannelReady(ChannelId channel_id, UserChannelId user_channel_id, PublicKey? counterparty_node_id, OutPoint? funding_txo);
546546
ChannelClosed(ChannelId channel_id, UserChannelId user_channel_id, PublicKey? counterparty_node_id, ClosureReason? reason);

src/event.rs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,8 @@ pub enum Event {
424424
payment_id: PaymentId,
425425
/// The hash of the probe payment.
426426
payment_hash: PaymentHash,
427+
/// The total routing fee paid by the probe path, in thousandths of a satoshi.
428+
route_fee_msat: Option<u64>,
427429
},
428430
/// A sent payment probe has failed.
429431
ProbeFailed {
@@ -433,6 +435,8 @@ pub enum Event {
433435
payment_hash: PaymentHash,
434436
/// The channel responsible for the failed probe, if known.
435437
short_channel_id: Option<u64>,
438+
/// The total routing fee for the failed probe path, in thousandths of a satoshi.
439+
route_fee_msat: Option<u64>,
436440
},
437441
/// A channel has been created and is pending confirmation on-chain.
438442
ChannelPending {
@@ -964,11 +968,13 @@ impl_writeable_tlv_based_enum!(Event,
964968
(18, ProbeSuccessful) => {
965969
(0, payment_hash, required),
966970
(2, payment_id, required),
971+
(4, route_fee_msat, option),
967972
},
968973
(19, ProbeFailed) => {
969974
(0, payment_hash, required),
970975
(1, short_channel_id, option),
971976
(3, payment_id, required),
977+
(5, route_fee_msat, option),
972978
}
973979
);
974980

@@ -1804,8 +1810,9 @@ where
18041810

18051811
LdkEvent::PaymentPathSuccessful { .. } => {},
18061812
LdkEvent::PaymentPathFailed { .. } => {},
1807-
LdkEvent::ProbeSuccessful { payment_id, payment_hash, .. } => {
1808-
let event = Event::ProbeSuccessful { payment_id, payment_hash };
1813+
LdkEvent::ProbeSuccessful { payment_id, payment_hash, path, .. } => {
1814+
let route_fee_msat = Some(path.fee_msat());
1815+
let event = Event::ProbeSuccessful { payment_id, payment_hash, route_fee_msat };
18091816
match self.event_queue.add_event(event).await {
18101817
Ok(_) => {},
18111818
Err(e) => {
@@ -1814,8 +1821,14 @@ where
18141821
},
18151822
}
18161823
},
1817-
LdkEvent::ProbeFailed { payment_id, payment_hash, short_channel_id, .. } => {
1818-
let event = Event::ProbeFailed { payment_id, payment_hash, short_channel_id };
1824+
LdkEvent::ProbeFailed { payment_id, payment_hash, short_channel_id, path, .. } => {
1825+
let route_fee_msat = Some(path.fee_msat());
1826+
let event = Event::ProbeFailed {
1827+
payment_id,
1828+
payment_hash,
1829+
short_channel_id,
1830+
route_fee_msat,
1831+
};
18191832
match self.event_queue.add_event(event).await {
18201833
Ok(_) => {},
18211834
Err(e) => {
@@ -2606,16 +2619,19 @@ mod tests {
26062619
Event::ProbeSuccessful {
26072620
payment_id: PaymentId([1u8; 32]),
26082621
payment_hash: PaymentHash([2u8; 32]),
2622+
route_fee_msat: Some(1_234),
26092623
},
26102624
Event::ProbeFailed {
26112625
payment_id: PaymentId([3u8; 32]),
26122626
payment_hash: PaymentHash([4u8; 32]),
26132627
short_channel_id: Some(42),
2628+
route_fee_msat: Some(5_678),
26142629
},
26152630
Event::ProbeFailed {
26162631
payment_id: PaymentId([5u8; 32]),
26172632
payment_hash: PaymentHash([6u8; 32]),
26182633
short_channel_id: None,
2634+
route_fee_msat: None,
26192635
},
26202636
];
26212637

0 commit comments

Comments
 (0)