No description
Find a file
carla 562c26c096
multi: add check for imports order and add to travis
Use external to to verify that imports are in the following groups:
- standard packages
- external packages
- faraday packages
2020-09-09 10:07:13 +02:00
accounting multi: do not require granularity parameter when fiat is disabled 2020-08-24 14:39:29 +02:00
chain multi: optionally connect faraday to a bitcoin node 2020-06-27 14:47:20 +02:00
cmd cmd/frcli: add TLS params to CLI 2020-09-08 20:09:31 +02:00
dataset mutli: update line wrap to 80 2020-02-11 22:37:26 +02:00
fees multi: separate fees out into own package and move special case check 2020-08-12 11:14:53 +02:00
fiat multi: switchover fiat to use timestamped bitcoin prices and rename 2020-07-22 16:41:17 +02:00
frdrpc frdrpc: serve connections over TLS 2020-09-08 20:09:31 +02:00
insights multi: point to new lndclient repo 2020-06-18 16:45:59 +02:00
itest itest: fix faraday flags 2020-09-08 20:09:32 +02:00
lndwrap multi: move lnd wrapping into package 2020-06-26 08:44:07 +02:00
make multi: Add makefile 2019-11-05 08:45:34 +02:00
paginater multi: extract pagination logic into separate pagination package 2020-05-25 13:49:20 +02:00
recommend multi: faraday rename 2020-03-30 09:25:46 +02:00
resolutions multi: separate fees out into own package and move special case check 2020-08-12 11:14:53 +02:00
revenue revenue: switchover to use existing pagination function 2020-08-31 17:19:44 +02:00
scripts frdrpc+travis: update protobuf version to match lnd 2020-06-17 10:41:58 +02:00
utils utils: add time range validation function for general use 2020-04-29 09:17:08 +02:00
.gitignore itest: add itest setup with two lnd nodes and a single faraday instance 2020-08-12 11:42:09 +02:00
.golangci.yml terminator: query for recommendations on startup 2019-12-19 15:45:38 +02:00
.travis.yml multi: add check for imports order and add to travis 2020-09-09 10:07:13 +02:00
config.go multi: add TLS config to RPC server 2020-09-08 20:09:30 +02:00
Dockerfile multi: faraday rename 2020-03-30 09:25:46 +02:00
faraday.go multi: add TLS config to RPC server 2020-09-08 20:09:30 +02:00
go.mod multi: add TLS config to RPC server 2020-09-08 20:09:30 +02:00
go.sum multi: add TLS config to RPC server 2020-09-08 20:09:30 +02:00
LICENSE readme: update license and remove status 2020-03-10 11:02:03 +02:00
log.go accounting: fallback to payment request for payments without htlcs 2020-06-29 10:56:20 +02:00
Makefile multi: add check for imports order and add to travis 2020-09-09 10:07:13 +02:00
README.md README: fix lnd flags, mention TLS 2020-09-08 20:09:32 +02:00
release.sh multi: faraday rename 2020-03-30 09:25:46 +02:00
run_itest.sh itest: add itest setup with two lnd nodes and a single faraday instance 2020-08-12 11:42:09 +02:00
version.go version: bump to 0.2.0-alpha 2020-06-05 11:20:01 +02:00

faraday

MIT licensed

Faraday is an external service intended to be run in conjunction with the lnd implementation of the Lightning Network. It queries LND for information about its existing channels and provides channel close recommendations if channels are under-performing.

LND

Note that Faraday requires lnd to be built with all of its subservers and requires running at least v0.10.1. Please see the instructions in the lnd repo for more detailed installation instructions. You will need to build lnd with the following command to enable all the relevant subservers:

make install tags="signrpc walletrpc chainrpc invoicesrpc"

Installation

A Makefile is provided. To install faraday and all its dependencies, run:

go get -d github.com/lightninglabs/faraday
cd $GOPATH/src/github.com/lightninglabs/faraday
make && make install

Usage

Faraday connects to a single instance of lnd. It requires access to macaroons for each subserver and a valid TLS certificate. It will attempt to use the default lnd values if no command line flags are specified.

./faraday                                           \
--lnd.macaroondir={directory containing macaroon}   \
--lnd.tlscertpath={path to lnd cert}                \
--lnd.rpcserver={host:port of lnd's rpcserver} 

By default, faraday runs on mainnet. The --network flag can be used to run in test environments.

Transport security

The gRPC and REST connections of faraday are encrypted with TLS the same way lnd is.

If no custom loop directory is set then the TLS certificate is stored in ~/.faraday/<network>/tls.cert.

The frcli command will pick up the file automatically on mainnet if no custom loop directory is used. For other networks it should be sufficient to add the --network flag to tell the CLI in what sub directory to look for the files.

Chain Backend

Faraday offers node accounting services which require access to a Bitcoin node with --txindex set so that it can perform transaction lookup. Currently the NodeReport and CloseReport endpoints require this connection, and will fail if it is not present. This connection is optional, and all other endpoints will function if it is not configured.

To connect Faraday to bitcoind:

--connect_bitcoin                       \
--bitcoin.host={host:port of bitcoind}  \
--bitcoin.user={bitcoind username}      \
--bitcoin.password={bitcoind  password}

To connect Faraday to btcd:

--connect_bitcoin                   \
--bitcoin.host={host:port of btcd}  \
--bitcoin.user={btcd username}      \
--bitcoin.password={btcd password}  \
--bitcoin.usetls                    \
--bitcoin.tlspath={path to btcd cert}

RPCServer

Faraday serves requests over grpc by default on localhost:8465. This default can be overwritten:

--rpclisten={host:port to listen for requests}

Cli Tool

The RPC server can be conveniently accessed using a command line tool.

  1. Run faraday as detailed above
./frcli {command}
Commands
  • insights: expose metrics gathered for one or many channels.
  • revenue: generate a revenue report over a time period for one or many channels.
  • outliers: close recommendations based whether channels are outliers based on a variety of metrics.
  • threshold: close recommendations based on thresholds a variety of metrics.
  • nodereport: produce an accounting report for your node over a period of time, please see the accounting documentation for details. Requires chain backend.
  • fiat: get the USD price for an amount of Bitcoin at a given time, currently obtained from CoinCap's historical price API.
  • closereports: provides a channel specific fee report, including fees paid on chain. This endpoint is currently only implemented for cooperative closes. Requires chain backend.

Metrics currently tracked

The following metrics are tracked in faraday and exposed via insights and used for outliers and threshold close recommendations.

  • Uptime
  • Revenue
  • Total Volume
  • Incoming Volume
  • Outgoing Volume

Development

If you would like to contribute to Faraday, please see our issues page for currently open issues. If a feature that you would like to add is not covered by an existing issue, please open an issue to discuss the proposed addition. Contributions are hugely appreciated, and we will do our best to review pull requests timeously.

Tests

To run all the unit tests in the repo:

make check

To run Faraday's itests locally, you will need docker installed. To run all itests:

make itest

Individual itests can also be run using:

./run_itest.sh {test name}