一个使用 LDK 和 BDK 构建的开箱即用的闪电网络节点库。
LDK 节点是一个以库形式存在的自托管闪电网络节点。它的核心目标是提供一个小型、简单和直接的接口,使用户能够轻松设置和运行带有集成链上钱包的闪电网络节点。虽然极简主义是其核心,但 LDK 节点旨在具有足够的模块化和可配置性,以适用于各种用例。
该库的主要抽象是 Node
,可以通过设置和配置 Builder
并调用 build
方法之一来检索它。然后可以通过诸如 start
、stop
、open_channel
、send
等命令来控制 Node
。
use ldk_node::Builder;
use ldk_node::lightning_invoice::Bolt11Invoice;
use ldk_node::lightning::ln::msgs::SocketAddress;
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_chain_source_esplora("https://blockstream.info/testnet/api".to_string(), None);
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.onchain_payment().new_address();
// .. fund address ..
let node_id = PublicKey::from_str("NODE_ID").unwrap();
let node_addr = SocketAddress::from_str("IP_ADDR:PORT").unwrap();
node.open_channel(node_id, node_addr, 10000, None, None).unwrap();
let event = node.wait_next_event();
println!("EVENT: {:?}", event);
node.event_handled();
let invoice = Bolt11Invoice::from_str("INVOICE_STR").unwrap();
node.bolt11_payment().send(&invoice, None).unwrap();
node.stop().unwrap();
}
LDK 节点目前采用了一套相当有倾向性的设计选择
LDK 节点本身是用 Rust 编写的,因此可以作为库依赖项原生添加到任何 std
Rust 程序中。然而,除了 Rust API 之外,它还基于 UniFFI 提供了 Swift、Kotlin 和 Python 的语言绑定。此外,Flutter 绑定 也可用。
最低支持 Rust 版本 (MSRV) 目前是 1.75.0。