-
Notifications
You must be signed in to change notification settings - Fork 377
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Expose more info in PaymentForwarded
event
#1419
Expose more info in PaymentForwarded
event
#1419
Conversation
lightning/src/ln/channelmanager.rs
Outdated
panic!("Channel doesn't exist") | ||
} | ||
}; | ||
let source_node_id = channel.get().get_counterparty_node_id(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@TheBlueMatt Getting the correct source_node_id
and channel_id
now. Only case remaining is when the channel has been closed. How do we get the source_node_id
in that case? And should we still emit the id of the closed channel?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmmmm, maybe lets just drop the source node_id entirely for now? Its kinda annoying to do a channel lookup just to get it, especially given we can't find it if we went onchain. Users can do the lookup manually, if they want.
let next_channel_id = match node.node.list_usable_channels().iter().find(|&x| x.counterparty.node_id == next_node.node.get_our_node_id()) { | ||
Some(channel) => channel.channel_id, | ||
None => panic!("Uh oh! Coudn't find the channel") | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@TheBlueMatt Do we need to handle the case where there could be multiple channels opened within the same 2 nodes? Also there are cases where the channel doesn't exist (eg channel_monitor_network_test
).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need to handle the case where there could be multiple channels opened within the same 2 nodes?
Yea, maybe lets make the check "is the channel listed in the event one of the ones between the two given nodes".
Also there are cases where the channel doesn't exist (eg channel_monitor_network_test
I assume those are cases when the channel is already closed? Can we detect that based on fee_earned_msat
being None
in the event?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cool, done.
a295722
to
95bf287
Compare
Codecov Report
@@ Coverage Diff @@
## main #1419 +/- ##
==========================================
+ Coverage 90.76% 90.86% +0.09%
==========================================
Files 73 74 +1
Lines 41195 41423 +228
Branches 41195 41423 +228
==========================================
+ Hits 37392 37638 +246
+ Misses 3803 3785 -18
Continue to review full report at Codecov.
|
lightning/src/util/events.rs
Outdated
7u8.write(writer)?; | ||
write_tlv_fields!(writer, { | ||
(0, fee_earned_msat, option), | ||
(2, claim_from_onchain_tx, required), | ||
(0, channel_id, option), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can't change the indexes of existing fields or we'll fail to read old data. For new fields, we want to use odd field IDs (which tells old versions to simply ignore the field if they don't understand it) and option
s (which mean we set the field to None
if its not included, ie because the object was serialized by an old version of LDK.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changed channel_id
to 1
lightning/src/ln/channelmanager.rs
Outdated
@@ -4291,12 +4290,16 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana | |||
} else { None }; | |||
|
|||
let mut pending_events = self.pending_events.lock().unwrap(); | |||
|
|||
let channel_id = if fee_earned_msat.is_some() { Some(prev_outpoint.to_channel_id()) } else { None }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Heh, oops, I didn't mean "set it to None if the channel is gone" I meant "dont test for it if the fee_earned_msat
field is None in tests", we should include it anyways because we have it and users may care.
lightning/src/util/events.rs
Outdated
@@ -343,6 +343,9 @@ pub enum Event { | |||
/// This event is generated when a payment has been successfully forwarded through us and a | |||
/// forwarding fee earned. | |||
PaymentForwarded { | |||
/// The channel between the source node and us. Optional because PaymentForwarded event can | |||
/// be emitted even after the channel has been closed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should mention something about old versions of LDK.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll just say it's optional because old versions of LDK do not serialize this field. And I think we should mention a version number to make it more concrete. If yes, is it v0.0.106
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep, best to say "versions prior to 0.0.107" or "versions up to 0.0.106" or whatever.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This basically looks good to me, I think. Will get you a second reviewer when you unmark-draft.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe 4 warnings were introduced in CI: https://github.com/lightningdevkit/rust-lightning/runs/6065172483?check_suite_focus=true
Otherwise, this basically LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few minor nits, but I think that's about it.
@@ -2073,7 +2073,7 @@ fn test_fail_htlc_on_broadcast_after_claim() { | |||
let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]); | |||
let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs); | |||
|
|||
create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()); | |||
let _ = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No need to change these lines at all now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed
lightning/src/util/events.rs
Outdated
@@ -343,6 +343,9 @@ pub enum Event { | |||
/// This event is generated when a payment has been successfully forwarded through us and a | |||
/// forwarding fee earned. | |||
PaymentForwarded { | |||
/// The channel between the source node and us. Optional because versions prior to 0.0.107 | |||
/// do not serialize this field. | |||
channel_id: Option<[u8; 32]>, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lets call this source_channel_id
or so? I imagine eventually we'll add a sink_channel_id
field as well.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated to source_channel_id
.
Nice! Okay, can you squash the commits down into a clean git history? Take a look at https://github.com/bitcoin/bitcoin/blob/master/doc/productivity.md#interactive-dummy-rebases-for-fixups-and-execs-with-git-merge-base if you aren't sure how to go about doing it. |
036a988
to
e53c5bd
Compare
Squashed. |
This PR closes #1391.
This adds
source_node_id
andchannel_id
keys in thePaymentForwarded
event.There are 2 pending blocking issues after which the PR will be open to be merged.