18个版本 (4个重大更新)

0.9.1 2023年2月6日
0.9.0-rc.12022年12月27日
0.8.1 2023年1月18日
0.8.0 2022年7月14日
0.1.0-beta.12020年11月6日

#2743 in 魔法豆

Download history 64/week @ 2024-03-31

每月下载量 61次
lnpbp_nodes 中使用

MIT 许可证

360KB
7K SLoC

Rust 5K SLoC // 0.1% comments BASH 1K SLoC PowerShell 522 SLoC

LNP Node:闪电网络协议节点

LNP Node 是一个全新的、从头开始用 Rust 编写的闪电网络节点。实际上,它是一套能够同时运行 BOLT 标准中定义的闪电网络(LN)和通用闪电(代号 "Bifrost")的守护进程/微服务:这是一个对闪电网络协议的全面重构,支持 Taproot、Schnorr 签名、RGB 资产、DLCs、多对多通道、通道工厂/通道可组合性以及许多其他高级功能。LNP Node 使用 Internet2 网络协议和特别设计的微服务架构进行操作。

有人可能会问:另一个 LN 节点?我们为什么需要它?以及这个闪电网络协议(LNP)、Internet2 网络以及随着 Bifrost 出现的闪电通道通用化是什么意思?

闪电网络协议 是 "正常"(或 "传统")闪电网络和Bifrost 的统一:一组在比特币协议(BP)之上运行的协议,共同构成了 LNP/BP 技术栈系列。

Internet2 是一套最佳实践,旨在在网络通信中使用现有协议,以最大限度地保护隐私和匿名性。它支持点对点(P2P)和客户端-服务器(RCP)操作,并代表闪电风格的 Noise_XK 加密通信(而不是 SSL/TLS)用于 P2P,以及用于客户端-服务器通信的加密 ZeroMQ。这允许避免与集中式证书颁发机构或低效的纯文本 JSON/XML RPC 或 Web 服务协议相关的大多数常见陷阱。P2P 层是从 BOLT-8 提取的,部分来自 BOLT-1,扩展以支持任意消息、RPC、P2P 以及在 TCP/IP、TCP/Tor、UDP、ZeroMQ 和高延迟通信通道(网状/卫星网络)上运行端到端加密的发布/订阅 API。它是 100% LN 兼容的(在这种情况下,闪电网络实际上运行在这个协议上),但允许比当前 LN 使用更多。该协议定义为一组 LNPBP15-19 标准,这些标准是 BOLTs 的严格扩展。换句话说,使用此协议可以进行任意消息传递(并构建无需中央权威机构(如 DNS、SSL、IP 地址)的复杂分布式系统),因此在我们 LNP/BP 协会中,我们将其用于各个方面,甚至用于微服务之间的内部通信。

Bifrost 是一种以模块化和可扩展的方式定义支付通道的方法,使您可以轻松地向承诺交易添加新的交易输出,从 HTLC 转换到 PTLC 支付,使用 taproot 进行大量实验,而无需每次都发明新的消息和标准:对等方正在使用 Bifrost 通过部分签名交易协商通道和交易结构。

这两个协议的想法来源于 2019-2020 年 Dr Maxim Orlovsky、Dr Christian Decker 和 Giacomo Zucco 的讨论,并由 Maxim Orlovsky 在 LNP Core Library 的框架下实现。我们建议观看 关于 LNP 节点的 PotzblitzLNP/BP 网络演示,以深入了解这些主题。演示幻灯片也可用。

理由与特性

现有闪电节点实现的问题在于它们对这些事物的扩展性非常有限,例如:

  • 未来的 LN 升级(通道工厂支付点、Taproot),因为它们没有很好地将网络通信、通道操作和通道参数分开,因此将可能替换 HTLC 为支付点,使用某种扩展/模块;
  • LN 之上的协议(第 3 层),如 RGB、DLC 或提议的 Lightspeed 协议,它们需要对承诺交易的结构进行修改;
  • 自定义非支付通道类型,例如使用 Storm 的无信任存储
    或使用 Prometheus 进行计算。

