; 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. Per default 
; booleans are always set to false.

; If only one value is specified for an option, then this is also the
; default value used by lnd. In case of multiple (example) values, the default 
; is explicitly mentioned. 
; If the part after the equal sign is empty then lnd has no default 
; for this option.

[Application Options]

; The directory that lnd stores all wallet, chain, and channel related data
; within The default is ~/.lnd/data on POSIX OSes, $LOCALAPPDATA/Lnd/data on
; Windows, ~/Library/Application Support/Lnd/data on Mac OS, and $home/lnd/data
; on Plan9. Environment variables are expanded so they may be used. NOTE:
; Windows environment variables are typically %VARIABLE%, but they must be
; accessed with $VARIABLE here. Also, ~ is expanded to $LOCALAPPDATA on Windows.
; datadir=~/.lnd/data

; The directory that logs are stored in. The logs are auto-rotated by default.
; Rotated logs are compressed in place.
; logdir=~/.lnd/logs

; Number of logfiles that the log rotation should keep. Setting it to 0 disables deletion of old log files.
; maxlogfiles=3
;
; Max log file size in MB before it is rotated.
; maxlogfilesize=10

; Time after which an RPCAcceptor will time out and return false if
; it hasn't yet received a response.
; acceptortimeout=15s

; Path to TLS certificate for lnd's RPC and REST services.
; tlscertpath=~/.lnd/tls.cert

; Path to TLS private key for lnd's RPC and REST services.
; tlskeypath=~/.lnd/tls.key

; Adds an extra ip to the generated certificate. Setting multiple tlsextraip= entries is allowed.
; (old tls files must be deleted if changed)
; tlsextraip=

; Adds an extra domain to the generate certificate. Setting multiple tlsextradomain= entries is allowed.
; (old tls files must be deleted if changed)
; Default:
;   tlsextradomain=
; Example: (option can be specified multiple times):
;   tlsextradomain=my-node-domain.com

; If set, then all certs will automatically be refreshed if they're close to
; expiring, or if any parameters related to extra IPs or domains in the cert
; change.
; tlsautorefresh=false

; The duration from generating the self signed certificate to the certificate
; expiry date. Valid time units are {s, m, h}.
; The below value is about 14 months (14 * 30 * 24 = 10080)
; tlscertduration=10080h

; Do not include the interface IPs or the system hostname in TLS certificate,
; use first --tlsextradomain as Common Name instead, if set.
; tlsdisableautofill=false

; If set, the TLS private key will be encrypted to the node's seed.
; tlsencryptkey=false

; 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.
; Default:
;   externalhosts=
; Example (option can be specified multiple times):
;   externalhosts=my-node-domain.com
;   externalhosts=my-second-domain.com

; Sets the directory to store Let's Encrypt certificates within
; letsencryptdir=~/.lnd/letsencrypt

; The IP:port on which lnd will listen for Let's Encrypt challenges. Let's
; Encrypt will always try to contact on port 80. Often non-root processes are
; not allowed to bind to ports lower than 1024. This configuration option allows
; a different port to be used, but must be used in combination with port
; forwarding from port 80. This configuration can also be used to specify
; another IP address to listen on, for example an IPv6 address.
; Default:
;   letsencryptlisten=:80
; Example:
;   letsencryptlisten=localhost:8080

; Request a Let's Encrypt certificate for this domain. Note that the certificate
; is only requested and stored when the first rpc connection comes in.
; Default:
;   letsencryptdomain=
; Example:
;   letsencryptdomain=example.com

; Disable macaroon authentication. Macaroons are used as bearer credentials to
; authenticate all RPC access. If one wishes to opt out of macaroons, uncomment
; and set to true the line below.
; no-macaroons=false

; Enable free list syncing for the default bbolt database. This will decrease
; start up time, but can result in performance degradation for very large
; databases, and also result in higher memory usage. If "free list corruption"
; is detected, then this flag may resolve things.
; sync-freelist=false

; Path to write the admin macaroon for lnd's RPC and REST services if it
; doesn't exist. This can be set if one wishes to store the admin macaroon in a
; distinct location. By default, it is stored within lnd's network directory.
; Applications that are able to read this file, gain admin macaroon access.
; Default:
;   adminmacaroonpath=~/.lnd/data/chain/bitcoin/${network}/admin.macaroon
; Example:
;   adminmacaroonpath=~/.lnd/data/chain/bitcoin/mainnet/admin.macaroon

; Path to write the read-only macaroon for lnd's RPC and REST services if it
; doesn't exist. This can be set if one wishes to store the read-only macaroon
; in a distinct location. The read only macaroon allows users which can read
; the file to access RPCs which don't modify the state of the daemon. By
; default, it is stored within lnd's network directory.
; Default:
;   readonlymacaroonpath=~/.lnd/data/chain/bitcoin/${network}/readonly.macaroon
; Example:
;   readonlymacaroonpath=~/.lnd/data/chain/bitcoin/mainnet/readonly.macaroon

; Path to write the invoice macaroon for lnd's RPC and REST services if it
; doesn't exist. This can be set if one wishes to store the invoice macaroon in
; a distinct location. By default, it is stored within lnd's network directory.
; The invoice macaroon allows users which can read the file to gain read and
; write access to all invoice related RPCs.
; Default:
;   invoicemacaroonpath=~/.lnd/data/chain/bitcoin/${network}/invoice.macaroon
; Example:
;   invoicemacaroonpath=~/.lnd/data/chain/bitcoin/mainnet/invoice.macaroon

; The strategy to use for selecting coins for wallet transactions. Options are
; 'largest' and 'random'.
; coin-selection-strategy=largest

; A period to wait before for closing channels with outgoing htlcs that have
; timed out and are a result of this nodes initiated payments. In addition to
; our current block based deadline, if specified this grace period will also be
; taken into account. Valid time units are {s, m, h}.
; Default:
;   payments-expiration-grace-period=0s
; Example:
;   payments-expiration-grace-period=30s

; Specify the interfaces to listen on for p2p connections. One listen
; address per line.
; Default:
;   listen=:9735
; Example (option can be specified multiple times):
;  All ipv4 on port 9735:
;   listen=0.0.0.0:9735

;  On all ipv4 interfaces on port 9735 and ipv6 localhost port 9736:
;   listen=0.0.0.0:9735
;   listen=[::1]:9736

; Disable listening for incoming p2p connections. This will override all
; listeners.
; nolisten=false

; Specify the interfaces to listen on for gRPC connections. One listen
; address per line.
; Default:
;   rpclisten=localhost:10009
; Example (option can be specified multiple times):
;  On ipv4 localhost port 10009 and ipv6 port 10010:
;   rpclisten=localhost:10009
;   rpclisten=[::1]:10010
;  On an Unix socket:
;   rpclisten=unix:///var/run/lnd/lnd-rpclistener.sock

