Skip to content

Expose more info in PaymentForwarded event - #1419

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event
Apr 20, 2022
Merged

Expose more info in PaymentForwarded event#1419
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event

Conversation

@atalw

@atalwatalw commented Apr 12, 2022

Copy link
Copy Markdown
Contributor

This PR closes#1391.

This adds source_node_id and channel_id keys in the PaymentForwarded event.

There are 2 pending blocking issues after which the PR will be open to be merged.

  1. atalw@a2fbcf2#r71022478 and
  2. atalw@a2fbcf2#r71095690

atalw referenced this pull request in atalw/rust-lightning-1 Apr 12, 2022
Comment threadlightning/src/ln/channelmanager.rs Outdated
panic!("Channel doesn't exist")
}
};
let source_node_id = channel.get().get_counterparty_node_id();

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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")
};

@atalwatalwApr 16, 2022

Copy link
Copy Markdown
ContributorAuthor

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).

Copy link
Copy Markdown
Collaborator

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, done.

@atalw
atalwforce-pushed the 2022-03-paymentforwarded-event branch from a295722 to 95bf287CompareApril 17, 2022 11:04
@codecov-commenter

codecov-commenter commented Apr 17, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1419 (036a988) into main (7671ae5) will increase coverage by 0.09%.
The diff coverage is 86.11%.

❗ Current head 036a988 differs from pull request most recent head e53c5bd. Consider uploading reports for the commit e53c5bd to get more accurate results

@@ 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 
Impacted FilesCoverage Δ
lightning/src/util/events.rs33.56% <25.00%> (+0.11%)⬆️
lightning/src/ln/functional_tests.rs97.07% <87.50%> (-0.01%)⬇️
lightning/src/ln/chanmon_update_fail_tests.rs97.76% <100.00%> (ø)
lightning/src/ln/channelmanager.rs84.70% <100.00%> (-0.05%)⬇️
lightning/src/ln/functional_test_utils.rs95.56% <100.00%> (+0.01%)⬆️
lightning/src/ln/payment_tests.rs99.23% <100.00%> (ø)
lightning/src/ln/reorg_tests.rs100.00% <100.00%> (ø)
lightning/src/ln/shutdown_tests.rs96.50% <100.00%> (ø)
lightning-invoice/src/lib.rs87.39% <0.00%> (-0.85%)⬇️
lightning/src/ln/onion_route_tests.rs97.45% <0.00%> (-0.17%)⬇️
... and 18 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7671ae5...e53c5bd. Read the comment docs.

Comment threadlightning/src/util/events.rs Outdated
write_tlv_fields!(writer, {
(0, fee_earned_msat, option),
(2, claim_from_onchain_tx, required),
(0, channel_id, option),

Copy link
Copy Markdown
Collaborator

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 options (which mean we set the field to None if its not included, ie because the object was serialized by an old version of LDK.

Copy link
Copy Markdown
ContributorAuthor

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

Comment threadlightning/src/ln/channelmanager.rs Outdated

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 };

Copy link
Copy Markdown
Collaborator

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.

Comment threadlightning/src/util/events.rs Outdated
/// 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.

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

@atalw
atalw marked this pull request as ready for review April 18, 2022 16:28

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

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

Comment threadlightning/src/ln/functional_test_utils.rs Outdated

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

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;

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Comment threadlightning/src/util/events.rs Outdated
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]>,

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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.

valentinewallace
valentinewallace previously approved these changes Apr 19, 2022
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@atalw

Copy link
Copy Markdown
ContributorAuthor

Squashed.

@valentinewallace
valentinewallace merged commit 742f5e5 into lightningdevkit:mainApr 20, 2022
@atalw
atalw deleted the 2022-03-paymentforwarded-event branch April 22, 2022 05:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose more info in PaymentForwarded

4 participants

@atalw@codecov-commenter@TheBlueMatt@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Expose more info in `PaymentForwarded` event by atalw · Pull Request #1419 · lightningdevkit/rust-lightning · GitHub
Skip to content

Expose more info in PaymentForwarded event - #1419

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event
Apr 20, 2022
Merged

Expose more info in PaymentForwarded event#1419
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event

Conversation

@atalw

@atalwatalw commented Apr 12, 2022

Copy link
Copy Markdown
Contributor

This PR closes#1391.

This adds source_node_id and channel_id keys in the PaymentForwarded event.

There are 2 pending blocking issues after which the PR will be open to be merged.

  1. atalw@a2fbcf2#r71022478 and
  2. atalw@a2fbcf2#r71095690

atalw referenced this pull request in atalw/rust-lightning-1 Apr 12, 2022
Comment threadlightning/src/ln/channelmanager.rs Outdated
panic!("Channel doesn't exist")
}
};
let source_node_id = channel.get().get_counterparty_node_id();

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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")
};

