Improve type safety for message failures - #600

Closed
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures
Closed

Improve type safety for message failures#600
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures

Conversation

@D4nte

@D4nteD4nte commented Apr 20, 2020

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

@jkczyz

Copy link
Copy Markdown
Contributor

Concept ACK

Would love to see the code move in this direction, too. Thanks for jumping on this!

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yep, what Jeff said!

@D4nte
D4nteforce-pushed the type-safety-message-failures branch from 9851d05 to e98b0c3CompareApril 21, 2020 09:58
@D4nteD4nte changed the title [draft]Type message failuresImprove type safety for message failuresApr 21, 2020
@D4nte
D4nte marked this pull request as ready for review April 21, 2020 10:04
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

@jkczyz

Copy link
Copy Markdown
Contributor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

D4nte added 6 commits April 22, 2020 09:35
All message failure are constructed on the fly in
the channel manager. Instead, we add the `MessageFailure`
enum. The enum will list the possible message failures and type
the data to be included.
The code would also be defined once in an impl block and this
enum can directly provide the data byte array and code using
`Writeable` trait.
This commit adds the skeleton.
These values are used at several places of the code.
Constants usage is preferred to avoid typos and make
code more readable.
@D4nte
D4nteforce-pushed the type-safety-message-failures branch from e98b0c3 to b608426CompareApril 21, 2020 23:38
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

Yep, thanks, no worries. I was working in Rust already when they did those improvements on the compiler where it is able to infer referencing. It's now ready for review/merge.

@jkczyz

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

I have a bit of a preference to make all these changes in one PR rather than leaving the code in an intermediary state. Or at very least for (2). @TheBlueMatt What do you think?

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

@jkczyz
jkczyz self-requested a review April 23, 2020 14:48
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

Ah yes indeed, all good.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

Ok cool, will do that then.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

@D4nte any plans on updating this?

@D4nte

D4nte commented Oct 6, 2020

Copy link
Copy Markdown
ContributorAuthor

@D4nte any plans on updating this?

Hi @TheBlueMatt, I don't see an opportunity to follow-up within the next two months. I'll close for now.

@D4nteD4nte closed this Oct 6, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

Improve type safety for message failures - #600

Closed
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures
Closed

Improve type safety for message failures#600
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures

Conversation

@D4nte

@D4nteD4nte commented Apr 20, 2020

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

@jkczyz

Copy link
Copy Markdown
Contributor

Concept ACK

Would love to see the code move in this direction, too. Thanks for jumping on this!

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yep, what Jeff said!

@D4nte
D4nteforce-pushed the type-safety-message-failures branch from 9851d05 to e98b0c3CompareApril 21, 2020 09:58
@D4nteD4nte changed the title [draft]Type message failuresImprove type safety for message failuresApr 21, 2020
@D4nte
D4nte marked this pull request as ready for review April 21, 2020 10:04
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

@jkczyz

Copy link
Copy Markdown
Contributor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

D4nte added 6 commits April 22, 2020 09:35
All message failure are constructed on the fly in
the channel manager. Instead, we add the `MessageFailure`
enum. The enum will list the possible message failures and type
the data to be included.
The code would also be defined once in an impl block and this
enum can directly provide the data byte array and code using
`Writeable` trait.
This commit adds the skeleton.
These values are used at several places of the code.
Constants usage is preferred to avoid typos and make
code more readable.
@D4nte
D4nteforce-pushed the type-safety-message-failures branch from e98b0c3 to b608426CompareApril 21, 2020 23:38
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

Yep, thanks, no worries. I was working in Rust already when they did those improvements on the compiler where it is able to infer referencing. It's now ready for review/merge.

@jkczyz

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

I have a bit of a preference to make all these changes in one PR rather than leaving the code in an intermediary state. Or at very least for (2). @TheBlueMatt What do you think?

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

@jkczyz
jkczyz self-requested a review April 23, 2020 14:48
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

Ah yes indeed, all good.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

Ok cool, will do that then.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

@D4nte any plans on updating this?

@D4nte

D4nte commented Oct 6, 2020

Copy link
Copy Markdown
ContributorAuthor

@D4nte any plans on updating this?

Hi @TheBlueMatt, I don't see an opportunity to follow-up within the next two months. I'll close for now.

@D4nteD4nte closed this Oct 6, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

Improve type safety for message failures - #600

Closed
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures
Closed

Improve type safety for message failures#600
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures

Conversation

@D4nte

@D4nteD4nte commented Apr 20, 2020

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

@jkczyz

Copy link
Copy Markdown
Contributor

Concept ACK

Would love to see the code move in this direction, too. Thanks for jumping on this!

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yep, what Jeff said!

