10 个不稳定版本 (3 个破坏性版本)
0.9.1 | 2023年2月6日 |
---|---|
0.9.0 | 2023年2月6日 |
0.9.0-rc.1 | 2022年12月27日 |
0.8.1 | 2023年1月18日 |
0.6.0 | 2022年5月23日 |
#3 in #lightning-network
每月下载量:31
在 lnpbp-cli 中使用
34KB
320 行
LNP Node:闪电网络协议节点
LNP Node 是一个从头开始用 Rust 编写的新的闪电网络节点。实际上,它是一组能够同时运行闪电网络(LN)和通用闪电(代号 "Bifrost"):闪电网络协议的全面重构,支持 Taproot、Schnorr 签名、RGB 资产、DLC、多对多通道、通道工厂/通道可组合性和许多其他高级功能。LNP Node 使用 Internet2 网络协议和专门设计的微服务架构运行。
人们可能会问:另一个 LN 节点?我们为什么需要它?这个闪电网络协议(LNP)、Internet2 网络以及与 Bifrost 一起到来的闪电通道的通用化是什么意思?
闪电网络协议 是 "正常"(或 "传统")闪电网络和Bifrost 的统一:一组在比特币协议(BP)之上运行的协议,共同构成了 LNP/BP 技术栈的系列。
Internet2 是一套在网络安全通信中使用现有协议的最佳实践,以最大限度地保持隐私和匿名性。它支持 P2P 和 RCP(客户端-服务器)操作,并为 P2P 代表闪电风格的 Noise_XK 加密通信(而不是 SSL/TLS)和客户端-服务器通信的加密 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 协会中,我们将其用于所有地方,甚至用于微服务之间的内部通信。
比佛罗斯特是一种以模块化和可扩展的方式定义支付通道的方法,您可以轻松地将新的交易输出添加到承诺交易中,从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节点架构细节
LNP节点的整体架构如下
有关节点中使用的服务总线的更多信息
项目组织结构与架构
每个守护进程(更准确地说,“微服务”,因为它可以作为线程运行,而不一定是进程)或其他二进制文件(如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
依赖项
~29–40MB
~546K SLoC