From f8e9f84b6193186b1d033d1e9c7da4e9c8cc18e1 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Tue, 27 Aug 2024 21:11:56 +0100 Subject: [PATCH 1/3] Adds Alby case study --- .../public/img/alby-hub-featured.svg | 17 ++++++++ ...custodial-lightning-wallet-for-everyone.md | 40 +++++++++++++++++++ docs/assets/alby-architecture.svg | 1 + docs/assets/alby.svg | 17 ++++++++ docs/case-studies.md | 24 +++++++---- 5 files changed, 92 insertions(+), 7 deletions(-) create mode 100644 docs/.vuepress/public/img/alby-hub-featured.svg create mode 100644 docs/_blog/alby-hub-uses-ldk-to-offer-a-self-custodial-lightning-wallet-for-everyone.md create mode 100644 docs/assets/alby-architecture.svg create mode 100644 docs/assets/alby.svg diff --git a/docs/.vuepress/public/img/alby-hub-featured.svg b/docs/.vuepress/public/img/alby-hub-featured.svg new file mode 100644 index 000000000..7f7b02589 --- /dev/null +++ b/docs/.vuepress/public/img/alby-hub-featured.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/_blog/alby-hub-uses-ldk-to-offer-a-self-custodial-lightning-wallet-for-everyone.md b/docs/_blog/alby-hub-uses-ldk-to-offer-a-self-custodial-lightning-wallet-for-everyone.md new file mode 100644 index 000000000..f45d69d6f --- /dev/null +++ b/docs/_blog/alby-hub-uses-ldk-to-offer-a-self-custodial-lightning-wallet-for-everyone.md @@ -0,0 +1,40 @@ +--- +title: "Alby Hub uses LDK to offer a self-custodial lightning wallet for everyone" +description: "Learn how Alby uses LDK to empower users & builders with easy but important tools" +date: "2024-08-27" +authors: + - Moritz Kaminski +tags: + - Case-Studies +--- + +[Alby Hub](https://albyhub.com/) is a self-custodial Lightning wallet that combines ease of use, ownership, and seamless connectivity to apps. It serves as a central hub for managing bitcoin payments, featuring a simple plug-in mechanism that links the integrated Lightning node with apps across platforms and operating systems. +This setup allows users to control Alby Hub from mobile wallets, browser extensions, and directly within social media apps, games, and more—eliminating the need to deposit funds into apps or spread your Bitcoin balance across multiple accounts. + +Alby Hub manages to improve ease of use of a self-custodial lightning wallet while giving users full control over their wallet and payment channels if desired, thus providing [lightning sovereignty for everyone](https://blog.getalby.com/what-is-alby-hub/). + +# What we did + +Alby Hub is a versatile application built with Go for the backend and React for the frontend. It integrates the Rust-based LDK Node implementation with custom UniFFI bindings. + +Blockchain data is sourced from Esplora servers to minimize sync times and disk usage. + +A SQLite database is used for storing transaction metadata, providing detailed context around each transaction. + +The application supports two modes: - Wails (Desktop app): Compatible with Mac, Windows, and Linux. - HTTP (Web app): Deployable via Docker or run directly as a Linux binary. + +Alby Hub also integrates with Lightning Service Providers (LSPs) through an API, enabling users to choose from a list of LSPs and purchase payment channels in two clicks to source inbound liquidity. With the help of the LSP API channel management will be automated and further abstracted away. + +The integrated [NWC](https://nwc.dev/) wallet service is what makes Alby Hub a new kind of a self-custodial lightning wallet. NWC allows direct connections to [third-party apps](https://github.com/getAlby/awesome-nwc), greatly extending the app's functionality. This means users can plug in their Hub by copying a connection string into other apps instead of depositing funds before using an app. + +![Alby architecture](../assets/alby-architecture.svg) + +# Results + +Integrating LDK directly into Alby Hub, rather than relying on an external daemon, simplifies deployment and operation. This integration is what made building Alby Hub feasible. Its resource efficiency gives users the flexibility to choose [where to run Alby Hub](https://blog.getalby.com/run-alby-hub-on-servers-desktops-and-microcomputers/)—whether on servers, desktops, or microcomputers. + +Another crucial factor was payment processing time. Alby is your companion for bitcoin payments wherever you go whether at a POS or directly within apps. Fast payment processing is crucial for delivering a seamless user experience in third-party apps. + +LDK Node offers a well-structured and designed public API, making integration fast and development straightforward. When needed, the Spiral team provided consistent support throughout the integration process and continues to do so in the operation of Alby Hub. This collaboration has been crucial to delivering a sophisticated product. + +As a consequence, Alby Hub lowers the cost barrier for running a lightning node, making self-custodial lightning payments accessible to those with limited budgets and without technical skills. diff --git a/docs/assets/alby-architecture.svg b/docs/assets/alby-architecture.svg new file mode 100644 index 000000000..3bf7a7ed1 --- /dev/null +++ b/docs/assets/alby-architecture.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/alby.svg b/docs/assets/alby.svg new file mode 100644 index 000000000..27c457374 --- /dev/null +++ b/docs/assets/alby.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/case-studies.md b/docs/case-studies.md index 4305ccf7f..fbb939c16 100644 --- a/docs/case-studies.md +++ b/docs/case-studies.md @@ -6,18 +6,18 @@ description: "A list of bitcoin applications and services building with LDK" actionText: "Add your project" actionLink: "https://github.com/orgs/lightningdevkit/discussions/1554" features: - - title: "Mutiny" - details: "A self-custodial lightning wallet that runs in the browser" - image: "/img/mutiny-featured.png" - imageAlt: "mutiny logo" - caseStudyLink: "/blog/mutiny-uses-ldk-the-first-lightning-wallet-for-the-web/" + - title: "Alby Hub" + details: "Equipped with its own lightning node, ready to connect you to numerous applications" + image: "/img/alby-hub-featured.svg" + imageAlt: "alby hub logo" + caseStudyLink: "/blog/alby-hub-uses-ldk-to-offer-a-self-custodial-lightning-wallet-for-everyone/" - title: "Cash App" details: "Send and spend, bank, and buy stocks or bitcoin " image: "/img/cash-app-logo.png" imageAlt: "cash app logo" caseStudyLink: "/blog/cashapp-enables-lightning-withdrawals-and-deposits-using-ldk/" - title: "Bitkit" - details: "Bitkit hands you the keys to your money, profile, contacts, and web accounts" + details: "Hands you the keys to your money, profile, contacts, and web accounts" image: "/img/bitkit.svg" imageAlt: "" caseStudyLink: "/blog/bitkit-uses-ldk-to-build-the-ultimate-alternative-to-custodial-wallets/" @@ -74,10 +74,15 @@ lastUpdated: false
-

+

Mutiny

A web-first unstoppable bitcoin wallet for everyone

+
+ +

Alby Hub

+

With its own lightning node, connecting you to numerous applications

+
@@ -219,6 +224,11 @@ lastUpdated: false

Aciedo

A financial infrastructure suite for developers and users

+
+ +

Alby Hub

+

With its own lightning node, connecting you to numerous apps

+

AtomicDEX

From c1d3580f7dc619b1baea2764ff9c9357058b3d2c Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Tue, 3 Sep 2024 15:19:40 -0400 Subject: [PATCH 2/3] Adds Alby architecture diagram --- ...f-custodial-lightning-wallet-for-everyone.md | 4 ++-- docs/assets/alby-architecture.png | Bin 0 -> 26108 bytes docs/assets/alby-architecture.svg | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 docs/assets/alby-architecture.png delete mode 100644 docs/assets/alby-architecture.svg diff --git a/docs/_blog/alby-hub-uses-ldk-to-offer-a-self-custodial-lightning-wallet-for-everyone.md b/docs/_blog/alby-hub-uses-ldk-to-offer-a-self-custodial-lightning-wallet-for-everyone.md index f45d69d6f..a8f2eff91 100644 --- a/docs/_blog/alby-hub-uses-ldk-to-offer-a-self-custodial-lightning-wallet-for-everyone.md +++ b/docs/_blog/alby-hub-uses-ldk-to-offer-a-self-custodial-lightning-wallet-for-everyone.md @@ -1,7 +1,7 @@ --- title: "Alby Hub uses LDK to offer a self-custodial lightning wallet for everyone" description: "Learn how Alby uses LDK to empower users & builders with easy but important tools" -date: "2024-08-27" +date: "2024-09-03" authors: - Moritz Kaminski tags: @@ -27,7 +27,7 @@ Alby Hub also integrates with Lightning Service Providers (LSPs) through an API, The integrated [NWC](https://nwc.dev/) wallet service is what makes Alby Hub a new kind of a self-custodial lightning wallet. NWC allows direct connections to [third-party apps](https://github.com/getAlby/awesome-nwc), greatly extending the app's functionality. This means users can plug in their Hub by copying a connection string into other apps instead of depositing funds before using an app. -![Alby architecture](../assets/alby-architecture.svg) +![Alby architecture](../assets/alby-architecture.png) # Results diff --git a/docs/assets/alby-architecture.png b/docs/assets/alby-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..090353f64d8bc75e17e08d23897a594a34a77143 GIT binary patch literal 26108 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 literal 0 HcmV?d00001 diff --git a/docs/assets/alby-architecture.svg b/docs/assets/alby-architecture.svg deleted file mode 100644 index 3bf7a7ed1..000000000 --- a/docs/assets/alby-architecture.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From 1d4b17160ef4d936ea59bc158ee185cb2de24058 Mon Sep 17 00:00:00 2001 From: Conor Okus Date: Wed, 4 Sep 2024 12:20:12 -0400 Subject: [PATCH 3/3] Updates Cash App logo --- docs/.vuepress/public/img/cash-app-logo.png | Bin 4010 -> 0 bytes docs/.vuepress/public/img/cashapp-badge.svg | 4 ++++ docs/case-studies.md | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) delete mode 100644 docs/.vuepress/public/img/cash-app-logo.png create mode 100644 docs/.vuepress/public/img/cashapp-badge.svg diff --git a/docs/.vuepress/public/img/cash-app-logo.png b/docs/.vuepress/public/img/cash-app-logo.png deleted file mode 100644 index ea9af1502e53726d871f991c9e1dd258d6f30a71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4010 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 diff --git a/docs/.vuepress/public/img/cashapp-badge.svg b/docs/.vuepress/public/img/cashapp-badge.svg new file mode 100644 index 000000000..2ef0274f0 --- /dev/null +++ b/docs/.vuepress/public/img/cashapp-badge.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/case-studies.md b/docs/case-studies.md index fbb939c16..17aa01f29 100644 --- a/docs/case-studies.md +++ b/docs/case-studies.md @@ -13,7 +13,7 @@ features: caseStudyLink: "/blog/alby-hub-uses-ldk-to-offer-a-self-custodial-lightning-wallet-for-everyone/" - title: "Cash App" details: "Send and spend, bank, and buy stocks or bitcoin " - image: "/img/cash-app-logo.png" + image: "/img/cashapp-badge.svg" imageAlt: "cash app logo" caseStudyLink: "/blog/cashapp-enables-lightning-withdrawals-and-deposits-using-ldk/" - title: "Bitkit"