我们将构建此丰富功能的 Lightning 网络所需扩展称为 "Bifrost"。通过这个项目,LNP/BP 标准协会试图构建一个具有可扩展和高度模块化架构的 LN 节点,利用最先进的 Rust 方法,如

  • 移动、云和 Web 就绪,这得益于专门设计的 微服务架构
  • 针对单独进程(按通道扩展等)的可伸缩性 Docker 化
  • 快速且高效的 ZeroMQ 用于 API 和 IPC。

这个新节点将用于实现

设计

方法

节点(作为由 LNP/BP 标准协会和 Pandora Core 公司子公司维护的其他节点)由多个微服务组成,通过 ZMQ RPC 接口相互通信。

代表节点的微服务集合可以运行为:

  1. 桌面或服务器上的单个守护进程;
  2. 基于 docker 的守护进程云,每个微服务一个实例,具有实例可伸缩性和地理分布式环境;
  3. 单个移动应用中的线程;
  4. 甚至不同的节点可以在它们的服务中将彼此的服务组合成单个可执行文件/移动应用;
  5. 所有 P2P 通信都进行了端到端加密,并通过 Tor 工作。

由 LNP/BP 标准协会设计和维护,具有相同架构的其他节点包括:

  • RGB 节点 用于在比特币和闪电网络上运行 RGB 智能合约
  • BP 节点 用于索引比特币区块链(您可以将其视为更高效的 Electrum 服务器替代品)

其他第三方提供自己的节点

  • MyCitadel 比特币、LN & RGB 启用钱包服务,支持其他 LNP/BP 协议;
  • Keyring 用于管理私钥账户、存储和签名,支持 miniscript 和 PSBTs。

LNP 节点架构详细信息

LNP 节点的整体架构如下:

有关节点中使用的服务总线更多信息

项目组织 & 架构

  • cli/ – 通过 RPC 与 LNP 节点通信的命令行 API(见下文);
  • rpc/ – 控制 LNP 节点的 RPC 客户端库;
  • src/ – 主要节点源代码
    • peerd/ – 使用 LNP(闪电网络协议)管理闪电网络中节点连接的守护进程;
    • channeld – 管理通用闪电通道及其扩展的守护进程;
    • lnpd – 初始化创建新通道和连接的守护进程;
    • routed – 管理路由和八卦的守护进程;
    • watchd – 监视链上交易状态的守护进程;
    • signd - 管理密钥派生和签名的密钥;使用 Descriptor Wallet lib

每个守护进程(更准确地说是“微服务”,因为它可以作为一个线程运行,而不一定是一个进程)或其他二进制文件(如 CLI 工具)都遵循相同的模块/文件名组织概念

  • error.rs – 守护进程特定的错误类型;
  • opts.rs – CLAP 参数 & 守护进程配置数据;
  • runtime.rs – 单例管理主要守护进程线程,并保持所有 ZMQ/P2P 连接和套接字;通过它们接收和处理消息;
  • automata/ - 实现不同操作工作流程的状态机;
  • index/storage/cache/ – 存储接口和引擎;
  • db/ – 如果需要,特定的 SQL 架构和代码。

构建和使用

依赖关系

要编译节点,请安装cargo

sudo apt install -y build-essential
cargo install --path . --locked --all-features

生成资金钱包(首次使用)

在运行节点之前,需要设置一个xpriv来创建资金钱包

lnpd -vvv init

# The prompt shows something like this:
Initializing node data
Data directory '/[DATA_DIR]/.lnp_node/signet' ... found
Signing account 'master.key' ... creating
Please enter your master xpriv:

本地运行

要编译节点,请安装cargo,然后运行以下命令

sudo apt install -y build-essential cmake libsqlite3-dev libssl-dev libzmq3-dev pkg-config
cargo install --path . --locked --all-features
lnpd -vvv

在docker中运行

docker build -t lnp-node .
docker run --rm --name lnp_node lnp-node

通讯方式

  • Freenode上的IRC频道
    • #lnp-bp: 讨论此项目和其他LNP/BP项目
    • #rust-bitcoin: 在这里可以获得rust-lightning的一般支持
    • #lightning-dev: 在这里最好提出有关lightning网络的通性问题
    • dr_orlovsky: 我的IRC账户
  • Lightning Hackdays Mattermost频道: https://mm.fulmo.org/fulmo/channels/x-rust-ln-node

依赖关系

~31–44MB
~599K SLoC