1 个不稳定版本
0.1.0 | 2023年11月25日 |
---|
#7 在 #ldk
365KB
8K SLoC
包含 (JAR 文件,62KB) gradle-wrapper.jar,(JAR 文件,62KB) gradle-wrapper.jar
LDK 节点
使用 LDK 和 BDK 构建的现成 Lightning 节点库。
LDK 节点是库形式的自托管 Lightning 节点。其核心目标是提供一个小巧、简单、直观的接口,使用户能够轻松设置和运行带有集成链上钱包的 Lightning 节点。虽然简约是其核心,但 LDK 节点旨在足够模块化和可配置,以便适用于各种用例。
入门指南
库的主要抽象是 Node
,可以通过设置和配置一个 Builder
来获取,并调用其中一个 build
方法。然后可以通过 start
、stop
、connect_open_channel
、send_payment
等命令来控制 Node
。
use ldk_node::{Builder, NetAddress};
use ldk_node::lightning_invoice::Invoice;
use ldk_node::bitcoin::secp256k1::PublicKey;
use ldk_node::bitcoin::Network;
use std::str::FromStr;
fn main() {
let mut builder = Builder::new();
builder.set_network(Network::Testnet);
builder.set_esplora_server("https://blockstream.info/testnet/api".to_string());
builder.set_gossip_source_rgs("https://rapidsync.lightningdevkit.org/testnet/snapshot".to_string());
let node = builder.build().unwrap();
node.start().unwrap();
let funding_address = node.new_onchain_address();
// .. fund address ..
let node_id = PublicKey::from_str("NODE_ID").unwrap();
let node_addr = NetAddress::from_str("IP_ADDR:PORT").unwrap();
node.connect_open_channel(node_id, node_addr, 10000, None, None, false).unwrap();
let event = node.wait_next_event();
println!("EVENT: {:?}", event);
node.event_handled();
let invoice = Invoice::from_str("INVOICE_STR").unwrap();
node.send_payment(&invoice).unwrap();
node.stop().unwrap();
}
模块化
LDK 节点目前提供了一系列明确的设计选择
- 链上数据由集成的 BDK 钱包处理。
- 链数据目前可能来自 Esplora 服务器,而 Electrum 和
bitcoind
RPC 的支持将很快推出。 - 钱包和频道状态可以持久化到 SQLite 数据库、文件系统或用户实现的自定义后端。
- 通过 Lightning 的点对点网络或 Rapid Gossip Sync 协议获取八卦数据。
- Lightning 和链上钱包的熵可以来自原始字节或 BIP39 密码。此外,LDK 节点还提供了生成和将熵字节持久化到磁盘的方法。
语言支持
LDK节点本身是用Rust编写的,因此可以将其作为库依赖项直接添加到任何std
Rust程序中。然而,除了其Rust API之外,它还基于UniFFI提供了对Swift、Kotlin和Python的语言绑定。此外,还有Flutter绑定可用。
MSRV
目前支持的最小Rust版本(MSRV)为1.60.0。
依赖项
~48–65MB
~1M SLoC