A highly modular Bitcoin Lightning library written in Rust. It's rust-lightning, not Rusty's Lightning!
Find a file
Jeffrey Czyz 491bbc56cf Encapsulate feature flag checking and manipulation
Each feature is represented by two bits within Features' flags field.
Working with these flags requires bitwise operations, which can be error
prone. Rather than directly checking and manipulating bits, encapsulate
the bits within each feature trait and provide mechanisms for doing so.

This removes the need to comment on which features correspond to bitwise
expressions since the expressions use feature trait identifiers instead.

With this approach, byte literals and expressions can be evaluated at
compile time still. However, for these cases, knowing which byte within
the flags that a feature corresponds to still must be determined by the
implementor.

Remove the special case where initial_routing_sync has no even bit. Now,
it (bit 2) is considered known by the implementation.
2020-04-29 11:07:47 -07:00
.github/workflows Fix step naming in fuzz tests in GitHub Actions 2020-04-24 16:55:09 -04:00
fuzz Merge pull request #579 from ariard/2020-04-sanitize-cltv-delay 2020-04-24 22:50:45 +00:00
lightning Encapsulate feature flag checking and manipulation 2020-04-29 11:07:47 -07:00
lightning-net-tokio Bump versions to 0.0.11/net-tokio 0.0.3 2020-04-24 22:10:00 -04:00
.editorconfig Mandate new line at end of file in editorconfig. 2020-04-11 11:33:07 -07:00
.gitignore Provide remote channel public keys to signer 2020-01-19 20:40:49 -05:00
.travis.yml Use more generic name as it will be use in GitHub Action too 2020-04-23 09:36:48 +10:00
ARCH.md fixed typo 2020-04-22 10:52:32 -07:00
Cargo.toml Move test profile to crate root, so it has effect again 2019-11-28 01:21:41 -05:00
CONTRIBUTING.md Merge pull request #507 from moneyball/patch-2 2020-02-29 02:59:34 +00:00
LICENSE Unify license with rust-bitcoin-spv 2018-03-05 15:09:44 -05:00
README.md Link ARCH.md in README.md 2020-03-20 23:13:37 -04:00

Safety Dance

Rust-Lightning, not Rusty's Lightning!

Documentation can be found at docs.rs

The project implements all of the BOLT specifications in the 1.0 spec except for channel queries. The implementation has pretty good test coverage that is expected to continue to improve. There are a number of internal refactorings being done now that will make the code base more welcoming to new contributors. It is also anticipated that as developers begin using the API, the lessons from that will result in changes to the API, so any developer using this API at this stage should be prepared to embrace that. The current state is sufficient for a developer or project to experiment with it. Recent increased contribution rate to the project is expected to lead to a high quality, stable, production-worthy implementation in 2020.

Communications for Rust-Lightning and Lightning Development Kit happens through LDK slack.

Design Goal

The goal is to provide a full-featured but also incredibly flexible lightning implementation, allowing the user to decide how they wish to use it. With that in mind, everything should be exposed via simple, composable APIs. The user should be able to decide whether they wish to use their own threading/execution models, allowing usage inside of existing library architectures, or allow us to handle that for them. Same goes with network connections - if the user wishes to use their own networking stack, they should be able to do so! This all means that we should provide simple external interfaces which allow the user to drive all execution, while implementing sample execution drivers that create a full-featured lightning daemon by default.

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.

Contributing

Contributors are warmly welcome, see CONTRIBUTING.md.

Project Architecture

For a Rust-Lightning high-level API introduction, see ARCH.md.

License is Apache-2.0.