@D4nte
D4nteforce-pushed the type-safety-message-failures branch from 9851d05 to e98b0c3CompareApril 21, 2020 09:58
@D4nteD4nte changed the title [draft]Type message failuresImprove type safety for message failuresApr 21, 2020
@D4nte
D4nte marked this pull request as ready for review April 21, 2020 10:04
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

@jkczyz

Copy link
Copy Markdown
Contributor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

D4nte added 6 commits April 22, 2020 09:35
All message failure are constructed on the fly in
the channel manager. Instead, we add the `MessageFailure`
enum. The enum will list the possible message failures and type
the data to be included.
The code would also be defined once in an impl block and this
enum can directly provide the data byte array and code using
`Writeable` trait.
This commit adds the skeleton.
These values are used at several places of the code.
Constants usage is preferred to avoid typos and make
code more readable.
@D4nte
D4nteforce-pushed the type-safety-message-failures branch from e98b0c3 to b608426CompareApril 21, 2020 23:38
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

Yep, thanks, no worries. I was working in Rust already when they did those improvements on the compiler where it is able to infer referencing. It's now ready for review/merge.

@jkczyz

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

I have a bit of a preference to make all these changes in one PR rather than leaving the code in an intermediary state. Or at very least for (2). @TheBlueMatt What do you think?

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

@jkczyz
jkczyz self-requested a review April 23, 2020 14:48
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

Ah yes indeed, all good.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

Ok cool, will do that then.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

@D4nte any plans on updating this?

@D4nte

D4nte commented Oct 6, 2020

Copy link
Copy Markdown
ContributorAuthor

@D4nte any plans on updating this?

Hi @TheBlueMatt, I don't see an opportunity to follow-up within the next two months. I'll close for now.

@D4nteD4nte closed this Oct 6, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

Improve type safety for message failures - #600

Closed
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures
Closed

Improve type safety for message failures#600
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures

Conversation

@D4nte

@D4nteD4nte commented Apr 20, 2020

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

@jkczyz

Copy link
Copy Markdown
Contributor

Concept ACK

Would love to see the code move in this direction, too. Thanks for jumping on this!

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yep, what Jeff said!

@D4nte
D4nteforce-pushed the type-safety-message-failures branch from 9851d05 to e98b0c3CompareApril 21, 2020 09:58
@D4nteD4nte changed the title [draft]Type message failuresImprove type safety for message failuresApr 21, 2020
@D4nte
D4nte marked this pull request as ready for review April 21, 2020 10:04
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

@jkczyz

Copy link
Copy Markdown
Contributor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

D4nte added 6 commits April 22, 2020 09:35
All message failure are constructed on the fly in
the channel manager. Instead, we add the `MessageFailure`
enum. The enum will list the possible message failures and type
the data to be included.
The code would also be defined once in an impl block and this
enum can directly provide the data byte array and code using
`Writeable` trait.
This commit adds the skeleton.
These values are used at several places of the code.
Constants usage is preferred to avoid typos and make
code more readable.
@D4nte
D4nteforce-pushed the type-safety-message-failures branch from e98b0c3 to b608426CompareApril 21, 2020 23:38
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

Yep, thanks, no worries. I was working in Rust already when they did those improvements on the compiler where it is able to infer referencing. It's now ready for review/merge.

@jkczyz

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

I have a bit of a preference to make all these changes in one PR rather than leaving the code in an intermediary state. Or at very least for (2). @TheBlueMatt What do you think?

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

@jkczyz
jkczyz self-requested a review April 23, 2020 14:48
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

Ah yes indeed, all good.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

Ok cool, will do that then.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

@D4nte any plans on updating this?

@D4nte

D4nte commented Oct 6, 2020

Copy link
Copy Markdown
ContributorAuthor

@D4nte any plans on updating this?

Hi @TheBlueMatt, I don't see an opportunity to follow-up within the next two months. I'll close for now.

@D4nteD4nte closed this Oct 6, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

Improve type safety for message failures - #600

Closed
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures
Closed

Improve type safety for message failures#600
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures

Conversation

@D4nte

@D4nteD4nte commented Apr 20, 2020

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

@jkczyz

Copy link
Copy Markdown
Contributor

Concept ACK

Would love to see the code move in this direction, too. Thanks for jumping on this!

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yep, what Jeff said!

@D4nte
D4nteforce-pushed the type-safety-message-failures branch from 9851d05 to e98b0c3CompareApril 21, 2020 09:58
@D4nteD4nte changed the title [draft]Type message failuresImprove type safety for message failuresApr 21, 2020
@D4nte
D4nte marked this pull request as ready for review April 21, 2020 10:04
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