@atalwatalwApr 16, 2022

Copy link
Copy Markdown
ContributorAuthor

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).

Copy link
Copy Markdown
Collaborator

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, done.

@atalw
atalwforce-pushed the 2022-03-paymentforwarded-event branch from a295722 to 95bf287CompareApril 17, 2022 11:04
@codecov-commenter

codecov-commenter commented Apr 17, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1419 (036a988) into main (7671ae5) will increase coverage by 0.09%.
The diff coverage is 86.11%.

❗ Current head 036a988 differs from pull request most recent head e53c5bd. Consider uploading reports for the commit e53c5bd to get more accurate results

@@ 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 
Impacted FilesCoverage Δ
lightning/src/util/events.rs33.56% <25.00%> (+0.11%)⬆️
lightning/src/ln/functional_tests.rs97.07% <87.50%> (-0.01%)⬇️
lightning/src/ln/chanmon_update_fail_tests.rs97.76% <100.00%> (ø)
lightning/src/ln/channelmanager.rs84.70% <100.00%> (-0.05%)⬇️
lightning/src/ln/functional_test_utils.rs95.56% <100.00%> (+0.01%)⬆️
lightning/src/ln/payment_tests.rs99.23% <100.00%> (ø)
lightning/src/ln/reorg_tests.rs100.00% <100.00%> (ø)
lightning/src/ln/shutdown_tests.rs96.50% <100.00%> (ø)
lightning-invoice/src/lib.rs87.39% <0.00%> (-0.85%)⬇️
lightning/src/ln/onion_route_tests.rs97.45% <0.00%> (-0.17%)⬇️
... and 18 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7671ae5...e53c5bd. Read the comment docs.

Comment threadlightning/src/util/events.rs Outdated
write_tlv_fields!(writer, {
(0, fee_earned_msat, option),
(2, claim_from_onchain_tx, required),
(0, channel_id, option),

Copy link
Copy Markdown
Collaborator

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 options (which mean we set the field to None if its not included, ie because the object was serialized by an old version of LDK.

Copy link
Copy Markdown
ContributorAuthor

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

Comment threadlightning/src/ln/channelmanager.rs Outdated

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 };

Copy link
Copy Markdown
Collaborator

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.

Comment threadlightning/src/util/events.rs Outdated
/// 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.

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

@atalw
atalw marked this pull request as ready for review April 18, 2022 16:28

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

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

Comment threadlightning/src/ln/functional_test_utils.rs Outdated

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

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;

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Comment threadlightning/src/util/events.rs Outdated
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]>,

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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.

valentinewallace
valentinewallace previously approved these changes Apr 19, 2022
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@atalw

Copy link
Copy Markdown
ContributorAuthor

Squashed.

@valentinewallace
valentinewallace merged commit 742f5e5 into lightningdevkit:mainApr 20, 2022
@atalw
atalw deleted the 2022-03-paymentforwarded-event branch April 22, 2022 05:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose more info in PaymentForwarded

4 participants

@atalw@codecov-commenter@TheBlueMatt@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Expose more info in `PaymentForwarded` event by atalw · Pull Request #1419 · lightningdevkit/rust-lightning · GitHub
Skip to content

Expose more info in PaymentForwarded event - #1419

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event
Apr 20, 2022
Merged

Expose more info in PaymentForwarded event#1419
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event

Conversation

@atalw

@atalwatalw commented Apr 12, 2022

Copy link
Copy Markdown
Contributor

This PR closes#1391.

This adds source_node_id and channel_id keys in the PaymentForwarded event.

There are 2 pending blocking issues after which the PR will be open to be merged.

  1. atalw@a2fbcf2#r71022478 and
  2. atalw@a2fbcf2#r71095690

atalw referenced this pull request in atalw/rust-lightning-1 Apr 12, 2022
Comment threadlightning/src/ln/channelmanager.rs Outdated
panic!("Channel doesn't exist")
}
};
let source_node_id = channel.get().get_counterparty_node_id();

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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")
};

