From 543c61179c0d4669f14f3a422153dcdbc0e7c921 Mon Sep 17 00:00:00 2001 From: apotdevin Date: Sun, 22 Aug 2021 11:31:52 +0200 Subject: [PATCH] docs: move readme --- README.md | 482 +---------------------------------------- docs/Home.png | Bin 53531 -> 0 bytes docs/LNDAPICoverage.md | 57 ----- 3 files changed, 1 insertion(+), 538 deletions(-) delete mode 100644 docs/Home.png delete mode 100644 docs/LNDAPICoverage.md diff --git a/README.md b/README.md index b85c4e9f..891d7757 100644 --- a/README.md +++ b/README.md @@ -1,483 +1,3 @@ # **ThunderHub - Lightning Node Manager** -![Test and Build](https://github.com/apotdevin/thunderhub/workflows/Test%20and%20Build/badge.svg?branch=master) - -![Home Screenshot](/docs/Home.png) -[![license](https://img.shields.io/github/license/DAVFoundation/captain-n3m0.svg?style=flat-square)](https://github.com/DAVFoundation/captain-n3m0/blob/master/LICENSE) - -## Table Of Contents - -- [Introduction](#introduction) -- [Integrations](#integrations) -- [Features](#features) -- [Installation](#installation) -- [Updating](#updating) -- [Development](#development) -- [Docker deployment](#docker) - ---- - -## Introduction - -ThunderHub is an **open-source** LND node manager where you can manage and monitor your node on any device or browser. It allows you to take control of the lightning network with a simple and intuitive UX and the most up-to-date tech stack. - ---- - -### Integrations - -**BTCPay Server** -ThunderHub is currently integrated into BTCPay for easier deployment. If you already have a BTCPay server and want to add ThunderHub or even want to start a BTCPay server from zero, be sure to check out this [tutorial](https://apotdevin.com/blog/thunderhub-btcpay) - -**Raspiblitz** -For Raspiblitz users you can also get ThunderHub running by following this [gist](https://gist.github.com/openoms/8ba963915c786ce01892f2c9fa2707bc) - ---- - -### Tech Stack - -This repository consists of a **NextJS** server that handles both the backend **Graphql Server** and the frontend **React App**. ThunderHub connects to your Lightning Network node by using the gRPC ports. - -- NextJS -- ReactJS -- Typescript -- Styled-Components -- Apollo -- Apollo-Server -- GraphQL -- Ln-Service - ---- - -## Features - -### Monitoring - -- Overview of current and pending balance for the Lightning and Bitcoin wallets. -- URI strings for the node (Onion public uri also if available) -- Invoice and Payment graph. -- Liquidity report with total remote and local lightning balance. -- Forwarded payments graph and the routes used for these payments. -- Complete network info. -- View open/pending/closed channels and how balanced they are. -- View channel base and rate fees. -- View all transactions. -- View all forwarded payments. -- View all chain transactions. -- View all unspent UTXOS. - -### Management - -- LNURL integration: ln-pay and ln-withdraw are available. Ln-auth soon. -- Send and Receive Lightning payments. -- Send and Receive Bitcoin payments. -- Decode lightning payment requests. -- Open and close channels. -- Balance your channels through circular payments. ([Check out the Tutorial](https://apotdevin.com/blog/thunderhub-balancing)) -- Update your all your channels fees or individual ones. -- Backup, verify and recover all your channels. -- Sign and verify messages. - -### Visual - -- Responsive UI for any device. Mobile, Tablet or Desktop. -- Light, Dark and Night mode. -- Check values in Bitcoin, Satoshis or Fiat. - -### Accounts - -- Connect to your node with **HEX/Base64 strings** or by passing the **file locations** of the macaroons and certificate. -- Manage however many nodes you want. -- Use a master password or individual passwords for each account. -- Passwords are hashed to avoid having them in cleartext form. - -### Deployment - -- Docker images for easier deployment - ---- - -## **Requirements** - -- NPM installed -- Node installed (Version 14.15 or higher) - ---- - -## Config - -You can define some environment variables that ThunderHub can start with. To do this create a `.env.local` (or use the template `.env`) file in the root directory with the following parameters: - -**Important - If you want to use the `.env` template file and don't want it to be replaced after an update please duplicate and rename to `.env.local`** - -```bash -# ----------- -# Server Configs -# ----------- -LOG_LEVEL = 'error' | 'warn' | 'info' | 'http' | 'verbose' | 'debug' | 'silly' # Default: 'info' -TOR_PROXY_SERVER='socks://127.0.0.1:9050' # Default: '' - -# ----------- -# Interface Configs -# ----------- -THEME = 'dark' | 'light' | 'night' # Default: 'dark' -CURRENCY = 'sat' | 'btc' | 'fiat' # Default: 'sat' - -# ----------- -# Privacy Configs -# ----------- -FETCH_PRICES = true | false # Default: true -FETCH_FEES = true | false # Default: true -DISABLE_LINKS = true | false # Default: false -DISABLE_LNMARKETS = true | false # Default: false -NO_VERSION_CHECK = true | false # Default: false -``` - -### TOR Requests - -ThunderHub connects to different external services for example to fetch BOS scores, BTC/fiat prices and BTC blockchain fees. Normally they are done through clearnet but you can configure a TOR proxy server so that they are all proxied through TOR. - -You need to add the following parameter into your `.env` file with your TOR endpoint: - -```bash -TOR_PROXY_SERVER='socks://your.tor.endpoint' # i.e. 'socks://127.0.0.1:9050' -``` - -### SSO Account - -You can define an account to work with SSO cookie authentication by adding the following parameters in the `.env` file: - -```bash -# ----------- -# SSO Account Configs -# ----------- -COOKIE_PATH = '/path/to/cookie/file/.cookie' # i.e. '/data/.cookie' -SSO_SERVER_URL = 'url and port to node' # i.e. '127.0.0.1:10009' -SSO_CERT_PATH = '/path/to/tls/certificate' # i.e. '\lnd\alice\tls.cert' -SSO_MACAROON_PATH = '/path/to/macaroon/folder' # i.e. '\lnd\alice\data\chain\bitcoin\regtest\' -LOGOUT_URL = 'http://LogoutToThisUrl.com' # If not set it will logout to "/login" -``` - -To login to this account you must add the cookie file content to the end of your ThunderHub url. For example: - -``` -http://localhost:3000/sso?token=[COOKIE] -``` - -Replace `[COOKIE]` with the contents of the `.cookie` file. - -### SSO Account without authentication - -You can DANGEROUSLY remove SSO authentication. This is useful for example if you plan on running ThunderHub **only** on your local network or through TOR. - -**DO NOT enable this option if your ThunderHub instance is available on the internet or your funds will probably be lost.** - -The configuration for a non authenticated SSO account would look like this: - -```bash -# ----------- -# SSO Account Configs -# ----------- -SSO_SERVER_URL = 'url and port to node'; # i.e. '127.0.0.1:10009' -SSO_CERT_PATH = '/path/to/tls/certificate'; # i.e. '\lnd\alice\tls.cert' -SSO_MACAROON_PATH = '/path/to/macaroon/folder'; # i.e. '\lnd\alice\data\chain\bitcoin\regtest\' -DANGEROUS_NO_SSO_AUTH = 'true' # Default: false -``` - -To login to this account go to the following url: - -``` -http://localhost:3000/sso?token=1 -``` - -### Server Accounts - -You can add accounts on the server by adding this parameter to the `.env` file: - -```bash -# ----------- -# Account Configs -# ----------- -ACCOUNT_CONFIG_PATH = '/path/to/config/file.yaml'; # i.e. '/data/thubConfig.yaml' -``` - -You must also add a YAML file at that location with the following format: - -```yaml -masterPassword: 'password' # Default password unless defined in account -accounts: - - name: 'Account 1' - serverUrl: 'url:port' - macaroonPath: '/path/to/admin.macaroon' - certificatePath: '/path/to/tls.cert' - password: 'password for account 1' - - name: 'Account 2' - serverUrl: 'url:port' - macaroonPath: '/path/to/admin.macaroon' - certificatePath: '/path/to/tls.cert' - # password: Leave without password and it will use the master password - - name: 'Account 3' - serverUrl: 'url:port' - macaroon: '0201056...' # HEX or Base64 encoded macaroon - certificate: '0202045c...' # HEX or Base64 encoded certificate - password: 'password for account 3' -``` - -Notice you can specify either `macaroonPath` and `certificatePath` or `macaroon` and `certificate`. -Note that the `port` in `serverUrl` should be the gRPC port that LND is listening on. - -If you want to access lnd remotely, the setting below should be added to `lnd.conf`. -``` -tlsextraip= # option 1) when accessing by IP -tlsextradomain= # option 2) when accessing by domain -rpclisten=0.0.0.0:10009 -``` - -#### Account with environment variables - -It's possible to set different parts of the accounts based on environment variables. - -You can use the following environment variables: `YML_ENV_1`, `YML_ENV_2`, `YML_ENV_3`, `YML_ENV_4` and fill your accounts in the following way: - -```yaml -accounts: - - name: '{YML_ENV_1}' - serverUrl: '{YML_ENV_2}' - macaroon: 'macaroonforthisaccount' - certificate: '{YML_ENV_4}' -``` - -ThunderHub will take care of replacing the fields with the correct environment variables. The `{YML_ENV_[1-4]}` can only be used for fields inside the accounts. So for example using it for the `masterPassword` will not work. - -#### Account with LND directory - -You can also specify the main LND directory and ThunderHub will look for the certificate and the macaroon in the default folders (based on the network). - -Default folders (assuming LND is at path `/lnd`): - -- Certificate: `/lnd/tls.cert` -- Macaroon: `/lnd/data/chain/bitcoin/[mainnet | testnet | regtest]/admin.macaroon` - -The YAML file for this example would be: - -```yaml -masterPassword: 'password' # Default password unless defined in account -defaultNetwork: 'testnet' # Default network unless defined in account -accounts: - - name: 'Account1' - serverUrl: 'url:port' - # network: Leave without network and it will use the default network - lndDir: '/path/to/lnd' - - name: 'Account2' - serverUrl: 'url:port' - network: 'mainnet' - lndDir: '/path/to/lnd' -``` - -If you don't specify `defaultNetwork` then `mainnet` is used as the default. - -#### Encrypted Macaroons - -You can use AES encrypted macaroons and have ThunderHub decrypt them and store them in memory. This allows you to have encrypted macaroons on your server and avoid having them in cleartext. - -Macaroons should be AES encrypted. This is an example for Javascript: - -```js -const encrypted = CryptoJS.AES.encrypt( - 'Hex or Base64 encoded Macaroon', - 'Secret Passphrase' -).toString(); -``` - -You can use the `macaroonPath` field and let ThunderHub look for the file or directly use the `macaroon` field and paste your encrypted macaroon. - -You must let ThunderHub know that the macaroon is encrypted by adding an `encrypted` field to your account like such: - -```yaml -masterPassword: 'password' -accounts: - - name: 'Account 1' - serverUrl: 'url:port' - macaroonPath: '/path/to/encrypted.admin.macaroon' - encrypted: true # This field is necessary - - name: 'Account 2' - serverUrl: 'url:port' - macaroon: 'EnCrYpTeD-MaCaRoOn' - encrypted: true # This field is necessary -``` - -To login you must use the same secret passphrase that you used to encrypt the macaroon. - -#### Security - -On the first start of the server, the `masterPassword` and all account `password` fields will be **hashed** and the file will be overwritten with these new values to avoid having cleartext passwords on the server. - -### Privacy Configs - -**Prices and Fees** -ThunderHub fetches fiat prices from [Blockchain.com](https://blockchain.info/ticker)'s api and bitcoin on chain fees from [Earn.com](https://bitcoinfees.earn.com/api/v1/fees/recommended)'s api. - -If you want to deactivate these requests you can set `FETCH_PRICES=false` and `FETCH_FEES=false` in your `.env` file or manually change them inside the settings view of ThunderHub. - -**LnMarkets** -ThunderHub can connect to the LnMarkets API. You can disable this option by setting `DISABLE_LNMARKETS=true` in your `.env` file. - -**Links** -ThunderHub shows you links for quick viewing of nodes by public key on [1ml.com](https://1ml.com/) and for viewing onchain transactions on [Blockchain.com](https://www.blockchain.com/). - -If you don't want to show these links, you can set `DISABLE_LINKS=true` in your `.env` file. - -**Version Check** -ThunderHub gets the latest available version from [Github](https://api.github.com/repos/apotdevin/thunderhub/releases/latest) and shows you a message if you are on an older version. - -If you want to disable this option you can set `NO_VERSION_CHECK=true` in your `.env` file. - -### Running on different base path - -Adding a BASE_PATH will run the ThunderHub server on a different base path. - -```bash -# ----------- -# Server Configs -# ----------- -BASE_PATH = '[Base path where you want to have thunderhub running i.e. '/btcpay']' # Default: '' -``` - -For example: - -- by default ThunderHub runs on `http://localhost:3000` -- base path of `/thub` runs ThunderHub on `http://localhost:3000/thub` - -**You need to add this environment variable BEFORE building the application** - -There is a prebuilt [Docker](https://hub.docker.com/repository/docker/apotdevin/thunderhub) image with a preset `BASE_PATH=/thub` in case you need it and prefer not building your own Docker image. - -```bash -# Normal docker image -docker pull apotdevin/thunderhub:v0.11.1 - -# Preset basePath docker image -docker pull apotdevin/thunderhub:base-v0.11.1 -``` - -To build your own docker image with the `basePath` of your choice you can use `docker build --build-arg BASE_PATH='/thub' -t myOwnDockerImage .` - -You can run ThunderHub behind a proxy with the following configuration (NGINX example): - -```nginx -location /thub { - proxy_pass http://localhost:3000/thub; -} -``` - ---- - -## Installation - -To run ThunderHub you first need to clone this repository. - -```js -git clone https://github.com/apotdevin/thunderhub.git -``` - -After cloning the repository run `yarn` or `npm install` to get all the necessary modules installed. - -After all the dependencies have finished installing, you can proceed to build and run the app with the following commands. - -```javascript -// Yarn -yarn build -yarn start - -// NPM -npm run build -npm start -``` - -This will start the server on port 3000, so just go to `localhost:3000` to see the app running. - -If you want to specify a different port (for example port `4000`) run with: - -```js -// Yarn -yarn start -p 4000 - -// NPM -npm start -- -p 4000 -``` - -For **PRODUCTION**, if you want to reduce the space taken up by ThunderHub you can run `npm prune --production` after the build is completed. - ---- - -## Updating - -There are multiple ways to update ThunderHub to it's latest version. - -_Commands have to be called inside the thunderhub repository folder._ - -**1. Script Shortcut** - -```sh -// Yarn -yarn update - -// NPM -npm run update -``` - -**2. Script** - -```sh -sh ./scripts/updateToLatest.sh -``` - -**3. Step by Step** - -```sh -// Yarn -git pull -yarn -yarn build - -// NPM -git pull -npm install -npm run build -``` - -**Then you can start your server:** - -```sh -// Yarn -yarn start - -// NPM -npm run start -``` - ---- - -## Development - -If you want to develop on ThunderHub and want hot reloading when you do changes, use the following commands: - -```js -//Yarn -yarn dev - -//NPM -npm run dev -``` - ---- - -## Docker - -ThunderHub also provides docker images for easier deployment. [Docker Hub](https://hub.docker.com/repository/docker/apotdevin/thunderhub) - -To get ThunderHub running with docker follow these steps: - -1. `docker pull apotdevin/thunderhub:v0.11.1` (Or the latest version you find) -2. `docker run --rm -it -p 3000:3000/tcp apotdevin/thunderhub:v0.5.5` - -You can now go to `localhost:3000` to see your running instance of ThunderHub +**Documentation has moved!** Find the documentation [here](http://docs.thunderhub.io/). diff --git a/docs/Home.png b/docs/Home.png deleted file mode 100644 index 954d1a29fbf5fdaa6d8f8bf1df646455d9c277f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53531 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

