#lightning #ldk #bitcoin #bdk #setup

ldk-node

使用 LDK 构建的现成节点实现

7 个版本

0.3.0 2024年6月21日
0.2.2 2024年5月21日
0.2.1 2024年1月26日
0.2.0 2023年12月13日
0.1.0-alpha2023年4月27日

#3 in #bdk

Download history 5/week @ 2024-05-06 147/week @ 2024-05-20 17/week @ 2024-05-27 25/week @ 2024-06-03 46/week @ 2024-06-10 218/week @ 2024-06-17 47/week @ 2024-06-24 57/week @ 2024-07-01 147/week @ 2024-07-08 25/week @ 2024-07-15 417/week @ 2024-07-22 267/week @ 2024-07-29 363/week @ 2024-08-05 335/week @ 2024-08-12 344/week @ 2024-08-19

1,331 monthly downloads

MIT/Apache

665KB
15K SLoC

Rust 9K SLoC // 0.0% comments Swift 5K SLoC // 0.0% comments Kotlin 531 SLoC // 0.1% comments Python 239 SLoC // 0.0% comments Shell 168 SLoC // 0.1% comments Batch 142 SLoC Forge Config 11 SLoC

包含 (JAR 文件,62KB) gradle-wrapper.jar,(JAR 文件,62KB) gradle-wrapper.jar

LDK Node

Crate Documentation Maven Central Android Maven Central JVM Security Audit

使用 LDKBDK 构建的现成 Lightning 节点库。

LDK Node 是以库形式存在的自托管 Lightning 节点。其核心目标是提供一个小巧、简单且直观的接口,使用户能够轻松设置和运行一个集成了链上钱包的 Lightning 节点。虽然极简主义是其核心,但 LDK Node 旨在足够模块化和可配置,以适用于各种用例。

入门指南

库的主要抽象是 Node,可以通过设置和配置一个 Builder 来获取,并调用其中一个 build 方法。然后可以通过 startstopconnect_open_channelsend 等命令控制 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_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.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.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 = Bolt11Invoice::from_str("INVOICE_STR").unwrap();
	node.bolt11_payment().send(&invoice).unwrap();

	node.stop().unwrap();
}

模块化

LDK Node 目前提供了一系列有明确观点的设计选择

  • 链上数据由集成的 BDK 钱包处理。
  • 链数据目前可能来自 Esplora 服务器,而 Electrum 和 bitcoind RPC 的支持将很快推出。
  • 钱包和通道状态可能持久化到 SQLite 数据库、文件系统或用户实现的自定义后端。
  • 通过 Lightning 的点对点网络或 Rapid Gossip Sync 协议获取 Gossip 数据。
  • Lightning 和链上钱包的熵可能来自原始字节或 BIP39 密码本。此外,LDK Node 提供了将熵字节生成和持久化到磁盘的手段。

语言支持

LDK 节点本身是用 Rust 编写的,因此可以将其作为库依赖项原生地添加到任何 std Rust 程序中。然而,除了其 Rust API 之外,它还提供了基于 UniFFISwiftKotlinPython 的语言绑定。此外,还有可用的 Flutter 绑定

MSRV

当前支持的最小 Rust 版本 (MSRV) 为 1.63.0。

依赖项

~49–67MB
~1M SLoC