@atalwatalwApr 16, 2022

Copy link
Copy Markdown
ContributorAuthor

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).

Copy link
Copy Markdown
Collaborator

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, done.

@atalw
atalwforce-pushed the 2022-03-paymentforwarded-event branch from a295722 to 95bf287CompareApril 17, 2022 11:04
@codecov-commenter

codecov-commenter commented Apr 17, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1419 (036a988) into main (7671ae5) will increase coverage by 0.09%.
The diff coverage is 86.11%.

❗ Current head 036a988 differs from pull request most recent head e53c5bd. Consider uploading reports for the commit e53c5bd to get more accurate results

@@ 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 
Impacted FilesCoverage Δ
lightning/src/util/events.rs33.56% <25.00%> (+0.11%)⬆️
lightning/src/ln/functional_tests.rs97.07% <87.50%> (-0.01%)⬇️
lightning/src/ln/chanmon_update_fail_tests.rs97.76% <100.00%> (ø)
lightning/src/ln/channelmanager.rs84.70% <100.00%> (-0.05%)⬇️
lightning/src/ln/functional_test_utils.rs95.56% <100.00%> (+0.01%)⬆️
lightning/src/ln/payment_tests.rs99.23% <100.00%> (ø)
lightning/src/ln/reorg_tests.rs100.00% <100.00%> (ø)
lightning/src/ln/shutdown_tests.rs96.50% <100.00%> (ø)
lightning-invoice/src/lib.rs87.39% <0.00%> (-0.85%)⬇️
lightning/src/ln/onion_route_tests.rs97.45% <0.00%> (-0.17%)⬇️
... and 18 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7671ae5...e53c5bd. Read the comment docs.

Comment threadlightning/src/util/events.rs Outdated
write_tlv_fields!(writer, {
(0, fee_earned_msat, option),
(2, claim_from_onchain_tx, required),
(0, channel_id, option),

Copy link
Copy Markdown
Collaborator

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 options (which mean we set the field to None if its not included, ie because the object was serialized by an old version of LDK.

Copy link
Copy Markdown
ContributorAuthor

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

Comment threadlightning/src/ln/channelmanager.rs Outdated

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 };

Copy link
Copy Markdown
Collaborator

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.

Comment threadlightning/src/util/events.rs Outdated
/// 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.

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

@atalw
atalw marked this pull request as ready for review April 18, 2022 16:28

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

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

Comment threadlightning/src/ln/functional_test_utils.rs Outdated

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

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;

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Comment threadlightning/src/util/events.rs Outdated
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]>,

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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.

valentinewallace
valentinewallace previously approved these changes Apr 19, 2022
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@atalw

Copy link
Copy Markdown
ContributorAuthor

Squashed.

@valentinewallace
valentinewallace merged commit 742f5e5 into lightningdevkit:mainApr 20, 2022
@atalw
atalw deleted the 2022-03-paymentforwarded-event branch April 22, 2022 05:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose more info in PaymentForwarded

4 participants

@atalw@codecov-commenter@TheBlueMatt@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Expose more info in `PaymentForwarded` event by atalw · Pull Request #1419 · lightningdevkit/rust-lightning · GitHub
Skip to content

Expose more info in PaymentForwarded event - #1419

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event
Apr 20, 2022
Merged

Expose more info in PaymentForwarded event#1419
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event

Conversation

@atalw

@atalwatalw commented Apr 12, 2022

Copy link
Copy Markdown
Contributor

This PR closes#1391.

This adds source_node_id and channel_id keys in the PaymentForwarded event.

There are 2 pending blocking issues after which the PR will be open to be merged.

  1. atalw@a2fbcf2#r71022478 and
  2. atalw@a2fbcf2#r71095690

atalw referenced this pull request in atalw/rust-lightning-1 Apr 12, 2022
Comment threadlightning/src/ln/channelmanager.rs Outdated
panic!("Channel doesn't exist")
}
};
let source_node_id = channel.get().get_counterparty_node_id();

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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")
};

