10 个不稳定版本 (3 个破坏性更新)
0.9.1 | 2023年2月6日 |
---|---|
0.9.0 | 2023年2月6日 |
0.9.0-rc.1 | 2022年12月27日 |
0.8.0 | 2022年7月14日 |
0.6.0 | 2022年5月23日 |
#2 在 #lightning-network
每月下载量 27次
用于 9 个crate (6 个直接使用)
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的Potzblitz和LNP/BP网络演示,以深入了解这些主题。演示文稿幻灯片也可用。
- LNP/BP去中心化解决方案
- 闪电网络的未来(来自Postblitz演讲的幻灯片)
理由与特性
现有闪电节点实现的问题在于,它们对诸如
- 未来LN升级(通道工厂、支付点、Taproot)等内容的扩展性非常有限,因为它们没有以良好的方式将网络通信、通道操作和通道参数分开,这样就可以替换HTLCs为支付点,使用某些扩展/模块等;
- LN之上的协议(第3层),如RGB、DLCs或提议的Lightspeed协议,需要修改承诺交易的结构;
- 自定义非支付通道类型,例如使用Storm的无需信任存储
或使用Prometheus进行计算。
我们将构建这种丰富功能的闪电网络所需扩展命名为“冰河”。通过这个项目LNP/BP标准协会试图构建一个具有可扩展性和高度模块化架构的LN节点,利用最先进的Rust方法,如
- 移动、云和Web就绪,由于特别设计的微服务架构
- 通过Docker化在单独进程级别实现可扩展性(每通道可扩展性等)
- 快速且高效的ZeroMQ用于API和IPC。
这个新节点将被用来实现
- 双向通道
- 通道工厂/多对等通道;
- 支付点;
- LN上的DLCs;
- RGB智能合约(客户端验证的智能合约系统);
- 未来的Storm - 存储 & 消息状态通道;
- 未来的Prometheus - 高负载计算状态通道;
- Lightspeed支付协议;
- Schnorr's/Taproot.
设计
方法
节点(与其他由LNP/BP标准协会和Pandora Core公司子公司维护的节点一样)由多个微服务组成,通过ZMQ RPC接口相互通信。
代表节点的微服务集可以运行为
- 桌面或服务器上的单个守护进程进程;
- 基于Docker的守护进程云,每个微服务一个,具有实例可扩展性和地理分布式环境;
- 单个移动应用程序中的线程;
- 甚至不同节点可以在它们的服务之间组合成单个可执行文件/移动应用程序;
- 所有P2P通信都是端到端加密的,并通过Tor工作。
其他由LNP/BP标准协会设计和维护的具有相同架构的节点包括
其他第三方提供自己的节点
LNP Node 架构细节
LNP Node 的整体架构如下
有关节点中使用的服务总线的更多信息
项目组织 & 架构
每个守护进程(更准确地说,“微服务”,因为它可以作为线程运行,而不是必须作为进程)或其他二进制文件(如 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