10个版本

0.1.9 2024年6月5日
0.1.8 2024年3月8日
0.1.7 2023年11月22日
0.1.3 2023年5月30日
0.1.0 2022年4月20日

#2 in #cln

Download history 298/week @ 2024-05-01 337/week @ 2024-05-08 509/week @ 2024-05-15 432/week @ 2024-05-22 751/week @ 2024-05-29 887/week @ 2024-06-05 707/week @ 2024-06-12 768/week @ 2024-06-19 611/week @ 2024-06-26 884/week @ 2024-07-03 882/week @ 2024-07-10 915/week @ 2024-07-17 1113/week @ 2024-07-24 669/week @ 2024-07-31 1092/week @ 2024-08-07 610/week @ 2024-08-14

3,612 每月下载量
11个crate中使用了7 直接

MIT许可证

400KB
11K SLoC

cln-rpc:与Core Lightning通信


lib.rs:

Core Lightning的RPC客户端

Core Lightning通过Unix域套接字公开JSON-RPC接口。Unix域套接字看起来像文件,默认位于~/.lightning/<network>/lightning-rpc

此crate包含一个名为[ClnRpc]的RPC客户端以及大多数请求响应的模型。

以下示例显示了如何启动客户端并调用getinfo-rpc方法。

use std::path::Path;
use tokio_test;
use cln_rpc::{ClnRpc, TypedRequest};
use cln_rpc::model::requests::GetinfoRequest;
use cln_rpc::model::responses::GetinfoResponse;

tokio_test::block_on( async {
    let path = Path::new("path_to_lightning_dir");
    let mut rpc = ClnRpc::new(path).await.unwrap();
    let request = GetinfoRequest {};
    let response : GetinfoResponse = rpc.call_typed(&request).await.unwrap();
});

如果所需的模型不可用,您可以实现TypedRequest并使用ClnRpc::call_typed而不会出现问题。

use std::path::Path;
use tokio_test;
use cln_rpc::{ClnRpc, TypedRequest};
use serde::{Serialize, Deserialize};

#[derive(Serialize, Debug)]
struct CustomMethodRequest {
    param_a : String
};
#[derive(Deserialize, Debug)]
struct CustomMethodResponse {
    field_a : String
};

impl TypedRequest for CustomMethodRequest {
    type Response = CustomMethodResponse;

    fn method(&self) -> &str {
        "custommethod"
    }
}

tokio_test::block_on( async {
    let path = Path::new("path_to_lightning_dir");
    let mut rpc = ClnRpc::new(path).await.unwrap();

    let request = CustomMethodRequest { param_a : String::from("example")};
    let response = rpc.call_typed(&request).await.unwrap();
})

另一种选择是使用ClnRpc::call_raw

use std::path::Path;
use tokio_test;
use cln_rpc::{ClnRpc, TypedRequest};

tokio_test::block_on( async {
    let path = Path::new("path_to_lightning_dir");
    let mut rpc = ClnRpc::new(path).await.unwrap();
    let method = "custommethod";
    let request = serde_json::json!({"param_a" : "example"});
    let response : serde_json::Value = rpc.call_raw(method, &request).await.unwrap();
})

依赖项

~11–20MB
~227K SLoC