Kukks / BTCPayServer.Lightning

Client library for lightning network implementations to build Lightning Network Apps in C#.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

A C# library for Lightning Network clients

Introduction

This library is meant to facilitate the development of Lightning Network based apps written in C#. It is composed of 4 packages.

  • BTCPayServer.Lightning.All super package which reference all the others NuGet
  • BTCPayServer.Lightning.LND exposes easy to use LND clients NuGet
  • BTCPayServer.Lightning.CLightning exposes easy to use clightning clients NuGet
  • BTCPayServer.Lightning.Charge exposes easy to use Charge clients NuGet
  • BTCPayServer.Lightning.Common exposes common classes and ILightningClient NuGet

If you develop an app, we advise you to reference BTCPayServer.Lightning.All NuGet.

If you develop a library, we advise you to reference BTCPayServer.Lightning.Common NuGet.

How to use

Click on the nuget button of the package interesting you, and follow the instruction to add it to your project. For .NET Core Apps, you need to enter this in your project's folder:

dotnet add package BTCPayServer.Lightning.All

You have two ways to use this library:

  • Either you want your code to works with all lightning implementation (right now LND, Charge, CLightning)
  • Or you want your code to work on a particular lightning implementation

Using the generic interface

This is done by using LightningClientFactory and the common interface ILightningClient.

string connectionString = "...";
ILightningClientFactory factory = new LightningClientFactory(Network.Main);
ILightningClient client = factory.Create(connectionString);
LightningInvoice invoice = await client.CreateInvoice(10000, "CanCreateInvoice", TimeSpan.FromMinutes(5));

ILightningClient is an interface which abstract the underlying implementation with a common interface.

The connectionString encapsulates the necessary information BTCPay needs to connect to your lightning node, we currently support:

  • clightning via TCP or unix domain socket connection
  • lightning charge via HTTPS
  • LND via the REST proxy

Examples

  • type=clightning;server=unix://root/.lightning/lightning-rpc
  • type=clightning;server=tcp://1.1.1.1:27743/
  • type=lnd-rest;server=http://mylnd:8080/;macaroonfilepath=/root/.lnd/admin.macaroon;allowinsecure=true
  • type=lnd-rest;server=https://mylnd:8080/;macaroon=abef263adfe...
  • type=lnd-rest;server=https://mylnd:8080/;macaroon=abef263adfe...;certthumbprint=abef263adfe...
  • type=charge;server=https://charge:8080/;api-token=myapitoken...
  • type=charge;server=https://charge:8080/;cookiefilepath=/path/to/cookie...

Note that the certthumbprint to connect to your LND node can be obtained through this command line:

openssl x509 -noout -fingerprint -sha256 -inform pem -in /root/.lnd/tls.cert

You can omit certthumprint if you the certificate is trusted by your machine

You can set allowinsecure to true if your LND REST server is using HTTP or HTTPS with an untrusted certificate which you don't know the certthumprint.

Using implementation specific class

If you want to leverage specific lightning network implementation, either instanciate directly ChargeClient, LndClient or CLightningClient, or cast the ILightningClient object returned by LightningClientFactory.

How to test

You first need to run all the dependencies with docker-compose:

cd tests
docker-compose up

Then you can run and debug the tests with visual studio or visual studio code.

If you want to use command line:

cd tests
dotnet test

Licence

MIT

About

Client library for lightning network implementations to build Lightning Network Apps in C#.

License:MIT License


Languages

Language:C# 99.7%Language:PowerShell 0.3%