Skip to content

Require static_remotekey - #539

Merged
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey
May 6, 2020
Merged

Require static_remotekey#539
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Based on #441 (tough I could maybe drop that), #472, and #537, this adds support for, requires, and drops code for pre-static_remotekey channels. Since this is gonna be required for simplified_commitment (which we're gonna want for 0.1 so that we don't have to rely on fee prediction) I don't see a reason to support non-static_remotekey channels.

[ ] I need to PR the changes to the test chases for channel transaction unit tests upstream to compare with other implementations.

@TheBlueMattTheBlueMatt added this to the 0.1 milestone Mar 9, 2020
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

CC lightning/bolts#758

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Far simpler than expected, would have my vote to go after ChanMonitor refactoring patchset

Comment threadlightning/src/ln/channelmonitor.rs Outdated
// Thanks to data loss protection, we may be able to claim our non-htlc funds
// back, this is the script we have to spend from but we need to
// scan every commitment transaction for that
to_remote_rescue: Option<(Script, SecretKey)>,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Note: I'm already cutting out a lot of code based on to_remote_output after the #562 patchset, so rebasing this on top should even simplify change further.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 961f225 to 524c324CompareApril 28, 2020 00:25
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on #590 (which was rebased on master).

@codecov

codecovBot commented Apr 28, 2020

Copy link
Copy Markdown

Codecov Report

Merging #539 into master will increase coverage by 0.01%.
The diff coverage is 92.15%.

Impacted file tree graph

@@ Coverage Diff @@## master #539 +/- ##
==========================================
+ Coverage 91.12% 91.13% +0.01% 
==========================================
Files 34 34 Lines 20544 20504 -40 ==========================================
- Hits 18720 18686 -34 + Misses 1824 1818 -6 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.60% <ø> (+0.18%)⬆️
lightning/src/ln/channelmanager.rs85.49% <0.00%> (+0.03%)⬆️
lightning/src/ln/peer_handler.rs58.25% <60.00%> (-0.05%)⬇️
lightning/src/chain/keysinterface.rs96.98% <100.00%> (ø)
lightning/src/ln/chan_utils.rs97.17% <100.00%> (-0.02%)⬇️
lightning/src/ln/channelmonitor.rs95.52% <100.00%> (+0.01%)⬆️
lightning/src/ln/features.rs98.71% <100.00%> (+0.05%)⬆️
lightning/src/ln/functional_tests.rs97.02% <100.00%> (-0.02%)⬇️
lightning/src/ln/msgs.rs90.14% <100.00%> (ø)
lightning/src/util/enforcing_trait_impls.rs100.00% <100.00%> (ø)
... and 3 more

Continue to review full report at Codecov.

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

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 524c324 to acdd6d8CompareApril 29, 2020 01:01
@jkczyz
jkczyz self-requested a review April 29, 2020 18:17
This makes it easier to amend the full_stack_target
test_no_existing_test_breakage test by always providing the
neccessary data in the log.
It appears the local signatures which are specified in the channel
transaction-generation tests were never checked directly (though
they were checked as a part of the overall fully-signed-transaction
tests).
Check them explicitly so that they can be updated for static remote
key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from acdd6d8 to b007a68CompareApril 29, 2020 19:26
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on master directly now and updated the fuzz tests for the new tx format.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from b007a68 to 0e42876CompareApril 29, 2020 20:10
@valentinewallace
valentinewallace self-requested a review April 29, 2020 20:52
Comment threadlightning/src/ln/features.rs
Comment threadlightning/src/ln/features.rs Outdated
DataLossProtect | InitialRoutingSync | UpfrontShutdownScript,
// Byte 1
VariableLengthOnion | PaymentSecret,
VariableLengthOnion | StaticRemoteKey | PaymentSecret,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please update commit message as anything listed here is considered known as of #590.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Nah, thats a code bug, not a commit message bug :p.