@atalwatalwApr 16, 2022

Copy link
Copy Markdown
ContributorAuthor

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).

Copy link
Copy Markdown
Collaborator

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, done.

@atalw
atalwforce-pushed the 2022-03-paymentforwarded-event branch from a295722 to 95bf287CompareApril 17, 2022 11:04
@codecov-commenter

codecov-commenter commented Apr 17, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1419 (036a988) into main (7671ae5) will increase coverage by 0.09%.
The diff coverage is 86.11%.

❗ Current head 036a988 differs from pull request most recent head e53c5bd. Consider uploading reports for the commit e53c5bd to get more accurate results

@@ 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 
Impacted FilesCoverage Δ
lightning/src/util/events.rs33.56% <25.00%> (+0.11%)⬆️
lightning/src/ln/functional_tests.rs97.07% <87.50%> (-0.01%)⬇️
lightning/src/ln/chanmon_update_fail_tests.rs97.76% <100.00%> (ø)
lightning/src/ln/channelmanager.rs84.70% <100.00%> (-0.05%)⬇️
lightning/src/ln/functional_test_utils.rs95.56% <100.00%> (+0.01%)⬆️
lightning/src/ln/payment_tests.rs99.23% <100.00%> (ø)
lightning/src/ln/reorg_tests.rs100.00% <100.00%> (ø)
lightning/src/ln/shutdown_tests.rs96.50% <100.00%> (ø)
lightning-invoice/src/lib.rs87.39% <0.00%> (-0.85%)⬇️
lightning/src/ln/onion_route_tests.rs97.45% <0.00%> (-0.17%)⬇️
... and 18 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7671ae5...e53c5bd. Read the comment docs.

Comment threadlightning/src/util/events.rs Outdated
write_tlv_fields!(writer, {
(0, fee_earned_msat, option),
(2, claim_from_onchain_tx, required),
(0, channel_id, option),

Copy link
Copy Markdown
Collaborator

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 options (which mean we set the field to None if its not included, ie because the object was serialized by an old version of LDK.

Copy link
Copy Markdown
ContributorAuthor

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

Comment threadlightning/src/ln/channelmanager.rs Outdated

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 };

Copy link
Copy Markdown
Collaborator

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.

Comment threadlightning/src/util/events.rs Outdated
/// 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.

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

@atalw
atalw marked this pull request as ready for review April 18, 2022 16:28

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

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

Comment threadlightning/src/ln/functional_test_utils.rs Outdated

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

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;

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Comment threadlightning/src/util/events.rs Outdated
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]>,

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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.

valentinewallace
valentinewallace previously approved these changes Apr 19, 2022
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@atalw

Copy link
Copy Markdown
ContributorAuthor

Squashed.

@valentinewallace
valentinewallace merged commit 742f5e5 into lightningdevkit:mainApr 20, 2022
@atalw
atalw deleted the 2022-03-paymentforwarded-event branch April 22, 2022 05:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose more info in PaymentForwarded

4 participants

@atalw@codecov-commenter@TheBlueMatt@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Expose more info in `PaymentForwarded` event by atalw · Pull Request #1419 · lightningdevkit/rust-lightning · GitHub
Skip to content

Expose more info in PaymentForwarded event - #1419

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event
Apr 20, 2022
Merged

Expose more info in PaymentForwarded event#1419
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event

Conversation

@atalw

@atalwatalw commented Apr 12, 2022

Copy link
Copy Markdown
Contributor

This PR closes#1391.

This adds source_node_id and channel_id keys in the PaymentForwarded event.

There are 2 pending blocking issues after which the PR will be open to be merged.

  1. atalw@a2fbcf2#r71022478 and
  2. atalw@a2fbcf2#r71095690

atalw referenced this pull request in atalw/rust-lightning-1 Apr 12, 2022
Comment threadlightning/src/ln/channelmanager.rs Outdated
panic!("Channel doesn't exist")
}
};
let source_node_id = channel.get().get_counterparty_node_id();

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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")
};

@atalwatalwApr 16, 2022

Copy link
Copy Markdown
ContributorAuthor

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).

Copy link
Copy Markdown
Collaborator

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, done.

@atalw
atalwforce-pushed the 2022-03-paymentforwarded-event branch from a295722 to 95bf287CompareApril 17, 2022 11:04
@codecov-commenter

codecov-commenter commented Apr 17, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1419 (036a988) into main (7671ae5) will increase coverage by 0.09%.
The diff coverage is 86.11%.

❗ Current head 036a988 differs from pull request most recent head e53c5bd. Consider uploading reports for the commit e53c5bd to get more accurate results

@@ 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 
Impacted FilesCoverage Δ
lightning/src/util/events.rs33.56% <25.00%> (+0.11%)⬆️
lightning/src/ln/functional_tests.rs97.07% <87.50%> (-0.01%)⬇️
lightning/src/ln/chanmon_update_fail_tests.rs97.76% <100.00%> (ø)
lightning/src/ln/channelmanager.rs84.70% <100.00%> (-0.05%)⬇️
lightning/src/ln/functional_test_utils.rs95.56% <100.00%> (+0.01%)⬆️
lightning/src/ln/payment_tests.rs99.23% <100.00%> (ø)
lightning/src/ln/reorg_tests.rs100.00% <100.00%> (ø)
lightning/src/ln/shutdown_tests.rs96.50% <100.00%> (ø)
lightning-invoice/src/lib.rs87.39% <0.00%> (-0.85%)⬇️
lightning/src/ln/onion_route_tests.rs97.45% <0.00%> (-0.17%)⬇️
... and 18 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7671ae5...e53c5bd. Read the comment docs.

Comment threadlightning/src/util/events.rs Outdated
write_tlv_fields!(writer, {
(0, fee_earned_msat, option),
(2, claim_from_onchain_tx, required),
(0, channel_id, option),

Copy link
Copy Markdown
Collaborator

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 options (which mean we set the field to None if its not included, ie because the object was serialized by an old version of LDK.

Copy link
Copy Markdown
ContributorAuthor

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

Comment threadlightning/src/ln/channelmanager.rs Outdated

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 };

Copy link
Copy Markdown
Collaborator

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.

Comment threadlightning/src/util/events.rs Outdated
/// 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.

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

@atalw
atalw marked this pull request as ready for review April 18, 2022 16:28

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

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

Comment threadlightning/src/ln/functional_test_utils.rs Outdated

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

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;

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Comment threadlightning/src/util/events.rs Outdated
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]>,

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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.

valentinewallace
valentinewallace previously approved these changes Apr 19, 2022
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@atalw

Copy link
Copy Markdown
ContributorAuthor

Squashed.

@valentinewallace
valentinewallace merged commit 742f5e5 into lightningdevkit:mainApr 20, 2022
@atalw
atalw deleted the 2022-03-paymentforwarded-event branch April 22, 2022 05:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose more info in PaymentForwarded

4 participants

@atalw@codecov-commenter@TheBlueMatt@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Expose more info in `PaymentForwarded` event by atalw · Pull Request #1419 · lightningdevkit/rust-lightning · GitHub
Skip to content

Expose more info in PaymentForwarded event - #1419

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event
Apr 20, 2022
Merged

Expose more info in PaymentForwarded event#1419
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event

Conversation

@atalw

@atalwatalw commented Apr 12, 2022

Copy link
Copy Markdown
Contributor

This PR closes#1391.

This adds source_node_id and channel_id keys in the PaymentForwarded event.

There are 2 pending blocking issues after which the PR will be open to be merged.

  1. atalw@a2fbcf2#r71022478 and
  2. atalw@a2fbcf2#r71095690

atalw referenced this pull request in atalw/rust-lightning-1 Apr 12, 2022
Comment threadlightning/src/ln/channelmanager.rs Outdated
panic!("Channel doesn't exist")
}
};
let source_node_id = channel.get().get_counterparty_node_id();

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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")
};

@atalwatalwApr 16, 2022

Copy link
Copy Markdown
ContributorAuthor

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).

Copy link
Copy Markdown
Collaborator

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, done.

@atalw
atalwforce-pushed the 2022-03-paymentforwarded-event branch from a295722 to 95bf287CompareApril 17, 2022 11:04
@codecov-commenter

codecov-commenter commented Apr 17, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1419 (036a988) into main (7671ae5) will increase coverage by 0.09%.
The diff coverage is 86.11%.

❗ Current head 036a988 differs from pull request most recent head e53c5bd. Consider uploading reports for the commit e53c5bd to get more accurate results

@@ 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 
Impacted FilesCoverage Δ
lightning/src/util/events.rs33.56% <25.00%> (+0.11%)⬆️
lightning/src/ln/functional_tests.rs97.07% <87.50%> (-0.01%)⬇️
lightning/src/ln/chanmon_update_fail_tests.rs97.76% <100.00%> (ø)
lightning/src/ln/channelmanager.rs84.70% <100.00%> (-0.05%)⬇️
lightning/src/ln/functional_test_utils.rs95.56% <100.00%> (+0.01%)⬆️
lightning/src/ln/payment_tests.rs99.23% <100.00%> (ø)
lightning/src/ln/reorg_tests.rs100.00% <100.00%> (ø)
lightning/src/ln/shutdown_tests.rs96.50% <100.00%> (ø)
lightning-invoice/src/lib.rs87.39% <0.00%> (-0.85%)⬇️
lightning/src/ln/onion_route_tests.rs97.45% <0.00%> (-0.17%)⬇️
... and 18 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7671ae5...e53c5bd. Read the comment docs.

Comment threadlightning/src/util/events.rs Outdated
write_tlv_fields!(writer, {
(0, fee_earned_msat, option),
(2, claim_from_onchain_tx, required),
(0, channel_id, option),

Copy link
Copy Markdown
Collaborator

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 options (which mean we set the field to None if its not included, ie because the object was serialized by an old version of LDK.

Copy link
Copy Markdown
ContributorAuthor

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

Comment threadlightning/src/ln/channelmanager.rs Outdated

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 };

Copy link
Copy Markdown
Collaborator

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.

Comment threadlightning/src/util/events.rs Outdated
/// 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.

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

@atalw
atalw marked this pull request as ready for review April 18, 2022 16:28

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

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

Comment threadlightning/src/ln/functional_test_utils.rs Outdated

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

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;

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Comment threadlightning/src/util/events.rs Outdated
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]>,

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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.

valentinewallace
valentinewallace previously approved these changes Apr 19, 2022
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@atalw

Copy link
Copy Markdown
ContributorAuthor

Squashed.

@valentinewallace
valentinewallace merged commit 742f5e5 into lightningdevkit:mainApr 20, 2022
@atalw
atalw deleted the 2022-03-paymentforwarded-event branch April 22, 2022 05:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose more info in PaymentForwarded

4 participants

@atalw@codecov-commenter@TheBlueMatt@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Expose more info in `PaymentForwarded` event by atalw · Pull Request #1419 · lightningdevkit/rust-lightning · GitHub
Skip to content

Expose more info in PaymentForwarded event - #1419

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event
Apr 20, 2022
Merged

Expose more info in PaymentForwarded event#1419
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event

Conversation

@atalw

@atalwatalw commented Apr 12, 2022

Copy link
Copy Markdown
Contributor

This PR closes#1391.

This adds source_node_id and channel_id keys in the PaymentForwarded event.

There are 2 pending blocking issues after which the PR will be open to be merged.

  1. atalw@a2fbcf2#r71022478 and
  2. atalw@a2fbcf2#r71095690

atalw referenced this pull request in atalw/rust-lightning-1 Apr 12, 2022
Comment threadlightning/src/ln/channelmanager.rs Outdated
panic!("Channel doesn't exist")
}
};
let source_node_id = channel.get().get_counterparty_node_id();

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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")
};

