Skip to content
 
 

Repository files navigation

Stable Channels

macOS Windows Linux Android License: GPLv3

The Stable Channels Wallet lets users maintain a portion of their bitcoin to a dollar balance, all while staying self-custodial and 100% in bitcoin.

Downloads

These links always point to the newest release. All releases: Releases

Overview

Stable Channels ships as an iOS app, an Android app, and a desktop wallet (macOS, Windows, Linux). Every app runs a full Lightning node on the device and lets users stabilize the bitcoin that they send to themselves during onboarding.

The LSP/Server keeps the user stable by overcollateralizing the Stable Channel by 100% at the time of channel creation. Each user (the stability receiver and the LSP/stability provider) puts in the same amount of bitcoin, and the stability mechanism is activated.

The stability mechanism works like this: each node refreshes a multi-exchange BTC/USD price consensus every 15 seconds. Six direct USD markets are preferred; a geographically diverse BTC/USDT fallback is used only when at least three independent USDT/USD sources confirm that USDT remains within 0.5% of its dollar peg. At least three agreeing prices are required, outliers are excluded, and stale or suspicious prices can remain visible but cannot move money. Based on an accepted price, the nodes adjust the channel balance with their counterparty to keep the stability receiver's balance at a fixed dollar value (e.g., $100,000 of bitcoin).

Stable Channels Architecture

Both parties remain self-custodial and can opt out anytime via cooperative or forced on-chain channel closure.

The project is in-progress and is built on LDK Node and Rust. Prior versions were compatible with LND and CLN. These legacy implementations can be found here: https://github.com/toneloc/stable-channels-legacy.

Links with examples:

Run the User Desktop Wallet

You can check out the latest builds for macOS, Windows, or Linux here - https://github.com/toneloc/stable-channels/releases

Run from Source

Quick Setup

cargo run --locked --bin stable-channels user

This will start the app on mainnet. Pay the invoice and you are good to go.

Always build with --locked so cargo uses the exact dependency versions pinned in the committed Cargo.lock instead of re-resolving them. Treat any Cargo.lock change as a reviewed change — never update dependencies to versions published the same day (see the 2026-08-20 arrayref supply-chain attack, RUSTSEC-2026-0260).

Backups and logs

Logs and backup/key files can be found in these directories:

  • Linux - ~/.local/share/StableChannels
  • Mac - ~/Library/Application\ Support/StableChannels
  • Windows - %APPDATA%\StableChannels

*actual directory might differ depending on user's system

Configuration

The application works out of the box with sensible defaults defined in src/constants.rs. To customize values like the LSP public key, address, or network settings, edit the constants directly in that file.

Running Different Components

# User interface
cargo run --locked --bin stable-channels user

More instructions on running the LSP backend are forthcoming.

Contributing

After cloning, install the git hooks (one-time):

./.githooks/install.sh

This points git at .githooks/ so the pre-commit checks (secret scanning, cargo fmt, cargo clippy, large-file guard) run automatically on every commit.

Stable Channels Process

When the accepted price of bitcoin changes:

  • (a) Goes up:

    • User/Stable Receiver loses bitcoin.
      • Less bitcoin is needed to maintain the dollar value.
      • The User/Stable Receiver pays the LSP/Stable Provider.
  • (b) Goes down:

    • User/Stable Receiver gains bitcoin.
      • More bitcoin is needed to maintain the dollar value.
      • The LSP/Stable Provider pays the User/Stable Receiver.
  • (c) Stays the same:

    • No action required.

Note: Stable Channels are currently non-routing channels. Work is ongoing to add routing and payment capabilities.

Technical tips

Using a fresh Ubuntu or on Windows? You may need to install OpenSSL libraries or Perl.

Linux - sudo apt-get install -y pkg-config libssl-dev and curl.

Windows - winget install StrawberryPerl.StrawberryPerl. Windows also requires a few other things as well.

Payout Examples (entry = $100,000/BTC)

Each side puts in 1 BTC at $100,000.

Abbreviations:

  • SR = Stable Receiver (targeting $100,000)
  • SP = Stable Provider
  • Δ = Delta / Change
Price Change (%) New BTC Price SR (BTC) SR (USD) SP (BTC) SP (USD) SR Fiat Δ$ SR BTC Δ SR Fiat Δ% SR BTC Δ% SP Fiat Δ$ SP BTC Δ SP Fiat Δ% SP BTC Δ%
-30 70,000.00 1.43 100,000.00 0.57 40,000.00 0.00 +0.43 0% +42.86% -60,000.00 -0.43 -60.00% -42.86%
-20 80,000.00 1.25 100,000.00 0.75 60,000.00 0.00 +0.25 0% +25.00% -40,000.00 -0.25 -40.00% -25.00%
-10 90,000.00 1.11 100,000.00 0.89 80,000.00 0.00 +0.11 0% +11.11% -20,000.00 -0.11 -20.00% -11.11%
0 100,000.00 1.00 100,000.00 1.00 100,000.00 0.00 0.00 0% 0% 0.00 0.00 0% 0%
10 110,000.00 0.91 100,000.00 1.09 120,000.00 0.00 -0.09 0% -9.09% +20,000.00 +0.09 +20.00% +9.09%
20 120,000.00 0.83 100,000.00 1.17 140,000.00 0.00 -0.17 0% -16.67% +40,000.00 +0.17 +40.00% +16.67%
30 130,000.00 0.77 100,000.00 1.23 160,000.00 0.00 -0.23 0% -23.08% +60,000.00 +0.23 +60.00% +23.08%

Acknowledgements

Thanks to countless open-source bitcoin developers and organizations who have made this work possible. Satoshi Lives!

Thanks to all of the Lightning Network core developers, and all of the bitcoin open-source devs on whose giant shoulders we stand.

About

p2p stable channels on the Bitcoin Lightning Network

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages