Previously, we created the initial ChannelMonitor on outbound channels when we generated the funding_created message. This was somewhat unnecessary as, at that time, we hadn't yet received clearance to broadcast our initial funding transaction, and thus there should never be any use for a ChannelMonitor. It also complicated ChannelMonitor a bit as, at this point, we didn't have an initial local commitment transaction. By moving the creation of the initial ChannelMonitor to when we receive our counterparty's funding_signed, we can ensure that any ChannelMonitor will always have both a latest remote commitment tx and a latest local commitment tx for broadcast. This also fixes a strange API where we would close a channel unceremoniously on peer-disconnection if we hadn't yet received the funding_signed, but we'd already have a ChannelMonitor for that channel. While it isn't strictly a bug (some potential DoS issues aside), it is strange that these two definitions of a channel being open were not in sync. |
||
---|---|---|
fuzz | ||
lightning | ||
lightning-net-tokio | ||
.editorconfig | ||
.gitignore | ||
.travis.yml | ||
ARCH.md | ||
Cargo.toml | ||
CONTRIBUTING.md | ||
LICENSE | ||
README.md |
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.