@atalwatalwApr 16, 2022

Copy link
Copy Markdown
ContributorAuthor

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).

Copy link
Copy Markdown
Collaborator

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, done.

@atalw
atalwforce-pushed the 2022-03-paymentforwarded-event branch from a295722 to 95bf287CompareApril 17, 2022 11:04
@codecov-commenter

codecov-commenter commented Apr 17, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1419 (036a988) into main (7671ae5) will increase coverage by 0.09%.
The diff coverage is 86.11%.

❗ Current head 036a988 differs from pull request most recent head e53c5bd. Consider uploading reports for the commit e53c5bd to get more accurate results

@@ 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 
Impacted FilesCoverage Δ
lightning/src/util/events.rs33.56% <25.00%> (+0.11%)⬆️
lightning/src/ln/functional_tests.rs97.07% <87.50%> (-0.01%)⬇️
lightning/src/ln/chanmon_update_fail_tests.rs97.76% <100.00%> (ø)
lightning/src/ln/channelmanager.rs84.70% <100.00%> (-0.05%)⬇️
lightning/src/ln/functional_test_utils.rs95.56% <100.00%> (+0.01%)⬆️
lightning/src/ln/payment_tests.rs99.23% <100.00%> (ø)
lightning/src/ln/reorg_tests.rs100.00% <100.00%> (ø)
lightning/src/ln/shutdown_tests.rs96.50% <100.00%> (ø)
lightning-invoice/src/lib.rs87.39% <0.00%> (-0.85%)⬇️
lightning/src/ln/onion_route_tests.rs97.45% <0.00%> (-0.17%)⬇️
... and 18 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7671ae5...e53c5bd. Read the comment docs.

Comment threadlightning/src/util/events.rs Outdated
write_tlv_fields!(writer, {
(0, fee_earned_msat, option),
(2, claim_from_onchain_tx, required),
(0, channel_id, option),

Copy link
Copy Markdown
Collaborator

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 options (which mean we set the field to None if its not included, ie because the object was serialized by an old version of LDK.

Copy link
Copy Markdown
ContributorAuthor

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

Comment threadlightning/src/ln/channelmanager.rs Outdated

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 };

Copy link
Copy Markdown
Collaborator

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.

Comment threadlightning/src/util/events.rs Outdated
/// 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.

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

@atalw
atalw marked this pull request as ready for review April 18, 2022 16:28

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

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

Comment threadlightning/src/ln/functional_test_utils.rs Outdated

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

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;

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Comment threadlightning/src/util/events.rs Outdated
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]>,

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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.

valentinewallace
valentinewallace previously approved these changes Apr 19, 2022
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@atalw

Copy link
Copy Markdown
ContributorAuthor

Squashed.

@valentinewallace
valentinewallace merged commit 742f5e5 into lightningdevkit:mainApr 20, 2022
@atalw
atalw deleted the 2022-03-paymentforwarded-event branch April 22, 2022 05:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose more info in PaymentForwarded

4 participants

@atalw@codecov-commenter@TheBlueMatt@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Expose more info in `PaymentForwarded` event by atalw · Pull Request #1419 · lightningdevkit/rust-lightning · GitHub
Skip to content

Expose more info in PaymentForwarded event - #1419

Merged
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event
Apr 20, 2022
Merged

Expose more info in PaymentForwarded event#1419
valentinewallace merged 1 commit into
lightningdevkit:mainfrom
atalw:2022-03-paymentforwarded-event

Conversation

@atalw

@atalwatalw commented Apr 12, 2022

Copy link
Copy Markdown
Contributor

This PR closes#1391.

This adds source_node_id and channel_id keys in the PaymentForwarded event.

There are 2 pending blocking issues after which the PR will be open to be merged.

  1. atalw@a2fbcf2#r71022478 and
  2. atalw@a2fbcf2#r71095690

atalw referenced this pull request in atalw/rust-lightning-1 Apr 12, 2022
Comment threadlightning/src/ln/channelmanager.rs Outdated
panic!("Channel doesn't exist")
}
};
let source_node_id = channel.get().get_counterparty_node_id();

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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")
};

