ldksplicing / ldk-splicing

Unofficial+experimental Splicing feature in LDK
Other
5 stars 1 forks source link

Rust-Lightning

Crate Documentation Safety Dance

LDK/rust-lightning is a highly performant and flexible implementation of the Lightning Network protocol.

The primary crate, lightning, is runtime-agnostic. Data persistence, chain interactions, and networking can be provided by LDK's sample modules, or you may provide your own custom implementations. More information is available in the About section.

Splicing Prototype

'Happy Path' PoC for Splicing

Objective, Restrictions:

Up-to-date with main branch as of v0.0.118 (Oct 24, commit d2242f60; originally branched off v0.0.115).

See also ldk-sample https://github.com/catenocrypt/ldk-sample/tree/splicing-hapa2

To test: cargo test splic

Status

The project implements all of the BOLT specifications, and has been in production use since 2021. As with any Lightning implementation, care and attention to detail is important for safe deployment.

Communications for rust-lightning and Lightning Development Kit happen through our LDK Discord channels.

Crates

  1. lightning The core of the LDK library, implements the Lightning protocol, channel state machine, and on-chain logic. Supports no-std and exposes only relatively low-level interfaces.
  2. lightning-background-processor Utilities to perform required background tasks for Rust Lightning.
  3. lightning-block-sync Utilities to fetch the chain data from a block source and feed them into Rust Lightning.
  4. lightning-invoice Data structures to parse and serialize BOLT #11 Lightning invoices.
  5. lightning-net-tokio Implementation of the rust-lightning network stack using the Tokio async runtime. For rust-lightning clients which wish to make direct connections to Lightning P2P nodes, this is a simple alternative to implementing the required network stack, especially for those already using Tokio.
  6. lightning-persister Implements utilities to manage rust-lightning channel data persistence and retrieval. Persisting channel data is crucial to avoiding loss of channel funds.
  7. lightning-rapid-gossip-sync Client for rapid gossip graph syncing, aimed primarily at mobile clients.

About

LDK/rust-lightning is a generic library that allows you to build a Lightning node without needing to worry about getting all of the Lightning state machine, routing, and on-chain punishment code (and other chain interactions) exactly correct. Note that LDK isn't, in itself, a node. For an out-of-the-box Lightning node based on LDK, see Sensei. However, if you want to integrate Lightning with custom features such as your own chain sync, key management, data storage/backup logic, etc., LDK is likely your best option. Some rust-lightning utilities such as those in chan_utils are also suitable for use in non-LN Bitcoin applications such as Discreet Log Contracts (DLCs) and bulletin boards.

A sample node which fetches blockchain data and manages on-chain funds via the Bitcoin Core RPC/REST interface is available here. The individual pieces of that demo are composable, so you can pick the off-the-shelf parts you want and replace the rest.

In general, rust-lightning does not provide (but LDK has implementations of):

LDK's customizability was presented about at Advancing Bitcoin in February 2020: https://vimeo.com/showcase/8372504/video/412818125

Design Goal

The goal is to provide a fully-featured and incredibly flexible Lightning implementation, allowing users to decide how they wish to use it. With that in mind, everything should be exposed via simple, composable APIs. More information about rust-lightning's flexibility is provided in the About section above.

For security reasons, do not add new dependencies. Really do not add new non-optional/non-test/non-library dependencies. Really really do not add dependencies with dependencies. Do convince Andrew to cut down dependency usage in rust-bitcoin.

Rust-Lightning vs. LDK (Lightning Development Kit)

rust-lightning refers to the core lightning crate within this repo, whereas LDK encompasses rust-lightning and all of its sample modules and crates (e.g. the lightning-persister crate), language bindings, sample node implementation(s), and other tools built around using rust-lightning for Lightning integration or building a Lightning node.

Tagline

"Rust-Lightning, not Rusty's Lightning!"

Contributing

Contributors are warmly welcome, see CONTRIBUTING.md.

Project Architecture

For a rust-lightning high-level API introduction, see ARCH.md.

License is either Apache-2.0 or MIT, at the option of the user (ie dual-license Apache-2.0 and MIT).