Make channel reserve variable names less confusing. - #613

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names
May 6, 2020
Merged

Make channel reserve variable names less confusing.#613
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names

Conversation

@valentinewallace

Copy link
Copy Markdown
Contributor

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.

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

codecovBot commented May 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #613 into master will increase coverage by 0.00%.
The diff coverage is 96.96%.

Impacted file tree graph

@@ Coverage Diff @@## master #613 +/- ##
=======================================
Coverage 91.12% 91.12% =======================================
Files 34 34 Lines 20544 20545 +1 =======================================
+ Hits 18720 18721 +1 
Misses 1824 1824 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.42% <95.83%> (+<0.01%)⬆️
lightning/src/ln/functional_tests.rs97.04% <100.00%> (ø)

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 9098240...1b656f4. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Maybe to_self_channel_reserve_satoshis? "local" is also somewhat overloaded in a few ways whereas to_self is pretty clear in that its the value to us.

@jkczyz

Copy link
Copy Markdown
Contributor

@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?

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

local can refer to a payment to us (the "local node"), or a local transaction (ie one which we can broadcast, for which the signature was provided by "the remote node"). I think those are the two main ones, but certainly conflict in a few places AFAIR.

@jkczyz

Copy link
Copy Markdown
Contributor

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

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

While local may have those other meanings, local_channel_reserve as a whole is pretty plainly descriptive and has an obvious meaning.

My 2 sats. to_self is a compromise I could live with.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@jkczyz

Copy link
Copy Markdown
Contributor

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"

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.

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.

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 Channel has 56 fields (!) if I accurately counted them. It seems ripe for refactoring. That said, let's limit the scope of this PR to a simple rename if we can. 😃

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

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"

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

@ariard

Copy link
Copy Markdown

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.

IIRC no, can't find a counter-example on-the-fly.

The abstraction is simply a channel that has two ends.

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.

Obscurity causes complexity, and complexity makes code hard to understand as has been demonstrated.

I fairly agree with that. I've already introduced bug in the past due to confusion between their_to_self/our_to_self in ChannelMonitor.

Or possibly making smaller abstractions that encapsulated some functionality

Agree too, we should be avoid being Linux with a 200-fields task_struct

I would like also to raise your awareness about name keys like a_htlc_key or b_htlc_key in get_htlc_redeemscript_with_explicit_keys functions-like. If someone wants to burn them I would be happy to bring the spark :p

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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

I think I'm increasingly agreeing with this.

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

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.

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

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.

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.

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.

Ha noted, thanks

@TheBlueMatt
TheBlueMatt merged commit 8a27d8e into lightningdevkit:masterMay 6, 2020
@valentinewallace
valentinewallace deleted the less-confusing-chan-reserve-names branch May 6, 2020 02:16
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

channel_reserve_satoshis variable names confusing

4 participants

@valentinewallace@TheBlueMatt@jkczyz@ariard
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Make channel reserve variable names less confusing. - #613

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names
May 6, 2020
Merged

Make channel reserve variable names less confusing.#613
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names

Conversation

@valentinewallace

Copy link
Copy Markdown
Contributor

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.

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

codecovBot commented May 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #613 into master will increase coverage by 0.00%.
The diff coverage is 96.96%.

Impacted file tree graph

@@ Coverage Diff @@## master #613 +/- ##
=======================================
Coverage 91.12% 91.12% =======================================
Files 34 34 Lines 20544 20545 +1 =======================================
+ Hits 18720 18721 +1 
Misses 1824 1824 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.42% <95.83%> (+<0.01%)⬆️
lightning/src/ln/functional_tests.rs97.04% <100.00%> (ø)

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 9098240...1b656f4. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Maybe to_self_channel_reserve_satoshis? "local" is also somewhat overloaded in a few ways whereas to_self is pretty clear in that its the value to us.

@jkczyz

Copy link
Copy Markdown
Contributor

@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?

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

local can refer to a payment to us (the "local node"), or a local transaction (ie one which we can broadcast, for which the signature was provided by "the remote node"). I think those are the two main ones, but certainly conflict in a few places AFAIR.

@jkczyz

Copy link
Copy Markdown
Contributor

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

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

While local may have those other meanings, local_channel_reserve as a whole is pretty plainly descriptive and has an obvious meaning.

My 2 sats. to_self is a compromise I could live with.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@jkczyz

Copy link
Copy Markdown
Contributor

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"

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.

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.

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 Channel has 56 fields (!) if I accurately counted them. It seems ripe for refactoring. That said, let's limit the scope of this PR to a simple rename if we can. 😃

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

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"

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

@ariard

Copy link
Copy Markdown

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.

IIRC no, can't find a counter-example on-the-fly.

The abstraction is simply a channel that has two ends.

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.

Obscurity causes complexity, and complexity makes code hard to understand as has been demonstrated.

I fairly agree with that. I've already introduced bug in the past due to confusion between their_to_self/our_to_self in ChannelMonitor.

Or possibly making smaller abstractions that encapsulated some functionality

Agree too, we should be avoid being Linux with a 200-fields task_struct

I would like also to raise your awareness about name keys like a_htlc_key or b_htlc_key in get_htlc_redeemscript_with_explicit_keys functions-like. If someone wants to burn them I would be happy to bring the spark :p

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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

I think I'm increasingly agreeing with this.

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

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.

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

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.

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.

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.

Ha noted, thanks

@TheBlueMatt
TheBlueMatt merged commit 8a27d8e into lightningdevkit:masterMay 6, 2020
@valentinewallace
valentinewallace deleted the less-confusing-chan-reserve-names branch May 6, 2020 02:16
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

channel_reserve_satoshis variable names confusing

4 participants

@valentinewallace@TheBlueMatt@jkczyz@ariard
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Make channel reserve variable names less confusing. - #613

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names
May 6, 2020
Merged

Make channel reserve variable names less confusing.#613
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names

Conversation

@valentinewallace

Copy link
Copy Markdown
Contributor

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.

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

codecovBot commented May 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #613 into master will increase coverage by 0.00%.
The diff coverage is 96.96%.

Impacted file tree graph

@@ Coverage Diff @@## master #613 +/- ##
=======================================
Coverage 91.12% 91.12% =======================================
Files 34 34 Lines 20544 20545 +1 =======================================
+ Hits 18720 18721 +1 
Misses 1824 1824 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.42% <95.83%> (+<0.01%)⬆️
lightning/src/ln/functional_tests.rs97.04% <100.00%> (ø)

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 9098240...1b656f4. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Maybe to_self_channel_reserve_satoshis? "local" is also somewhat overloaded in a few ways whereas to_self is pretty clear in that its the value to us.

@jkczyz

Copy link
Copy Markdown
Contributor

@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?

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

local can refer to a payment to us (the "local node"), or a local transaction (ie one which we can broadcast, for which the signature was provided by "the remote node"). I think those are the two main ones, but certainly conflict in a few places AFAIR.

@jkczyz

Copy link
Copy Markdown
Contributor

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

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

While local may have those other meanings, local_channel_reserve as a whole is pretty plainly descriptive and has an obvious meaning.

My 2 sats. to_self is a compromise I could live with.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@jkczyz

Copy link
Copy Markdown
Contributor

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"

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.

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.

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 Channel has 56 fields (!) if I accurately counted them. It seems ripe for refactoring. That said, let's limit the scope of this PR to a simple rename if we can. 😃

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

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"

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

@ariard

Copy link
Copy Markdown

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.

IIRC no, can't find a counter-example on-the-fly.

The abstraction is simply a channel that has two ends.

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.

Obscurity causes complexity, and complexity makes code hard to understand as has been demonstrated.