@jkczyz

Copy link
Copy Markdown
Contributor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

D4nte added 6 commits April 22, 2020 09:35
All message failure are constructed on the fly in
the channel manager. Instead, we add the `MessageFailure`
enum. The enum will list the possible message failures and type
the data to be included.
The code would also be defined once in an impl block and this
enum can directly provide the data byte array and code using
`Writeable` trait.
This commit adds the skeleton.
These values are used at several places of the code.
Constants usage is preferred to avoid typos and make
code more readable.
@D4nte
D4nteforce-pushed the type-safety-message-failures branch from e98b0c3 to b608426CompareApril 21, 2020 23:38
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

Yep, thanks, no worries. I was working in Rust already when they did those improvements on the compiler where it is able to infer referencing. It's now ready for review/merge.

@jkczyz

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

I have a bit of a preference to make all these changes in one PR rather than leaving the code in an intermediary state. Or at very least for (2). @TheBlueMatt What do you think?

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

@jkczyz
jkczyz self-requested a review April 23, 2020 14:48
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

Ah yes indeed, all good.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

Ok cool, will do that then.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

@D4nte any plans on updating this?

@D4nte

D4nte commented Oct 6, 2020

Copy link
Copy Markdown
ContributorAuthor

@D4nte any plans on updating this?

Hi @TheBlueMatt, I don't see an opportunity to follow-up within the next two months. I'll close for now.

@D4nteD4nte closed this Oct 6, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

Improve type safety for message failures - #600

Closed
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures
Closed

Improve type safety for message failures#600
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures

Conversation

@D4nte

@D4nteD4nte commented Apr 20, 2020

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

@jkczyz

Copy link
Copy Markdown
Contributor

Concept ACK

Would love to see the code move in this direction, too. Thanks for jumping on this!

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yep, what Jeff said!

@D4nte
D4nteforce-pushed the type-safety-message-failures branch from 9851d05 to e98b0c3CompareApril 21, 2020 09:58
@D4nteD4nte changed the title [draft]Type message failuresImprove type safety for message failuresApr 21, 2020
@D4nte
D4nte marked this pull request as ready for review April 21, 2020 10:04
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

@jkczyz

Copy link
Copy Markdown
Contributor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

D4nte added 6 commits April 22, 2020 09:35
All message failure are constructed on the fly in
the channel manager. Instead, we add the `MessageFailure`
enum. The enum will list the possible message failures and type
the data to be included.
The code would also be defined once in an impl block and this
enum can directly provide the data byte array and code using
`Writeable` trait.
This commit adds the skeleton.
These values are used at several places of the code.
Constants usage is preferred to avoid typos and make
code more readable.
@D4nte
D4nteforce-pushed the type-safety-message-failures branch from e98b0c3 to b608426CompareApril 21, 2020 23:38
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

Yep, thanks, no worries. I was working in Rust already when they did those improvements on the compiler where it is able to infer referencing. It's now ready for review/merge.

@jkczyz

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

I have a bit of a preference to make all these changes in one PR rather than leaving the code in an intermediary state. Or at very least for (2). @TheBlueMatt What do you think?

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

@jkczyz
jkczyz self-requested a review April 23, 2020 14:48
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

Ah yes indeed, all good.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

Ok cool, will do that then.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

@D4nte any plans on updating this?

@D4nte

D4nte commented Oct 6, 2020

Copy link
Copy Markdown
ContributorAuthor

@D4nte any plans on updating this?

Hi @TheBlueMatt, I don't see an opportunity to follow-up within the next two months. I'll close for now.

@D4nteD4nte closed this Oct 6, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

Improve type safety for message failures - #600

Closed
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures
Closed

Improve type safety for message failures#600
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures

Conversation

@D4nte

@D4nteD4nte commented Apr 20, 2020

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

@jkczyz

Copy link
Copy Markdown
Contributor

Concept ACK

Would love to see the code move in this direction, too. Thanks for jumping on this!

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yep, what Jeff said!

@D4nte
D4nteforce-pushed the type-safety-message-failures branch from 9851d05 to e98b0c3CompareApril 21, 2020 09:58
@D4nteD4nte changed the title [draft]Type message failuresImprove type safety for message failuresApr 21, 2020
@D4nte
D4nte marked this pull request as ready for review April 21, 2020 10:04
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

@jkczyz

Copy link
Copy Markdown
Contributor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

D4nte added 6 commits April 22, 2020 09:35
All message failure are constructed on the fly in
the channel manager. Instead, we add the `MessageFailure`
enum. The enum will list the possible message failures and type
the data to be included.
The code would also be defined once in an impl block and this
enum can directly provide the data byte array and code using
`Writeable` trait.
This commit adds the skeleton.
These values are used at several places of the code.
Constants usage is preferred to avoid typos and make
code more readable.
@D4nte
D4nteforce-pushed the type-safety-message-failures branch from e98b0c3 to b608426CompareApril 21, 2020 23:38
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

