Skip to content

Add bLIP 52: JIT Channel Negotiation (LSPS2) - #54

Merged
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2
Dec 20, 2024
Merged

Add bLIP 52: JIT Channel Negotiation (LSPS2)#54
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2

Conversation

@tnull

@tnulltnull commented Dec 2, 2024

Copy link
Copy Markdown
Contributor

Based on #52.

A "JIT Channel" is a channel opened in response to an incoming payment from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on Lightning, and have the cost of their inbound liquidity be deducted from their first received payment.

The given protocol is based on LSPS0/blip-0050 and has been previously stabilized by the LSP Spec group and is live in production with several LSP and client implementations today.

As previously discussed on multiple occasions, the LSP Spec group is however moving to a bLIP-centric process, which is why we 'upstream' these previously-stabilized specifications here.

(cc the original author @ZmnSCPxj-jr)

@tnulltnull changed the title Add bLIP 52: JIT Channel NegotiationAdd bLIP 52: JIT Channel Negotiation (LSPS2)Dec 2, 2024
@ZmnSCPxj-jr

Copy link
Copy Markdown

So.... what is the general process for getting this P.R. merged in?

@tnull

Copy link
Copy Markdown
ContributorAuthor

So.... what is the general process for getting this P.R. merged in?

I think @t-bast recently mentioned he'd be interested in taking a look a these newly-opened PRs.

@t-bast

Copy link
Copy Markdown
Contributor