I fairly agree with that. I've already introduced bug in the past due to confusion between their_to_self/our_to_self in ChannelMonitor.

Or possibly making smaller abstractions that encapsulated some functionality

Agree too, we should be avoid being Linux with a 200-fields task_struct

I would like also to raise your awareness about name keys like a_htlc_key or b_htlc_key in get_htlc_redeemscript_with_explicit_keys functions-like. If someone wants to burn them I would be happy to bring the spark :p

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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

I think I'm increasingly agreeing with this.

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

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.

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

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.

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.

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.

Ha noted, thanks

@TheBlueMatt
TheBlueMatt merged commit 8a27d8e into lightningdevkit:masterMay 6, 2020
@valentinewallace
valentinewallace deleted the less-confusing-chan-reserve-names branch May 6, 2020 02:16
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

channel_reserve_satoshis variable names confusing

4 participants

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

Make channel reserve variable names less confusing. - #613

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names
May 6, 2020
Merged

Make channel reserve variable names less confusing.#613
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names

Conversation

@valentinewallace

Copy link
Copy Markdown
Contributor

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.

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

codecovBot commented May 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #613 into master will increase coverage by 0.00%.
The diff coverage is 96.96%.

Impacted file tree graph

@@ Coverage Diff @@## master #613 +/- ##
=======================================
Coverage 91.12% 91.12% =======================================
Files 34 34 Lines 20544 20545 +1 =======================================
+ Hits 18720 18721 +1 
Misses 1824 1824 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.42% <95.83%> (+<0.01%)⬆️
lightning/src/ln/functional_tests.rs97.04% <100.00%> (ø)

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 9098240...1b656f4. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Maybe to_self_channel_reserve_satoshis? "local" is also somewhat overloaded in a few ways whereas to_self is pretty clear in that its the value to us.

@jkczyz

Copy link
Copy Markdown
Contributor

@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?

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

local can refer to a payment to us (the "local node"), or a local transaction (ie one which we can broadcast, for which the signature was provided by "the remote node"). I think those are the two main ones, but certainly conflict in a few places AFAIR.

@jkczyz

Copy link
Copy Markdown
Contributor

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

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

While local may have those other meanings, local_channel_reserve as a whole is pretty plainly descriptive and has an obvious meaning.

My 2 sats. to_self is a compromise I could live with.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@jkczyz

Copy link
Copy Markdown
Contributor

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"

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.

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.

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 Channel has 56 fields (!) if I accurately counted them. It seems ripe for refactoring. That said, let's limit the scope of this PR to a simple rename if we can. 😃

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

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"

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

@ariard

Copy link
Copy Markdown

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.

IIRC no, can't find a counter-example on-the-fly.

The abstraction is simply a channel that has two ends.

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.

Obscurity causes complexity, and complexity makes code hard to understand as has been demonstrated.

I fairly agree with that. I've already introduced bug in the past due to confusion between their_to_self/our_to_self in ChannelMonitor.

Or possibly making smaller abstractions that encapsulated some functionality

Agree too, we should be avoid being Linux with a 200-fields task_struct

I would like also to raise your awareness about name keys like a_htlc_key or b_htlc_key in get_htlc_redeemscript_with_explicit_keys functions-like. If someone wants to burn them I would be happy to bring the spark :p

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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

I think I'm increasingly agreeing with this.

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

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.

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

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.

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.

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.

Ha noted, thanks

@TheBlueMatt
TheBlueMatt merged commit 8a27d8e into lightningdevkit:masterMay 6, 2020
@valentinewallace
valentinewallace deleted the less-confusing-chan-reserve-names branch May 6, 2020 02:16
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

channel_reserve_satoshis variable names confusing

4 participants

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

Make channel reserve variable names less confusing. - #613

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names
May 6, 2020
Merged

Make channel reserve variable names less confusing.#613
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names

Conversation

@valentinewallace

Copy link
Copy Markdown
Contributor

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.

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

