-
Notifications
You must be signed in to change notification settings - Fork 366
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Expose HTLCStats in ChannelDetails #2349
Expose HTLCStats in ChannelDetails #2349
Conversation
2d30dad
to
374cec2
Compare
Codecov ReportPatch coverage:
❗ Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more. Additional details and impacted files@@ Coverage Diff @@
## main #2349 +/- ##
==========================================
- Coverage 90.48% 90.47% -0.01%
==========================================
Files 104 104
Lines 53920 53930 +10
Branches 53920 53930 +10
==========================================
+ Hits 48790 48795 +5
- Misses 5130 5135 +5
☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Generally makes sense to me, thanks for having a go at this!
lightning/src/ln/channel.rs
Outdated
} | ||
|
||
impl_writeable_tlv_based!(HTLCStats, { | ||
(0, pending_htlcs, required), | ||
(1, pending_htlcs_value_msat, required), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When introducing mandatory fields for a new structure they usually should be even-numbered as this makes older nodes which for whatever reason encounter the unknown field stop and error rather than ignore and continue deserialization.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah I didn't realize this follows BOLT 1 serialization, done.
lightning/src/ln/channel.rs
Outdated
/// The total dust exposure for the local node. | ||
pub on_holder_tx_dust_exposure_msat: u64, | ||
/// The total value of pending, outgoing HTLC's being added that are awaiting remote revocation. | ||
/// See `ChannelState::AwaitingRemoteRevoke`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ChannelState
is not public, so we shouldn't refer to it in the public API. If it has some relevant docs/information, we need to replicate them here in brief.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added additional explanation instead of the reference.
lightning/src/ln/channelmanager.rs
Outdated
@@ -7190,6 +7200,8 @@ impl Writeable for ChannelDetails { | |||
(35, self.inbound_htlc_maximum_msat, option), | |||
(37, user_channel_id_high_opt, option), | |||
(39, self.feerate_sat_per_1000_weight, option), | |||
(40, self.incoming_htlc_stats, option), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These fields should both be odd: older nodes should just ignore them if they would ever encounter a ChannelDetails
that was serialized with version 0.0.116 or above.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
/// Statistics on pending incoming HTLCs. | ||
/// | ||
/// This field is only `None` for `ChannelDetails` objects serialized prior to LDK 0.0.116. | ||
pub incoming_htlc_stats: Option<HTLCStats>, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As the channel
module is not public, HTLCStats
is currently not exposed. We need to expose the object itself if it is now exposed through ChannelDetails
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Moved HTLCStats
to the channelmanager
module for that purpose.
374cec2
to
039c38d
Compare
This needs a lot more motivation, I'm not sure I understand the goal here - I'm not sure whether this is intended to work towards #2087 or #2264 or something else. I'm also afraid these are a bit hard to discipher for a user, there's a lot of states an HTLC can be in, and the |
039c38d
to
0f5cd35
Compare
The main goal is to enable measuring the saturation of a channel with regards to
Does this refer to |
Ah! Okay, that's much more straightforward, so let's not expose all the nuance - lets try to break down the value into buckets such that it always totals to the current channel value eg: I think such an API will be much easier to use than the current That fails to communicate the dust exposure (ala #2264) but accomplishes what you want. Bonus points for solving both in one go - instead of returning the htlc amount/count, return the actual list of HTLCs with extra info (is it dust? its payment hash, CLTV expiry, etc). |
Will handle both use cases by returning the list of pending HTLC's in #2442. |
Exposes details around in-flight HTLCs through
HTLCStats
inChannelDetails
. This enables measuring saturation of a channel with regards tomax_accepted_htlcs
andmax_htlc_value_in_flight_msat
.