Rust implementation of LND RPC client using async gRPC library tonic_openssl
.
Warning: this crate is in early development and may have unknown problems! Review it before using with mainnet funds!
This crate implements LND GRPC using tonic_openssl
and prost
.
Apart from being up-to-date at the time of writing (:D) it also allows async
usage.
It contains vendored *.proto
files so LND source code is not required
but accepts an environment variable LND_REPO_DIR
which overrides the vendored *.proto
files.
This can be used to test new features in non-released lnd
.
(Actually, the motivating project using this library was that case. :))
There's no setup needed beyond adding the crate to your Cargo.toml
.
If you need to change the *.proto
files from which the client is generated, set the environment variable LND_REPO_DIR
to a directory with cloned lnd
during build.
Here's an example of retrieving information from LND ([getinfo](https://api.lightning.community/#getinfo)
call).
You can find the same example in crate root for your convenience.
// This program accepts four arguments: host, port, cert file, macaroon file
#[tokio::main]
async fn main() {
let mut args = std::env::args_os();
args.next().expect("not even zeroth arg given");
let host = args
.next()
.expect("missing arguments: host, port, cert file, macaroon file");
let port = args
.next()
.expect("missing arguments: port, cert file, macaroon file");
let cert_file = args
.next()
.expect("missing arguments: cert file, macaroon file");
let macaroon_file = args.next().expect("missing argument: macaroon file");
let host: String = host.into_string().expect("host is not UTF-8");
let port: u32 = port
.into_string()
.expect("port is not UTF-8")
.parse()
.expect("port is not u32");
let cert_file: String = cert_file.into_string().expect("cert_file is not UTF-8");
let macaroon_file: String = macaroon_file
.into_string()
.expect("macaroon_file is not UTF-8");
// Connecting to LND requires only host, port, cert file, macaroon file
let mut client = tonic_openssl_lnd::connect(host, port, cert_file, macaroon_file)
.await
.expect("failed to connect");
let info = client
.lightning()
// All calls require at least empty parameter
.get_info(tonic_openssl_lnd::lnrpc::GetInfoRequest {})
.await
.expect("failed to get info");
// We only print it here, note that in real-life code you may want to call `.into_inner()` on
// the response to get the message.
println!("{:#?}", info);
}
MITNFA