codecovBot commented May 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #613 into master will increase coverage by 0.00%.
The diff coverage is 96.96%.

Impacted file tree graph

@@ Coverage Diff @@## master #613 +/- ##
=======================================
Coverage 91.12% 91.12% =======================================
Files 34 34 Lines 20544 20545 +1 =======================================
+ Hits 18720 18721 +1 
Misses 1824 1824 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.42% <95.83%> (+<0.01%)⬆️
lightning/src/ln/functional_tests.rs97.04% <100.00%> (ø)

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 9098240...1b656f4. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Maybe to_self_channel_reserve_satoshis? "local" is also somewhat overloaded in a few ways whereas to_self is pretty clear in that its the value to us.

@jkczyz

Copy link
Copy Markdown
Contributor

@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?

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

local can refer to a payment to us (the "local node"), or a local transaction (ie one which we can broadcast, for which the signature was provided by "the remote node"). I think those are the two main ones, but certainly conflict in a few places AFAIR.

@jkczyz

Copy link
Copy Markdown
Contributor

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

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

While local may have those other meanings, local_channel_reserve as a whole is pretty plainly descriptive and has an obvious meaning.

My 2 sats. to_self is a compromise I could live with.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@jkczyz

Copy link
Copy Markdown
Contributor

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"

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.

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.

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 Channel has 56 fields (!) if I accurately counted them. It seems ripe for refactoring. That said, let's limit the scope of this PR to a simple rename if we can. 😃

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

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"

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

@ariard

Copy link
Copy Markdown

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.

IIRC no, can't find a counter-example on-the-fly.

The abstraction is simply a channel that has two ends.

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.

Obscurity causes complexity, and complexity makes code hard to understand as has been demonstrated.

I fairly agree with that. I've already introduced bug in the past due to confusion between their_to_self/our_to_self in ChannelMonitor.

Or possibly making smaller abstractions that encapsulated some functionality

Agree too, we should be avoid being Linux with a 200-fields task_struct

I would like also to raise your awareness about name keys like a_htlc_key or b_htlc_key in get_htlc_redeemscript_with_explicit_keys functions-like. If someone wants to burn them I would be happy to bring the spark :p

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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

I think I'm increasingly agreeing with this.

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

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.

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

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.

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.

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.

Ha noted, thanks

@TheBlueMatt
TheBlueMatt merged commit 8a27d8e into lightningdevkit:masterMay 6, 2020
@valentinewallace
valentinewallace deleted the less-confusing-chan-reserve-names branch May 6, 2020 02:16
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

channel_reserve_satoshis variable names confusing

4 participants

@valentinewallace@TheBlueMatt@jkczyz@ariard
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Make channel reserve variable names less confusing. - #613

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names
May 6, 2020
Merged

Make channel reserve variable names less confusing.#613
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names

Conversation

@valentinewallace

Copy link
Copy Markdown
Contributor

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.

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

codecovBot commented May 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #613 into master will increase coverage by 0.00%.
The diff coverage is 96.96%.

Impacted file tree graph

@@ Coverage Diff @@## master #613 +/- ##
=======================================
Coverage 91.12% 91.12% =======================================
Files 34 34 Lines 20544 20545 +1 =======================================
+ Hits 18720 18721 +1 
Misses 1824 1824 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.42% <95.83%> (+<0.01%)⬆️
lightning/src/ln/functional_tests.rs97.04% <100.00%> (ø)

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 9098240...1b656f4. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Maybe to_self_channel_reserve_satoshis? "local" is also somewhat overloaded in a few ways whereas to_self is pretty clear in that its the value to us.

@jkczyz

Copy link
Copy Markdown
Contributor

@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?

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

local can refer to a payment to us (the "local node"), or a local transaction (ie one which we can broadcast, for which the signature was provided by "the remote node"). I think those are the two main ones, but certainly conflict in a few places AFAIR.

@jkczyz