Comment on lines -644 to +635
5u8.write(w)?;
4u8.write(w)?;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I assume there is no concern yet that this changes the serialization format. At what point will we need to be mindful about this?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I don't think so yet, no, but its probably something worth discussing. My answer was always "0.1", ie "once we actually think its reasonable to start testing on mainnet", but that's probably now "once we support anchor outputs, or at least the insecure-HTLCs version that it looks like we'll get first".

Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
@@ -3467,18 +3456,20 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
pub fn get_channel_reestablish(&self) -> msgs::ChannelReestablish {
assert_eq!(self.channel_state & ChannelState::PeerDisconnected as u32, ChannelState::PeerDisconnected as u32);
assert_ne!(self.cur_remote_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
let mut pk = [2; 33]; pk[1] = 0xff; // Select a dummy pubkey which is valid in both "real" and fuzztarget modes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not sure I follow what is meant by this comment. If it's valid in "real" mode why wouldn't it also be valid in fuzztarget mode?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I updated the comment to be more verbose, but essentially fuzztarget mode has an arbitrary validity criteria, which we want to match, as well as actually being valid.

Comment threadlightning/src/ln/chan_utils.rs
Comment threadlightning/src/chain/keysinterface.rs Outdated
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 0e42876 to a37cd6dCompareMay 3, 2020 02:14

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Few docs points, but otherwise ACK. I can take the TODO if this get first.

Comment threadlightning/src/ln/chan_utils.rs Outdated
Comment threadlightning/src/chain/keysinterface.rs Outdated
Comment threadlightning/src/ln/channel.rs
return Err(ChannelError::CloseDelayBroadcast {
msg: "We have fallen behind - we have received proof that if we broadcast remote is going to claim our funds - we can't do any automated broadcasting",
update: monitor_update
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Doesn't matter anymore now but did we forget to implement "my_current_per_commitment_point" does not match the expected value"? I'm not even sure you can verify this given you don't have a comparison base if you're fallen behind.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, yea, seems so. One of those awkward "checking this has no value except to enforce that people don't generally set it wrong".........

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

indentation?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

No? Its indented because its a parameter to a fn.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Ah, ok. Missed that. Also responded too quick to antoine's comment, the whole thing did have an extra indent, I'd intended that for these lines but not the top "let" line. Fixed.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from a37cd6d to e1e3090CompareMay 4, 2020 17:58

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One small comment but otherwise looks good!

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

This adds the ability to check for static_remotekey in appropriate
feature contexts and prints it at connect time. It is still
considered unknown for the purposes of requires_unknown_bits() as
we don't yet implement it.
This simplifies channelmonitor quite nicely (as expected) as we
never have to be concerned with learning data in a DataLossProtect
which is require for us to claim our funds from the latest remote
commitment transaction.
We no longer derive any keys from the payment point, so they aren't
a "base" but simply a point/key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from e1e3090 to 07db23dCompareMay 6, 2020 01:43
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Fixes issues and squashed. Will confer with @ariard on ordering with #610 and then merge.

@ariard

Copy link
Copy Markdown

ACK 07db23d, just fixing my nit comments + Jeff one since last review.

@TheBlueMatt
TheBlueMatt merged commit d2520f4 into lightningdevkit:masterMay 6, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Aug 23, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Feb 4, 2021
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.

3 participants

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

Require static_remotekey - #539

Merged
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey
May 6, 2020
Merged

Require static_remotekey#539
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Based on #441 (tough I could maybe drop that), #472, and #537, this adds support for, requires, and drops code for pre-static_remotekey channels. Since this is gonna be required for simplified_commitment (which we're gonna want for 0.1 so that we don't have to rely on fee prediction) I don't see a reason to support non-static_remotekey channels.

[ ] I need to PR the changes to the test chases for channel transaction unit tests upstream to compare with other implementations.

@TheBlueMattTheBlueMatt added this to the 0.1 milestone Mar 9, 2020
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

CC lightning/bolts#758

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Far simpler than expected, would have my vote to go after ChanMonitor refactoring patchset

Comment threadlightning/src/ln/channelmonitor.rs Outdated
// Thanks to data loss protection, we may be able to claim our non-htlc funds
// back, this is the script we have to spend from but we need to
// scan every commitment transaction for that
to_remote_rescue: Option<(Script, SecretKey)>,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Note: I'm already cutting out a lot of code based on to_remote_output after the #562 patchset, so rebasing this on top should even simplify change further.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 961f225 to 524c324CompareApril 28, 2020 00:25
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on #590 (which was rebased on master).

@codecov

codecovBot commented Apr 28, 2020

Copy link
Copy Markdown

Codecov Report

Merging #539 into master will increase coverage by 0.01%.
The diff coverage is 92.15%.

Impacted file tree graph

@@ Coverage Diff @@## master #539 +/- ##
==========================================
+ Coverage 91.12% 91.13% +0.01% 
==========================================
Files 34 34 Lines 20544 20504 -40 ==========================================
- Hits 18720 18686 -34 + Misses 1824 1818 -6 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.60% <ø> (+0.18%)⬆️
lightning/src/ln/channelmanager.rs85.49% <0.00%> (+0.03%)⬆️
lightning/src/ln/peer_handler.rs58.25% <60.00%> (-0.05%)⬇️
lightning/src/chain/keysinterface.rs96.98% <100.00%> (ø)
lightning/src/ln/chan_utils.rs97.17% <100.00%> (-0.02%)⬇️
lightning/src/ln/channelmonitor.rs95.52% <100.00%> (+0.01%)⬆️
lightning/src/ln/features.rs98.71% <100.00%> (+0.05%)⬆️
lightning/src/ln/functional_tests.rs97.02% <100.00%> (-0.02%)⬇️
lightning/src/ln/msgs.rs90.14% <100.00%> (ø)
lightning/src/util/enforcing_trait_impls.rs100.00% <100.00%> (ø)
... and 3 more

Continue to review full report at Codecov.

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

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 524c324 to acdd6d8CompareApril 29, 2020 01:01
@jkczyz
jkczyz self-requested a review April 29, 2020 18:17
This makes it easier to amend the full_stack_target
test_no_existing_test_breakage test by always providing the
neccessary data in the log.
It appears the local signatures which are specified in the channel
transaction-generation tests were never checked directly (though
they were checked as a part of the overall fully-signed-transaction
tests).
Check them explicitly so that they can be updated for static remote
key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from acdd6d8 to b007a68CompareApril 29, 2020 19:26
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on master directly now and updated the fuzz tests for the new tx format.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from b007a68 to 0e42876CompareApril 29, 2020 20:10
@valentinewallace
valentinewallace self-requested a review April 29, 2020 20:52
Comment threadlightning/src/ln/features.rs
Comment threadlightning/src/ln/features.rs Outdated
DataLossProtect | InitialRoutingSync | UpfrontShutdownScript,
// Byte 1
VariableLengthOnion | PaymentSecret,
VariableLengthOnion | StaticRemoteKey | PaymentSecret,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please update commit message as anything listed here is considered known as of #590.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Nah, thats a code bug, not a commit message bug :p.

Comment on lines -644 to +635
5u8.write(w)?;
4u8.write(w)?;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I assume there is no concern yet that this changes the serialization format. At what point will we need to be mindful about this?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I don't think so yet, no, but its probably something worth discussing. My answer was always "0.1", ie "once we actually think its reasonable to start testing on mainnet", but that's probably now "once we support anchor outputs, or at least the insecure-HTLCs version that it looks like we'll get first".

Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
@@ -3467,18 +3456,20 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
pub fn get_channel_reestablish(&self) -> msgs::ChannelReestablish {
assert_eq!(self.channel_state & ChannelState::PeerDisconnected as u32, ChannelState::PeerDisconnected as u32);
assert_ne!(self.cur_remote_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
let mut pk = [2; 33]; pk[1] = 0xff; // Select a dummy pubkey which is valid in both "real" and fuzztarget modes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not sure I follow what is meant by this comment. If it's valid in "real" mode why wouldn't it also be valid in fuzztarget mode?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I updated the comment to be more verbose, but essentially fuzztarget mode has an arbitrary validity criteria, which we want to match, as well as actually being valid.

Comment threadlightning/src/ln/chan_utils.rs
Comment threadlightning/src/chain/keysinterface.rs Outdated
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 0e42876 to a37cd6dCompareMay 3, 2020 02:14

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Few docs points, but otherwise ACK. I can take the TODO if this get first.

Comment threadlightning/src/ln/chan_utils.rs Outdated
Comment threadlightning/src/chain/keysinterface.rs Outdated
Comment threadlightning/src/ln/channel.rs
return Err(ChannelError::CloseDelayBroadcast {
msg: "We have fallen behind - we have received proof that if we broadcast remote is going to claim our funds - we can't do any automated broadcasting",
update: monitor_update
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Doesn't matter anymore now but did we forget to implement "my_current_per_commitment_point" does not match the expected value"? I'm not even sure you can verify this given you don't have a comparison base if you're fallen behind.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, yea, seems so. One of those awkward "checking this has no value except to enforce that people don't generally set it wrong".........

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

indentation?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

No? Its indented because its a parameter to a fn.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Ah, ok. Missed that. Also responded too quick to antoine's comment, the whole thing did have an extra indent, I'd intended that for these lines but not the top "let" line. Fixed.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from a37cd6d to e1e3090CompareMay 4, 2020 17:58

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One small comment but otherwise looks good!

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

This adds the ability to check for static_remotekey in appropriate
feature contexts and prints it at connect time. It is still
considered unknown for the purposes of requires_unknown_bits() as
we don't yet implement it.
This simplifies channelmonitor quite nicely (as expected) as we
never have to be concerned with learning data in a DataLossProtect
which is require for us to claim our funds from the latest remote
commitment transaction.
We no longer derive any keys from the payment point, so they aren't
a "base" but simply a point/key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from e1e3090 to 07db23dCompareMay 6, 2020 01:43
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Fixes issues and squashed. Will confer with @ariard on ordering with #610 and then merge.

@ariard

Copy link
Copy Markdown

ACK 07db23d, just fixing my nit comments + Jeff one since last review.

@TheBlueMatt
TheBlueMatt merged commit d2520f4 into lightningdevkit:masterMay 6, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Aug 23, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Feb 4, 2021
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.

3 participants

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

Require static_remotekey - #539

Merged
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey
May 6, 2020
Merged

Require static_remotekey#539
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Based on #441 (tough I could maybe drop that), #472, and #537, this adds support for, requires, and drops code for pre-static_remotekey channels. Since this is gonna be required for simplified_commitment (which we're gonna want for 0.1 so that we don't have to rely on fee prediction) I don't see a reason to support non-static_remotekey channels.

[ ] I need to PR the changes to the test chases for channel transaction unit tests upstream to compare with other implementations.

@TheBlueMattTheBlueMatt added this to the 0.1 milestone Mar 9, 2020
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

CC lightning/bolts#758

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Far simpler than expected, would have my vote to go after ChanMonitor refactoring patchset

Comment threadlightning/src/ln/channelmonitor.rs Outdated
// Thanks to data loss protection, we may be able to claim our non-htlc funds
// back, this is the script we have to spend from but we need to
// scan every commitment transaction for that
to_remote_rescue: Option<(Script, SecretKey)>,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Note: I'm already cutting out a lot of code based on to_remote_output after the #562 patchset, so rebasing this on top should even simplify change further.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 961f225 to 524c324CompareApril 28, 2020 00:25
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on #590 (which was rebased on master).

@codecov

codecovBot commented Apr 28, 2020

Copy link
Copy Markdown

Codecov Report

Merging #539 into master will increase coverage by 0.01%.
The diff coverage is 92.15%.

Impacted file tree graph

@@ Coverage Diff @@## master #539 +/- ##
==========================================
+ Coverage 91.12% 91.13% +0.01% 
==========================================
Files 34 34 Lines 20544 20504 -40 ==========================================
- Hits 18720 18686 -34 + Misses 1824 1818 -6 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.60% <ø> (+0.18%)⬆️
lightning/src/ln/channelmanager.rs85.49% <0.00%> (+0.03%)⬆️
lightning/src/ln/peer_handler.rs58.25% <60.00%> (-0.05%)⬇️
lightning/src/chain/keysinterface.rs96.98% <100.00%> (ø)
lightning/src/ln/chan_utils.rs97.17% <100.00%> (-0.02%)⬇️
lightning/src/ln/channelmonitor.rs95.52% <100.00%> (+0.01%)⬆️
lightning/src/ln/features.rs98.71% <100.00%> (+0.05%)⬆️
lightning/src/ln/functional_tests.rs97.02% <100.00%> (-0.02%)⬇️
lightning/src/ln/msgs.rs90.14% <100.00%> (ø)
lightning/src/util/enforcing_trait_impls.rs100.00% <100.00%> (ø)
... and 3 more

Continue to review full report at Codecov.

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

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 524c324 to acdd6d8CompareApril 29, 2020 01:01
@jkczyz
jkczyz self-requested a review April 29, 2020 18:17
This makes it easier to amend the full_stack_target
test_no_existing_test_breakage test by always providing the
neccessary data in the log.
It appears the local signatures which are specified in the channel
transaction-generation tests were never checked directly (though
they were checked as a part of the overall fully-signed-transaction
tests).
Check them explicitly so that they can be updated for static remote
key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from acdd6d8 to b007a68CompareApril 29, 2020 19:26
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on master directly now and updated the fuzz tests for the new tx format.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from b007a68 to 0e42876CompareApril 29, 2020 20:10
@valentinewallace
valentinewallace self-requested a review April 29, 2020 20:52
Comment threadlightning/src/ln/features.rs
Comment threadlightning/src/ln/features.rs Outdated
DataLossProtect | InitialRoutingSync | UpfrontShutdownScript,
// Byte 1
VariableLengthOnion | PaymentSecret,
VariableLengthOnion | StaticRemoteKey | PaymentSecret,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please update commit message as anything listed here is considered known as of #590.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Nah, thats a code bug, not a commit message bug :p.

Comment on lines -644 to +635
5u8.write(w)?;
4u8.write(w)?;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I assume there is no concern yet that this changes the serialization format. At what point will we need to be mindful about this?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I don't think so yet, no, but its probably something worth discussing. My answer was always "0.1", ie "once we actually think its reasonable to start testing on mainnet", but that's probably now "once we support anchor outputs, or at least the insecure-HTLCs version that it looks like we'll get first".

Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
@@ -3467,18 +3456,20 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
pub fn get_channel_reestablish(&self) -> msgs::ChannelReestablish {
assert_eq!(self.channel_state & ChannelState::PeerDisconnected as u32, ChannelState::PeerDisconnected as u32);
assert_ne!(self.cur_remote_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
let mut pk = [2; 33]; pk[1] = 0xff; // Select a dummy pubkey which is valid in both "real" and fuzztarget modes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not sure I follow what is meant by this comment. If it's valid in "real" mode why wouldn't it also be valid in fuzztarget mode?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I updated the comment to be more verbose, but essentially fuzztarget mode has an arbitrary validity criteria, which we want to match, as well as actually being valid.

Comment threadlightning/src/ln/chan_utils.rs
Comment threadlightning/src/chain/keysinterface.rs Outdated
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 0e42876 to a37cd6dCompareMay 3, 2020 02:14

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Few docs points, but otherwise ACK. I can take the TODO if this get first.

Comment threadlightning/src/ln/chan_utils.rs Outdated
Comment threadlightning/src/chain/keysinterface.rs Outdated
Comment threadlightning/src/ln/channel.rs
return Err(ChannelError::CloseDelayBroadcast {
msg: "We have fallen behind - we have received proof that if we broadcast remote is going to claim our funds - we can't do any automated broadcasting",
update: monitor_update
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Doesn't matter anymore now but did we forget to implement "my_current_per_commitment_point" does not match the expected value"? I'm not even sure you can verify this given you don't have a comparison base if you're fallen behind.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, yea, seems so. One of those awkward "checking this has no value except to enforce that people don't generally set it wrong".........

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

indentation?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

No? Its indented because its a parameter to a fn.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Ah, ok. Missed that. Also responded too quick to antoine's comment, the whole thing did have an extra indent, I'd intended that for these lines but not the top "let" line. Fixed.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from a37cd6d to e1e3090CompareMay 4, 2020 17:58

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One small comment but otherwise looks good!

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

This adds the ability to check for static_remotekey in appropriate
feature contexts and prints it at connect time. It is still
considered unknown for the purposes of requires_unknown_bits() as
we don't yet implement it.
This simplifies channelmonitor quite nicely (as expected) as we
never have to be concerned with learning data in a DataLossProtect
which is require for us to claim our funds from the latest remote
commitment transaction.
We no longer derive any keys from the payment point, so they aren't
a "base" but simply a point/key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from e1e3090 to 07db23dCompareMay 6, 2020 01:43
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Fixes issues and squashed. Will confer with @ariard on ordering with #610 and then merge.

@ariard

Copy link
Copy Markdown

ACK 07db23d, just fixing my nit comments + Jeff one since last review.

@TheBlueMatt
TheBlueMatt merged commit d2520f4 into lightningdevkit:masterMay 6, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Aug 23, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Feb 4, 2021
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.

3 participants

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

Require static_remotekey - #539

Merged
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey
May 6, 2020
Merged

Require static_remotekey#539
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Based on #441 (tough I could maybe drop that), #472, and #537, this adds support for, requires, and drops code for pre-static_remotekey channels. Since this is gonna be required for simplified_commitment (which we're gonna want for 0.1 so that we don't have to rely on fee prediction) I don't see a reason to support non-static_remotekey channels.

[ ] I need to PR the changes to the test chases for channel transaction unit tests upstream to compare with other implementations.

@TheBlueMattTheBlueMatt added this to the 0.1 milestone Mar 9, 2020
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

CC lightning/bolts#758

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Far simpler than expected, would have my vote to go after ChanMonitor refactoring patchset

Comment threadlightning/src/ln/channelmonitor.rs Outdated
// Thanks to data loss protection, we may be able to claim our non-htlc funds
// back, this is the script we have to spend from but we need to
// scan every commitment transaction for that
to_remote_rescue: Option<(Script, SecretKey)>,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Note: I'm already cutting out a lot of code based on to_remote_output after the #562 patchset, so rebasing this on top should even simplify change further.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 961f225 to 524c324CompareApril 28, 2020 00:25
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on #590 (which was rebased on master).

@codecov

codecovBot commented Apr 28, 2020

Copy link
Copy Markdown

Codecov Report

Merging #539 into master will increase coverage by 0.01%.
The diff coverage is 92.15%.

Impacted file tree graph

@@ Coverage Diff @@## master #539 +/- ##
==========================================
+ Coverage 91.12% 91.13% +0.01% 
==========================================
Files 34 34 Lines 20544 20504 -40 ==========================================
- Hits 18720 18686 -34 + Misses 1824 1818 -6 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.60% <ø> (+0.18%)⬆️
lightning/src/ln/channelmanager.rs85.49% <0.00%> (+0.03%)⬆️
lightning/src/ln/peer_handler.rs58.25% <60.00%> (-0.05%)⬇️
lightning/src/chain/keysinterface.rs96.98% <100.00%> (ø)
lightning/src/ln/chan_utils.rs97.17% <100.00%> (-0.02%)⬇️
lightning/src/ln/channelmonitor.rs95.52% <100.00%> (+0.01%)⬆️
lightning/src/ln/features.rs98.71% <100.00%> (+0.05%)⬆️
lightning/src/ln/functional_tests.rs97.02% <100.00%> (-0.02%)⬇️
lightning/src/ln/msgs.rs90.14% <100.00%> (ø)
lightning/src/util/enforcing_trait_impls.rs100.00% <100.00%> (ø)
... and 3 more

Continue to review full report at Codecov.

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

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 524c324 to acdd6d8CompareApril 29, 2020 01:01
@jkczyz
jkczyz self-requested a review April 29, 2020 18:17
This makes it easier to amend the full_stack_target
test_no_existing_test_breakage test by always providing the
neccessary data in the log.
It appears the local signatures which are specified in the channel
transaction-generation tests were never checked directly (though
they were checked as a part of the overall fully-signed-transaction
tests).
Check them explicitly so that they can be updated for static remote
key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from acdd6d8 to b007a68CompareApril 29, 2020 19:26
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on master directly now and updated the fuzz tests for the new tx format.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from b007a68 to 0e42876CompareApril 29, 2020 20:10
@valentinewallace
valentinewallace self-requested a review April 29, 2020 20:52
Comment threadlightning/src/ln/features.rs
Comment threadlightning/src/ln/features.rs Outdated
DataLossProtect | InitialRoutingSync | UpfrontShutdownScript,
// Byte 1
VariableLengthOnion | PaymentSecret,
VariableLengthOnion | StaticRemoteKey | PaymentSecret,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please update commit message as anything listed here is considered known as of #590.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Nah, thats a code bug, not a commit message bug :p.

Comment on lines -644 to +635
5u8.write(w)?;
4u8.write(w)?;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I assume there is no concern yet that this changes the serialization format. At what point will we need to be mindful about this?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I don't think so yet, no, but its probably something worth discussing. My answer was always "0.1", ie "once we actually think its reasonable to start testing on mainnet", but that's probably now "once we support anchor outputs, or at least the insecure-HTLCs version that it looks like we'll get first".

Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
@@ -3467,18 +3456,20 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
pub fn get_channel_reestablish(&self) -> msgs::ChannelReestablish {
assert_eq!(self.channel_state & ChannelState::PeerDisconnected as u32, ChannelState::PeerDisconnected as u32);
assert_ne!(self.cur_remote_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
let mut pk = [2; 33]; pk[1] = 0xff; // Select a dummy pubkey which is valid in both "real" and fuzztarget modes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not sure I follow what is meant by this comment. If it's valid in "real" mode why wouldn't it also be valid in fuzztarget mode?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I updated the comment to be more verbose, but essentially fuzztarget mode has an arbitrary validity criteria, which we want to match, as well as actually being valid.

Comment threadlightning/src/ln/chan_utils.rs
Comment threadlightning/src/chain/keysinterface.rs Outdated
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 0e42876 to a37cd6dCompareMay 3, 2020 02:14

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Few docs points, but otherwise ACK. I can take the TODO if this get first.

Comment threadlightning/src/ln/chan_utils.rs Outdated
Comment threadlightning/src/chain/keysinterface.rs Outdated
Comment threadlightning/src/ln/channel.rs
return Err(ChannelError::CloseDelayBroadcast {
msg: "We have fallen behind - we have received proof that if we broadcast remote is going to claim our funds - we can't do any automated broadcasting",
update: monitor_update
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Doesn't matter anymore now but did we forget to implement "my_current_per_commitment_point" does not match the expected value"? I'm not even sure you can verify this given you don't have a comparison base if you're fallen behind.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, yea, seems so. One of those awkward "checking this has no value except to enforce that people don't generally set it wrong".........

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

indentation?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

No? Its indented because its a parameter to a fn.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Ah, ok. Missed that. Also responded too quick to antoine's comment, the whole thing did have an extra indent, I'd intended that for these lines but not the top "let" line. Fixed.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from a37cd6d to e1e3090CompareMay 4, 2020 17:58

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One small comment but otherwise looks good!

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

This adds the ability to check for static_remotekey in appropriate
feature contexts and prints it at connect time. It is still
considered unknown for the purposes of requires_unknown_bits() as
we don't yet implement it.
This simplifies channelmonitor quite nicely (as expected) as we
never have to be concerned with learning data in a DataLossProtect
which is require for us to claim our funds from the latest remote
commitment transaction.
We no longer derive any keys from the payment point, so they aren't
a "base" but simply a point/key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from e1e3090 to 07db23dCompareMay 6, 2020 01:43
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Fixes issues and squashed. Will confer with @ariard on ordering with #610 and then merge.

@ariard

Copy link
Copy Markdown

ACK 07db23d, just fixing my nit comments + Jeff one since last review.

@TheBlueMatt
TheBlueMatt merged commit d2520f4 into lightningdevkit:masterMay 6, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Aug 23, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Feb 4, 2021
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.

3 participants

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

Require static_remotekey - #539

Merged
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey
May 6, 2020
Merged

Require static_remotekey#539
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Based on #441 (tough I could maybe drop that), #472, and #537, this adds support for, requires, and drops code for pre-static_remotekey channels. Since this is gonna be required for simplified_commitment (which we're gonna want for 0.1 so that we don't have to rely on fee prediction) I don't see a reason to support non-static_remotekey channels.

[ ] I need to PR the changes to the test chases for channel transaction unit tests upstream to compare with other implementations.

@TheBlueMattTheBlueMatt added this to the 0.1 milestone Mar 9, 2020
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

CC lightning/bolts#758

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Far simpler than expected, would have my vote to go after ChanMonitor refactoring patchset

Comment threadlightning/src/ln/channelmonitor.rs Outdated
// Thanks to data loss protection, we may be able to claim our non-htlc funds
// back, this is the script we have to spend from but we need to
// scan every commitment transaction for that
to_remote_rescue: Option<(Script, SecretKey)>,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Note: I'm already cutting out a lot of code based on to_remote_output after the #562 patchset, so rebasing this on top should even simplify change further.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 961f225 to 524c324CompareApril 28, 2020 00:25
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on #590 (which was rebased on master).

@codecov

codecovBot commented Apr 28, 2020

Copy link
Copy Markdown

Codecov Report

Merging #539 into master will increase coverage by 0.01%.
The diff coverage is 92.15%.

Impacted file tree graph

@@ Coverage Diff @@## master #539 +/- ##
==========================================
+ Coverage 91.12% 91.13% +0.01% 
==========================================
Files 34 34 Lines 20544 20504 -40 ==========================================
- Hits 18720 18686 -34 + Misses 1824 1818 -6 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.60% <ø> (+0.18%)⬆️
lightning/src/ln/channelmanager.rs85.49% <0.00%> (+0.03%)⬆️
lightning/src/ln/peer_handler.rs58.25% <60.00%> (-0.05%)⬇️
lightning/src/chain/keysinterface.rs96.98% <100.00%> (ø)
lightning/src/ln/chan_utils.rs97.17% <100.00%> (-0.02%)⬇️
lightning/src/ln/channelmonitor.rs95.52% <100.00%> (+0.01%)⬆️
lightning/src/ln/features.rs98.71% <100.00%> (+0.05%)⬆️
lightning/src/ln/functional_tests.rs97.02% <100.00%> (-0.02%)⬇️
lightning/src/ln/msgs.rs90.14% <100.00%> (ø)
lightning/src/util/enforcing_trait_impls.rs100.00% <100.00%> (ø)
... and 3 more

Continue to review full report at Codecov.

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

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 524c324 to acdd6d8CompareApril 29, 2020 01:01
@jkczyz
jkczyz self-requested a review April 29, 2020 18:17
This makes it easier to amend the full_stack_target
test_no_existing_test_breakage test by always providing the
neccessary data in the log.
It appears the local signatures which are specified in the channel
transaction-generation tests were never checked directly (though
they were checked as a part of the overall fully-signed-transaction
tests).
Check them explicitly so that they can be updated for static remote
key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from acdd6d8 to b007a68CompareApril 29, 2020 19:26
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on master directly now and updated the fuzz tests for the new tx format.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from b007a68 to 0e42876CompareApril 29, 2020 20:10
@valentinewallace
valentinewallace self-requested a review April 29, 2020 20:52
Comment threadlightning/src/ln/features.rs
Comment threadlightning/src/ln/features.rs Outdated
DataLossProtect | InitialRoutingSync | UpfrontShutdownScript,
// Byte 1
VariableLengthOnion | PaymentSecret,
VariableLengthOnion | StaticRemoteKey | PaymentSecret,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please update commit message as anything listed here is considered known as of #590.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Nah, thats a code bug, not a commit message bug :p.

Comment on lines -644 to +635
5u8.write(w)?;
4u8.write(w)?;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I assume there is no concern yet that this changes the serialization format. At what point will we need to be mindful about this?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I don't think so yet, no, but its probably something worth discussing. My answer was always "0.1", ie "once we actually think its reasonable to start testing on mainnet", but that's probably now "once we support anchor outputs, or at least the insecure-HTLCs version that it looks like we'll get first".

Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
@@ -3467,18 +3456,20 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
pub fn get_channel_reestablish(&self) -> msgs::ChannelReestablish {
assert_eq!(self.channel_state & ChannelState::PeerDisconnected as u32, ChannelState::PeerDisconnected as u32);
assert_ne!(self.cur_remote_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
let mut pk = [2; 33]; pk[1] = 0xff; // Select a dummy pubkey which is valid in both "real" and fuzztarget modes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not sure I follow what is meant by this comment. If it's valid in "real" mode why wouldn't it also be valid in fuzztarget mode?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I updated the comment to be more verbose, but essentially fuzztarget mode has an arbitrary validity criteria, which we want to match, as well as actually being valid.

Comment threadlightning/src/ln/chan_utils.rs
Comment threadlightning/src/chain/keysinterface.rs Outdated
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 0e42876 to a37cd6dCompareMay 3, 2020 02:14

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Few docs points, but otherwise ACK. I can take the TODO if this get first.

Comment threadlightning/src/ln/chan_utils.rs Outdated
Comment threadlightning/src/chain/keysinterface.rs Outdated
Comment threadlightning/src/ln/channel.rs
return Err(ChannelError::CloseDelayBroadcast {
msg: "We have fallen behind - we have received proof that if we broadcast remote is going to claim our funds - we can't do any automated broadcasting",
update: monitor_update
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Doesn't matter anymore now but did we forget to implement "my_current_per_commitment_point" does not match the expected value"? I'm not even sure you can verify this given you don't have a comparison base if you're fallen behind.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, yea, seems so. One of those awkward "checking this has no value except to enforce that people don't generally set it wrong".........

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

indentation?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

No? Its indented because its a parameter to a fn.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Ah, ok. Missed that. Also responded too quick to antoine's comment, the whole thing did have an extra indent, I'd intended that for these lines but not the top "let" line. Fixed.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from a37cd6d to e1e3090CompareMay 4, 2020 17:58

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One small comment but otherwise looks good!

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

This adds the ability to check for static_remotekey in appropriate
feature contexts and prints it at connect time. It is still
considered unknown for the purposes of requires_unknown_bits() as
we don't yet implement it.
This simplifies channelmonitor quite nicely (as expected) as we
never have to be concerned with learning data in a DataLossProtect
which is require for us to claim our funds from the latest remote
commitment transaction.
We no longer derive any keys from the payment point, so they aren't
a "base" but simply a point/key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from e1e3090 to 07db23dCompareMay 6, 2020 01:43
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Fixes issues and squashed. Will confer with @ariard on ordering with #610 and then merge.

@ariard

Copy link
Copy Markdown

ACK 07db23d, just fixing my nit comments + Jeff one since last review.

@TheBlueMatt
TheBlueMatt merged commit d2520f4 into lightningdevkit:masterMay 6, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Aug 23, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Feb 4, 2021
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.

3 participants

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

Require static_remotekey - #539

Merged
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey
May 6, 2020
Merged

Require static_remotekey#539
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Based on #441 (tough I could maybe drop that), #472, and #537, this adds support for, requires, and drops code for pre-static_remotekey channels. Since this is gonna be required for simplified_commitment (which we're gonna want for 0.1 so that we don't have to rely on fee prediction) I don't see a reason to support non-static_remotekey channels.

[ ] I need to PR the changes to the test chases for channel transaction unit tests upstream to compare with other implementations.

@TheBlueMattTheBlueMatt added this to the 0.1 milestone Mar 9, 2020
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

CC lightning/bolts#758

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Far simpler than expected, would have my vote to go after ChanMonitor refactoring patchset

Comment threadlightning/src/ln/channelmonitor.rs Outdated
// Thanks to data loss protection, we may be able to claim our non-htlc funds
// back, this is the script we have to spend from but we need to
// scan every commitment transaction for that
to_remote_rescue: Option<(Script, SecretKey)>,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Note: I'm already cutting out a lot of code based on to_remote_output after the #562 patchset, so rebasing this on top should even simplify change further.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 961f225 to 524c324CompareApril 28, 2020 00:25
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on #590 (which was rebased on master).

@codecov

codecovBot commented Apr 28, 2020

Copy link
Copy Markdown

Codecov Report

Merging #539 into master will increase coverage by 0.01%.
The diff coverage is 92.15%.

Impacted file tree graph

@@ Coverage Diff @@## master #539 +/- ##
==========================================
+ Coverage 91.12% 91.13% +0.01% 
==========================================
Files 34 34 Lines 20544 20504 -40 ==========================================
- Hits 18720 18686 -34 + Misses 1824 1818 -6 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.60% <ø> (+0.18%)⬆️
lightning/src/ln/channelmanager.rs85.49% <0.00%> (+0.03%)⬆️
lightning/src/ln/peer_handler.rs58.25% <60.00%> (-0.05%)⬇️
lightning/src/chain/keysinterface.rs96.98% <100.00%> (ø)
lightning/src/ln/chan_utils.rs97.17% <100.00%> (-0.02%)⬇️
lightning/src/ln/channelmonitor.rs95.52% <100.00%> (+0.01%)⬆️
lightning/src/ln/features.rs98.71% <100.00%> (+0.05%)⬆️
lightning/src/ln/functional_tests.rs97.02% <100.00%> (-0.02%)⬇️
lightning/src/ln/msgs.rs90.14% <100.00%> (ø)
lightning/src/util/enforcing_trait_impls.rs100.00% <100.00%> (ø)
... and 3 more

Continue to review full report at Codecov.

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

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 524c324 to acdd6d8CompareApril 29, 2020 01:01
@jkczyz
jkczyz self-requested a review April 29, 2020 18:17
This makes it easier to amend the full_stack_target
test_no_existing_test_breakage test by always providing the
neccessary data in the log.
It appears the local signatures which are specified in the channel
transaction-generation tests were never checked directly (though
they were checked as a part of the overall fully-signed-transaction
tests).
Check them explicitly so that they can be updated for static remote
key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from acdd6d8 to b007a68CompareApril 29, 2020 19:26
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on master directly now and updated the fuzz tests for the new tx format.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from b007a68 to 0e42876CompareApril 29, 2020 20:10
@valentinewallace
valentinewallace self-requested a review April 29, 2020 20:52
Comment threadlightning/src/ln/features.rs
Comment threadlightning/src/ln/features.rs Outdated
DataLossProtect | InitialRoutingSync | UpfrontShutdownScript,
// Byte 1
VariableLengthOnion | PaymentSecret,
VariableLengthOnion | StaticRemoteKey | PaymentSecret,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please update commit message as anything listed here is considered known as of #590.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Nah, thats a code bug, not a commit message bug :p.

Comment on lines -644 to +635
5u8.write(w)?;
4u8.write(w)?;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I assume there is no concern yet that this changes the serialization format. At what point will we need to be mindful about this?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I don't think so yet, no, but its probably something worth discussing. My answer was always "0.1", ie "once we actually think its reasonable to start testing on mainnet", but that's probably now "once we support anchor outputs, or at least the insecure-HTLCs version that it looks like we'll get first".

Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
@@ -3467,18 +3456,20 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
pub fn get_channel_reestablish(&self) -> msgs::ChannelReestablish {
assert_eq!(self.channel_state & ChannelState::PeerDisconnected as u32, ChannelState::PeerDisconnected as u32);
assert_ne!(self.cur_remote_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
let mut pk = [2; 33]; pk[1] = 0xff; // Select a dummy pubkey which is valid in both "real" and fuzztarget modes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not sure I follow what is meant by this comment. If it's valid in "real" mode why wouldn't it also be valid in fuzztarget mode?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I updated the comment to be more verbose, but essentially fuzztarget mode has an arbitrary validity criteria, which we want to match, as well as actually being valid.

Comment threadlightning/src/ln/chan_utils.rs
Comment threadlightning/src/chain/keysinterface.rs Outdated
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 0e42876 to a37cd6dCompareMay 3, 2020 02:14

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Few docs points, but otherwise ACK. I can take the TODO if this get first.

Comment threadlightning/src/ln/chan_utils.rs Outdated
Comment threadlightning/src/chain/keysinterface.rs Outdated
Comment threadlightning/src/ln/channel.rs
return Err(ChannelError::CloseDelayBroadcast {
msg: "We have fallen behind - we have received proof that if we broadcast remote is going to claim our funds - we can't do any automated broadcasting",
update: monitor_update
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Doesn't matter anymore now but did we forget to implement "my_current_per_commitment_point" does not match the expected value"? I'm not even sure you can verify this given you don't have a comparison base if you're fallen behind.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, yea, seems so. One of those awkward "checking this has no value except to enforce that people don't generally set it wrong".........

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

indentation?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

No? Its indented because its a parameter to a fn.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Ah, ok. Missed that. Also responded too quick to antoine's comment, the whole thing did have an extra indent, I'd intended that for these lines but not the top "let" line. Fixed.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from a37cd6d to e1e3090CompareMay 4, 2020 17:58

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One small comment but otherwise looks good!

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

This adds the ability to check for static_remotekey in appropriate
feature contexts and prints it at connect time. It is still
considered unknown for the purposes of requires_unknown_bits() as
we don't yet implement it.
This simplifies channelmonitor quite nicely (as expected) as we
never have to be concerned with learning data in a DataLossProtect
which is require for us to claim our funds from the latest remote
commitment transaction.
We no longer derive any keys from the payment point, so they aren't
a "base" but simply a point/key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from e1e3090 to 07db23dCompareMay 6, 2020 01:43
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Fixes issues and squashed. Will confer with @ariard on ordering with #610 and then merge.

@ariard

Copy link
Copy Markdown

ACK 07db23d, just fixing my nit comments + Jeff one since last review.

@TheBlueMatt
TheBlueMatt merged commit d2520f4 into lightningdevkit:masterMay 6, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Aug 23, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Feb 4, 2021
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.

3 participants

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

Require static_remotekey - #539

Merged
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey
May 6, 2020
Merged

Require static_remotekey#539
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Based on #441 (tough I could maybe drop that), #472, and #537, this adds support for, requires, and drops code for pre-static_remotekey channels. Since this is gonna be required for simplified_commitment (which we're gonna want for 0.1 so that we don't have to rely on fee prediction) I don't see a reason to support non-static_remotekey channels.

[ ] I need to PR the changes to the test chases for channel transaction unit tests upstream to compare with other implementations.

@TheBlueMattTheBlueMatt added this to the 0.1 milestone Mar 9, 2020
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

CC lightning/bolts#758

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Far simpler than expected, would have my vote to go after ChanMonitor refactoring patchset

Comment threadlightning/src/ln/channelmonitor.rs Outdated
// Thanks to data loss protection, we may be able to claim our non-htlc funds
// back, this is the script we have to spend from but we need to
// scan every commitment transaction for that
to_remote_rescue: Option<(Script, SecretKey)>,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Note: I'm already cutting out a lot of code based on to_remote_output after the #562 patchset, so rebasing this on top should even simplify change further.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 961f225 to 524c324CompareApril 28, 2020 00:25
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on #590 (which was rebased on master).

@codecov

codecovBot commented Apr 28, 2020

Copy link
Copy Markdown

Codecov Report

Merging #539 into master will increase coverage by 0.01%.
The diff coverage is 92.15%.

Impacted file tree graph

@@ Coverage Diff @@## master #539 +/- ##
==========================================
+ Coverage 91.12% 91.13% +0.01% 
==========================================
Files 34 34 Lines 20544 20504 -40 ==========================================
- Hits 18720 18686 -34 + Misses 1824 1818 -6 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.60% <ø> (+0.18%)⬆️
lightning/src/ln/channelmanager.rs85.49% <0.00%> (+0.03%)⬆️
lightning/src/ln/peer_handler.rs58.25% <60.00%> (-0.05%)⬇️
lightning/src/chain/keysinterface.rs96.98% <100.00%> (ø)
lightning/src/ln/chan_utils.rs97.17% <100.00%> (-0.02%)⬇️
lightning/src/ln/channelmonitor.rs95.52% <100.00%> (+0.01%)⬆️
lightning/src/ln/features.rs98.71% <100.00%> (+0.05%)⬆️
lightning/src/ln/functional_tests.rs97.02% <100.00%> (-0.02%)⬇️
lightning/src/ln/msgs.rs90.14% <100.00%> (ø)
lightning/src/util/enforcing_trait_impls.rs100.00% <100.00%> (ø)
... and 3 more

Continue to review full report at Codecov.

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

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 524c324 to acdd6d8CompareApril 29, 2020 01:01
@jkczyz
jkczyz self-requested a review April 29, 2020 18:17
This makes it easier to amend the full_stack_target
test_no_existing_test_breakage test by always providing the
neccessary data in the log.
It appears the local signatures which are specified in the channel
transaction-generation tests were never checked directly (though
they were checked as a part of the overall fully-signed-transaction
tests).
Check them explicitly so that they can be updated for static remote
key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from acdd6d8 to b007a68CompareApril 29, 2020 19:26
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on master directly now and updated the fuzz tests for the new tx format.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from b007a68 to 0e42876CompareApril 29, 2020 20:10
@valentinewallace
valentinewallace self-requested a review April 29, 2020 20:52
Comment threadlightning/src/ln/features.rs
Comment threadlightning/src/ln/features.rs Outdated
DataLossProtect | InitialRoutingSync | UpfrontShutdownScript,
// Byte 1
VariableLengthOnion | PaymentSecret,
VariableLengthOnion | StaticRemoteKey | PaymentSecret,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please update commit message as anything listed here is considered known as of #590.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Nah, thats a code bug, not a commit message bug :p.

Comment on lines -644 to +635
5u8.write(w)?;
4u8.write(w)?;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I assume there is no concern yet that this changes the serialization format. At what point will we need to be mindful about this?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I don't think so yet, no, but its probably something worth discussing. My answer was always "0.1", ie "once we actually think its reasonable to start testing on mainnet", but that's probably now "once we support anchor outputs, or at least the insecure-HTLCs version that it looks like we'll get first".

Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
@@ -3467,18 +3456,20 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
pub fn get_channel_reestablish(&self) -> msgs::ChannelReestablish {
assert_eq!(self.channel_state & ChannelState::PeerDisconnected as u32, ChannelState::PeerDisconnected as u32);
assert_ne!(self.cur_remote_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
let mut pk = [2; 33]; pk[1] = 0xff; // Select a dummy pubkey which is valid in both "real" and fuzztarget modes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not sure I follow what is meant by this comment. If it's valid in "real" mode why wouldn't it also be valid in fuzztarget mode?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I updated the comment to be more verbose, but essentially fuzztarget mode has an arbitrary validity criteria, which we want to match, as well as actually being valid.

Comment threadlightning/src/ln/chan_utils.rs
Comment threadlightning/src/chain/keysinterface.rs Outdated
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 0e42876 to a37cd6dCompareMay 3, 2020 02:14

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Few docs points, but otherwise ACK. I can take the TODO if this get first.

Comment threadlightning/src/ln/chan_utils.rs Outdated
Comment threadlightning/src/chain/keysinterface.rs Outdated
Comment threadlightning/src/ln/channel.rs
return Err(ChannelError::CloseDelayBroadcast {
msg: "We have fallen behind - we have received proof that if we broadcast remote is going to claim our funds - we can't do any automated broadcasting",
update: monitor_update
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Doesn't matter anymore now but did we forget to implement "my_current_per_commitment_point" does not match the expected value"? I'm not even sure you can verify this given you don't have a comparison base if you're fallen behind.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, yea, seems so. One of those awkward "checking this has no value except to enforce that people don't generally set it wrong".........

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

indentation?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

No? Its indented because its a parameter to a fn.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Ah, ok. Missed that. Also responded too quick to antoine's comment, the whole thing did have an extra indent, I'd intended that for these lines but not the top "let" line. Fixed.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from a37cd6d to e1e3090CompareMay 4, 2020 17:58

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One small comment but otherwise looks good!

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

This adds the ability to check for static_remotekey in appropriate
feature contexts and prints it at connect time. It is still
considered unknown for the purposes of requires_unknown_bits() as
we don't yet implement it.
This simplifies channelmonitor quite nicely (as expected) as we
never have to be concerned with learning data in a DataLossProtect
which is require for us to claim our funds from the latest remote
commitment transaction.
We no longer derive any keys from the payment point, so they aren't
a "base" but simply a point/key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from e1e3090 to 07db23dCompareMay 6, 2020 01:43
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Fixes issues and squashed. Will confer with @ariard on ordering with #610 and then merge.

@ariard

Copy link
Copy Markdown

ACK 07db23d, just fixing my nit comments + Jeff one since last review.

@TheBlueMatt
TheBlueMatt merged commit d2520f4 into lightningdevkit:masterMay 6, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Aug 23, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Feb 4, 2021
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.

3 participants

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

Require static_remotekey - #539

Merged
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey
May 6, 2020
Merged

Require static_remotekey#539
TheBlueMatt merged 5 commits into
lightningdevkit:masterfrom
TheBlueMatt:2020-03-static-remotekey

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Based on #441 (tough I could maybe drop that), #472, and #537, this adds support for, requires, and drops code for pre-static_remotekey channels. Since this is gonna be required for simplified_commitment (which we're gonna want for 0.1 so that we don't have to rely on fee prediction) I don't see a reason to support non-static_remotekey channels.

[ ] I need to PR the changes to the test chases for channel transaction unit tests upstream to compare with other implementations.

@TheBlueMattTheBlueMatt added this to the 0.1 milestone Mar 9, 2020
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

CC lightning/bolts#758

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Far simpler than expected, would have my vote to go after ChanMonitor refactoring patchset

Comment threadlightning/src/ln/channelmonitor.rs Outdated
// Thanks to data loss protection, we may be able to claim our non-htlc funds
// back, this is the script we have to spend from but we need to
// scan every commitment transaction for that
to_remote_rescue: Option<(Script, SecretKey)>,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Note: I'm already cutting out a lot of code based on to_remote_output after the #562 patchset, so rebasing this on top should even simplify change further.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 961f225 to 524c324CompareApril 28, 2020 00:25
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on #590 (which was rebased on master).

@codecov

codecovBot commented Apr 28, 2020

Copy link
Copy Markdown

Codecov Report

Merging #539 into master will increase coverage by 0.01%.
The diff coverage is 92.15%.

Impacted file tree graph

@@ Coverage Diff @@## master #539 +/- ##
==========================================
+ Coverage 91.12% 91.13% +0.01% 
==========================================
Files 34 34 Lines 20544 20504 -40 ==========================================
- Hits 18720 18686 -34 + Misses 1824 1818 -6 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs86.60% <ø> (+0.18%)⬆️
lightning/src/ln/channelmanager.rs85.49% <0.00%> (+0.03%)⬆️
lightning/src/ln/peer_handler.rs58.25% <60.00%> (-0.05%)⬇️
lightning/src/chain/keysinterface.rs96.98% <100.00%> (ø)
lightning/src/ln/chan_utils.rs97.17% <100.00%> (-0.02%)⬇️
lightning/src/ln/channelmonitor.rs95.52% <100.00%> (+0.01%)⬆️
lightning/src/ln/features.rs98.71% <100.00%> (+0.05%)⬆️
lightning/src/ln/functional_tests.rs97.02% <100.00%> (-0.02%)⬇️
lightning/src/ln/msgs.rs90.14% <100.00%> (ø)
lightning/src/util/enforcing_trait_impls.rs100.00% <100.00%> (ø)
... and 3 more

Continue to review full report at Codecov.

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

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 524c324 to acdd6d8CompareApril 29, 2020 01:01
@jkczyz
jkczyz self-requested a review April 29, 2020 18:17
This makes it easier to amend the full_stack_target
test_no_existing_test_breakage test by always providing the
neccessary data in the log.
It appears the local signatures which are specified in the channel
transaction-generation tests were never checked directly (though
they were checked as a part of the overall fully-signed-transaction
tests).
Check them explicitly so that they can be updated for static remote
key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from acdd6d8 to b007a68CompareApril 29, 2020 19:26
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased on master directly now and updated the fuzz tests for the new tx format.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from b007a68 to 0e42876CompareApril 29, 2020 20:10
@valentinewallace
valentinewallace self-requested a review April 29, 2020 20:52
Comment threadlightning/src/ln/features.rs
Comment threadlightning/src/ln/features.rs Outdated
DataLossProtect | InitialRoutingSync | UpfrontShutdownScript,
// Byte 1
VariableLengthOnion | PaymentSecret,
VariableLengthOnion | StaticRemoteKey | PaymentSecret,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please update commit message as anything listed here is considered known as of #590.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Nah, thats a code bug, not a commit message bug :p.

Comment on lines -644 to +635
5u8.write(w)?;
4u8.write(w)?;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I assume there is no concern yet that this changes the serialization format. At what point will we need to be mindful about this?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I don't think so yet, no, but its probably something worth discussing. My answer was always "0.1", ie "once we actually think its reasonable to start testing on mainnet", but that's probably now "once we support anchor outputs, or at least the insecure-HTLCs version that it looks like we'll get first".

Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
@@ -3467,18 +3456,20 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
pub fn get_channel_reestablish(&self) -> msgs::ChannelReestablish {
assert_eq!(self.channel_state & ChannelState::PeerDisconnected as u32, ChannelState::PeerDisconnected as u32);
assert_ne!(self.cur_remote_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
let mut pk = [2; 33]; pk[1] = 0xff; // Select a dummy pubkey which is valid in both "real" and fuzztarget modes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not sure I follow what is meant by this comment. If it's valid in "real" mode why wouldn't it also be valid in fuzztarget mode?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

I updated the comment to be more verbose, but essentially fuzztarget mode has an arbitrary validity criteria, which we want to match, as well as actually being valid.

Comment threadlightning/src/ln/chan_utils.rs
Comment threadlightning/src/chain/keysinterface.rs Outdated
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from 0e42876 to a37cd6dCompareMay 3, 2020 02:14

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Few docs points, but otherwise ACK. I can take the TODO if this get first.

Comment threadlightning/src/ln/chan_utils.rs Outdated
Comment threadlightning/src/chain/keysinterface.rs Outdated
Comment threadlightning/src/ln/channel.rs
return Err(ChannelError::CloseDelayBroadcast {
msg: "We have fallen behind - we have received proof that if we broadcast remote is going to claim our funds - we can't do any automated broadcasting",
update: monitor_update
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Doesn't matter anymore now but did we forget to implement "my_current_per_commitment_point" does not match the expected value"? I'm not even sure you can verify this given you don't have a comparison base if you're fallen behind.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, yea, seems so. One of those awkward "checking this has no value except to enforce that people don't generally set it wrong".........

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

indentation?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

No? Its indented because its a parameter to a fn.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Ah, ok. Missed that. Also responded too quick to antoine's comment, the whole thing did have an extra indent, I'd intended that for these lines but not the top "let" line. Fixed.

@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from a37cd6d to e1e3090CompareMay 4, 2020 17:58

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One small comment but otherwise looks good!

Comment threadlightning/src/ln/channel.rs Outdated
self.their_pubkeys.as_ref().unwrap().payment_basepoint
} else {
self.local_keys.pubkeys().payment_basepoint
}.serialize());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My earlier comment was rather to make the expression inside WPubkeyHash::hash() (i.e. the payment basepoint) a local variable, which would be more readable IMHO.

This adds the ability to check for static_remotekey in appropriate
feature contexts and prints it at connect time. It is still
considered unknown for the purposes of requires_unknown_bits() as
we don't yet implement it.
This simplifies channelmonitor quite nicely (as expected) as we
never have to be concerned with learning data in a DataLossProtect
which is require for us to claim our funds from the latest remote
commitment transaction.
We no longer derive any keys from the payment point, so they aren't
a "base" but simply a point/key.
@TheBlueMatt
TheBlueMattforce-pushed the 2020-03-static-remotekey branch from e1e3090 to 07db23dCompareMay 6, 2020 01:43
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Fixes issues and squashed. Will confer with @ariard on ordering with #610 and then merge.

@ariard

Copy link
Copy Markdown

ACK 07db23d, just fixing my nit comments + Jeff one since last review.

@TheBlueMatt
TheBlueMatt merged commit d2520f4 into lightningdevkit:masterMay 6, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Aug 23, 2020
@TheBlueMattTheBlueMatt mentioned this pull request Feb 4, 2021
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.

3 participants

@TheBlueMatt@ariard@jkczyz