From fae4cd41745f008145463c49d478d2bf7da41707 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Thu, 9 Jan 2025 16:15:48 -0500 Subject: [PATCH 01/11] Adds LQWD case study --- ...provider-get-liquidity-when-you-need-it.md | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md diff --git a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md new file mode 100644 index 00000000..1b9afa66 --- /dev/null +++ b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md @@ -0,0 +1,47 @@ +--- +title: "LQWD Liquidity Provider: Get Liquidity When You Need It" +description: "Learn how LQWD built a custom LSP" +date: "2025-01-13" +authors: + - Aziz Pulatov +tags: + - Case-Studies +--- + +The rapid growth of the Lightning Network has created unprecedented demand for liquidity. Traditionally, receiving payments on the Lightning Network required pre-established channels which posed barriers to new users and hindered scalability. With the introduction of [LSPS2](https://github.com/lightning/blips/blob/master/blip-0052.md) and its Just-In-Time (JIT) channel negotiation capabilities, the Lightning Network can now provide liquidity exactly when needed, improving both accessibility and efficiency. By leveraging [LDK Node](https://lightningdevkit.org/blog/announcing-ldk-node/) (a higher-level wrapper of LDK) and the [Lightning Liquidity crate](https://github.com/lightningdevkit/rust-lightning/tree/main/lightning-liquidity)—both Rust-based implementations—we developed a specialized LSP Node [(LQwD)](https://lqwdtech.com/). This node enables real-time liquidity provisioning by dynamically creating channels, ensuring payments can be received without prior investments in channel capacity. + +# Challenges Before LSPS2 + +Before the advent of LSPS2, receiving payments on the Lightning Network was fraught with limitations. Users were required to have pre-established channels, creating significant friction during the onboarding process and hindering adoption. + +Liquidity allocation was inefficient: static channels often resulted in unused capacity, tying up valuable funds that could have been better utilized elsewhere. Furthermore, scaling liquidity across the network required substantial investment and extensive pre-planning, making it +challenging to achieve the flexibility and responsiveness required for a growing user base. + +# Why LSPS2 with LDK Node and Lightning Liquidity? + +LSPS2, integrated with LDK Node and the Lightning Liquidity crate, offers a transformative solution to these challenges. Its dynamic liquidity management enables channels to be created on demand, perfectly aligning with real-time payment requirements and eliminating the need for +pre-established liquidity. + +The flexible and modular design of LDK Node, built on Rust and enhanced by the Lightning Liquidity crate, allows for the development of a highly customized and efficient LSP Node tailored to meet dynamic liquidity needs. + +# Building the LSP Node (LQwD) + +The integration of LDK and Lightning Liquidity allowed us to create a streamlined and algorithmically driven LSP Node capable of managing liquidity requests dynamically. + +The process begins when a client initiates a liquidity request by interacting with the LSP Node. In response, the LSP Node generates a Short Channel ID (SCID), accompanied by routing information and timeout parameters, and sends these details back to the client. + +Following this, the client prepares an invoice that embeds the SCID and the LSP Node ID as route hints, ensuring that the payment route is well-defined. This invoice is then shared with the payer. + +When the payment is received with the SCID, the LSP Node takes over to execute a Just-In-Time(JIT) channel creation. A zero-confirmation channel is opened to the client, facilitating the payment transfer. The LSP Node seamlessly forwards the payment to the client while deducting +the applicable channel fees, ensuring both efficiency and reliability throughout the process + +# Immediate Benefits + +The implementation of LSPS2 brings significant advantages to liquidity management on the Lightning Network. Clients can now receive funds without the need for pre-established channels, which greatly reduces friction during the onboarding process. The dynamic nature of channel +creation eliminates the necessity for upfront investments in liquidity, making the solution both scalable and cost-effective. Furthermore, payment processing is optimized, with Just-In-Timechannels ensuring faster and more reliable transactions, enhancing the overall user experience. + +# Conclusion + +The LSP Liquidity Provider (LQwD), built on LDK Node and the Lightning Liquidity crate, showcases how LSPS2 can revolutionize liquidity management on the Lightning Network. By offering JIT channels, this solution simplifies onboarding, reduces costs, and aligns network resources with real-time needs, paving the way for a more accessible and scalable Lightning Network. + +For more information or collaboration opportunities, visit the LQwD [website](https://lqwdtech.com/). From b9122752295beed64af71e0eeba3ef56ee480216 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Mon, 13 Jan 2025 12:10:29 -0500 Subject: [PATCH 02/11] Add LQWD diagram --- ...y-provider-get-liquidity-when-you-need-it.md | 2 ++ docs/assets/lqwd_lsp_node.png | Bin 0 -> 56940 bytes 2 files changed, 2 insertions(+) create mode 100644 docs/assets/lqwd_lsp_node.png diff --git a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md index 1b9afa66..eb8fe743 100644 --- a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md +++ b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md @@ -17,6 +17,8 @@ Before the advent of LSPS2, receiving payments on the Lightning Network was frau Liquidity allocation was inefficient: static channels often resulted in unused capacity, tying up valuable funds that could have been better utilized elsewhere. Furthermore, scaling liquidity across the network required substantial investment and extensive pre-planning, making it challenging to achieve the flexibility and responsiveness required for a growing user base. +![LQWD architecture](../assets/lqwd_lsp_node.png) + # Why LSPS2 with LDK Node and Lightning Liquidity? LSPS2, integrated with LDK Node and the Lightning Liquidity crate, offers a transformative solution to these challenges. Its dynamic liquidity management enables channels to be created on demand, perfectly aligning with real-time payment requirements and eliminating the need for diff --git a/docs/assets/lqwd_lsp_node.png b/docs/assets/lqwd_lsp_node.png new file mode 100644 index 0000000000000000000000000000000000000000..86561cbbb24f7bc76bdef6d4d399f3b4988510b8 GIT binary patch literal 56940 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 literal 0 HcmV?d00001 From 912cc59fa82c913d2e8f247d4c9e0ee3273e9c00 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Tue, 14 Jan 2025 10:17:51 -0500 Subject: [PATCH 03/11] Update date --- .../lqwd-liquidity-provider-get-liquidity-when-you-need-it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md index eb8fe743..057e68c5 100644 --- a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md +++ b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md @@ -1,7 +1,7 @@ --- title: "LQWD Liquidity Provider: Get Liquidity When You Need It" description: "Learn how LQWD built a custom LSP" -date: "2025-01-13" +date: "2025-01-14" authors: - Aziz Pulatov tags: From ca1e9ea0c48bc136bce7439efd89dc85a676de75 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Tue, 14 Jan 2025 10:19:22 -0500 Subject: [PATCH 04/11] Update docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md Co-authored-by: Elias Rohrer --- .../lqwd-liquidity-provider-get-liquidity-when-you-need-it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md index 057e68c5..bf13c38e 100644 --- a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md +++ b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md @@ -10,7 +10,7 @@ tags: The rapid growth of the Lightning Network has created unprecedented demand for liquidity. Traditionally, receiving payments on the Lightning Network required pre-established channels which posed barriers to new users and hindered scalability. With the introduction of [LSPS2](https://github.com/lightning/blips/blob/master/blip-0052.md) and its Just-In-Time (JIT) channel negotiation capabilities, the Lightning Network can now provide liquidity exactly when needed, improving both accessibility and efficiency. By leveraging [LDK Node](https://lightningdevkit.org/blog/announcing-ldk-node/) (a higher-level wrapper of LDK) and the [Lightning Liquidity crate](https://github.com/lightningdevkit/rust-lightning/tree/main/lightning-liquidity)—both Rust-based implementations—we developed a specialized LSP Node [(LQwD)](https://lqwdtech.com/). This node enables real-time liquidity provisioning by dynamically creating channels, ensuring payments can be received without prior investments in channel capacity. -# Challenges Before LSPS2 +# Challenges Before LSPS2 / bLIP-52 Before the advent of LSPS2, receiving payments on the Lightning Network was fraught with limitations. Users were required to have pre-established channels, creating significant friction during the onboarding process and hindering adoption. From 45680d41a67d793bacc8899f1d9d54a5f2559342 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Tue, 14 Jan 2025 10:19:30 -0500 Subject: [PATCH 05/11] Update docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md Co-authored-by: Elias Rohrer --- .../lqwd-liquidity-provider-get-liquidity-when-you-need-it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md index bf13c38e..eff3bfd7 100644 --- a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md +++ b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md @@ -12,7 +12,7 @@ The rapid growth of the Lightning Network has created unprecedented demand for l # Challenges Before LSPS2 / bLIP-52 -Before the advent of LSPS2, receiving payments on the Lightning Network was fraught with limitations. Users were required to have pre-established channels, creating significant friction during the onboarding process and hindering adoption. +Before the advent of LSPS2 / bLIP-52, receiving payments on the Lightning Network was fraught with limitations. Users were required to have pre-established channels, creating significant friction during the onboarding process and hindering adoption. Liquidity allocation was inefficient: static channels often resulted in unused capacity, tying up valuable funds that could have been better utilized elsewhere. Furthermore, scaling liquidity across the network required substantial investment and extensive pre-planning, making it challenging to achieve the flexibility and responsiveness required for a growing user base. From 39b9db83c33fd654214e3d581a0fc5a48970c4f6 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Tue, 14 Jan 2025 10:19:37 -0500 Subject: [PATCH 06/11] Update docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md Co-authored-by: Elias Rohrer --- .../lqwd-liquidity-provider-get-liquidity-when-you-need-it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md index eff3bfd7..9e204e19 100644 --- a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md +++ b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md @@ -19,7 +19,7 @@ challenging to achieve the flexibility and responsiveness required for a growing ![LQWD architecture](../assets/lqwd_lsp_node.png) -# Why LSPS2 with LDK Node and Lightning Liquidity? +# Why LSPS2 / bLIP-52 with LDK Node and Lightning Liquidity? LSPS2, integrated with LDK Node and the Lightning Liquidity crate, offers a transformative solution to these challenges. Its dynamic liquidity management enables channels to be created on demand, perfectly aligning with real-time payment requirements and eliminating the need for pre-established liquidity. From 0f0ffa9e183daf302ea937ad0a9783775a151093 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Tue, 14 Jan 2025 10:19:44 -0500 Subject: [PATCH 07/11] Update docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md Co-authored-by: Elias Rohrer --- .../lqwd-liquidity-provider-get-liquidity-when-you-need-it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md index 9e204e19..aa0c6170 100644 --- a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md +++ b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md @@ -21,7 +21,7 @@ challenging to achieve the flexibility and responsiveness required for a growing # Why LSPS2 / bLIP-52 with LDK Node and Lightning Liquidity? -LSPS2, integrated with LDK Node and the Lightning Liquidity crate, offers a transformative solution to these challenges. Its dynamic liquidity management enables channels to be created on demand, perfectly aligning with real-time payment requirements and eliminating the need for +LSPS2 / bLIP-52, integrated with LDK Node and the Lightning Liquidity crate, offers a transformative solution to these challenges. Its dynamic liquidity management enables channels to be created on demand, perfectly aligning with real-time payment requirements and eliminating the need for pre-established liquidity. The flexible and modular design of LDK Node, built on Rust and enhanced by the Lightning Liquidity crate, allows for the development of a highly customized and efficient LSP Node tailored to meet dynamic liquidity needs. From 50979694f3b4381c0249995d1ce768bb27c81ae1 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Tue, 14 Jan 2025 10:19:50 -0500 Subject: [PATCH 08/11] Update docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md Co-authored-by: Elias Rohrer --- .../lqwd-liquidity-provider-get-liquidity-when-you-need-it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md index aa0c6170..d37b6839 100644 --- a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md +++ b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md @@ -39,7 +39,7 @@ the applicable channel fees, ensuring both efficiency and reliability throughout # Immediate Benefits -The implementation of LSPS2 brings significant advantages to liquidity management on the Lightning Network. Clients can now receive funds without the need for pre-established channels, which greatly reduces friction during the onboarding process. The dynamic nature of channel +The implementation of LSPS2 / bLIP-52 brings significant advantages to liquidity management on the Lightning Network. Clients can now receive funds without the need for pre-established channels, which greatly reduces friction during the onboarding process. The dynamic nature of channel creation eliminates the necessity for upfront investments in liquidity, making the solution both scalable and cost-effective. Furthermore, payment processing is optimized, with Just-In-Timechannels ensuring faster and more reliable transactions, enhancing the overall user experience. # Conclusion From 49e395cc7093758b4f921ad5e541c01fb93f253d Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Tue, 14 Jan 2025 10:19:58 -0500 Subject: [PATCH 09/11] Update docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md Co-authored-by: Elias Rohrer --- .../lqwd-liquidity-provider-get-liquidity-when-you-need-it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md index d37b6839..9ab4c46f 100644 --- a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md +++ b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md @@ -44,6 +44,6 @@ creation eliminates the necessity for upfront investments in liquidity, making t # Conclusion -The LSP Liquidity Provider (LQwD), built on LDK Node and the Lightning Liquidity crate, showcases how LSPS2 can revolutionize liquidity management on the Lightning Network. By offering JIT channels, this solution simplifies onboarding, reduces costs, and aligns network resources with real-time needs, paving the way for a more accessible and scalable Lightning Network. +The LSP Liquidity Provider (LQwD), built on LDK Node and the Lightning Liquidity crate, showcases how LSPS2 / bLIP-52 can revolutionize liquidity management on the Lightning Network. By offering JIT channels, this solution simplifies onboarding, reduces costs, and aligns network resources with real-time needs, paving the way for a more accessible and scalable Lightning Network. For more information or collaboration opportunities, visit the LQwD [website](https://lqwdtech.com/). From 49d26330b88e414ed32571f70e7fec0c96097a27 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Tue, 14 Jan 2025 10:20:09 -0500 Subject: [PATCH 10/11] Update docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md Co-authored-by: Elias Rohrer --- .../lqwd-liquidity-provider-get-liquidity-when-you-need-it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md index 9ab4c46f..a6fc81e7 100644 --- a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md +++ b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md @@ -34,7 +34,7 @@ The process begins when a client initiates a liquidity request by interacting wi Following this, the client prepares an invoice that embeds the SCID and the LSP Node ID as route hints, ensuring that the payment route is well-defined. This invoice is then shared with the payer. -When the payment is received with the SCID, the LSP Node takes over to execute a Just-In-Time(JIT) channel creation. A zero-confirmation channel is opened to the client, facilitating the payment transfer. The LSP Node seamlessly forwards the payment to the client while deducting +When the payment is received with the SCID, the LSP Node takes over to execute a Just-In-Time (JIT) channel creation. A zero-confirmation channel is opened to the client, facilitating the payment transfer. The LSP Node seamlessly forwards the payment to the client while deducting the applicable channel fees, ensuring both efficiency and reliability throughout the process # Immediate Benefits From b77721af69400acd449d7a4d2c4ede3fedb5b4c7 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Tue, 14 Jan 2025 10:20:17 -0500 Subject: [PATCH 11/11] Update docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md Co-authored-by: Elias Rohrer --- .../lqwd-liquidity-provider-get-liquidity-when-you-need-it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md index a6fc81e7..caa7fd35 100644 --- a/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md +++ b/docs/_blog/lqwd-liquidity-provider-get-liquidity-when-you-need-it.md @@ -8,7 +8,7 @@ tags: - Case-Studies --- -The rapid growth of the Lightning Network has created unprecedented demand for liquidity. Traditionally, receiving payments on the Lightning Network required pre-established channels which posed barriers to new users and hindered scalability. With the introduction of [LSPS2](https://github.com/lightning/blips/blob/master/blip-0052.md) and its Just-In-Time (JIT) channel negotiation capabilities, the Lightning Network can now provide liquidity exactly when needed, improving both accessibility and efficiency. By leveraging [LDK Node](https://lightningdevkit.org/blog/announcing-ldk-node/) (a higher-level wrapper of LDK) and the [Lightning Liquidity crate](https://github.com/lightningdevkit/rust-lightning/tree/main/lightning-liquidity)—both Rust-based implementations—we developed a specialized LSP Node [(LQwD)](https://lqwdtech.com/). This node enables real-time liquidity provisioning by dynamically creating channels, ensuring payments can be received without prior investments in channel capacity. +The rapid growth of the Lightning Network has created unprecedented demand for liquidity. Traditionally, receiving payments on the Lightning Network required pre-established channels which posed barriers to new users and hindered scalability. With the introduction of [LSPS2 / bLIP-52](https://github.com/lightning/blips/blob/master/blip-0052.md) and its Just-In-Time (JIT) channel negotiation capabilities, the Lightning Network can now provide liquidity exactly when needed, improving both accessibility and efficiency. By leveraging [LDK Node](https://lightningdevkit.org/blog/announcing-ldk-node/) (a higher-level wrapper of LDK) and the [Lightning Liquidity crate](https://github.com/lightningdevkit/rust-lightning/tree/main/lightning-liquidity)—both Rust-based implementations—we developed a specialized LSP Node [(LQwD)](https://lqwdtech.com/). This node enables real-time liquidity provisioning by dynamically creating channels, ensuring payments can be received without prior investments in channel capacity. # Challenges Before LSPS2 / bLIP-52