; Specify the interfaces to listen on for REST connections. One listen
; address per line.
; Default:
;   restlisten=localhost:8080
; Example (option can be specified multiple times):
;  All ipv4 interfaces on port 8080:
;   restlisten=0.0.0.0:8080
;  On ipv4 localhost port 80 and 443:
;   restlisten=localhost:80
;   restlisten=localhost:443
;  On an Unix socket:
;   restlisten=unix:///var/run/lnd-restlistener.sock

; A series of domains to allow cross origin access from. This controls the CORs
; policy of the REST RPC proxy.
; Default:
;   restcors=
; Example (option can be specified multiple times):
;   restcors=https://my-special-site.com

; Adding an external IP will advertise your node to the network. This signals
; that your node is available to accept incoming channels. If you don't wish to
; advertise your node, this value doesn't need to be set. Unless specified
; (with host:port notation), the default port (9735) will be added to the
; address.
; externalip=
;
; Instead of explicitly stating your external IP address, you can also enable
; UPnP or NAT-PMP support on the daemon. Both techniques will be tried and
; require proper hardware support. In order to detect this hardware support,
; `lnd` uses a dependency that retrieves the router's gateway address by using
; different built-in binaries in each platform. Therefore, it is possible that
; we are unable to detect the hardware and `lnd` will exit with an error
; indicating this. This option will automatically retrieve your external IP
; address, even after it has changed in the case of dynamic IPs, and advertise
; it to the network using the ports the daemon is listening on. This does not
; support devices behind multiple NATs.
; nat=false

; Disable REST API.
; norest=false

; Disable TLS for the REST API.
; no-rest-tls=false

; Specify peer(s) to connect to first.
; addpeer=

; The ping interval for REST based WebSocket connections, set to 0 to disable
; sending ping messages from the server side. Valid time units are {s, m, h}.
; ws-ping-interval=30s

; The time we wait for a pong response message on REST based WebSocket
; connections before the connection is closed as inactive. Valid time units are
; {s, m, h}.
; ws-pong-wait=5s

; 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.
; Valid units are {ms, s, m, h}.
; connectiontimeout=2m

; Debug logging level.
; Valid levels are {trace, debug, info, warn, error, critical}
; You may also specify <global-level>,<subsystem>=<level>,<subsystem2>=<level>,...
; to set log level for individual subsystems. Use lncli debuglevel --show to
; list available subsystems.
; Default:
;   debuglevel=info
; Example:
;   debuglevel=debug,PEER=info

; Write CPU profile to the specified file.
; cpuprofile=

; Enable HTTP profiling on given port -- NOTE port must be between 1024 and
; 65536. The profile can be access at: http://localhost:<PORT>/debug/pprof/.
; profile=