>L_C)^LJ2 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

Y}-fK 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 z z@5O0l>l~+;|4*-Fdw8;jLolyreEdZ0mQjX1iy*$m`-^t_4BQ)bNa0SDeb~q+AR|`tbwoF7Lr4j{6kyw>vxOV?0t|!MiC!} z$P^}8?>rPm5L99_w7@;E6VEVmPzd)aM%iJO=Ti5WF{AyEEv*?TzD0JlKq*RDes7%< zqMwoKVtlVb{~Su;=^bC6Lv;MTEHb*0f8e8s`(b(Dp_t;uL$c>~HA; z;Tm`;`9N8PINJ4!!IG#W$kb67>3ov@3-a5z0P`aTZFAP4wX{+%U?hJc6&Q?~9BPHaZcBq&)!LrvXZCvx#N*Tk^x(({q}o_;9H!uBJrPx%Y- zN7G&A4ttTV$@S-{iXE~%L!bPsHdlo38*ZVWm6zn+_q^Vz8aj5+a04sonx)10n{VM% zF5Jcx<2PjhWy;b3VC*7P)$3uToFgGA4Kw8m#-g&AHu4V)taU0$$y9nyG}js!*GSEF ztCTo`8~4ugbsUM@#4EFi_W~OBJn9Fa1Wqkx_qY>zRu&DrSf^n##KSY?!%Jv~`#Wgd zcW#|vT)Y`=2t>6s81cXSv%f-q^*}0@v5UqLY;+oR>TXLCF$+FAeX z{HX8em}V|dtV7X7iW{P#hD0RmCMoPoN*%y;kgo;o(?}LzKT4aIHKUo)5&G+#MqIdt zW2$=oqE`>cd~%4Mz#l}tAf{8_TlCy?(({a~fa1e~H@fn9H|P935SkZr4RnELzxy^P z5F*>#btB8~Zho+UdqhgRl01}9)BAeVmEU&qaSV7*!MUrIqqS&fSX%g|1Oyl-ySn5L z6s-m>>N4#Y@{u<|d-dG2=shg)q;KTKb*aR0cOILz@@m$%A3$lUVsRi0(Tr{nZ@d5~ z%J8>gyNQ8;AP|0d*LKI#g>~Meu(g{HWl7V#0c-%ZMySsrV81GNb1HM2yOFvKLHhrF z?C1K0TY=I0l&yi;?k%Cg!VuOkOWm`H;J*Ub4gHbDIXq%VZy0M-C<;7@*jIXQy| z5FDzk^xmMu!$8W&S0Jj$_Id8x|JOFN;lrut^1eW^)CC&WL0W2RB@JeCTU2;F1@M!R z1PK(V3O#vZsf+XTK5ayf9_fgudLrygSeVO|C+hH@VAKNyZ7*uJC|Y(2c0gZy9pG&V zo(p(1f0i5A*ZiQ`kzjLp79$ZE7N#ce!o;+R_Y7p%ahuCC&!Vp<9ylr=s_pmO_)vcd zi)}Rd)Wen^7LLEpVOmeyO3ANY%y!3G4fxhpF%X z&}LuD5m3t(A~W17Xv16bYbx!}uzwwn{*l1_@r3#xc{Xr8JeA<`-{$>uda&}(!_$yf zh)BQk>$LhIaL&8tEigVsX5iO!_k}bl5E_F>=kGD#SsnT5-;UFh5P$_Qtz!U80!#-3 zFaJlW=pX?7TLdsz#Q3iE0q__=ET%6MfJIq=zJH81^lJWZy8p*{Xacgb?I0TtK*W}) zOC*~>@DN|U2Hq4F0E*7QD9p&}Rt_j!fyf&;7mReK%!YuKnwMw#4)47P|4 zo4C38uek-cp(+3wRkG(I_vY%mD=yv>-IZqhhS^DyCP2Ds0lTQFD(MNsOHGmN$nNr# z-EzG1q2HSPmNUXnzJcT|b4e-s?{}E&bcQM&sV(~%8r=u!tpgh=XIZS!Jc{Tbfm&N@ ztLAs*(E;7`SR-DLD^5Kk^_?lEJO6nXtC#Lm&(EI{Vq$%Ew*7mD>vjakC6WZY3~vyz%Z&|W?lCd+#kgacM7im8bs>>GO7Uqrpua~jnIOIC2dH)z zfU^F~=vS~AapE7Taayl|6BvQiqq3Rj0CWaD-}sa1ppa)i)$m5JhNN^-g^q9gJPW^(MX>3mbA?)-YYqH zna#BgZ_t1BfegJCyO<;Ieu6~SCF=M=^4GYjyMwJ$jJy~>c=|k7;*GRUP=7!^tGavr zZL^MaEOVxS&!`Bv3-?1nG6d-a_6_XtXa>d$w)_GVy)XazptNBv;BGz<)m-n;97efJeP+Rcz$y zd}W$hw~)1${UhBk5eZ%9`}aVa7{#0e_#K#-ex?Md=qsiD=ZKURNM`fccJFL^bB{ko0&D5RONd`v5LJCa(oJ(M|mX&Hk;t;=A&65>mI?nyJb zNXJ%HY4dy~86i%o^?C!N8b^?Tfrf@g{^oQ+&2gdomqs_RC84-6gX|pK zkQ#3-d6z)4#=iJ?)h^E5_z%`tLrJn%4ad{O-76S3v-OZb3@aKRMl^DN0$b1Pv29&F zvBg%<8ir0-10PSe-palg5iR!No2UXkKB8zfALnKQn z6QV8IOh=m9=j5;Lu>f1pEKr;}_~$K4Kzp~<$Ek6;8zyIpJx8_gO?^06CH7P{FIyyI zD{>EQs8t<&YnpUphDaAGQ(qaqeUcZ~Z2wcb1eupwkE7`P?Orn@ztBi8sAJ-Op#KF5 zX|&5~XzUbe%VL&vQc4v2ndhZv3fK`&9G%?U=07d=P1f*vi&(A509&aTR}m4B$0Rss z9zTop404t0@LJY^YbO1uQmqcFwYFYAV1GBDPq!i^IoY3vSjMyz7VSNZ9OKWTbP_b~nmjEhawZ72#_Qc<( zwzd{*IVmgmIUo-7nOaMnYg~bx#XPG>j5#!T_ikx=f34n$yr*K>hZbS{++VF&h>?b|^zUSe z1fqzw#514u{Vo`xTFgP?{tGVL+D|eJIAOGLt7D1j6Wxz@SuCHO@};S!DR6Zt{Q_>? z0~Ge7&)3n2<1!4UzAFFn-2jXxD~b(t+=a=YTDi`bLAh<^_pj{4c!DyX6o zKWgd$M7G>FGH3E}3PR}pZ#xoVM#!Kh3+)tsbj6qI9mXk22BA+75Mmm=a`gB!M+d! z66p~-^HaBgwrL>#c;7Oc4L~smHM8@j>pXtbH(wPvxY;`FG`us-LXfLDKAqbJ`UPnC z!3L=^LpZkcg`_q(cT~%tXlQW7`422tR+U`~Z5|#~z|Ra1>GrMsd1ZQ?DyeIt8T3t< zCaYekI``_!(gu`Zlxb0_1?c|RG@^FLwX5IJE{+^YuF?wTuEHNm7x9R4vq*#TxanD& zxRFxfZqTec-V2C(pZDgz787wQix)r30!qHwpIKZ9J&VLYW+)SvJlpG1=dLS(zN{^+ z!QV+%tMo2zp?t7#WGnwpZK9L`CC78(6oKCURNbrdyDjD1AmP8Byl}xR9J+E9(OP#i zDA?Bn`4kpb_4eaf`)x^$-;RTHc8Q?YK*eW_mCrP9VCr4w&=}6N{=>&#;&gfcMR2l> zzWU1uI8JGl+xSH_-nE^ix0khflU-tQmMpMQ{;o|b6Xls3z(!Q7g?kd3!SR!^{3rdo zzlxRGOP1hotu&klVmPN#z;V}hKqIW_>3nvls8l98wUCW zVXDTQ8PSeGAk{Z#>lLdSCn&3Ojgy0H>q_OX9Bs*X&QlH3i0QkeFUegAP#wNMxtTBJ zgTroq^=~_&s*BwMoxS$H^~JON-TsnlBaa4O%)Ryi*a@NHKfD2-KjNysUb?WZsXE_7 zZK;W3*Bg9PV2ArFrM`{DdZ_NtWcpqLXIxhLUKW-HylEBPl!viNT4-;(5@|Jgv)Kgb zg5ak|1-FP1J1vh`Tn;Y7%RQ>D1W@(>H2&noEru<3uBRl#d}Oh2FH)T_<`` zn}b&*agEtcM(WS8&}XSgfwI@1PX|SxmWj&{eJdv?2e9jar-_8H zlzg_9i0O7LF$zgTAEu!f?A$}C@n6PuazziNO@;t3bE~OMI!GH-e?Xd?COTML>kymD z%5KVXn^&Huwjb>{!|rN42S&{3useL7fn)WS*d8GRz*{JkiM}ij0&d*Q7m5Ziv($urgUQ?*1=SkhS z{&<)&`~AI%bHrRtR#WlsG2l>5iuGrGV0KW0wEjzJ-=V{)by(x;nptR&iKK?f0@jY- zF+!;a%V0aB!{Wo~P+QI{4B~sov4Dw<9Tg!-0e@s9-tD36xXaElwFNUyp2>Z_H0Qkb zr~1K(p%#uCPw3dCRdCTMPEklwmf38QWHN3`e&QfZJI%dHvOv|(wC`e@8nu_@_|u%_ z&Stg2!||dr6Zpxu?@JaZyZHiK>}$ubw=uo=Tt^yGt`fF|F?uBxEnfTNnHfmWkr_{3 zBBNjQLWWzSmSxiTBs9Qu>a6QIPdk|#o!+!S4O_)*H!6{Ran;IX1%3ZK{JwP`+PsK+ zFJ@dK+E@=EHD+P0XQbDA&-9z*JfsSYnsu*`V$-S z12j=>nv>`&;w`R&iYN6nxw$kCt4uO|vKTg(?W~Wq%!8W*)?J@zJw+id)W?N>qHu1H7>Lx9v$ZNm$)}so{o0!NmaQ>wrlUm4a)GNu@XAI1?$y~!)ntBJ; zp8_EU(Cf)`?t2rgpym9qqk*1%rgeyarB}Mh@48-ooSWLRT7Q3oS?)!A(Qr9Xi`K-c z+xFZzX+)idD|+mpwJjufyW>`Uv7bPLvX16xuGTUo5!F*?b>I{5ESv0|VsPZU;dV|T zdv*gn(6qJS&60W!wa&?FCP8izO zH*0-?ck6Y$3&RKu^cT4)1IKDJ5@rR=Fz}3XZ%jpWq`m$QF`r6K z(toPEHAKA=?>Nv2dDTK!V#M57nb_K9cLOUIm~0=or1Qub4x2xo9!T|e3ykW4eET>U zV$hybSJtE982gcBz&N(Qnr=Rj6vYOwzG?80wG*-U0z(=C|GDxo^!e z4w=DIpB2s4nXWoau24d6#x6^gI0ufn-|`%PIB(hWeV9!-86^ohVx;Ha0 z8fwW$22bayuaFWWo+VbxWH512bnN&WEuz8ZVpiE|(i7er@ zb!xuYVCXID1R~=6ZYNu|xA}h-?QdVb9<}&(ZlU>Gr{k04diKH3ay=#cV6NB8de_u7 z&2M_~GnO~dG(S+1)0Ene;T1$te6RjiL#=c ztS2tOvm`w_P2Sj|_UEn`2hc+54Gjt4d&n{#d@g7MbaOB|?aU&R(ta68_fCdWo%|v^ zOL1oQ@;J^JD9;MS(HINcB*UkxJC>EWKsIV`6+g)u>ZXN~!E^Xh&MP-3EFqq)^0{PR zYMG~A$mQ2q)r^dXG3@T445DzJkzhhZ#A}OD2RVn><2EdLx6u&kcS8cEp}I7)ajPC!Ol+*wuKvD%EF$D&<@qJD?&I{PXQehWhH6?Ot7J~OaSbz@fEIuNj^UO@?rTCw?5BvW%~~5MuQ;@sj(@{)D#9eOQf3MyYw7 zN6&r?7#=kgtZ;DmPXY$TAndJqO}y<}FAS#Y`X4ys-SdC)&nA3t|$ zgsWWVb50b$(b%CC^5kW}T&VQqtaSQfcM%7gv|~I>rqT{5TCRstGZI-Gj6qrBZ+jn7 z)7N1gTPK-bQORBiJNs--UK1!I^&PP=RcQMPEDCD4p$TC$U;3=A8DGSIu=D{wt5LKM z0YZ3>?+VF~NIh#oJkruJH8LVQ1Jg8|>NT;69qx*)`?<^H`2+sWkLy=(>C2}6_NOTd z?V^WaZw2&!T(eSg%48XL_pU5d!Z2JzZ{6!FM$bK=$=TWz_n(e#O_$TNm+1XCZnkQ_ z%RBUNfj!nlPb#P2YuhW6hA<{+vp-gzhsYFAc<3vs^dZj`5wNqsX;@9ApIQQ*B?5g* z{^Nx4Qpa|+1Kj%Q=h)hFj8GbKUzzJV{xwHq$aruA%CiObhl4Q@jtl2@rCMq>UV}%k z%>sO77}EdPS!poC`pzSdCuxRUw)-fSa|F|+cZ0%?+90(p zbh}2($L{>Oxup)V{v|6xX36e1j)w%DCLO-cS4g|`&_^;F`cJp{TcsW=K5AggH=S_l zhJ>s=?dIanMW#n}(5B(KYYajUpy!}=;R6t!y(srtOcKY2g*7!Btv}xYm>JM}+vb%D z<>m_@6>P??r0Q7Cv8!9OKslkszvn-_qd8@CHP2aA=`aoRy_!21rnJzM4)>@h6uvq@Lv5SRHk;nX9g0RC|WDz zHdx=mCS-;Eq0=4nG>S{Az^gZEZc5b>hIcq~_CL>8Wmoy<98e|zn2C?Mp;Mf2boZUH zkHtKlEAPpt+ZJ>6ldouBWqs=7NN24ZU|ACQKH8qDb^T;N`o2w2-k)$wFZ0qG5oebQ z^YTHR*Uw8%2aiTLbIm$t&5dnS+iYm6i3}UvvA#)IQ`a%@PGqh;=`Xl{8STOEg@yBg zZ}uq)lrc7$t$WRJ9en@y?jD*>TRxA;_AN2XRJN<>N)Mgdw;fi$0cCza$MBV1zQE&4 za+;*_wRU#{v$!1b1#%nh=9%h}=|ObMgn^EX!zp{CvRx)3mt;LV$MEFP~DP1v^2j%#cHY%$X-=H7v@WEl5qYch!8`xwQ@_6g)zMlJi78x+H`zA+H~S_ zEB3)ULc8ZAD>5*U1&~Nwa^i z5#tmr)m-^FfWiO_m0Mg?wiEMT1q1urE!pA*+!UQ|PdkI`MPh*i6TFR|@P!h9Os zm@M5EBzLc0Bz2r_X;pLrrAT(Sc@(!~>FsVV=={2r3)F7Nv-Oz#LGcjJ-pTe#3k{52 z6WPlAkGh*srGi+*Vjp3-p__87GX+iec-y%f&o=Py%PnLZ2eaZ99BKVvxzFqRFg-y0 z5sMv^b@2?j{4RhtrdE&+JJ`$Lm(Fag&d<*6enbB1-sYru_%N@&r}y`Lz3zivHa=j| zxt9J`eoY3!_)$oZ7UJ6$W#Qdf&nKB`%FbruT`F3Tl zK1Kc#VvY;+iY7{tbzk|MWy`kc1q(ZoGX3_+3xr>ua?RHJ-S>>V{Hy4ivATs;Z8_t* zH{XU&m&$Dyc;&5KqB988p6DZ4JiTW=LtWX$8-HbcwRQsPt-3^}7r1BOfL_4LERd$$ z)zvxEI4MXf1V;9|cm061`MVE57nLYr2Tm`LK{$!Do#&9!pDpx(BTmn{W@A6YC%wVPx&X+yD}_^{A+Aj z&vDUhLLMQOezXn|49zYGpbbz{=YsGOS3rUDT_WRMU+2Gz#q($#FQ0@(!BKYjQTl-1 zRZ@t(B_PYalR@>?L=M=(jU?rbW9dhLG7^x%Z1*83=QJfcnqdN^!iAk5ZvFNx`nDwL zz)VB^(vrT+xv-)Dw8a}sMZs-=?}LSj#p4x%EK>kPzy>9W20&y09Y;Kzg!)hrk0SUV zb0N?9PUVK@SKhheu>;%ZD7YOJuf0O*Kz+3o?a7-9WJ4rSR|Fgh|4Py+m0G(wgSFm% z#Yo+ZSTsOmb-ES?6o7!^C=}ElsA3B54Ir$_xx7SKLhgaS5%8Ly7c$V&f@irVz5EBK z&K4`3>jpBkf3b}E+93VaUWlaeZEuPL!}LFCSVwLku@?Ss{x+LBwDZ^KXqC6tU0|L7 zH2YsbTg&~Z#<@TQCACKMpWLkELy+0IYgMJbx{hw_RN!Bbg}&;g%z{87{#CFa{t?sp z;RPWkPinCTN!Cn$)cGlJNm|jXG>Gr=z6^YQ%mudQC+vt<8ZMdi>d06u|88`1|~2^SECfE z*H9jwDzPv~E1>Ork)_dQ3rGojofc6yaH3+cAWA48;|@hC zdM{;+x9NL_Q*3qYR6Wp5ZH-u&&rEWD2~E9X>PW!;l zyAIFyrR)evT+VEDC@bHDCUKJh>vOXDa411hl5* z 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 diff --git a/docs/LNDAPICoverage.md b/docs/LNDAPICoverage.md deleted file mode 100644 index 30dc978a..00000000 --- a/docs/LNDAPICoverage.md +++ /dev/null @@ -1,57 +0,0 @@ -Coverage of LND's API - -- [ ] GenSeed -- [ ] InitWallet -- [ ] UnlockWallet -- [ ] ChangePassword -- [x] WalletBalance -- [x] ChannelBalance -- [x] GetTransactions -- [ ] EstimateFee -- [x] SendCoins -- [x] ListUnspent -- [ ] SubscribeTransactions -- [ ] SendMany -- [x] NewAddress -- [x] SignMessage -- [x] VerifyMessage -- [x] ConnectPeer -- [x] DisconnectPeer -- [x] ListPeers -- [x] GetInfo -- [x] PendingChannels -- [x] ListChannels -- [ ] SubscribeChannelEvents -- [x] ClosedChannels -- [ ] OpenChannelSync -- [x] OpenChannel -- [x] CloseChannel -- [ ] AbandonChannel -- [x] SendPayment -- [ ] SendPaymentSync -- [ ] SendToRoute -- [ ] SendToRouteSync -- [x] AddInvoice -- [x] ListInvoices -- [ ] LookupInvoice -- [ ] SubscribeInvoices -- [x] DecodePayReq -- [x] ListPayments -- [ ] DeleteAllPayments -- [ ] DescribeGraph -- [x] GetChanInfo -- [x] GetNodeInfo -- [ ] QueryRoutes -- [x] GetNetworkInfo -- [ ] StopDaemon -- [ ] SubscribeChannelGraph -- [ ] DebugLevel -- [x] FeeReport -- [x] UpdateChannelPolicy -- [x] ForwardingHistory -- [x] ExportChannelBackup -- [x] ExportAllChannelBackups -- [x] VerifyChanBackup -- [x] RestoreChannelBackups -- [ ] SubscribeChannelBackups -- [ ] Messages