Rust-Lightning
LDK/rust-lightning 是一个高性能且灵活的
闪电网络协议实现。
主要 crate lightning 与运行时无关。数据持久化、链交互
和网络功能可以由 LDK 的示例模块提供,您也可以提供
自己的自定义实现。
更多信息可在 About 部分中查阅。
状态
该项目实现了所有 BOLT 规范, 自 2021 年起已投入生产使用。与任何闪电网络实现一样,安全部署需要 谨慎和注重细节。
关于 rust-lightning 和 Lightning Development Kit 的沟通通过
我们的 LDK Discord 频道进行。
Crates
- lightning
LDK 库的核心,实现了 Lightning 协议、通道状态机
以及链上逻辑。支持
no_std并仅暴露相对较低层的接口。 - lightning-background-processor 用于执行 Rust Lightning 所需后台任务的实用工具。
- lightning-block-sync 用于从区块源获取链数据并将其输入 Rust Lightning 的实用工具。
- lightning-invoice 用于解析和序列化 BOLT #11 Lightning 发票的数据结构。
- lightning-net-tokio
使用
Tokio
async运行时实现的rust-lightning网络栈。对于希望 直接与 Lightning P2P 节点建立连接的rust-lightning客户端,这是一个实现所需网络栈的简单替代方案,尤其 适用于已经使用 Tokio 的客户端。 - lightning-persister
实现了管理
rust-lightning通道数据持久化和检索的实用工具。 持久化通道数据对于避免通道资金丢失至关重要。 - lightning-rapid-gossip-sync 用于快速 gossip 图同步的客户端,主要面向移动客户端。
关于
LDK/rust-lightning 是一个通用库,允许你构建一个 Lightning
节点,而无需担心将 Lightning 状态机、
路由和链上惩罚代码(以及其他链交互)完全
正确地实现。请注意,LDK 本身并不是一个节点。对于基于 LDK 的
开箱即用的 Lightning 节点,请参阅 LDK-sample。然而,如果你
想要将 Lightning 与自定义功能(如你自己的链同步、
密钥管理、数据存储/备份逻辑等)集成,LDK 可能是你的最佳选择。
一些 rust-lightning 实用工具,例如
chan_utils 中的那些,也适用于
非 LN 的比特币应用,如离散对数合约(DLCs)和公告板。
如果你希望轻松地在应用程序中集成 lightning,而无需处理 所有样板代码,也请查看 LDK-node 库。
通常,rust-lightning 不提供(但 LDK 有相应实现):
- 磁盘存储 - 你可以以任何方式存储通道状态 - 无论是 Google Drive/iCloud、本地磁盘、任何键值存储/数据库/远程 服务器,或它们的任意组合 - 我们提供了一个干净的 API,提供 可以序列化为简单二进制块的对象,并以你希望的任何方式存储。
- 区块链数据 - 我们提供了一个简单的
block_connected/block_disconnectedAPI,你向它提供区块头和交易信息。我们还 提供了一个 API,用于获取我们希望获知的交易信息,该 API 与 Electrum 服务器请求/neutrino 过滤等兼容。 - UTXO 管理 - RL/LDK 拥有链上资金,只要它们可以作为 可争议的 Lightning 输出的一部分被认领 - 一旦通道关闭 且所有链上输出仅可由用户花费,我们向用户 发出通知,表明某个 UTXO 再次“属于”他们,由他们自行决定如何花费。此外,通道资金通过一个通用 API 完成, 该 API 通知用户需要出现在链上的输出,用户 随后可以为其创建交易。一旦交易创建完成,我们处理 其余部分。这是我们 API 目标的重要组成部分 - 使将 Lightning 集成到拥有自身 链上逻辑的现有链上钱包中变得更加容易 - 无需将资金移入或移出单独的
支持链上交易和独立私钥系统的 Lightning 钱包。
- networking - 为了使用户能够在嵌入式设备上运行完整的 Lightning 节点,我们完全没有规定如何连接到其他节点!我们提供了一个使用 TCP 套接字的默认实现,但例如,如果你想在硬件钱包上运行完整的 Lightning 节点,你可以通过 USB/串口传输 Lightning 网络消息,然后从另一台机器通过 TCP 套接字发送它们。
- private keys - 同样,我们有“默认实现”,但用户可以根据一个简单的 API,以任何他们希望的方式向 RL/LDK 提供私钥。我们甚至支持一个用于签名交易的通用 API,允许用户在内存中不保留任何私钥/仅将私钥放在硬件钱包上的情况下运行 RL/LDK。
LDK 的可定制性于 2020 年 2 月在 Advancing Bitcoin 会议上进行了展示: https://vimeo.com/showcase/8372504/video/412818125
设计目标
目标是提供一个功能完备且极其灵活的 Lightning
实现,允许用户决定如何使用它。基于此,
所有功能都应通过简单、可组合的 API 暴露。有关 rust-lightning 灵活性的更多
信息,请参阅上述的 About
部分。
出于安全原因,请勿添加新的依赖项。真的不要添加新的
非可选/非测试/非库依赖项。真的真的不要添加
带有依赖项的依赖项。请说服 Andrew 减少 rust-bitcoin 中的依赖项使用。
Rust-Lightning 与 LDK (Lightning Development Kit)
rust-lightning 指的是本仓库中的核心 lightning crate,而
LDK 包含 rust-lightning 及其所有示例模块和 crate(例如
lightning-persister crate)、语言绑定、示例节点
实现,以及围绕使用 rust-lightning 进行
Lightning 集成或构建 Lightning 节点的其他工具。
标语
"Rust-Lightning, not Rusty's Lightning!"
贡献
热烈欢迎贡献者,请参阅 CONTRIBUTING.md.
项目架构
有关 rust-lightning 高级 API 的介绍,请参阅 ARCH.md.
许可证为 Apache-2.0 或 MIT,由用户选择(即双重许可 Apache-2.0 和 MIT)。