Copy link
Copy Markdown
Contributor

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

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

While local may have those other meanings, local_channel_reserve as a whole is pretty plainly descriptive and has an obvious meaning.

My 2 sats. to_self is a compromise I could live with.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@jkczyz

Copy link
Copy Markdown
Contributor

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"

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.

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.

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 Channel has 56 fields (!) if I accurately counted them. It seems ripe for refactoring. That said, let's limit the scope of this PR to a simple rename if we can. 😃

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

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"

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

@ariard

Copy link
Copy Markdown

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.

IIRC no, can't find a counter-example on-the-fly.

The abstraction is simply a channel that has two ends.

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.

Obscurity causes complexity, and complexity makes code hard to understand as has been demonstrated.

I fairly agree with that. I've already introduced bug in the past due to confusion between their_to_self/our_to_self in ChannelMonitor.

Or possibly making smaller abstractions that encapsulated some functionality

Agree too, we should be avoid being Linux with a 200-fields task_struct

I would like also to raise your awareness about name keys like a_htlc_key or b_htlc_key in get_htlc_redeemscript_with_explicit_keys functions-like. If someone wants to burn them I would be happy to bring the spark :p

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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

I think I'm increasingly agreeing with this.

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

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.

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

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.

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.

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.

Ha noted, thanks

@TheBlueMatt
TheBlueMatt merged commit 8a27d8e into lightningdevkit:masterMay 6, 2020
@valentinewallace
valentinewallace deleted the less-confusing-chan-reserve-names branch May 6, 2020 02:16
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

channel_reserve_satoshis variable names confusing

4 participants

@valentinewallace@TheBlueMatt@jkczyz@ariard
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Make channel reserve variable names less confusing. - #613

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names
May 6, 2020
Merged

Make channel reserve variable names less confusing.#613
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names

Conversation

@valentinewallace

Copy link
Copy Markdown
Contributor

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.

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

codecovBot commented May 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #613 into master will increase coverage by 0.00%.
The diff coverage is 96.96%.

Impacted file tree graph

@@ Coverage Diff @@## master #613 +/- ##
=======================================
Coverage 91.12% 91.12% =======================================
Files 34 34 Lines 20544 20545 +1 =======================================
+ Hits 18720 18721 +1 
Misses 1824 1824 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.42% <95.83%> (+<0.01%)⬆️
lightning/src/ln/functional_tests.rs97.04% <100.00%> (ø)

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 9098240...1b656f4. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Maybe to_self_channel_reserve_satoshis? "local" is also somewhat overloaded in a few ways whereas to_self is pretty clear in that its the value to us.

@jkczyz

Copy link
Copy Markdown
Contributor

@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?

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

local can refer to a payment to us (the "local node"), or a local transaction (ie one which we can broadcast, for which the signature was provided by "the remote node"). I think those are the two main ones, but certainly conflict in a few places AFAIR.

@jkczyz

Copy link
Copy Markdown
Contributor

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

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

While local may have those other meanings, local_channel_reserve as a whole is pretty plainly descriptive and has an obvious meaning.

My 2 sats. to_self is a compromise I could live with.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@jkczyz

Copy link
Copy Markdown
Contributor

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"

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.

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.

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 Channel has 56 fields (!) if I accurately counted them. It seems ripe for refactoring. That said, let's limit the scope of this PR to a simple rename if we can. 😃

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

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"

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

@ariard

Copy link
Copy Markdown

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.

IIRC no, can't find a counter-example on-the-fly.

The abstraction is simply a channel that has two ends.

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.

Obscurity causes complexity, and complexity makes code hard to understand as has been demonstrated.

I fairly agree with that. I've already introduced bug in the past due to confusion between their_to_self/our_to_self in ChannelMonitor.

Or possibly making smaller abstractions that encapsulated some functionality

Agree too, we should be avoid being Linux with a 200-fields task_struct