I'll try to take a look at those new PRs soon. But I'd be interested in people reviewing my own pending PRs on this repository as well: doing some tit for tat helps motivate reviewers 🙏 (especially when reviewing PRs for stuff I'm not implementing).

@t-bastt-bast 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.

Same here, please add a link to a reference implementation.

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version (but I don't expect people to use this scheme in the future given its limitations?).

@tnull

Copy link
Copy Markdown
ContributorAuthor

Same here, please add a link to a reference implementation.

Done!

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version

Well, there are a few different answers to this. Back then it was (and to be honest to a degree still is) unclear how/whether all implementations would be able to support a more complex protocol that requires low-level access to onion encryption, custom messages, etc. The given JIT flow is already a pretty complex protocol and the additional communication does not make it simpler. So the decision was made to go with the simpler version to first to get started, and then explore what else needs to be done (and what possibly even would take advocating for changes in the respective Lightning implementations).

(but I don't expect people to use this scheme in the future given its limitations?).

Yes, I think most people by now agree that longer term we probably end up needing the more complex version afterall (i.e., your proposed LiqAds JIT flow, plus maybe some extensions), but it will still take some time to fully spec it out and ship it. While we're now aware of some shortcomings of the LSPS2 approach, it should work for the most part in the meantime.

@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased after #55 landed (and squashed one fixup).

A "JIT Channel" is a channel opened in response to an incoming payment
from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on
Lightning, and have the cost of their inbound liquidity be deducted from their
first received payment.
The given protocol is based on LSPS0/blip-0050 and has been previously
stabilized by the LSP Spec group and is live in production with several
LSP and client implementations today.
As previously discussed on multiple occasions, the LSP Spec
group is however moving to a bLIP-centric process, which is why we
'upstream' these previously-stabilized specifications here.
@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased on master to resolve some minor conflicts.

@t-bast
t-bast merged commit 8b09c57 into lightning:masterDec 20, 2024
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

@tnull@ZmnSCPxj-jr@t-bast
, '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" + '
Add bLIP 52: JIT Channel Negotiation (LSPS2) by tnull · Pull Request #54 · lightning/blips · GitHub
Skip to content

Add bLIP 52: JIT Channel Negotiation (LSPS2) - #54

Merged
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2
Dec 20, 2024
Merged

Add bLIP 52: JIT Channel Negotiation (LSPS2)#54
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2

Conversation

@tnull

@tnulltnull commented Dec 2, 2024

Copy link
Copy Markdown
Contributor

Based on #52.

A "JIT Channel" is a channel opened in response to an incoming payment from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on Lightning, and have the cost of their inbound liquidity be deducted from their first received payment.

The given protocol is based on LSPS0/blip-0050 and has been previously stabilized by the LSP Spec group and is live in production with several LSP and client implementations today.

As previously discussed on multiple occasions, the LSP Spec group is however moving to a bLIP-centric process, which is why we 'upstream' these previously-stabilized specifications here.

(cc the original author @ZmnSCPxj-jr)

@tnulltnull changed the title Add bLIP 52: JIT Channel NegotiationAdd bLIP 52: JIT Channel Negotiation (LSPS2)Dec 2, 2024
@ZmnSCPxj-jr

Copy link
Copy Markdown

So.... what is the general process for getting this P.R. merged in?

@tnull

Copy link
Copy Markdown
ContributorAuthor

So.... what is the general process for getting this P.R. merged in?

I think @t-bast recently mentioned he'd be interested in taking a look a these newly-opened PRs.

@t-bast

Copy link
Copy Markdown
Contributor

I'll try to take a look at those new PRs soon. But I'd be interested in people reviewing my own pending PRs on this repository as well: doing some tit for tat helps motivate reviewers 🙏 (especially when reviewing PRs for stuff I'm not implementing).

@t-bastt-bast 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.

Same here, please add a link to a reference implementation.

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version (but I don't expect people to use this scheme in the future given its limitations?).

@tnull

Copy link
Copy Markdown
ContributorAuthor

Same here, please add a link to a reference implementation.

Done!

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version

Well, there are a few different answers to this. Back then it was (and to be honest to a degree still is) unclear how/whether all implementations would be able to support a more complex protocol that requires low-level access to onion encryption, custom messages, etc. The given JIT flow is already a pretty complex protocol and the additional communication does not make it simpler. So the decision was made to go with the simpler version to first to get started, and then explore what else needs to be done (and what possibly even would take advocating for changes in the respective Lightning implementations).

(but I don't expect people to use this scheme in the future given its limitations?).

Yes, I think most people by now agree that longer term we probably end up needing the more complex version afterall (i.e., your proposed LiqAds JIT flow, plus maybe some extensions), but it will still take some time to fully spec it out and ship it. While we're now aware of some shortcomings of the LSPS2 approach, it should work for the most part in the meantime.

@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased after #55 landed (and squashed one fixup).

A "JIT Channel" is a channel opened in response to an incoming payment
from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on
Lightning, and have the cost of their inbound liquidity be deducted from their
first received payment.
The given protocol is based on LSPS0/blip-0050 and has been previously
stabilized by the LSP Spec group and is live in production with several
LSP and client implementations today.
As previously discussed on multiple occasions, the LSP Spec
group is however moving to a bLIP-centric process, which is why we
'upstream' these previously-stabilized specifications here.
@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased on master to resolve some minor conflicts.

@t-bast
t-bast merged commit 8b09c57 into lightning:masterDec 20, 2024
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

@tnull@ZmnSCPxj-jr@t-bast
, '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('^' + ".*" + ' Add bLIP 52: JIT Channel Negotiation (LSPS2) by tnull · Pull Request #54 · lightning/blips · GitHub
Skip to content

Add bLIP 52: JIT Channel Negotiation (LSPS2) - #54

Merged
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2
Dec 20, 2024
Merged

Add bLIP 52: JIT Channel Negotiation (LSPS2)#54
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2

Conversation

@tnull

@tnulltnull commented Dec 2, 2024

Copy link
Copy Markdown
Contributor

Based on #52.

A "JIT Channel" is a channel opened in response to an incoming payment from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on Lightning, and have the cost of their inbound liquidity be deducted from their first received payment.

The given protocol is based on LSPS0/blip-0050 and has been previously stabilized by the LSP Spec group and is live in production with several LSP and client implementations today.

As previously discussed on multiple occasions, the LSP Spec group is however moving to a bLIP-centric process, which is why we 'upstream' these previously-stabilized specifications here.

(cc the original author @ZmnSCPxj-jr)

@tnulltnull changed the title Add bLIP 52: JIT Channel NegotiationAdd bLIP 52: JIT Channel Negotiation (LSPS2)Dec 2, 2024
@ZmnSCPxj-jr

Copy link
Copy Markdown

So.... what is the general process for getting this P.R. merged in?

@tnull

Copy link
Copy Markdown
ContributorAuthor

So.... what is the general process for getting this P.R. merged in?

I think @t-bast recently mentioned he'd be interested in taking a look a these newly-opened PRs.

@t-bast

Copy link
Copy Markdown
Contributor

I'll try to take a look at those new PRs soon. But I'd be interested in people reviewing my own pending PRs on this repository as well: doing some tit for tat helps motivate reviewers 🙏 (especially when reviewing PRs for stuff I'm not implementing).

@t-bastt-bast 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.

Same here, please add a link to a reference implementation.

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version (but I don't expect people to use this scheme in the future given its limitations?).

@tnull

Copy link
Copy Markdown
ContributorAuthor

Same here, please add a link to a reference implementation.

Done!

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version

Well, there are a few different answers to this. Back then it was (and to be honest to a degree still is) unclear how/whether all implementations would be able to support a more complex protocol that requires low-level access to onion encryption, custom messages, etc. The given JIT flow is already a pretty complex protocol and the additional communication does not make it simpler. So the decision was made to go with the simpler version to first to get started, and then explore what else needs to be done (and what possibly even would take advocating for changes in the respective Lightning implementations).

(but I don't expect people to use this scheme in the future given its limitations?).

Yes, I think most people by now agree that longer term we probably end up needing the more complex version afterall (i.e., your proposed LiqAds JIT flow, plus maybe some extensions), but it will still take some time to fully spec it out and ship it. While we're now aware of some shortcomings of the LSPS2 approach, it should work for the most part in the meantime.

@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased after #55 landed (and squashed one fixup).

A "JIT Channel" is a channel opened in response to an incoming payment
from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on
Lightning, and have the cost of their inbound liquidity be deducted from their
first received payment.
The given protocol is based on LSPS0/blip-0050 and has been previously
stabilized by the LSP Spec group and is live in production with several
LSP and client implementations today.
As previously discussed on multiple occasions, the LSP Spec
group is however moving to a bLIP-centric process, which is why we
'upstream' these previously-stabilized specifications here.
@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased on master to resolve some minor conflicts.

@t-bast
t-bast merged commit 8b09c57 into lightning:masterDec 20, 2024
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

@tnull@ZmnSCPxj-jr@t-bast
, '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('^' + ".*" + ' Add bLIP 52: JIT Channel Negotiation (LSPS2) by tnull · Pull Request #54 · lightning/blips · GitHub
Skip to content

Add bLIP 52: JIT Channel Negotiation (LSPS2) - #54

Merged
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2
Dec 20, 2024
Merged

Add bLIP 52: JIT Channel Negotiation (LSPS2)#54
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2

Conversation

@tnull

@tnulltnull commented Dec 2, 2024

Copy link
Copy Markdown
Contributor

Based on #52.

A "JIT Channel" is a channel opened in response to an incoming payment from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on Lightning, and have the cost of their inbound liquidity be deducted from their first received payment.

The given protocol is based on LSPS0/blip-0050 and has been previously stabilized by the LSP Spec group and is live in production with several LSP and client implementations today.

As previously discussed on multiple occasions, the LSP Spec group is however moving to a bLIP-centric process, which is why we 'upstream' these previously-stabilized specifications here.

(cc the original author @ZmnSCPxj-jr)

@tnulltnull changed the title Add bLIP 52: JIT Channel NegotiationAdd bLIP 52: JIT Channel Negotiation (LSPS2)Dec 2, 2024
@ZmnSCPxj-jr

Copy link
Copy Markdown

So.... what is the general process for getting this P.R. merged in?

@tnull

Copy link
Copy Markdown
ContributorAuthor

So.... what is the general process for getting this P.R. merged in?

I think @t-bast recently mentioned he'd be interested in taking a look a these newly-opened PRs.

@t-bast

Copy link
Copy Markdown
Contributor

I'll try to take a look at those new PRs soon. But I'd be interested in people reviewing my own pending PRs on this repository as well: doing some tit for tat helps motivate reviewers 🙏 (especially when reviewing PRs for stuff I'm not implementing).

@t-bastt-bast 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.

Same here, please add a link to a reference implementation.

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version (but I don't expect people to use this scheme in the future given its limitations?).

@tnull

Copy link
Copy Markdown
ContributorAuthor

Same here, please add a link to a reference implementation.

Done!

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version

Well, there are a few different answers to this. Back then it was (and to be honest to a degree still is) unclear how/whether all implementations would be able to support a more complex protocol that requires low-level access to onion encryption, custom messages, etc. The given JIT flow is already a pretty complex protocol and the additional communication does not make it simpler. So the decision was made to go with the simpler version to first to get started, and then explore what else needs to be done (and what possibly even would take advocating for changes in the respective Lightning implementations).

(but I don't expect people to use this scheme in the future given its limitations?).

Yes, I think most people by now agree that longer term we probably end up needing the more complex version afterall (i.e., your proposed LiqAds JIT flow, plus maybe some extensions), but it will still take some time to fully spec it out and ship it. While we're now aware of some shortcomings of the LSPS2 approach, it should work for the most part in the meantime.

@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased after #55 landed (and squashed one fixup).

A "JIT Channel" is a channel opened in response to an incoming payment
from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on
Lightning, and have the cost of their inbound liquidity be deducted from their
first received payment.
The given protocol is based on LSPS0/blip-0050 and has been previously
stabilized by the LSP Spec group and is live in production with several
LSP and client implementations today.
As previously discussed on multiple occasions, the LSP Spec
group is however moving to a bLIP-centric process, which is why we
'upstream' these previously-stabilized specifications here.
@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased on master to resolve some minor conflicts.

@t-bast
t-bast merged commit 8b09c57 into lightning:masterDec 20, 2024
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

@tnull@ZmnSCPxj-jr@t-bast
, '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" + ' Add bLIP 52: JIT Channel Negotiation (LSPS2) by tnull · Pull Request #54 · lightning/blips · GitHub
Skip to content

Add bLIP 52: JIT Channel Negotiation (LSPS2) - #54

Merged
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2
Dec 20, 2024
Merged

Add bLIP 52: JIT Channel Negotiation (LSPS2)#54
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2

Conversation

@tnull

@tnulltnull commented Dec 2, 2024

Copy link
Copy Markdown
Contributor

Based on #52.

A "JIT Channel" is a channel opened in response to an incoming payment from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on Lightning, and have the cost of their inbound liquidity be deducted from their first received payment.

The given protocol is based on LSPS0/blip-0050 and has been previously stabilized by the LSP Spec group and is live in production with several LSP and client implementations today.

As previously discussed on multiple occasions, the LSP Spec group is however moving to a bLIP-centric process, which is why we 'upstream' these previously-stabilized specifications here.

(cc the original author @ZmnSCPxj-jr)

@tnulltnull changed the title Add bLIP 52: JIT Channel NegotiationAdd bLIP 52: JIT Channel Negotiation (LSPS2)Dec 2, 2024
@ZmnSCPxj-jr

Copy link
Copy Markdown

So.... what is the general process for getting this P.R. merged in?

@tnull

Copy link
Copy Markdown
ContributorAuthor

So.... what is the general process for getting this P.R. merged in?

I think @t-bast recently mentioned he'd be interested in taking a look a these newly-opened PRs.

@t-bast

Copy link
Copy Markdown
Contributor

I'll try to take a look at those new PRs soon. But I'd be interested in people reviewing my own pending PRs on this repository as well: doing some tit for tat helps motivate reviewers 🙏 (especially when reviewing PRs for stuff I'm not implementing).

@t-bastt-bast 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.

Same here, please add a link to a reference implementation.

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version (but I don't expect people to use this scheme in the future given its limitations?).

@tnull

Copy link
Copy Markdown
ContributorAuthor

Same here, please add a link to a reference implementation.

Done!

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version

Well, there are a few different answers to this. Back then it was (and to be honest to a degree still is) unclear how/whether all implementations would be able to support a more complex protocol that requires low-level access to onion encryption, custom messages, etc. The given JIT flow is already a pretty complex protocol and the additional communication does not make it simpler. So the decision was made to go with the simpler version to first to get started, and then explore what else needs to be done (and what possibly even would take advocating for changes in the respective Lightning implementations).

(but I don't expect people to use this scheme in the future given its limitations?).

Yes, I think most people by now agree that longer term we probably end up needing the more complex version afterall (i.e., your proposed LiqAds JIT flow, plus maybe some extensions), but it will still take some time to fully spec it out and ship it. While we're now aware of some shortcomings of the LSPS2 approach, it should work for the most part in the meantime.

@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased after #55 landed (and squashed one fixup).

A "JIT Channel" is a channel opened in response to an incoming payment
from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on
Lightning, and have the cost of their inbound liquidity be deducted from their
first received payment.
The given protocol is based on LSPS0/blip-0050 and has been previously
stabilized by the LSP Spec group and is live in production with several
LSP and client implementations today.
As previously discussed on multiple occasions, the LSP Spec
group is however moving to a bLIP-centric process, which is why we
'upstream' these previously-stabilized specifications here.
@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased on master to resolve some minor conflicts.

@t-bast
t-bast merged commit 8b09c57 into lightning:masterDec 20, 2024
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

@tnull@ZmnSCPxj-jr@t-bast
, '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('^' + ".*" + ' Add bLIP 52: JIT Channel Negotiation (LSPS2) by tnull · Pull Request #54 · lightning/blips · GitHub
Skip to content

Add bLIP 52: JIT Channel Negotiation (LSPS2) - #54

Merged
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2
Dec 20, 2024
Merged

Add bLIP 52: JIT Channel Negotiation (LSPS2)#54
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2

Conversation

@tnull

@tnulltnull commented Dec 2, 2024

Copy link
Copy Markdown
Contributor

Based on #52.

A "JIT Channel" is a channel opened in response to an incoming payment from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on Lightning, and have the cost of their inbound liquidity be deducted from their first received payment.

The given protocol is based on LSPS0/blip-0050 and has been previously stabilized by the LSP Spec group and is live in production with several LSP and client implementations today.

As previously discussed on multiple occasions, the LSP Spec group is however moving to a bLIP-centric process, which is why we 'upstream' these previously-stabilized specifications here.

(cc the original author @ZmnSCPxj-jr)

@tnulltnull changed the title Add bLIP 52: JIT Channel NegotiationAdd bLIP 52: JIT Channel Negotiation (LSPS2)Dec 2, 2024
@ZmnSCPxj-jr

Copy link
Copy Markdown

So.... what is the general process for getting this P.R. merged in?

@tnull

Copy link
Copy Markdown
ContributorAuthor

So.... what is the general process for getting this P.R. merged in?

I think @t-bast recently mentioned he'd be interested in taking a look a these newly-opened PRs.

@t-bast

Copy link
Copy Markdown
Contributor

I'll try to take a look at those new PRs soon. But I'd be interested in people reviewing my own pending PRs on this repository as well: doing some tit for tat helps motivate reviewers 🙏 (especially when reviewing PRs for stuff I'm not implementing).

@t-bastt-bast 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.

Same here, please add a link to a reference implementation.

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version (but I don't expect people to use this scheme in the future given its limitations?).

@tnull

Copy link
Copy Markdown
ContributorAuthor

Same here, please add a link to a reference implementation.

Done!

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version

Well, there are a few different answers to this. Back then it was (and to be honest to a degree still is) unclear how/whether all implementations would be able to support a more complex protocol that requires low-level access to onion encryption, custom messages, etc. The given JIT flow is already a pretty complex protocol and the additional communication does not make it simpler. So the decision was made to go with the simpler version to first to get started, and then explore what else needs to be done (and what possibly even would take advocating for changes in the respective Lightning implementations).

(but I don't expect people to use this scheme in the future given its limitations?).

Yes, I think most people by now agree that longer term we probably end up needing the more complex version afterall (i.e., your proposed LiqAds JIT flow, plus maybe some extensions), but it will still take some time to fully spec it out and ship it. While we're now aware of some shortcomings of the LSPS2 approach, it should work for the most part in the meantime.

@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased after #55 landed (and squashed one fixup).

A "JIT Channel" is a channel opened in response to an incoming payment
from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on
Lightning, and have the cost of their inbound liquidity be deducted from their
first received payment.
The given protocol is based on LSPS0/blip-0050 and has been previously
stabilized by the LSP Spec group and is live in production with several
LSP and client implementations today.
As previously discussed on multiple occasions, the LSP Spec
group is however moving to a bLIP-centric process, which is why we
'upstream' these previously-stabilized specifications here.
@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased on master to resolve some minor conflicts.

@t-bast
t-bast merged commit 8b09c57 into lightning:masterDec 20, 2024
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

@tnull@ZmnSCPxj-jr@t-bast
, '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('^' + ".*" + ' Add bLIP 52: JIT Channel Negotiation (LSPS2) by tnull · Pull Request #54 · lightning/blips · GitHub
Skip to content

Add bLIP 52: JIT Channel Negotiation (LSPS2) - #54

Merged
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2
Dec 20, 2024
Merged

Add bLIP 52: JIT Channel Negotiation (LSPS2)#54
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2

Conversation

@tnull

@tnulltnull commented Dec 2, 2024

Copy link
Copy Markdown
Contributor

Based on #52.

A "JIT Channel" is a channel opened in response to an incoming payment from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on Lightning, and have the cost of their inbound liquidity be deducted from their first received payment.

The given protocol is based on LSPS0/blip-0050 and has been previously stabilized by the LSP Spec group and is live in production with several LSP and client implementations today.

As previously discussed on multiple occasions, the LSP Spec group is however moving to a bLIP-centric process, which is why we 'upstream' these previously-stabilized specifications here.

(cc the original author @ZmnSCPxj-jr)

@tnulltnull changed the title Add bLIP 52: JIT Channel NegotiationAdd bLIP 52: JIT Channel Negotiation (LSPS2)Dec 2, 2024
@ZmnSCPxj-jr

Copy link
Copy Markdown

So.... what is the general process for getting this P.R. merged in?

@tnull

Copy link
Copy Markdown
ContributorAuthor

So.... what is the general process for getting this P.R. merged in?

I think @t-bast recently mentioned he'd be interested in taking a look a these newly-opened PRs.

@t-bast

Copy link
Copy Markdown
Contributor

I'll try to take a look at those new PRs soon. But I'd be interested in people reviewing my own pending PRs on this repository as well: doing some tit for tat helps motivate reviewers 🙏 (especially when reviewing PRs for stuff I'm not implementing).

@t-bastt-bast 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.

Same here, please add a link to a reference implementation.

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version (but I don't expect people to use this scheme in the future given its limitations?).

@tnull

Copy link
Copy Markdown
ContributorAuthor

Same here, please add a link to a reference implementation.

Done!

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version

Well, there are a few different answers to this. Back then it was (and to be honest to a degree still is) unclear how/whether all implementations would be able to support a more complex protocol that requires low-level access to onion encryption, custom messages, etc. The given JIT flow is already a pretty complex protocol and the additional communication does not make it simpler. So the decision was made to go with the simpler version to first to get started, and then explore what else needs to be done (and what possibly even would take advocating for changes in the respective Lightning implementations).

(but I don't expect people to use this scheme in the future given its limitations?).

Yes, I think most people by now agree that longer term we probably end up needing the more complex version afterall (i.e., your proposed LiqAds JIT flow, plus maybe some extensions), but it will still take some time to fully spec it out and ship it. While we're now aware of some shortcomings of the LSPS2 approach, it should work for the most part in the meantime.

@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased after #55 landed (and squashed one fixup).

A "JIT Channel" is a channel opened in response to an incoming payment
from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on
Lightning, and have the cost of their inbound liquidity be deducted from their
first received payment.
The given protocol is based on LSPS0/blip-0050 and has been previously
stabilized by the LSP Spec group and is live in production with several
LSP and client implementations today.
As previously discussed on multiple occasions, the LSP Spec
group is however moving to a bLIP-centric process, which is why we
'upstream' these previously-stabilized specifications here.
@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased on master to resolve some minor conflicts.

@t-bast
t-bast merged commit 8b09c57 into lightning:masterDec 20, 2024
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

@tnull@ZmnSCPxj-jr@t-bast
, '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); } })(); })(); Add bLIP 52: JIT Channel Negotiation (LSPS2) by tnull · Pull Request #54 · lightning/blips · GitHub
Skip to content

Add bLIP 52: JIT Channel Negotiation (LSPS2) - #54

Merged
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2
Dec 20, 2024
Merged

Add bLIP 52: JIT Channel Negotiation (LSPS2)#54
t-bast merged 1 commit into
lightning:masterfrom
tnull:2024-12-add-lsps2

Conversation

@tnull

@tnulltnull commented Dec 2, 2024

Copy link
Copy Markdown
Contributor

Based on #52.

A "JIT Channel" is a channel opened in response to an incoming payment from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on Lightning, and have the cost of their inbound liquidity be deducted from their first received payment.

The given protocol is based on LSPS0/blip-0050 and has been previously stabilized by the LSP Spec group and is live in production with several LSP and client implementations today.

As previously discussed on multiple occasions, the LSP Spec group is however moving to a bLIP-centric process, which is why we 'upstream' these previously-stabilized specifications here.

(cc the original author @ZmnSCPxj-jr)

@tnulltnull changed the title Add bLIP 52: JIT Channel NegotiationAdd bLIP 52: JIT Channel Negotiation (LSPS2)Dec 2, 2024
@ZmnSCPxj-jr

Copy link
Copy Markdown

So.... what is the general process for getting this P.R. merged in?

@tnull

Copy link
Copy Markdown
ContributorAuthor

So.... what is the general process for getting this P.R. merged in?

I think @t-bast recently mentioned he'd be interested in taking a look a these newly-opened PRs.

@t-bast

Copy link
Copy Markdown
Contributor

I'll try to take a look at those new PRs soon. But I'd be interested in people reviewing my own pending PRs on this repository as well: doing some tit for tat helps motivate reviewers 🙏 (especially when reviewing PRs for stuff I'm not implementing).

@t-bastt-bast 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.

Same here, please add a link to a reference implementation.

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version (but I don't expect people to use this scheme in the future given its limitations?).

@tnull

Copy link
Copy Markdown
ContributorAuthor

Same here, please add a link to a reference implementation.

Done!

It's still really surprising to me that you went ahead with a scheme like this instead of forwarding onions to recipients that don't have enough inbound capacity and really negotiating the channel at the time of the payment, like we were already doing in Phoenix before LSP specs started and like we specified in #36, but I guess that ship has sailed for this version

Well, there are a few different answers to this. Back then it was (and to be honest to a degree still is) unclear how/whether all implementations would be able to support a more complex protocol that requires low-level access to onion encryption, custom messages, etc. The given JIT flow is already a pretty complex protocol and the additional communication does not make it simpler. So the decision was made to go with the simpler version to first to get started, and then explore what else needs to be done (and what possibly even would take advocating for changes in the respective Lightning implementations).

(but I don't expect people to use this scheme in the future given its limitations?).

Yes, I think most people by now agree that longer term we probably end up needing the more complex version afterall (i.e., your proposed LiqAds JIT flow, plus maybe some extensions), but it will still take some time to fully spec it out and ship it. While we're now aware of some shortcomings of the LSPS2 approach, it should work for the most part in the meantime.

@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased after #55 landed (and squashed one fixup).

A "JIT Channel" is a channel opened in response to an incoming payment
from the public network to a client, via the LSP.
This allows a client with no Lightning channels to start receiving on
Lightning, and have the cost of their inbound liquidity be deducted from their
first received payment.
The given protocol is based on LSPS0/blip-0050 and has been previously
stabilized by the LSP Spec group and is live in production with several
LSP and client implementations today.
As previously discussed on multiple occasions, the LSP Spec
group is however moving to a bLIP-centric process, which is why we
'upstream' these previously-stabilized specifications here.
@tnull

Copy link
Copy Markdown
ContributorAuthor

Rebased on master to resolve some minor conflicts.

@t-bast
t-bast merged commit 8b09c57 into lightning:masterDec 20, 2024
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

@tnull@ZmnSCPxj-jr@t-bast