@atalwatalwApr 16, 2022

Copy link
Copy Markdown
ContributorAuthor

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).

Copy link
Copy Markdown
Collaborator

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, done.

@atalw
atalwforce-pushed the 2022-03-paymentforwarded-event branch from a295722 to 95bf287CompareApril 17, 2022 11:04
@codecov-commenter

codecov-commenter commented Apr 17, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1419 (036a988) into main (7671ae5) will increase coverage by 0.09%.
The diff coverage is 86.11%.

❗ Current head 036a988 differs from pull request most recent head e53c5bd. Consider uploading reports for the commit e53c5bd to get more accurate results

@@ 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 
Impacted FilesCoverage Δ
lightning/src/util/events.rs33.56% <25.00%> (+0.11%)⬆️
lightning/src/ln/functional_tests.rs97.07% <87.50%> (-0.01%)⬇️
lightning/src/ln/chanmon_update_fail_tests.rs97.76% <100.00%> (ø)
lightning/src/ln/channelmanager.rs84.70% <100.00%> (-0.05%)⬇️
lightning/src/ln/functional_test_utils.rs95.56% <100.00%> (+0.01%)⬆️
lightning/src/ln/payment_tests.rs99.23% <100.00%> (ø)
lightning/src/ln/reorg_tests.rs100.00% <100.00%> (ø)
lightning/src/ln/shutdown_tests.rs96.50% <100.00%> (ø)
lightning-invoice/src/lib.rs87.39% <0.00%> (-0.85%)⬇️
lightning/src/ln/onion_route_tests.rs97.45% <0.00%> (-0.17%)⬇️
... and 18 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7671ae5...e53c5bd. Read the comment docs.

Comment threadlightning/src/util/events.rs Outdated
write_tlv_fields!(writer, {
(0, fee_earned_msat, option),
(2, claim_from_onchain_tx, required),
(0, channel_id, option),

Copy link
Copy Markdown
Collaborator

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 options (which mean we set the field to None if its not included, ie because the object was serialized by an old version of LDK.

Copy link
Copy Markdown
ContributorAuthor

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

Comment threadlightning/src/ln/channelmanager.rs Outdated

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 };

Copy link
Copy Markdown
Collaborator

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.

Comment threadlightning/src/util/events.rs Outdated
/// 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.

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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?

Copy link
Copy Markdown
Collaborator

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.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

@atalw
atalw marked this pull request as ready for review April 18, 2022 16:28

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

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

Comment threadlightning/src/ln/functional_test_utils.rs Outdated

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

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.

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;

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Comment threadlightning/src/util/events.rs Outdated
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]>,

Copy link
Copy Markdown
Collaborator

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.

Copy link
Copy Markdown
ContributorAuthor

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.

valentinewallace
valentinewallace previously approved these changes Apr 19, 2022
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@atalw

Copy link
Copy Markdown
ContributorAuthor

Squashed.

@valentinewallace
valentinewallace merged commit 742f5e5 into lightningdevkit:mainApr 20, 2022
@atalw
atalw deleted the 2022-03-paymentforwarded-event branch April 22, 2022 05:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose more info in PaymentForwarded

4 participants

@atalw@codecov-commenter@TheBlueMatt@valentinewallace