I would like also to raise your awareness about name keys like a_htlc_key or b_htlc_key in get_htlc_redeemscript_with_explicit_keys functions-like. If someone wants to burn them I would be happy to bring the spark :p

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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

I think I'm increasingly agreeing with this.

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

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.

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

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.

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.

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.

Ha noted, thanks

@TheBlueMatt
TheBlueMatt merged commit 8a27d8e into lightningdevkit:masterMay 6, 2020
@valentinewallace
valentinewallace deleted the less-confusing-chan-reserve-names branch May 6, 2020 02:16
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

channel_reserve_satoshis variable names confusing

4 participants

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

Make channel reserve variable names less confusing. - #613

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names
May 6, 2020
Merged

Make channel reserve variable names less confusing.#613
TheBlueMatt merged 1 commit into
lightningdevkit:masterfrom
valentinewallace:less-confusing-chan-reserve-names

Conversation

@valentinewallace

Copy link
Copy Markdown
Contributor

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.

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

codecovBot commented May 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #613 into master will increase coverage by 0.00%.
The diff coverage is 96.96%.

Impacted file tree graph

@@ Coverage Diff @@## master #613 +/- ##
=======================================
Coverage 91.12% 91.12% =======================================
Files 34 34 Lines 20544 20545 +1 =======================================
+ Hits 18720 18721 +1 
Misses 1824 1824 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.42% <95.83%> (+<0.01%)⬆️
lightning/src/ln/functional_tests.rs97.04% <100.00%> (ø)

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 9098240...1b656f4. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Maybe to_self_channel_reserve_satoshis? "local" is also somewhat overloaded in a few ways whereas to_self is pretty clear in that its the value to us.

@jkczyz

Copy link
Copy Markdown
Contributor

@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?

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

local can refer to a payment to us (the "local node"), or a local transaction (ie one which we can broadcast, for which the signature was provided by "the remote node"). I think those are the two main ones, but certainly conflict in a few places AFAIR.

@jkczyz

Copy link
Copy Markdown
Contributor

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

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

While local may have those other meanings, local_channel_reserve as a whole is pretty plainly descriptive and has an obvious meaning.

My 2 sats. to_self is a compromise I could live with.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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.

@jkczyz

Copy link
Copy Markdown
Contributor

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"

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.

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.

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 Channel has 56 fields (!) if I accurately counted them. It seems ripe for refactoring. That said, let's limit the scope of this PR to a simple rename if we can. 😃

@valentinewallace

Copy link
Copy Markdown
ContributorAuthor

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"

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

@ariard

Copy link
Copy Markdown

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.

IIRC no, can't find a counter-example on-the-fly.

The abstraction is simply a channel that has two ends.

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.

Obscurity causes complexity, and complexity makes code hard to understand as has been demonstrated.

I fairly agree with that. I've already introduced bug in the past due to confusion between their_to_self/our_to_self in ChannelMonitor.

Or possibly making smaller abstractions that encapsulated some functionality

Agree too, we should be avoid being Linux with a 200-fields task_struct

I would like also to raise your awareness about name keys like a_htlc_key or b_htlc_key in get_htlc_redeemscript_with_explicit_keys functions-like. If someone wants to burn them I would be happy to bring the spark :p

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

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

I think I'm increasingly agreeing with this.

I guess I'd point out that me, Jeff, Antoine and yuntai all assumed that local would mean the former and not the latter, so I'd argue that evidence suggests your confusion may be pretty rare and not apply to the majority of people (no offense intended).

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.

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

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.

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.

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.

Ha noted, thanks

@TheBlueMatt
TheBlueMatt merged commit 8a27d8e into lightningdevkit:masterMay 6, 2020
@valentinewallace
valentinewallace deleted the less-confusing-chan-reserve-names branch May 6, 2020 02:16
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

channel_reserve_satoshis variable names confusing

4 participants

@valentinewallace@TheBlueMatt@jkczyz@ariard