Yep, thanks, no worries. I was working in Rust already when they did those improvements on the compiler where it is able to infer referencing. It's now ready for review/merge.

@jkczyz

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

I have a bit of a preference to make all these changes in one PR rather than leaving the code in an intermediary state. Or at very least for (2). @TheBlueMatt What do you think?

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

@jkczyz
jkczyz self-requested a review April 23, 2020 14:48
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

Ah yes indeed, all good.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

Ok cool, will do that then.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

@D4nte any plans on updating this?

@D4nte

D4nte commented Oct 6, 2020

Copy link
Copy Markdown
ContributorAuthor

@D4nte any plans on updating this?

Hi @TheBlueMatt, I don't see an opportunity to follow-up within the next two months. I'll close for now.

@D4nteD4nte closed this Oct 6, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

Improve type safety for message failures - #600

Closed
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures
Closed

Improve type safety for message failures#600
D4nte wants to merge 6 commits into
lightningdevkit:masterfrom
D4nte:type-safety-message-failures

Conversation

@D4nte

@D4nteD4nte commented Apr 20, 2020

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

@jkczyz

Copy link
Copy Markdown
Contributor

Concept ACK

Would love to see the code move in this direction, too. Thanks for jumping on this!

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yep, what Jeff said!

@D4nte
D4nteforce-pushed the type-safety-message-failures branch from 9851d05 to e98b0c3CompareApril 21, 2020 09:58
@D4nteD4nte changed the title [draft]Type message failuresImprove type safety for message failuresApr 21, 2020
@D4nte
D4nte marked this pull request as ready for review April 21, 2020 10:04
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

@jkczyz

Copy link
Copy Markdown
Contributor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

D4nte added 6 commits April 22, 2020 09:35
All message failure are constructed on the fly in
the channel manager. Instead, we add the `MessageFailure`
enum. The enum will list the possible message failures and type
the data to be included.
The code would also be defined once in an impl block and this
enum can directly provide the data byte array and code using
`Writeable` trait.
This commit adds the skeleton.
These values are used at several places of the code.
Constants usage is preferred to avoid typos and make
code more readable.
@D4nte
D4nteforce-pushed the type-safety-message-failures branch from e98b0c3 to b608426CompareApril 21, 2020 23:38
@D4nte

Copy link
Copy Markdown
ContributorAuthor

Need to sort build on old Rust toolchain 😟

Looks like you're running into issues on 1.22.0 with matching enum variants. The syntax is a bit more verbose in this version. You can reproduce the errors using:

cargo +1.22.0 check -p lightning
cargo +1.22.0 test -p lightning

You might find the wire module useful as an example of the syntax if the compiler messages aren't helpful.

Yep, thanks, no worries. I was working in Rust already when they did those improvements on the compiler where it is able to infer referencing. It's now ready for review/merge.

@jkczyz

Copy link
Copy Markdown
Contributor

Follow-up of #596

Edit: Ready for review.

This a step towards a safer handling of failure code and associated data by using a new MessageFailure enum instead of serialising the code and data on call site.

I see several ways to follow-up with this change:

  1. Deserialise all possible message failures to MessageFailure, allowing the removal of the HTLCFailReason::Reason variant.
  2. Continue to replace call site assignment of code value with instantiation of MessageFailure variables.

I have a bit of a preference to make all these changes in one PR rather than leaving the code in an intermediary state. Or at very least for (2). @TheBlueMatt What do you think?

One downside of this solution is that I had to clone ChannelUpdate. Let me know if you'd prefer I optimise this before merging.

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

@jkczyz
jkczyz self-requested a review April 23, 2020 14:48
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Looks like we were already cloning ChannelUpdate inside peer_disconnected. Or were you referring to somewhere else?

Ah yes indeed, all good.

@D4nte

Copy link
Copy Markdown
ContributorAuthor

Yea, at least personally I really don't mind a larger PR that removes HTLCFailReason::Reason and replaces it with types, obviously with smaller intermediary commits, though.

Ok cool, will do that then.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

@D4nte any plans on updating this?

@D4nte

D4nte commented Oct 6, 2020

Copy link
Copy Markdown
ContributorAuthor

@D4nte any plans on updating this?

Hi @TheBlueMatt, I don't see an opportunity to follow-up within the next two months. I'll close for now.

@D4nteD4nte closed this Oct 6, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@D4nte@jkczyz@TheBlueMatt