; Enable a blocking profile to be obtained from the profiling port. A blocking
; profile can show where goroutines are blocking (stuck on mutexes, I/O, etc).
; This takes a value from 0 to 1, with 0 turning off the setting, and 1 sampling
; every blocking event (it's a rate value).
; blockingprofile=0

; Enable a mutex profile to be obtained from the profiling port. A mutex 
; profile can show where goroutines are blocked on mutexes, and which mutexes
; have high contention.  This takes a value from 0 to 1, with 0 turning off the
; setting, and 1 sampling every mutex event (it's a rate value).
; mutexprofile=0

; 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=false

; The maximum number of incoming pending channels permitted per peer.
; maxpendingchannels=1

; The target location of the channel backup file.
; Default:
;   backupfilepath=~/.lnd/data/chain/bitcoin/${network}/channel.backup
; Example:
;   backupfilepath=~/.lnd/data/chain/bitcoin/mainnet/channel.backup

; The maximum capacity of the block cache in bytes. Increasing this will result
; in more blocks being kept in memory but will increase performance when the
; same block is required multiple times.
; The default value below is 20 MB (1024 * 1024 * 20)
; blockcachesize=20971520

; Optional URL for external fee estimation. If no URL is specified, the method
; for fee estimation will depend on the chosen backend and network. Must be set
; for neutrino on mainnet.
; Default:
;   feeurl=
; Example:
;   feeurl=https://nodes.lightning.computer/fees/v1/btc-fee-estimates.json

; 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=false

; 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=false

; The full path to a file (or pipe/device) that contains the password for
; unlocking the wallet; if set, no unlocking through RPC is possible and lnd
; will exit if no wallet exists or the password is incorrect; if
; wallet-unlock-allow-create is also set then lnd will ignore this flag if no
; wallet exists and allow a wallet to be created through RPC.
; Default:
;   wallet-unlock-password-file=
; Example:
;   wallet-unlock-password-file=/tmp/example.password

; Don't fail with an error if wallet-unlock-password-file is set but no wallet
; exists yet. Not recommended for auto-provisioned or high-security systems
; because the wallet creation RPC is unauthenticated and an attacker could
; inject a seed while lnd is in that state.
; wallet-unlock-allow-create=false

; Removes all transaction history from the on-chain wallet on startup, forcing a
; full chain rescan starting at the wallet's birthday. Implements the same
; functionality as btcwallet's dropwtxmgr command. Should be set to false after
; successful execution to avoid rescanning on every restart of lnd.
; reset-wallet-transactions=false

; The smallest channel size (in satoshis) that we should accept. Incoming
; channels smaller than this will be rejected.
; minchansize=20000

; The largest channel size (in satoshis) that we should accept. Incoming
; channels larger than this will be rejected. For non-Wumbo channels this
; limit remains 16777215 satoshis by default as specified in BOLT-0002.
; For wumbo channels this limit is 1,000,000,000 satoshis (10 BTC).
; Set this config option explicitly to restrict your maximum channel size
; to better align with your risk tolerance
; Default:
;   maxchansize=<see explanations above>
; Example:
;   maxchansize=10000000

; The target number of blocks in which a cooperative close initiated by a remote
; peer should be confirmed. This target is used to estimate the starting fee
; rate that will be used during fee negotiation with the peer. This target is
; also used for cooperative closes initiated locally if the --conf_target for
; the channel closure is not set.
; coop-close-target-confs=6

; The maximum time that is allowed to pass between receiving a channel state
; update and signing the next commitment. Setting this to a longer duration
; allows for more efficient channel operations at the cost of latency. This is
; capped at 1 hour.
; channel-commit-interval=50ms

; The maximum time that is allowed to pass while waiting for the remote party
; to revoke a locally initiated commitment state. Setting this to a longer
; duration if a slow response is expected from the remote party or large
; number of payments are attempted at the same time.
; pending-commit-interval=1m

; The maximum number of channel state updates that is accumulated before signing
; a new commitment.
; channel-commit-batch-size=10

; Keeps persistent record of all failed payment attempts for successfully
; settled payments.
; keep-failed-payment-attempts=false

; Persistently store the final resolution of incoming htlcs.
; store-final-htlc-resolutions=false

; 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 re-enable or cancel a pending disables of the peer's channels
; on the network. 
; chan-enable-timeout=19m

; The duration that must elapse after first detecting that an already active
; channel is actually inactive and sending channel update disabling it to the
; network. The pending disable can be canceled if the peer reconnects and becomes
; stable for chan-enable-timeout before the disable update is sent.
; chan-disable-timeout=20m

; The polling interval between attempts to detect if an active channel has become
; inactive due to its peer going offline.
; chan-status-sample-interval=1m

; Disable queries from the height-hint cache to try to recover channels stuck in
; the pending close state. Disabling height hint queries may cause longer chain
; rescans, resulting in a performance hit. Unset this after channels are unstuck
; so you can get better performance again.
; height-hint-cache-query-disable=false

; The polling interval between historical graph sync attempts. Each historical
; graph sync attempt ensures we reconcile with the remote peer's graph from the
; genesis block. 
; historicalsyncinterval=1h

; If true, will not reply with historical data that matches the range specified
; by a remote peer's gossip_timestamp_filter. Doing so will result in lower
; memory and bandwidth requirements.
; ignore-historical-gossip-filters=false

; If true, lnd will not accept channel opening requests with non-zero push
; amounts. This should prevent accidental pushes to merchant nodes.
; rejectpush=false

; If true, lnd will not forward any HTLCs that are meant as onward payments. This
; option will still allow lnd to send HTLCs and receive HTLCs but lnd won't be
; used as a hop.
; rejecthtlc=false

; If true, all HTLCs will be held until they are handled by an interceptor
; requireinterceptor=false

; If true, lnd will also allow setting positive inbound fees. By default, lnd
; only allows to set negative inbound fees (an inbound "discount") to remain
; backwards compatible with senders whose implementations do not yet support
; inbound fees. Therefore, you should ONLY set this setting if you know what you
; are doing. [experimental]
; accept-positive-inbound-fees=false

; If true, will apply a randomized staggering between 0s and 30s when
; reconnecting to persistent peers on startup. The first 10 reconnections will be
; attempted instantly, regardless of the flag's value
; stagger-initial-reconnect=false

; The maximum number of blocks funds could be locked up for when forwarding
; payments. 
; max-cltv-expiry=2016

; The maximum percentage of total funds that can be allocated to a channel's
; commitment fee. This only applies for the initiator of the channel. Valid
; values are within [0.1, 1]. 
; max-channel-fee-allocation=0.5

; The maximum fee rate in sat/vbyte that will be used for commitments of
; channels of the anchors type. Must be large enough to ensure transaction
; propagation 
; max-commit-fee-rate-anchors=10

; A threshold defining the maximum amount of dust a given channel can have
; after which forwarding and sending dust HTLC's to and from the channel will
; fail. This amount is expressed in satoshis.
; dust-threshold=500000

; If true, lnd will abort committing a migration if it would otherwise have been
; successful. This leaves the database unmodified, and still compatible with the
; previously active version of lnd.
; dry-run-migration=false

; If true, option upfront shutdown script will be enabled. If peers that we open
; channels with support this feature, we will automatically set the script to
; which cooperative closes should be paid out to on channel open. This offers the
; partial protection of a channel peer disconnecting from us if cooperative
; close is attempted with a different script.
; enable-upfront-shutdown=false

; If true, spontaneous payments through keysend will be accepted.
; This is a temporary solution until AMP is implemented which is expected to be soon.
; This option will then become deprecated in favor of AMP.
; accept-keysend=false

; If non-zero, keysend payments are accepted but not immediately settled. If the
; payment isn't settled manually after the specified time, it is canceled
; automatically. [experimental]
; Default:
;   keysend-hold-time=0s
; Example:
;   keysend-hold-time=2s

; If true, spontaneous payments through AMP will be accepted. Payments to AMP
; invoices will be accepted regardless of this setting.
; accept-amp=false

; If true, we'll attempt to garbage collect canceled invoices upon start.
; gc-canceled-invoices-on-startup=false

; If true, we'll delete newly canceled invoices on the fly.
; gc-canceled-invoices-on-the-fly=false

; If true, our node will allow htlc forwards that arrive and depart on the same
; channel.
; allow-circular-route=false

; Time in milliseconds between each release of announcements to the network
; trickledelay=90000

; The number of peers that we should receive new graph updates from. This option
; can be tuned to save bandwidth for light clients or routing nodes. 
; numgraphsyncpeers=3

; The alias your node will use, which can be up to 32 UTF-8 characters in
; length.
; Default:
;   alias=
; Example:
;   alias=My Lightning ☇

; The color of the node in hex format, used to customize node appearance in
; intelligence services.
; color=#3399FF

; The maximum duration that the server will wait before timing out reading
; the headers of an HTTP request.
; http-header-timeout=5s

[prometheus]

; If true, lnd will start the Prometheus exporter. Prometheus flags are
; behind a build/compile flag and are not available by default. lnd must be built
; with the monitoring tag; `make && make install tags=monitoring` to activate them.
; prometheus.enable=false

; Specify the interface to listen on for Prometheus connections.
; Default:
;   prometheus.listen=127.0.0.1:8989
; Example:
;   prometheus.listen=0.0.0.0:8989

; If true, then we'll export additional information that allows users to plot
; the processing latency, and total time spent across each RPC calls+service.
; This generates additional memory load for the Prometheus server, and will end
; up using more disk space over time.
; prometheus.perfhistograms=false


[Bitcoin]

; DEPRECATED: If the Bitcoin chain should be active. This field is now ignored
; since only the Bitcoin chain is supported.
; bitcoin.active=false

; The directory to store the chain's data within.
; bitcoin.chaindir=~/.lnd/data/chain/bitcoin

; Use Bitcoin's main network.
; bitcoin.mainnet=false

; Use Bitcoin's test network.
; bitcoin.testnet=false
;
; Use Bitcoin's simulation test network
; bitcoin.simnet=false

; Use Bitcoin's regression test network
; bitcoin.regtest=false

; Use Bitcoin's signet test network
; bitcoin.signet=false

; Connect to a custom signet network defined by this challenge instead of using
; the global default signet test network -- Can be specified multiple times
; bitcoin.signetchallenge=

; Specify a seed node for the signet network instead of using the global default
; signet network seed nodes
; Default:
;   bitcoin.signetseednode=
; Example:
;   bitcoin.signetseednode=123.45.67.89

; Specify the chain back-end. Options are btcd, bitcoind and neutrino.
;
; NOTE: Please note that switching between a full back-end (btcd/bitcoind) and
; a light back-end (neutrino) is not supported.
; Default:
;   bitcoin.node=btcd
; Example:
;   bitcoin.node=bitcoind
;   bitcoin.node=neutrino

; 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. If this is not set, we
; will scale the value linear to the channel size between 3 and 6. 
; The maximmum value of 6 confs is applied to all channels larger than 
; wumbo size (16777215 sats). The minimum value of 3 is applied to all channels
; smaller than 8388607 sats (16777215 * 3 / 6).
; Default:
;   bitcoin.defaultchanconfs=[3; 6]
; Example:
;   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 linear to the channel size between 144 and 2016. 
; The maximum value of 2016 blocks is applied to all channels larger than 
; wumbo size (16777215). The minimum value of 144 is applied to all channels
; smaller than 1198372 sats (16777215 * 144 / 2016).
; Default:
;   bitcoin.defaultremotedelay=[144; 2016]
; Example:
;   bitcoin.defaultremotedelay=144

; The maximum number of blocks we will limit the wait that our own funds are
; encumbered by in the case when our node unilaterally closes. If a remote peer
; proposes a channel with a delay above this amount, lnd will reject the
; channel.
; bitcoin.maxlocaldelay=2016

; 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=80

; The seed DNS server(s) to use for initial peer discovery. Must be specified as
; a '<primary_dns>[,<soa_primary_dns>]' tuple where the SOA address is needed
; for DNS resolution through Tor but is optional for clearnet users. Multiple
; tuples can be specified, will overwrite the default seed servers.
; The default seed servers are:
; Default:
;  mainnet:
;   bitcoin.dnsseed=nodes.lightning.directory,soa.nodes.lightning.directory
;   bitcoin.dnsseed=lseed.bitcoinstats.com
;  testnet:
;   bitcoin.dnsseed=test.nodes.lightning.directory,soa.nodes.lightning.directory
;
; Example for custom DNS servers:
;   bitcoin.dnsseed=seed1.test.lightning
;   bitcoin.dnsseed=seed2.test.lightning,soa.seed2.test.lightning


[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.
; btcd.rpchost=localhost

; Username for RPC connections to btcd. By default, lnd will attempt to
; automatically obtain the credentials, so this likely won't need to be set
; (other than for simnet mode).
; Default:
;   btcd.rpcuser=
; Example:
;   btcd.rpcuser=kek

; Password for RPC connections to btcd. By default, lnd will attempt to
; automatically obtain the credentials, so this likely won't need to be set
; (other than for simnet mode).
; Default:
;   btcd.rpcpass=
; Example:
;   btcd.rpcpass=kek

; File containing the daemon's certificate file. This only needs to be set if
; the node isn't on the same host as lnd.
; btcd.rpccert=~/.btcd/rpc.cert

; The raw bytes of the daemon's PEM-encoded certificate chain which will be used
; to authenticate the RPC connection. This only needs to be set if the btcd
; node is on a remote host.
; btcd.rawrpccert=


[Bitcoind]

; The base directory that contains the node's data, logs, configuration file,
; etc.
; bitcoind.dir=~/.bitcoin

; Configuration filepath.
; Default:
;   bitcoind.config=
; Example:
;   bitcoind.config=~/.bitcoin/bitcoin.conf

; Authentication cookie file for RPC connections.
; Default:
;   bitcoind.rpccookie=
; Example:
;   bitcoind.rpccookie=~/.bitcoin/.cookie

; 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.
; bitcoind.rpchost=localhost

; Username for RPC connections to bitcoind. By default, lnd will attempt to
; automatically obtain the credentials, so this likely won't need to be set
; (other than for a remote bitcoind instance).
; Default:
;   bitcoind.rpcuser=
; Example:
;   bitcoind.rpcuser=kek

; Password for RPC connections to bitcoind. By default, lnd will attempt to
; automatically obtain the credentials, so this likely won't need to be set
; (other than for a remote bitcoind instance).
; Default:
;   bitcoind.rpcpass=
; Example:
;   bitcoind.rpcpass=kek

; ZMQ socket which sends rawblock and rawtx notifications from bitcoind. By
; default, lnd will attempt to automatically obtain this information, so this
; likely won't need to be set (other than for a remote bitcoind instance).
; Default:
;   bitcoind.zmqpubrawblock=
; Example:
;   bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332

; Default:
;   bitcoind.zmqpubrawtx=
; Example:
;   bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333

; Default:
;   bitcoind.zmqreaddeadline=5s

; Use bitcoind's rpc interface to get block and transaction notifications
; instead of using the zmq interface. Only the rpcpolling option needs to
; be set in order to enable this, the rest of the options can be used to
; change the default values used for this configuration.
; bitcoind.rpcpolling=false

; Default:
;   bitcoind.blockpollinginterval=0s
; Example:
;   bitcoind.blockpollinginterval=1m

; Default:
;   bitcoind.txpollinginterval=0s
; Example:
;   bitcoind.txpollinginterval=30s

; Fee estimate mode for bitcoind. It must be either "ECONOMICAL" or "CONSERVATIVE".
; If unset, the default value is "CONSERVATIVE".
; bitcoind.estimatemode=CONSERVATIVE

; The maximum number of peers lnd will choose from the backend node to retrieve
; pruned blocks from. This only applies to pruned nodes.
; bitcoind.pruned-node-max-peers=4


[neutrino]

; Connect only to the specified peers at startup. This creates a persistent
; connection to a target peer. This is recommended as there aren't many
; 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=

; DEPRECATED: Use top level 'feeurl' option. Optional URL for fee estimation. If
; a URL is not specified, static fees will be used for estimation.
; 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=

; Used to help identify ourselves to other bitcoin peers.
; neutrino.useragentname=neutrino

; Used to help identify ourselves to other bitcoin peers.
; neutrino.useragentversion=0.12.0-beta

; The amount of time to wait before giving up on a transaction broadcast attempt.
; Default:
;   neutrino.broadcasttimeout=0s
; Example:
;   neutrino.broadcasttimeout=5s

; Whether compact filters fetched from the P2P network should be persisted to disk.
; neutrino.persistfilters=false

; Validate every channel in the graph during sync by downloading the containing
; block. This is the inverse of routing.assumechanvalid, meaning that for
; Neutrino the validation is turned off by default for massively increased graph
; sync performance. This speedup comes at the risk of using an unvalidated view
; of the network for routing. Overwrites the value of routing.assumechanvalid if
; Neutrino is used. 
; neutrino.validatechannels=false

[autopilot]

; If the autopilot agent should be active or not. The autopilot agent will
; attempt to automatically open up channels to put your node in an advantageous
; position within the network graph.
; autopilot.active=false

; The maximum number of channels that should be created.
; autopilot.maxchannels=5

; The fraction of total funds that should be committed to automatic channel
; establishment. For example 0.6 means that 60% of the total funds available
; within the wallet should be used to automatically establish channels. The total
; amount of attempted channels will still respect the maxchannels param.
; autopilot.allocation=0.6

; Heuristic to activate, and the weight to give it during scoring. 
; Default:
;   autopilot.heuristic={top_centrality:1}
; Example:
;   autopilot.heuristic={preferential:1}

; The smallest channel that the autopilot agent should create 
; autopilot.minchansize=20000

; The largest channel that the autopilot agent should create 
; autopilot.maxchansize=16777215

; Whether the channels created by the autopilot agent should be private or not.
; Private channels won't be announced to the network.
; autopilot.private=false

; The minimum number of confirmations each of your inputs in funding transactions
; created by the autopilot agent must have. 
; autopilot.minconfs=1

; The confirmation target (in blocks) for channels opened by autopilot.
; autopilot.conftarget=3


[tor]

; Allow outbound and inbound connections to be routed through Tor.
; tor.active=false

; Allow the node to connect to non-onion services directly via clearnet. This
; allows the node operator to use direct connections to peers not running behind
; Tor, thus allowing lower latency and better connection stability.
; WARNING: This option will reveal the source IP address of the node, and should
; be used only if privacy is not a concern.
; tor.skip-proxy-for-clearnet-targets=false

; 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
; between 1024 and 65535.
; Default:
;   tor.socks=localhost:9050
; Example:
;   tor.socks=9050

; The DNS server as IP:PORT that Tor will use for SRV queries - NOTE must have
; TCP resolution enabled. The current active DNS server for Testnet listening is
; nodes.lightning.directory.
; Default:
;   tor.dns=soa.nodes.lightning.directory:53
; Example:
;   tor.dns=nodes.lightning.directory

; Enable Tor stream isolation by randomizing user credentials for each
; connection. With this mode active, each connection will use a new circuit.
; This means that multiple applications (other than lnd) using Tor won't be mixed
; in with lnd's traffic.
;
; This option may not be used while direct connections are enabled, since direct
; connections compromise source IP privacy by default.
; tor.streamisolation=false

; The host:port that Tor is listening on for Tor control connections.
; tor.control=localhost:9051

; IP address that Tor should use as the target of the hidden service.
; 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.
; Default:
;   tor.password=
; Example:
;   tor.password=plsdonthackme

; Automatically set up a v2 onion service to listen for inbound connections.
; tor.v2=false

; Automatically set up a v3 onion service to listen for inbound connections.
; tor.v3=false

; The path to the private key of the onion service being created.
; Default:
;   tor.privatekeypath=
; Example:
;   tor.privatekeypath=/path/to/torkey

; The path to the private key of the watchtower onion service being created.
; Default:
;   tor.watchtowerkeypath=
; Example:
;   tor.watchtowerkeypath=/other/path/

; Instructs lnd to encrypt the private key using the wallet's seed.
; tor.encryptkey=false


[watchtower]

; Enable integrated watchtower listening on :9911 by default.
; watchtower.active=false

; Specify the interfaces to listen on for watchtower client connections. One
; listen address per line. If no port is specified the default port of 9911 will
; be added implicitly.
; Default:
;   watchtower.listen=
; Example (option can be specified multiple times):
; All ipv4 on port 9911:
;   watchtower.listen=0.0.0.0:9911
; On all ipv4 interfaces on port 9911 and ipv6 localhost port 9912:
;   watchtower.listen=0.0.0.0:9911
;   watchtower.listen=[::1]:9912

; Configure the external IP address of your watchtower. Setting this field does
; not have any behavioral changes to the tower or enable any sort of discovery,
; however it will make the full URI (pubkey@host:port) available via
; WatchtowerRPC.GetInfo and `lncli tower info`.
; Default:
;   watchtower.externalip=
; Example:
;   watchtower.externalip=1.2.3.4

; Configure the default watchtower data directory. The default directory is
; data/watchtower relative to the chosen lnddir. This can be useful if one needs
; to move the database to a separate volume with more storage. 
; Default:
;   watchtower.towerdir=~/.lnd/data/watchtower
; Example:
;   watchtower.towerdir=/path/to/towerdir

;   In this example, the database will be stored at: 
;   /path/to/towerdir/bitcoin/<network>/watchtower.db
    
; Duration the watchtower server will wait for messages to be received before
; hanging up on client connections.
; watchtower.readtimeout=15s

; Duration the watchtower server will wait for messages to be written before
; hanging up on client connections
; watchtower.writetimeout=15s


[wtclient]

; Activate Watchtower Client. To get more information or configure watchtowers
; run `lncli wtclient -h`.
; wtclient.active=false

; Specify the fee rate with which justice transactions will be signed. This fee
; rate should be chosen as a maximum fee rate one is willing to pay in order to
; sweep funds if a breach occurs while being offline. The fee rate should be
; specified in sat/vbyte.
; wtclient.sweep-fee-rate=10

; The range over which to choose a random number of blocks to wait after the
; last channel of a session is closed before sending the DeleteSession message
; to the tower server. Note that setting this to a lower value will result in
; faster session cleanup _but_ that this comes along with reduced privacy from
; the tower server.
; wtclient.session-close-range=288

; The maximum number of updates to include in a tower session.
; wtclient.max-updates=1024

; The maximum number of back-up tasks that should be queued in memory before
; overflowing to disk.
; wtclient.max-tasks-in-mem-queue=2000


[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.
; healthcheck.chainbackend.attempts=3

; The amount of time we allow a call to our chain backend to take before we fail
; the attempt. This value must be >= 1s.
; healthcheck.chainbackend.timeout=30s

; The amount of time we should backoff between failed attempts to query chain
; backend. This value must be >= 1s.
; healthcheck.chainbackend.backoff=2m

; The amount of time we should wait between chain backend health checks. This
; value must be >= 1m.
; healthcheck.chainbackend.interval=1m

; The minimum ratio of free disk space to total capacity that we require.
; healthcheck.diskspace.diskrequired=0.1

; The number of times we should attempt to query our available disk space before
; gracefully shutting down. Set this value to 0 to disable this health check.
; Default:
;   healthcheck.diskspace.attempts=0
; Example:
;   healthcheck.diskspace.attempts=2

; The amount of time we allow a query for our available disk space to take
; before we fail the attempt. This value must be >= 1s.
; healthcheck.diskspace.timeout=5s

; The amount of time we should backoff between failed attempts to query
; available disk space. This value must be >= 1s.
; healthcheck.diskspace.backoff=1m

; The amount of time we should wait between disk space health checks. This
; value must be >= 1m.
; healthcheck.diskspace.interval=12h

; The number of times we should attempt to check for certificate expiration before
; gracefully shutting down. Set this value to 0 to disable this health check.
; Default:
;   healthcheck.tls.attempts=
; Example:
;   healthcheck.tls.attempts=2

; The amount of time we allow a query for certificate expiration to take
; before we fail the attempt. This value must be >= 1s.
; healthcheck.tls.timeout=5s

; The amount of time we should backoff between failed attempts to query
; certificate expiration. This value must be >= 1s.
; healthcheck.tls.backoff=1m

; The amount of time we should wait between certificate expiration health checks.
; This value must be >= 1m.
; healthcheck.tls.interval=1m

; The number of times we should attempt to check our tor connection before
; gracefully shutting down. Set this value to 0 to disable this health check.
; Default:
;   healthcheck.torconnection.attempts=
; Example:
;   healthcheck.torconnection.attempts=3

; The amount of time we allow a call to our tor connection to take before we
; fail the attempt. This value must be >= 1s.
; Default:
;   healthcheck.torconnection.timeout=5s

; The amount of time we should backoff between failed attempts to check tor
; connection. This value must be >= 1s.
; healthcheck.torconnection.backoff=1m

; The amount of time we should wait between tor connection health checks. This
; value must be >= 1m.
; healthcheck.torconnection.interval=1m

; The number of times we should attempt to check our remote signer RPC
; connection before gracefully shutting down. Set this value to 0 to disable
; this health check.
; healthcheck.remotesigner.attempts=1

; The amount of time we allow a call to our remote signer RPC connection to take
; before we fail the attempt. This value must be >= 1s.
; healthcheck.remotesigner.timeout=1s

; The amount of time we should backoff between failed attempts to check remote
; signer RPC connection. This value must be >= 1s.
; healthcheck.remotesigner.backoff=30s

; The amount of time we should wait between remote signer RPC connection health
; checks. This value must be >= 1m.
; healthcheck.remotesigner.interval=1m


[signrpc]

; Path to the signer macaroon.
; Default:
;   signrpc.signermacaroonpath=~/.lnd/data/chain/bitcoin/${network}/signer.macaroon
; Example:
;   signrpc.signermacaroonpath=~/.lnd/data/chain/bitcoin/mainnet/signer.macaroon


[walletrpc]

; Path to the wallet kit macaroon.
; Default:
;   walletrpc.walletkitmacaroonpath=~/.lnd/data/chain/bitcoin/${network}/walletkit.macaroon
; Example:
;   walletrpc.walletkitmacaroonpath=~/.lnd/data/chain/bitcoin/mainnet/walletkit.macaroon


[chainrpc]

; Path to the chain notifier macaroon.
; Default:
;   chainrpc.notifiermacaroonpath=~/.lnd/data/chain/bitcoin/${network}/chainnotifier.macaroon
; Example:
;   chainrpc.notifiermacaroonpath=~/.lnd/data/chain/bitcoin/mainnet/chainnotifier.macaroon


[routerrpc]

; Probability estimator used for pathfinding. Two estimators are available:
; apriori and bimodal.
; Note that the bimodal estimator is experimental.
; Default:
;   routerrpc.estimator=apriori
; Example:
;   routerrpc.estimator=bimodal

; Minimum required route success probability to attempt the payment.
; routerrpc.minrtprob=0.01

; The maximum number of payment results that are held on disk by mission control.
; routerrpc.maxmchistory=1000

; The time interval with which the MC store state is flushed to the database.
; routerrpc.mcflushinterval=1s

; Path to the router macaroon.
; Default:
;   routerrpc.routermacaroonpath=~/.lnd/data/chain/bitcoin/${network}/router.macaroon
; Example:
;   routerrpc.routermacaroonpath=~/.lnd/data/chain/bitcoin/mainnet/router.macaroon

; The (virtual) fixed cost in sats of a failed payment attempt .
; routerrpc.attemptcost=100

; The (virtual) proportional cost in ppm of the total amount of a failed payment
; attempt.
; routerrpc.attemptcostppm=1000

; Assumed success probability of a hop in a route when no other information is
; available. 
; routerrpc.apriori.hopprob=0.6

; Weight of the a priori probability in success probability estimation. Valid
; values are in [0, 1]. 
; routerrpc.apriori.weight=0.5

; Defines the duration after which a penalized node or channel is back at 50%
; probability.
; routerrpc.apriori.penaltyhalflife=1h

; Defines the fraction of channels' capacities that is considered liquid in
; pathfinding, a value between [0.75-1.0]. A value of 1.0 disables this
; feature. 
; routerrpc.apriori.capacityfraction=0.9999

; Describes the scale over which channels still have some liquidity left on
; both channel ends. A very low value (compared to typical channel capacities)
; means that we assume unbalanced channels, a very high value means randomly
; balanced channels. Value in msat. 
; routerrpc.bimodal.scale=300000000

; Defines how strongly non-routed channels of forwarders should be taken into
; account for probability estimation. A weight of zero disables this feature.
; Valid values are in [0, 1]. 
; routerrpc.bimodal.nodeweight=0.2

; Defines the information decay of knowledge about previous successes and
; failures in channels. 
; routerrpc.bimodal.decaytime=168h

; If set, the router will send `Payment_INITIATED` for new payments, otherwise
; `Payment_In_FLIGHT` will be sent for compatibility concerns.
; routerrpc.usestatusinitiated=false

; Defines the maximum duration that the probing fee estimation is allowed to
; take.
; routerrpc.fee-estimation-timeout=1m

[workers]

; Maximum number of concurrent read pool workers. This number should be
; proportional to the number of peers. 
; workers.read=100

; Maximum number of concurrent write pool workers. This number should be
; proportional to the number of CPUs on the host. 
; workers.write=8

; Maximum number of concurrent sig pool workers. This number should be
; proportional to the number of CPUs on the host. 
; workers.sig=8


[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. 
; caches.reject-cache-size=50000

; Maximum number of entries contained in the channel cache, which is used to
; reduce memory allocations from gossip queries from peers. Each entry requires
; roughly 2Kb. 
; caches.channel-cache-size=20000

; The duration that the response to DescribeGraph should be cached for. Setting
; the value to zero disables the cache. 
; Default:
;   caches.rpc-graph-cache-duration=
; Example:
;   caches.rpc-graph-cache-duration=10m


[protocol]

; If set, then lnd will create and accept requests for channels larger than 0.16
; BTC
; protocol.wumbo-channels=false

; Set to disable support for anchor commitments. If not set, lnd will use anchor
; channels by default if the remote channel party supports them. Note that lnd
; will require 1 UTXO to be reserved for this channel type if it is enabled.
; (Deprecates the previous "protocol.anchors" setting.)
; protocol.no-anchors=false

; Set to disable support for script enforced lease channel commitments. If not
; set, lnd will accept these channels by default if the remote channel party
; proposes them. Note that lnd will require 1 UTXO to be reserved for this
; channel type if it is enabled.
; protocol.no-script-enforced-lease=false

; Set to enable support for option_scid_alias channels, which can be referred
; to by an alias instead of the confirmed ShortChannelID. Additionally, is
; needed to open zero-conf channels.
; protocol.option-scid-alias=false

; Set to enable support for zero-conf channels. This requires the
; option-scid-alias flag to also be set.
; protocol.zero-conf=false

; Set to disable support for using P2TR addresses (and beyond) for co-op
; closing.
; protocol.no-any-segwit=false

; Set to disable querying our peers for the timestamps of announcement
; messages and to disable responding to such queries
; protocol.no-timestamp-query-option=false

; Set to enable support for the experimental taproot channel type.
; protocol.simple-taproot-chans=false

; Set to disable blinded route forwarding.
; protocol.no-route-blinding=false

[db]

; The selected database backend. The current default backend is "bolt". lnd
; also has experimental support for etcd, a replicated backend, postgres and
; sqlite.
; db.backend=bolt

; The maximum interval the graph database will wait between attempting to flush
; a batch of modifications to disk.
; db.batch-commit-interval=500ms

; Don't use the in-memory graph cache for path finding. Much slower but uses
; less RAM. Can only be used with a bolt database backend.
; db.no-graph-cache=false

; Specify whether the optional migration for pruning old revocation logs
; should be applied. This migration will only save disk space if there are open
; channels prior to lnd@v0.15.0.
; db.prune-revocation=false

; If set to true, then the to-local and to-remote output amount data of revoked
; commitment transactions will not be stored in the revocation log. Note that
; this flag can only be set if --wtclient.active is not set. It is not
; recommended to set this flag if you plan on ever setting wtclient.active in
; the future.
; db.no-rev-log-amt-data=false

; If set to true, native SQL will be used instead of KV emulation for tables
; that support it already. Note: this is an experimental feature, use at your
; own risk.
; db.use-native-sql=false


[etcd]

; Etcd database host.
; Default:
;   db.etcd.host=
; Example:
;   db.etcd.host=localhost:2379

; Etcd database user.
; Default:
;   db.etcd.user=
; Example:
;   db.etcd.user=userscopedforlnd

; Password for the database user.
; Default:
;   db.etcd.pass=
; Example:
;   db.etcd.pass=longandsekrit

; Etcd namespace to use.
; Default:
;   db.etcd.namespace=
; Example:
;   db.etcd.namespace=lnd

; Whether to disable the use of TLS for etcd.
; db.etcd.disabletls=false

; Path to the TLS certificate for etcd RPC.
; Default:
;   db.etcd.cert_file=
; Example:
;   db.etcd.cert_file=/key/path

; Path to the TLS private key for etcd RPC.
; Default:
;   db.etcd.key_file=
; Example:
;   db.etcd.key_file=/a/path

; Whether we intend to skip TLS verification
; db.etcd.insecure_skip_verify=false

; Whether to collect etcd commit stats.
; db.etcd.collect_stats=false

; If set LND will use an embedded etcd instance instead of the external one.
; Useful for testing.
; db.etcd.embedded=false

; If non zero, LND will use this as client port for the embedded etcd instance.
; Default:
;   db.etcd.embedded_client_port=
; Example:
;   db.etcd.embedded_client_port=1234

; If non zero, LND will use this as peer port for the embedded etcd instance.
; Default:
;   db.etcd.embedded_peer_port=
; Example:
;   db.etcd.embedded_peer_port=1235

; If set the embedded etcd instance will log to the specified file. Useful when
; testing with embedded etcd.
; Default:
;   db.etcd.embedded_log_file=
; Example:
;   db.etcd.embedded_log_file=/path/etcd.log

; The maximum message size in bytes that we may send to etcd. Defaults to 32 MiB.
; db.etcd.max_msg_size=33554432


[postgres]

; Postgres connection string.
; Default:
;   db.postgres.dsn=
; Example:
;   db.postgres.dsn=postgres://lnd:lnd@localhost:45432/lnd?sslmode=disable

; Postgres connection timeout. Valid time units are {s, m, h}. Set to zero to
; disable.
; db.postgres.timeout=

; Postgres maximum number of connections. Set to zero for unlimited. It is
; recommended to set a limit that is below the server connection limit.
; Otherwise errors may occur in lnd under high-load conditions.
; Default:
;   db.postgres.maxconnections=50
; Example:
;   db.postgres.maxconnections=

; Whether to skip executing schema migrations.
; db.postgres.skipmigrations=false


[sqlite]

; Sqlite connection timeout. Valid time units are {s, m, h}. Set to zero to
; disable.
; Default:
;   db.sqlite.timeout=
; Example:
;   db.sqlite.timeout=0s

; Maximum number of connections to the sqlite db. Set to zero for unlimited.
; db.sqlite.maxconnections=2

; The maximum amount of time to wait to execute a query if the db is locked.
; db.sqlite.busytimeout=5s

; Raw pragma option pairs to be used when opening the sqlite db. The flag
; can be specified multiple times to set multiple options.
; Default:
;   db.sqlite.pragmaoptions=
; Example (option can be specified multiple times):
;   db.sqlite.pragmaoptions=auto_vacuum=incremental
;   db.sqlite.pragmaoptions=temp_store=MEMORY

; Whether to skip executing schema migrations.
; db.sqlite.skipmigrations=false

[bolt]

; If true, prevents the database from syncing its freelist to disk.
; db.bolt.nofreelistsync=false
;
; Whether the databases used within lnd should automatically be compacted on
; every startup (and if the database has the configured minimum age). This is
; disabled by default because it requires additional disk space to be available
; during the compaction that is freed afterwards. In general compaction leads to
; smaller database files.
; db.bolt.auto-compact=false

; How long ago the last compaction of a database file must be for it to be
; considered for auto compaction again. Can be set to 0 to compact on every
; startup. 
; Default:
;   db.bolt.auto-compact-min-age=168h
; Example:
;   db.bolt.auto-compact-min-age=0

; Specify the timeout to be used when opening the database.
; db.bolt.dbtimeout=1m


[cluster]

; Enables leader election if set.
; cluster.enable-leader-election=false

; Leader elector to use. Valid values: "etcd".
; cluster.leader-elector=etcd

; Election key prefix when using etcd leader elector.
; cluster.etcd-election-prefix=/leader/

; Identifier for this node inside the cluster (used in leader election).
; Defaults to the hostname.
; cluster.id=example.com

; The session TTL in seconds after which a new leader is elected if the old
; leader is shut down, crashed or becomes unreachable.
; cluster.leader-session-ttl=60


[rpcmiddleware]

; Enable the RPC middleware interceptor functionality.
; rpcmiddleware.enable=false

; Time after which a RPC middleware intercept request will time out and return
; an error if it hasn't yet received a response.
; rpcmiddleware.intercepttimeout=2s

; Add the named middleware to the list of mandatory middlewares. All RPC
; requests are blocked/denied if any of the mandatory middlewares is not
; registered. Can be specified multiple times.
; Default:
;   rpcmiddleware.addmandatory=
; Example:
;   rpcmiddleware.addmandatory=my-example-middleware
;   rpcmiddleware.addmandatory=other-mandatory-middleware


[remotesigner]

; Use a remote signer for signing any on-chain related transactions or messages.
; Only recommended if local wallet is initialized as watch-only. Remote signer
; must use the same seed/root key as the local watch-only wallet but must have
; private keys.
; remotesigner.enable=false

; The remote signer's RPC host:port.
; Default:
;   remotesigner.rpchost=
; Example:
;   remotesigner.rpchost=remote.signer.lnd.host:10009

; The macaroon to use for authenticating with the remote signer.
; Default:
;   remotesigner.macaroonpath=
; Example:
;   remotesigner.macaroonpath=/path/to/remote/signer/admin.macaroon

; The TLS certificate to use for establishing the remote signer's identity.
; Default:
;   remotesigner.tlscertpath=
; Example:
;   remotesigner.tlscertpath=/path/to/remote/signer/tls.cert

; The timeout for connecting to and signing requests with the remote signer.
; Valid time units are {s, m, h}.
; remotesigner.timeout=5s

; If a wallet with private key material already exists, migrate it into a
; watch-only wallet on first startup.
; WARNING: This cannot be undone! Make sure you have backed up your seed before
; you use this flag! All private keys will be purged from the wallet after first
; unlock with this flag!
; remotesigner.migrate-wallet-to-watch-only=false


[gossip]

; Specify a set of pinned gossip syncers, which will always be actively syncing
; whenever the corresponding peer is online. A pinned syncer does not count
; towards the configured `numgraphsyncpeers` since pinned syncers are not
; rotated. Configuring a pinned syncer does not ensure a persistent connection
; to the target peer, they will only be pinned if the connection remains active
; via some other mechanism, e.g. having an open channel.
;
; This feature is useful when trying to ensure that a node keeps its
; routing table tightly synchronized with a set of remote peers, e.g. multiple
; lightning nodes operated by the same service.
;
; Each value should be a hex-encoded pubkey of the pinned peer. Multiple pinned
; peers can be specified by setting multiple flags/fields in the config.
; Default:
;   gossip.pinned-syncers=
; Example:
;   gossip.pinned-syncers=pubkey1
;   gossip.pinned-syncers=pubkey2

; The maximum number of updates for a specific channel and direction that lnd
; will accept over the channel update interval.
; gossip.max-channel-update-burst=10
; gossip.channel-update-interval=1m

; The duration to wait before sending the next announcement batch if there are
; multiple. Use a small value if there are a lot announcements and they need to
; be broadcast quickly.
; gossip.sub-batch-delay=5s


[invoices]

; If a hold invoice has accepted htlcs that reach their expiry height and are
; not timed out, the channel holding the htlc is force closed to resolve the
; invoice's htlcs. To prevent force closes, lnd automatically cancels these
; invoices before they reach their expiry height.
;
; Hold expiry delta describes the number of blocks before expiry that these
; invoices should be canceled. Setting this value to 0 will ensure that hold
; invoices can be settled right up until their expiry height, but will result
; in the channel they are on being force closed if they are not resolved before
; expiry.
;
; Lnd goes to chain before the expiry for a htlc is reached so that there is
; time to resolve it on chain. This value needs to be greater than the
; DefaultIncomingBroadcastDelta set by lnd, otherwise the channel will be force
; closed anyway. A warning will be logged on startup if this value is not large
; enough to prevent force closes.
; invoices.holdexpirydelta=12


[routing]

; DEPRECATED: This is now turned on by default for Neutrino (use
; neutrino.validatechannels=true to turn off) and shouldn't be used for any
; other backend!
; routing.assumechanvalid=false

; If set to true, then we'll prune a channel if only a single edge is seen as
; being stale. This results in a more compact channel graph, and also is helpful
; for neutrino nodes as it means they'll only maintain edges where both nodes are
; seen as being live from it's PoV.
; routing.strictgraphpruning=false


[sweeper]

; DEPRECATED: Duration of the sweep batch window. The sweep is held back during
; the batch window to allow more inputs to be added and thereby lower the fee
; per input.
; sweeper.batchwindowduration=30s

; The max fee rate in sat/vb which can be used when sweeping funds. Setting
; this value too low can result in transactions not being confirmed in time,
; causing HTLCs to expire hence potentially losing funds.
; sweeper.maxfeerate=1000

; The conf target to use when sweeping non-time-sensitive outputs. This is
; useful for sweeping outputs that are not time-sensitive, and can be swept at
; a lower fee rate.
; sweeper.nodeadlineconftarget=1008


; An optional config group that's used for the automatic sweep fee estimation.
; The Budget config gives options to limits ones fee exposure when sweeping
; unilateral close outputs and the fee rate calculated from budgets is capped
; at sweeper.maxfeerate. Check the budget config options for more details.
; sweeper.budget=

[sweeper.budget]

; The amount in satoshis to allocate as the budget to pay fees when sweeping
; the to_local output. If set, the budget calculated using the ratio (if set)
; will be capped at this value.
; sweeper.budget.tolocal=

; The ratio of the value in to_local output to allocate as the budget to pay
; fees when sweeping it.
; sweeper.budget.tolocalratio=0.5

; The amount in satoshis to allocate as the budget to pay fees when CPFPing a
; force close tx using the anchor output. If set, the budget calculated using
; the ratio (if set) will be capped at this value.
; sweeper.budget.anchorcpfp=

; The ratio of a special value to allocate as the budget to pay fees when 
; CPFPing a force close tx using the anchor output. The special value is the
; sum of all time-sensitive HTLCs on this commitment subtracted by their
; budgets.
; sweeper.budget.anchorcpfpratio=0.5

; The amount in satoshis to allocate as the budget to pay fees when sweeping a
; time-sensitive (first-level) HTLC. If set, the budget calculated using the
; ratio (if set) will be capped at this value.
; sweeper.budget.deadlinehtlc=

; The ratio of the value in a time-sensitive (first-level) HTLC to allocate as
; the budget to pay fees when sweeping it.
; sweeper.budget.deadlinehtlcratio=0.5

; The amount in satoshis to allocate as the budget to pay fees when sweeping a
; non-time-sensitive (second-level) HTLC. If set, the budget calculated using
; the ratio (if set) will be capped at this value.
; sweeper.budget.nodeadlinehtlc=

; The ratio of the value in a non-time-sensitive (second-level) HTLC to
; allocate as the budget to pay fees when sweeping it.
; sweeper.budget.nodeadlinehtlcratio=0.5

[htlcswitch]

; The timeout value when delivering HTLCs to a channel link. Setting this value
; too small will result in local payment failures if large number of payments
; are sent over a short period.
; htlcswitch.mailboxdeliverytimeout=1m


[grpc]

; How long the server waits on a gRPC stream with no activity before pinging the
; client. Valid time units are {s, m, h}.
; grpc.server-ping-time=1m

; How long the server waits for the response from the client for the keepalive
; ping response. Valid time units are {s, m, h}.
; grpc.server-ping-timeout=20s

; The minimum amount of time the client should wait before sending a keepalive
; ping. Valid time units are {s, m, h}.
; grpc.client-ping-min-wait=5s

; If true, the server allows keepalive pings from the client even when there are
; no active gRPC streams. This might be useful to keep the underlying HTTP/2
; connection open for future requests.
; grpc.client-allow-ping-without-stream=false
