diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 25a97736..7bf41f3a 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -13,6 +13,7 @@ - [ ] Code has been formatted with `go fmt` - [ ] Protobuf files (`lnrpc/**/*.proto`) have been formatted with `make rpc-format` and compiled with `make rpc` +- [ ] New configuration flags have been added to `sample-lnd.conf` - [ ] For code and documentation: lines are wrapped at 80 characters (the tab character should be counted as 8 characters, not 4, as some IDEs do per default) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5a6f7d70..3ee4fa2b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -202,6 +202,44 @@ jobs: - name: build mobile specific code run: go build --tags="mobile" ./mobile + ######################## + # sample configuration check + ######################## + sample-conf-check: + name: sample configuration check + runs-on: ubuntu-latest + steps: + - name: git checkout + uses: actions/checkout@v2 + + - name: go cache + uses: actions/cache@v1 + with: + path: /home/runner/work/go + key: lnd-${{ runner.os }}-go-${{ env.GO_VERSION }}-${{ github.job }}-${{ hashFiles('**/go.sum') }} + restore-keys: | + lnd-${{ runner.os }}-go-${{ env.GO_VERSION }}-${{ github.job }}-${{ hashFiles('**/go.sum') }} + lnd-${{ runner.os }}-go-${{ env.GO_VERSION }}-${{ github.job }}- + lnd-${{ runner.os }}-go-${{ env.GO_VERSION }}- + lnd-${{ runner.os }}-go- + + - name: setup go ${{ env.GO_VERSION }} + uses: actions/setup-go@v2 + with: + go-version: '~${{ env.GO_VERSION }}' + + - name: download cache + uses: actions/cache@v1 + with: + path: /home/runner/work/download_cache + key: lnd-${{ runner.os }}-download-${{ hashFiles('**/install_travis_proto.sh') }} + restore-keys: | + lnd-${{ runner.os }}-download-${{ hashFiles('**/install_travis_proto.sh') }} + lnd-${{ runner.os }}-download- + + - name: check all command line flags exist in sample-lnd.conf file + run: make sample-conf-check + ######################## # run unit tests ######################## diff --git a/Makefile b/Makefile index 46c560ac..f28bef3d 100644 --- a/Makefile +++ b/Makefile @@ -254,6 +254,10 @@ rpc-check: rpc for rpc in $$(find lnrpc/ -name "*.proto" | $(XARGS) awk '/ rpc /{print $$2}'); do if ! grep -q $$rpc lnrpc/rest-annotations.yaml; then echo "RPC $$rpc not added to lnrpc/rest-annotations.yaml"; exit 1; fi; done if test -n "$$(git describe --dirty | grep dirty)"; then echo "Protos not properly formatted or not compiled with v3.4.0"; git status; git diff; exit 1; fi +sample-conf-check: + @$(call print, "Making sure every flag has an example in the sample-lnd.conf file") + for flag in $$(GO_FLAGS_COMPLETION=1 go run -tags="$(RELEASE_TAGS)" $(PKG)/cmd/lnd -- | grep -v help | cut -c3-); do if ! grep -q $$flag sample-lnd.conf; then echo "Command line flag --$$flag not added to sample-lnd.conf"; exit 1; fi; done + mobile-rpc: falafel goimports @$(call print, "Creating mobile RPC from protos.") cd ./mobile; ./gen_bindings.sh $(FALAFEL_COMMIT) diff --git a/sample-lnd.conf b/sample-lnd.conf index dc4bac39..54f036c8 100644 --- a/sample-lnd.conf +++ b/sample-lnd.conf @@ -1,5 +1,12 @@ ; Example configuration for lnd. ; +; The default location for this file is in ~/.lnd/lnd.conf on POSIX OSes, +; $LOCALAPPDATA/Lnd/lnd.conf on Windows, +; ~/Library/Application Support/Lnd/lnd.conf on Mac OS and $home/lnd/lnd.conf on +; Plan9. +; The default location of this file can be overwritten by specifying the +; --configfile= flag when starting lnd. +; ; Boolean values can be specified as true/false or 1/0. [Application Options] @@ -45,6 +52,10 @@ ; change. ; tlsautorefresh=true +; Do not include the interface IPs or the system hostname in TLS certificate, +; use first --tlsextradomain as Common Name instead, if set. +; tlsdisableautofill=true + ; A list of domains for lnd to periodically resolve, and advertise the resolved ; IPs for the backing node. This is useful for users that only have a dynamic IP, ; or want to expose the node at a domain. @@ -99,7 +110,7 @@ ; A period to wait before for closing channels with outgoing htlcs that have ; timed out and are a result of this nodes instead payment. In addition to our ; current block based deadline, is specified this grace period will also be taken -; into account. +; into account. ; payments-expiration-grace-period=30 @@ -159,6 +170,20 @@ ; support devices behind multiple NATs. ; nat=true +; Disable listening for incoming peer connections. +; nolisten=true + +; Disable REST API. +; norest=true + +; Shortest backoff when reconnecting to persistent peers. Valid time units are +; {s, m, h}. +; minbackoff=1s + +; Longest backoff when reconnecting to persistent peers. Valid time units are +; {s, m, h}. +; maxbackoff=1h + ; The timeout value for network connections in seconds, default to 120 seconds. ; Valid uints are {ms, s, m, h}. ; connectiontimeout=120s @@ -177,14 +202,30 @@ ; 65536. The profile can be access at: http://localhost:/debug/pprof/. ; profile= +; DEPRECATED: Allows the rpcserver to intentionally disconnect from peers with +; open channels. THIS FLAG WILL BE REMOVED IN 0.10.0. +; unsafe-disconnect=false + +; Causes a link to replay the adds on its commitment txn after starting up, this +; enables testing of the sphinx replay logic. +; unsafe-replay=true + ; The maximum number of incoming pending channels permitted per peer. ; maxpendingchannels=1 +; The target location of the channel backup file. +; backupfilepath=~/.lnd/data/chain/bitcoin/simnet/channel.backup + ; If true, then automatic network bootstrapping will not be attempted. This ; means that your node won't attempt to automatically seek out peers on the ; network. ; nobootstrap=true +; If true, NO SEED WILL BE EXPOSED -- EVER, AND THE WALLET WILL BE ENCRYPTED +; USING THE DEFAULT PASSPHRASE. THIS FLAG IS ONLY FOR TESTING AND SHOULD NEVER +; BE USED ON MAINNET. +; noseedbackup=true + ; The smallest channel size (in satoshis) that we should accept. Incoming ; channels smaller than this will be rejected, default value 20000. ; minchansize= @@ -197,6 +238,11 @@ ; to better align with your risk tolerance ; maxchansize= +; The default max_htlc applied when opening or accepting channels. This value +; limits the number of concurrent HTLCs that the remote party can add to the +; commitment. The maximum possible value is 483. +; default-remote-max-htlcs=483 + ; The duration that a peer connection must be stable before attempting to send a ; channel update to reenable or cancel a pending disables of the peer's channels ; on the network. (default: 19m0s) @@ -208,7 +254,7 @@ ; stable for chan-enable-timeout before the disable update is sent. ; (default: 20m0s) ; chan-disable-timeout=22m - + ; The polling interval between attempts to detect if an active channel has become ; inactive due to its peer going offline. (default: 1m0s) ; chan-status-sample-interval=2m @@ -263,7 +309,7 @@ ; partial protection of a channel peer disconnecting from us if cooperative ; close is attempted with a different script. ; enable-upfront-shutdown=true - + ; If true, spontaneous payments through keysend will be accepted. [experimental] ; accept-keysend=true @@ -272,6 +318,12 @@ ; automatically. [experimental] ; keysend-hold-time=true +; If true, we'll attempt to garbage collect canceled invoices upon start. +; gc-canceled-invoices-on-startup=true + +; If true, we'll delete newly canceled invoices on the fly. +; gc-canceled-invoices-on-the-fly=true + ; If true, our node will allow htlc forwards that arrive and depart on the same ; channel. ; allow-circular-route=true @@ -298,6 +350,12 @@ ; active. bitcoin.active=true +; The directory to store the chain's data within. +; bitcoin.chaindir=~/.lnd/data/chain/bitcoin + +; Use Bitcoin's main network. +; bitcoin.mainnet=true + ; Use Bitcoin's test network. ; bitcoin.testnet=true ; @@ -321,9 +379,41 @@ bitcoin.node=btcd ; confirmations before we consider the channel active. ; bitcoin.defaultchanconfs=3 +; The default number of blocks we will require our channel counterparty to wait +; before accessing its funds in case of unilateral close. If this is not set, we +; will scale the value according to the channel size. +; bitcoin.defaultremotedelay=144 + +; The smallest HTLC we are willing to accept on our channels, in millisatoshi. +; bitcoin.minhtlc=1 + +; The smallest HTLC we are willing to send out on our channels, in millisatoshi. +; bitcoin.minhtlcout=1000 + +; The base fee in millisatoshi we will charge for forwarding payments on our +; channels. +; bitcoin.basefee=1000 + +; The fee rate used when forwarding payments on our channels. The total fee +; charged is basefee + (amount * feerate / 1000000), where amount is the +; forwarded amount. +; bitcoin.feerate=1 + +; The CLTV delta we will subtract from a forwarded HTLC's timelock value. +; bitcoin.timelockdelta=40 + +; Used to help identify ourselves to other bitcoin peers (default: neutrino). +; neutrino.useragentname=neutrino + +; Used to help identify ourselves to other bitcoin peers (default: 0.11.0-beta). +; neutrino.useragentversion=0.11.0-beta [Btcd] +; The base directory that contains the node's data, logs, configuration file, +; etc. +; btcd.dir=~/.btcd + ; The host that your local btcd daemon is listening on. By default, this ; setting is assumed to be localhost with the default port for the current ; network. @@ -351,6 +441,10 @@ bitcoin.node=btcd [Bitcoind] +; The base directory that contains the node's data, logs, configuration file, +; etc. +; bitcoind.dir=~/.bitcoin + ; The host that your local bitcoind daemon is listening on. By default, this ; setting is assumed to be localhost with the default port for the current ; network. @@ -383,12 +477,32 @@ bitcoin.node=btcd ; neutrino compliant full nodes on the test network yet. ; neutrino.connect= +; Max number of inbound and outbound peers. +; +; NOTE: This value is currently unused. +; neutrino.maxpeers= + ; Add a peer to connect with at startup. ; neutrino.addpeer= +; How long to ban misbehaving peers. Valid time units are {s, m, h}. Minimum 1 +; second. +; +; NOTE: This value is currently unused. +; neutrino.banduration= + +; Maximum allowed ban score before disconnecting and banning misbehaving peers. +; +; NOTE: This value is currently unused. +; neutrino.banthreshold= + ; Set a URL source for fee estimates. ; neutrino.feeurl= +; Optional filter header in height:hash format to assert the state of neutrino's +; filter header chain on startup. If the assertion does not hold, then the +; filter header chain will be re-synced from the genesis block. +; neutrino.assertfilterheader= [Litecoin] @@ -396,18 +510,61 @@ bitcoin.node=btcd ; active. ; litecoin.active=true +; The directory to store the chain's data within. +; litecoin.chaindir=~/.lnd/data/chain/litecoin + +; Use Litecoin's main network. +; litecoin.mainnet=true + ; Use Litecoin's test network. ; litecoin.testnet=true +; +; Use Litecoin's simulation test network +; litecoin.simnet=true -; Use the ltcd back-end +; Use Litecoin's regression test network +; litecoin.regtest=false + +; Use the ltcd back-end. litecoin.node=ltcd -; Use the litecoind back-end +; Use the litecoind back-end. ; litecoin.node=litecoind +; The default number of confirmations a channel must have before it's considered +; open. We'll require any incoming channel requests to wait this many +; confirmations before we consider the channel active. +; litecoin.defaultchanconfs=3 + +; The default number of blocks we will require our channel counterparty to wait +; before accessing its funds in case of unilateral close. If this is not set, we +; will scale the value according to the channel size. +; litecoin.defaultremotedelay=144 + +; The smallest HTLC we are willing to accept on our channels, in millisatoshi. +; litecoin.minhtlc=1 + +; The smallest HTLC we are willing to send out on our channels, in millisatoshi. +; litecoin.minhtlcout=1000 + +; The base fee in millisatoshi we will charge for forwarding payments on our +; channels. +; litecoin.basefee=1000 + +; The fee rate used when forwarding payments on our channels. The total fee +; charged is basefee + (amount * feerate / 1000000), where amount is the +; forwarded amount. +; litecoin.feerate=1 + +; The CLTV delta we will subtract from a forwarded HTLC's timelock value. +; litecoin.timelockdelta=576 [Ltcd] +; The base directory that contains the node's data, logs, configuration file, +; etc. +; ltcd.dir=~/.ltcd + ; The host that your local ltcd daemon is listening on. By default, this ; setting is assumed to be localhost with the default port for the current ; network. @@ -435,6 +592,10 @@ litecoin.node=ltcd [Litecoind] +; The base directory that contains the node's data, logs, configuration file, +; etc. +; litecoind.dir=~/.litecoin + ; The host that your local litecoind daemon is listening on. By default, this ; setting is assumed to be localhost with the default port for the current ; network. @@ -500,7 +661,7 @@ litecoin.node=ltcd [tor] ; Allow outbound and inbound connections to be routed through Tor -; tor.active=true +; tor.active=true ; The port that Tor's exposed SOCKS5 proxy is listening on. Using Tor allows ; outbound-only connections (listening will be disabled) -- NOTE port must be @@ -520,27 +681,27 @@ litecoin.node=ltcd ; The host:port that Tor is listening on for Tor control connections (default: ; localhost:9051) -; tor.control=localhost:9091 +; tor.control=localhost:9091 ; IP address that Tor should use as the target of the hidden service -; tor.targetipaddress= - +; tor.targetipaddress= + ; The password used to arrive at the HashedControlPassword for the control port. ; If provided, the HASHEDPASSWORD authentication method will be used instead of ; the SAFECOOKIE one. -; tor.password=plsdonthackme - +; tor.password=plsdonthackme + ; Automatically set up a v2 onion service to listen for inbound connections ; tor.v2=true - + ; Automatically set up a v3 onion service to listen for inbound connections ; tor.v3=true - + ; The path to the private key of the onion service being created -; tor.privatekeypath=/path/to/torkey - +; tor.privatekeypath=/path/to/torkey + ;The path to the private key of the watchtower onion service being created -; tor.watchtowerkeypath=/other/path/ +; tor.watchtowerkeypath=/other/path/ [watchtower] ; Enable integrated watchtower listening on :9911 by default. @@ -587,6 +748,11 @@ litecoin.node=ltcd ; specified in sat/byte, the default is 10 sat/byte. ; wtclient.sweep-fee-rate=10 +; (Deprecated) Specifies the URIs of private watchtowers to use in backing up +; revoked states. URIs must be of the form @. Only 1 URI is +; supported at this time, if none are provided the tower will not be enabled. +; wtclient.private-tower-uris= + [healthcheck] ; The number of times we should attempt to query our chain backend before ; gracefully shutting down. Set this value to 0 to disable this health check. @@ -623,25 +789,40 @@ litecoin.node=ltcd ; value must be >= 1m. ; healthcheck.diskspace.interval=6h +[signrpc] + +; Path to the signer macaroon. +; signrpc.signermacaroonpath=~/.lnd/data/chain/bitcoin/simnet/signer.macaroon + +[walletrpc] + +; Path to the wallet kit macaroon. +; walletrpc.walletkitmacaroonpath=~/.lnd/data/chain/bitcoin/simnet/walletkit.macaroon + +[chainrpc] + +; Path to the chain notifier macaroon. +; chainrpc.notifiermacaroonpath=~/.lnd/data/chain/bitcoin/simnet/chainnotifier.macaroon + [routerrpc] ; Minimum required route success probability to attempt the payment (default: ; 0.01) -; routerrpc.minrtprob=1 +; routerrpc.minrtprob=1 ; Assumed success probability of a hop in a route when no other information is ; available. (default: 0.6) -; routerrpc.apriorihopprob=0.2 +; routerrpc.apriorihopprob=0.2 ; Weight of the a priori probability in success probability estimation. Valid ; values are in [0, 1]. (default: 0.5) -; routerrpc.aprioriweight=0.3 +; routerrpc.aprioriweight=0.3 ; Defines the duration after which a penalized node or channel is back at 50% ; probability (default: 1h0m0s) -; routerrpc.penaltyhalflife=2h +; routerrpc.penaltyhalflife=2h ; The (virtual) fixed cost in sats of a failed payment attempt (default: 100) -; routerrpc.attemptcost=90 +; routerrpc.attemptcost=90 ; The (virtual) proportional cost in ppm of the total amount of a failed payment ; attempt (default: 1000) @@ -649,30 +830,30 @@ litecoin.node=ltcd ; The maximum number of payment results that are held on disk by mission control ; (default: 1000) -; routerrpc.maxmchistory=900 +; routerrpc.maxmchistory=900 ; Path to the router macaroon -; routerrpc.routermacaroonpath= +; routerrpc.routermacaroonpath=~/.lnd/data/chain/bitcoin/simnet/router.macaroon [workers] ; Maximum number of concurrent read pool workers. This number should be ; proportional to the number of peers. (default: 100) -; workers.read=200 +; workers.read=200 ; Maximum number of concurrent write pool workers. This number should be ; proportional to the number of CPUs on the host. (default: 8) -; workers.write=8 +; workers.write=8 ; Maximum number of concurrent sig pool workers. This number should be ; proportional to the number of CPUs on the host. (default: 8) -; workers.sig=4 +; workers.sig=4 [caches] ; Maximum number of entries contained in the reject cache, which is used to speed ; up filtering of new channel announcements and channel updates from peers. Each ; entry requires 25 bytes. (default: 50000) -; caches.reject-cache-size=900000 +; caches.reject-cache-size=900000 ; Maximum number of entries contained in the channel cache, which is used to ; reduce memory allocations from gossip queries from peers. Each entry requires @@ -690,7 +871,7 @@ litecoin.node=ltcd [db] ; The selected database backend. The current default backend is "bolt". lnd ; also has experimental support for etcd, a replicated backend. -; db.backend=bolt +; db.backend=bolt [etcd] ; Etcd database host. @@ -698,21 +879,21 @@ litecoin.node=ltcd ; Etcd database user. ; db.etcd.user=userscopedforlnd - + ; Password for the database user. ; db.etcd.pass=longandsekrit ; Path to the TLS certificate for etcd RPC. ; db.etcd.cert_file=/key/path - + ; Path to the TLS private key for etcd RPC. ; db.etcd.key_file=/a/path - + ; Whether we intend to skip TLS verification -; db.etcd.insecure_skip_verify=true - +; db.etcd.insecure_skip_verify=true + ; Whether to collect etcd commit stats. -; db.etcd.collect_stats=true +; db.etcd.collect_stats=true [bolt] ; If true, prevents the database from syncing its freelist to disk.