-
Notifications
You must be signed in to change notification settings - Fork 404
Make channel reserve variable names less confusing. #613
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
Make channel reserve variable names less confusing. #613
Conversation
Previous to this commit, variables such as their_channel_reserve referred to the channel reserve that _we_ are required to keep, (the value is initially set by the remote). Similarly, variables such as our_channel_reserve referred to the channel reserve that we require the remote to keep. Change this to use local_channel_reserve / remote_channel_reserve to refer to the the channel reserve that the local is required to keep and the channel reserve that the remote is required to keep, respectively.
Codecov Report
@@ Coverage Diff @@
## master #613 +/- ##
=======================================
Coverage 91.12% 91.12%
=======================================
Files 34 34
Lines 20544 20545 +1
=======================================
+ Hits 18720 18721 +1
Misses 1824 1824
Continue to review full report at Codecov.
|
Maybe |
@TheBlueMatt I see "local" used quite a bit throughout channel.rs, but I don't have a firm grasp as to how the term is overloaded. Could you provide some examples where it is overloaded and how they differ from each other? |
|
I wouldn't consider these instances of "local" as overloaded (i.e., used with two different meanings). Rather, they seem to be consistently used to qualify an entity or concept that can exist on either side of a channel. If a similar relationship exists for channel reserve (which it does seem), then using similar naming makes for greater consistency and is something we should strive for. I'd be more interested in knowing if there is something that is currently qualified by "local" which doesn't have a "remote" counterpart (not necessarily in code but at least conceptually), or vice versa. Then there may be an argument for renaming that instead. Note: I'm not necessarily arguing for using "local" and "remote" everywhere. There are place where there may be more appropriate terms (e.g., "sender" and "receiver", "funder" and "fundee"). |
While My 2 sats. |
I guess the confusion I'd have in this context is do we mean "local" as in "amount to the local node kept as a buffer" or "local" as in "amount the local node decided should be kept as a buffer" - in general I find "our" "local" "their" and "remote" to all mean the same thing and trying to make some kind of differentiation about what means what that is only relevant to channel.rs makes my head spin. |
I think the question should be irrelevant for the reasons I gave in #181 (comment). Or put another way, there is no "local node" in this abstraction. The abstraction is simply a channel that has two ends.
We should definitely use the terms consistently both within and across modules. And if we are not, we should correct that or come up with more suitable concepts. If it makes your head spin, it's bound to make the user's head explode! 🤯 Obscurity causes complexity, and complexity makes code hard to understand as has been demonstrated. (FWIW, I think a compelling case can be made that possessive pronouns like "our" and "their" lead to ambiguity and shouldn't be used in naming. I have similar feelings about "self".) One alternative is to remove the prefixes entirely by using a struct for each end of the channel, grouping the relevant fields without needing a prefix. Or possibly making smaller abstractions that encapsulated some functionality. Or a combination of both. channel.rs has nearly 4300 lines of non-test code and |
I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that |
IIRC no, can't find a counter-example on-the-fly.
Yes but you even process from a single-side. You received some of your local settings from remote. And you may build remote transactions from your "local" viewpoint but there shouldn't be confusion.
I fairly agree with that. I've already introduced bug in the past due to confusion between
Agree too, we should be avoid being Linux with a 200-fields I would like also to raise your awareness about name keys like |
I think I'm increasingly agreeing with this.
That's pretty compelling. I'm just gonna merge it, if someone feels compelled to come up with even better names in the future, we can open another PR. |
@@ -1847,7 +1848,8 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> { | |||
let num_htlcs = local_commitment_tx.1; | |||
let total_fee: u64 = feerate_per_kw as u64 * (COMMITMENT_TX_BASE_WEIGHT + (num_htlcs as u64) * COMMITMENT_TX_WEIGHT_PER_HTLC) / 1000; | |||
|
|||
if self.channel_value_satoshis - self.value_to_self_msat / 1000 < total_fee + self.their_channel_reserve_satoshis { | |||
let remote_reserve_we_require = Channel::<ChanSigner>::get_remote_channel_reserve_satoshis(self.channel_value_satoshis); |
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.
In the future, best to keep bugfixes to separate commits from pure-renaming. Otherwise I'll think you're trying to slip something in :p.
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.
Ha noted, thanks
Previous to this commit, variables such as their_channel_reserve
referred to the channel reserve that we are required to keep,
(the value is initially set by the remote). Similarly,
variables such as our_channel_reserve referred to the channel
reserve that we require the remote to keep.
Change this to use local_channel_reserve / remote_channel_reserve
to refer to the the channel reserve that the local is required to keep
and the channel reserve that the remote is required to keep, respectively.
I liked @jkczyz's suggestion in this comment so went with those names, but open to other options.
Closes #181.