10 个不稳定版本 (3 个破坏性更新)

0.9.1 2023年2月6日
0.9.0 2023年2月6日
0.9.0-rc.12022年12月27日
0.8.0 2022年7月14日
0.6.0 2022年5月23日

#2#lightning-network

每月下载量 27次
用于 9 个crate (6 个直接使用)

MIT 许可证

43KB
641

LNP Node: Lightning Network Protocol Node

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

人们可能会问:另一个 LN 节点?为什么我们需要它?以及这个闪电网络协议 (LNP)、Internet2 网络和 Bifrost 带来的闪电通道泛化是什么?

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

Internet2 是一组在网络安全通信中保留大部分隐私和匿名性的最佳实践。它支持 P2P 和 RCP(客户端-服务器)操作,并代表闪电风格的 Noise_XK 加密通信(而不是 SSL/TLS)以及用于客户端-服务器通信的加密 ZeroMQ。这允许避免与集中式证书授权机构、纯文本低效的 JSON/XML RPC 或网络服务协议相关的常见陷阱。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 协会中,我们将其用于所有地方,甚至用于微服务之间的内部通信。

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

这两个协议的想法都来自Maxim Orlovsky博士、Christian Decker博士和Giacomo Zucco在2019-2020年的讨论,并由Maxim Orlovsky作为LNP Core Library的一部分实现。我们建议您观看关于LNP Node的PotzblitzLNP/BP网络演示,以深入了解这些主题。演示文稿幻灯片也可用。

理由与特性

现有闪电节点实现的问题在于,它们对诸如

  • 未来LN升级(通道工厂支付点、Taproot)等内容的扩展性非常有限,因为它们没有以良好的方式将网络通信、通道操作和通道参数分开,这样就可以替换HTLCs为支付点,使用某些扩展/模块等;
  • LN之上的协议(第3层),如RGB、DLCs或提议的Lightspeed协议,需要修改承诺交易的结构;
  • 自定义非支付通道类型,例如使用Storm的无需信任存储
    或使用Prometheus进行计算。

我们将构建这种丰富功能的闪电网络所需扩展命名为“冰河”。通过这个项目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 Node用于在比特币和闪电网络上运行RGB智能合约
  • BP Node 用于比特币区块链索引(你可能认为它是更高效的 Electrum 服务器替代品)

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

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

LNP Node 架构细节

LNP Node 的整体架构如下

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

项目组织 & 架构

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

每个守护进程(更准确地说,“微服务”,因为它可以作为线程运行,而不是必须作为进程)或其他二进制文件(如 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:在这里最好提问关于闪电网络的通用问题
    • dr_orlovsky:我在 IRC 上的账户
  • 闪电黑客日 Mattermost 频道:https://mm.fulmo.org/fulmo/channels/x-rust-ln-node

依赖项

~22–34MB
~459K SLoC