raspiblitz/FAQ.cl.md
2021-10-11 14:49:06 +01:00

32 KiB

C-lightning on the RaspiBlitz FAQ


Common questions about the different Lightning Network implementations

Can LND and C-lightning nodes open channels to each other and route payments?

  • Yes, all BOLT specification compliant implementations can open channels to each other and route payments.

Can I run LND and C-lightning connected to the same node?

  • Yes, both can run parallel on a RaspiBlitz and even have channels witch each other.

Can I convert an LND node to C-lightning (or the opposite)?

  • No, currently there are no tools available to convert between the databases storing the channel states.
    The channels would need to be closed to use the same funds in an other node.

Is there a table to quickly compare LND and C-Lightning?


C-lightning official documentation

Commands and aliases

  • Check if the C-lightning daemon is running:
    sudo systemctl status lightningd
    
  • Follow it's system output for debugging:
    sudo journalctl -fu lightningd
    
  • The logs can be accessed in the menu SYSTEM - CLLOG or with the alias: cllog
  • The frequently used commands are shortened with alisases. Check them with the command alias:
    alias cl='sudo -u bitcoin /usr/local/bin/lightning-cli --conf=/home/bitcoin/.lightning/config'
    alias clconf='sudo nano /home/bitcoin/.lightning/config'
    alias cllog='sudo tail -n 30 -f /home/bitcoin/.lightning/bitcoin/cl.log'
    

Directories

  • All data is stored on the disk in:
    /mnt/hdd/app-data/.lightningd
  • and symlinked to:
    /home/bitcoin/.lightningd

Config file

  • Edit in the menu SYSTEM - CLNCONF or use the alias clconf

Default values

  • on the RaspiBlitz for mainnet
    network=bitcoin
    announce-addr=127.0.0.1:9736
    log-file=cl.log
    log-level=info
    plugin-dir=/home/bitcoin/cln-plugins-enabled
    # Tor settings
    proxy=127.0.0.1:9050
    bind-addr=127.0.0.1:9736
    addr=statictor:127.0.0.1:9051/torport=9736
    always-use-proxy=true
    

All possible config settings

  • can be shown by running:
    lightningd --help
  • Place the settings in the config file without the -- and restart lightningd
    Usage: lightningd 
    A bitcoin lightning daemon (default values shown for network: bitcoin).
    --conf=<file>                                     Specify configuration file
    --lightning-dir=<dir>                             Set base directory: network-specific subdirectory is
                                                  under here (default: "/home/admin/.lightning")
    --network <arg>                                   Select the network parameters (bitcoin, testnet,
                                                  signet, regtest, litecoin or litecoin-testnet)
                                                  (default: bitcoin)
    --mainnet                                         Alias for --network=bitcoin
    --testnet                                         Alias for --network=testnet
    --signet                                          Alias for --network=signet
    --allow-deprecated-apis <arg>                     Enable deprecated options, JSONRPC commands, fields,
                                                  etc. (default: true)
    --rpc-file <arg>                                  Set JSON-RPC socket (or /dev/tty)
                                                  (default: "lightning-rpc")
    --plugin <arg>                                    Add a plugin to be run (can be used multiple times)
    --plugin-dir <arg>                                Add a directory to load plugins from (can be used
                                                  multiple times)
    --clear-plugins                                   Remove all plugins added before this option
    --disable-plugin <arg>                            Disable a particular plugin by filename/name
    --important-plugin <arg>                          Add an important plugin to be run (can be used multiple
                                                  times). Die if the plugin dies.
    --always-use-proxy <arg>                          Use the proxy always (default: false)
    --daemon                                          Run in the background, suppress stdout/stderr
    --wallet <arg>                                    Location of the wallet database.
    --large-channels|--wumbo                          Allow channels larger than 0.16777215 BTC
    --experimental-dual-fund                          experimental: Advertise dual-funding and allow peers to
                                                  establish channels via v2 channel open protocol.
    --experimental-onion-messages                     EXPERIMENTAL: enable send, receive and relay of onion
                                                  messages
    --experimental-offers                             EXPERIMENTAL: enable send and receive of offers (also
                                                  sets experimental-onion-messages)
    --experimental-shutdown-wrong-funding             EXPERIMENTAL: allow shutdown with alternate txids
    --help|-h                                         Print this message.
    --rgb <arg>                                       RRGGBB hex color for node
    --alias <arg>                                     Up to 32-byte alias for node
    --pid-file=<file>                                 Specify pid file
                                                  (default: "/home/admin/.lightning/lightningd-bitcoin.pid")
    --ignore-fee-limits <arg>                         (DANGEROUS) allow peer to set any feerate
                                                  (default: false)
    --watchtime-blocks <arg>                          Blocks before peer can unilaterally spend funds
                                                  (default: 144)
    --max-locktime-blocks <arg>                       Maximum blocks funds may be locked for (default: 2016)
    --funding-confirms <arg>                          Confirmations required for funding transaction
                                                  (default: 3)
    --cltv-delta <arg>                                Number of blocks for cltv_expiry_delta (default: 34)
    --cltv-final <arg>                                Number of blocks for final cltv_expiry (default: 18)
    --commit-time=<millseconds>                       Time after changes before sending out COMMIT
                                                  (default: 10)
    --fee-base <arg>                                  Millisatoshi minimum to charge for HTLC (default: 1000)
    --rescan <arg>                                    Number of blocks to rescan from the current head, or
                                                  absolute blockheight if negative (default: 15)
    --fee-per-satoshi <arg>                           Microsatoshi fee for every satoshi in HTLC
                                                  (default: 10)
    --max-concurrent-htlcs <arg>                      Number of HTLCs one channel can handle concurrently.
                                                  Should be between 1 and 483 (default: 30)
    --min-capacity-sat <arg>                          Minimum capacity in satoshis for accepting channels
                                                  (default: 10000)
    --addr <arg>                                      Set an IP address (v4 or v6) to listen on and announce
                                                  to the network for incoming connections
    --bind-addr <arg>                                 Set an IP address (v4 or v6) to listen on, but not
                                                  announce
    --announce-addr <arg>                             Set an IP address (v4 or v6) or .onion v3 to announce,
                                                  but not listen on
    --offline                                         Start in offline-mode (do not automatically reconnect
                                                  and do not accept incoming connections)
    --autolisten <arg>                                If true, listen on default port and announce if it
                                                  seems to be a public interface (default: true)
    --proxy <arg>                                     Set a socks v5 proxy IP address and port
    --tor-service-password <arg>                      Set a Tor hidden service password
    --experimental-accept-extra-tlv-types <arg>       Comma separated list of extra TLV types to accept.
    --disable-dns                                     Disable DNS lookups of peers
    --encrypted-hsm                                   Set the password to encrypt hsm_secret with. If no
                                                  password is passed through command line, you will be
                                                  prompted to enter it.
    --rpc-file-mode <arg>                             Set the file mode (permissions) for the JSON-RPC socket
                                                  (default: "0600")
    --force-feerates <arg>                            Set testnet/regtest feerates in sats perkw,
                                                  opening/mutual_close/unlateral_close/delayed_to_us/htlc_resolution/penalty:
                                                  if fewer specified, last number applies to remainder
    --subdaemon <arg>                                 Arg specified as SUBDAEMON:PATH. Specifies an alternate
                                                  subdaemon binary. If the supplied path is relative the
                                                  subdaemon binary is found in the working directory.
                                                  This option may be specified multiple times. For
                                                  example, --subdaemon=hsmd:remote_signer would use a
                                                  hypothetical remote signing subdaemon.
    --log-level <arg>                                 log level (io, debug, info, unusual, broken) [:prefix]
                                                  (default: info)
    --log-timestamps <arg>                            prefix log messages with timestamp (default: true)
    --log-prefix <arg>                                log prefix (default: lightningd)
    --log-file=<file>                                 log to file instead of stdout
    --version|-V                                      Print version and exit
    --autocleaninvoice-cycle <arg>                    Perform cleanup of expired invoices every given
                                                  seconds, or do not autoclean if 0
    --autocleaninvoice-expired-by <arg>               If expired invoice autoclean enabled, invoices that
                                                  have expired for at least this given seconds are
                                                  cleaned
    --fetchinvoice-noconnect                          Don't try to connect directly to fetch an invoice.
    --bitcoin-datadir <arg>                           -datadir arg for bitcoin-cli
    --bitcoin-cli <arg>                               bitcoin-cli pathname
    --bitcoin-rpcuser <arg>                           bitcoind RPC username
    --bitcoin-rpcpassword <arg>                       bitcoind RPC password
    --bitcoin-rpcconnect <arg>                        bitcoind RPC host to connect to
    --bitcoin-rpcport <arg>                           bitcoind RPC host's port
    --bitcoin-retry-timeout <arg>                     how long to keep retrying to contact bitcoind before
                                                  fatally exiting
    --commit-fee <arg>                                Percentage of fee to request for their commitment
    --funder-policy <arg>                             Policy to use for dual-funding requests. [match,
                                                  available, fixed]
    --funder-policy-mod <arg>                         Percent to apply policy at (match/available); or amount
                                                  to fund (fixed)
    --funder-min-their-funding <arg>                  Minimum funding peer must open with to activate our
                                                  policy
    --funder-max-their-funding <arg>                  Maximum funding peer may open with to activate our
                                                  policy
    --funder-per-channel-min <arg>                    Minimum funding we'll add to a channel. If we can't
                                                  meet this, we don't fund
    --funder-per-channel-max <arg>                    Maximum funding we'll add to a channel. We cap all
                                                  contributions to this
    --funder-reserve-tank <arg>                       Amount of funds we'll always leave available.
    --funder-fuzz-percent <arg>                       Percent to fuzz the policy contribution by. Defaults to
                                                  5%. Max is 100%
    --funder-fund-probability <arg>                   Percent of requests to consider. Defaults to 100%.
                                                  Setting to 0% will disable dual-funding
    --funder-lease-requests-only <arg>                Only fund lease requests. Defaults to true if channel
                                                  lease rates are being advertised
    --lease-fee-base-msat <arg>                       Channel lease rates, base fee for leased funds, in
                                                  satoshi.
    --lease-fee-basis <arg>                           Channel lease rates, basis charged for leased funds
                                                  (per 10,000 satoshi.)
    --lease-funding-weight <arg>                      Channel lease rates, weight we'll ask opening peer to
                                                  pay for in funding transaction
    --channel-fee-max-base-msat <arg>                 Channel lease rates, maximum channel fee base we'll
                                                  charge for funds routed through a leased channel.
    --channel-fee-max-proportional-thousandths <arg>  Channel lease rates, maximum proportional fee (in
                                                  thousandths, or ppt) we'll charge for funds routed
                                                  through a leased channel. Note: 1ppt = 1,000ppm
    --disable-mpp                                     Disable multi-part payments.
    

Plug-ins

General info

Directories

  • The plugins are installed to:
    /home/bitcoin/cl-plugins-available
  • and symlinked to:
    /home/bitcoin/cl-plugins-enabled
  • All plugins in the /home/bitcoin/cl-plugins-enabled directory are loaded automatically as set in the config file: /home/bitcoin/.lightningd/config

Implemented plugins

  • summary
  • sparko
  • clboss

Add a custom plugin

  • Place the plugin in the /home/bitcoin/cl-plugins-enabled directory
  • Make sure it is owned by the bitcoin user and is executable:
    sudo chown bitcoin:bitcoin /home/bitcoin/cl-plugins-enabled/PLUGIN_NAME
    sudo chmod +x /home/bitcoin/cl-plugins-enabled/PLUGIN_NAME
    
  • start with
    lightnign-cli plugin start /home/bitcoin/cl-plugins-enabled/PLUGIN_NAME
    
  • or to load it automatically on restart:
    sudo systemctl restart lightningd
    
    From the directory /home/bitcoin/cl-plugins-enabled it will load auomatically after restarts.
  • To just load it run it once store in (and start from):
    /home/bitcoin/cl-plugins-available/

CLBOSS

A plugin for automatic LN node management.
CLBOSS only requires to have funds deposited to the onchain wallet of C-lightning. The recommended amount to start is ~ 10 million satoshis (0.1 BTC).

It does automatically:

  • generate outbound capacity - opens channels
  • generate inbound capacity - submarine swaps through the boltz.exchange API
  • aware of onchain fees and mempool through c-lightning and makes transactions when fees are low
  • manages rebalancing - performs probing
  • closes bad channels (inactive or low traffic) - this function needs to activated manually

Overall it is a tool which makes users able to send and receive lightning payments with minimal interaction, basically setting up a routing node by itself.

The transactions made by CLBOSS does cost money and running it requires a fair amount of trust in the (fully open-source - MIT) code. Neither the CLBOSS nor the RaspiBlitz developers can take resposibility for lost sats, use at your own discretion!

Feeadjuster

  • Install:

  • to set the default fees in the config add:

    fee-base=BASEFEE_IN_MILLISATS
    fee-per-satoshi=PPM_FEE_IN_SATS
    
  • more options for the feeadjuster to be set in the c-lightning config can be seen in the code:

    plugin.add_option(
        "feeadjuster-deactivate-fuzz",
        False,
        "Deactivate update threshold randomization and hysterisis.",
        "flag"
    )
    plugin.add_option(
        "feeadjuster-deactivate-fee-update",
        False,
        "Deactivate automatic fee updates for forward events.",
        "flag"
    )
    plugin.add_option(
        "feeadjuster-threshold",
        "0.05",
        "Relative channel balance delta at which to trigger an update. Default 0.05 means 5%. "
        "Note: it's also fuzzed by 1.5%",
        "string"
    )
    plugin.add_option(
        "feeadjuster-threshold-abs",
        "0.001btc",
        "Absolute channel balance delta at which to always trigger an update. "
        "Note: it's also fuzzed by 1.5%",
        "string"
    )
    plugin.add_option(
        "feeadjuster-enough-liquidity",
        "0msat",
        "Beyond this liquidity do not adjust fees. "
        "This also modifies the fee curve to achieve having this amount of liquidity. "
        "Default: '0msat' (turned off).",
        "string"
    )
    plugin.add_option(
        "feeadjuster-adjustment-method",
        "default",
        "Adjustment method to calculate channel fee"
        "Can be 'default', 'soft' for less difference or 'hard' for higher difference"
        "string"
    )
    plugin.add_option(
        "feeadjuster-imbalance",
        "0.5",
        "Ratio at which channel imbalance the feeadjuster should start acting. "
        "Default: 0.5 (always). Set higher or lower values to limit feeadjuster's "
        "activity to more imbalanced channels. "
        "E.g. 0.3 for '70/30'% or 0.6 for '40/60'%.",
        "string"
    )
    plugin.add_option(
        "feeadjuster-feestrategy",
        "global",
        "Sets the per channel fee selection strategy. "
        "Can be 'global' to use global config or default values, "
        "or 'median' to use the median fees from peers of peer "
        "Default: 'global'.",
        "string"
    
  • start the feeadjuster

    cl plugin start /home/bitcoin/cl-plugins-available/plugins/feeadjuster/feeadjuster.py
    
  • stop (best to run only periodically)

    cl plugin stop /home/bitcoin/cl-plugins-available/plugins/feeadjuster/feeadjuster.py
    
  • Can use menu - CL - SUEZ to visualize the channel balances and fee settings

  • check the list of base fees

    cl listpeers | grep fee_base_msat
    
  • check the list of proportional fees

    cl listpeers | grep fee_proportional_millionths
    
  • set the fees to the defaults

    cl setchannelfee all
    

Dual funded channels

Reading

Setting up

  • activate the feature on your node:
    Type: clconf or use the menu SYSTEM - CLCONF.
    Add the line:

    experimental-dual-fund    
    

    Save and restart C-lightning.

  • set up a liquidity ad:

    lightning-cli funderupdate -k policy=match policy_mod=100
    

    or set in the config for example - see the meaning of each line in https://medium.com/blockstream/setting-up-liquidity-ads-in-c-lightning-54e4c59c091d :

    experimental-dual-fund
    funder-policy=match
    funder-policy-mod=100
    lease-fee-base-msat=500sat
    lease-fee-basis=50
    channel-fee-max-base-msat=100sat
    channel-fee-max-proportional-thousandths=2
    
  • check the settings used currently on your node:

    lightning-cli funderupdate
    
  • check your advertised settings (needs some minutes to appear):

    lightning-cli listnodes $(lightning-cli getinfo | jq .id)
    

Open a dual funded channel

  • check if a node has onchain liquidity on offer:

    lightning-cli listnodes nodeid
    

    Example:

    lightning-cli listnodes 02cca6c5c966fcf61d121e3a70e03a1cd9eeeea024b26ea666ce974d43b242e636
    
  • list all nodes known in the graph with active offers:

    lightning-cli listnodes | grep option_will_fund -B20 -A7
    
  • note the node id and compact_lease

  • connect to the node

    lightning-cli connect nodeID@IP_or.onion
    

Fundchannel syntax

  • the amount is the own funds in the wallet contributed
    use equal amounts to have a balanced channel from start
    the amounts can be specified in sat or btc

    lightning-cli fundchannel -k id=NODE_ID amount=OWN_AMOUNTsat request_amt=PEER_CONTRIBUTION_AMOUNTsat compact_lease=COMPACT_LEASE
    

    It can fail if the offer changed or there are not enough funds available on either side.

  • open a dual funded channel with a chosen utxo and miner feerate
    list the utxo-s with lightning-cli listfunds, can list multiple
    the feerate is in perkb by default, e.g. use 1000 for 1 sat/byte

    lightning-cli fundchannel feerate=PERKB_FEERATE utxos='["TRANSACTION_ID:INDDEX_NUMBER"]' -kid=NODE_ID amount=OWN_AMOUNTsat request_amt=PEER_CONTRIBUTION_AMOUNTsat compact_lease=COMPACT_LEASE
    

Offers

  • Details at bolt12.org

  • Create an offer to receive payments:
    https://lightning.readthedocs.io/lightning-offer.7.html

    lightning-cli offer amount description [vendor] [label] [quantity_min] [quantity_max] [absolute_expiry] [recurrence] [recurrence_base] [recurrence_paywindow] [recurrence_limit] [single_use]
    
  • Example:
    Create a reusable offer which can be paid with any amount for LN tips using a fixed string.

    lightning-cli offer any tip
    
  • Create an offer to send payments:
    https://lightning.readthedocs.io/lightning-offerout.7.html

    lightning-cli offerout amount description [vendor] [label] [absolute_expiry] [refund_for]
    
  • Fetch an invoice to pay an offer:
    https://lightning.readthedocs.io/lightning-fetchinvoice.7.html
    Will need at least one peer which supports onion the messages. For example:

    lightning-cli connect 024b9a1fa8e006f1e3937f65f66c408e6da8e1ca728ea43222a7381df1cc449605@128.199.202.168:9735
    
  • Then use the command to fetch the BOLT12 invoice:

    lightning-cli fetchinvoice offer [msatoshi] [quantity] [recurrence_counter] [recurrence_start] [recurrence_label] [timeout] [payer_note]
    
  • decode a BOLT12 invoice:

    lightning-cli decode bolt12_invoice
    
  • pay a a BOLT12 invoice: Will need to pay through a peer which supports the onion messages which means you need at least one channel with such a node.

    lightning-cli pay bolt12_invoice
    
  • see if there is a new invoice is paid with:

    lightning-cli listinvoices
    

    The pay_index will increase as the offer gets reused.

About the feature bits

Testnets

  • for testnet and signet there are prefixes t and s used for the aliases, daemons and their own plugin directory names.
  • Testnet
    # alias: 
    tcl | tclconf | tcllog
    
    # daemon service name: 
    tlightningd
    
    # config file:
    /home/bitcoin/.lightningd/testnet/config
    
    # plugin directory:
    /home/bitcoin/tcl-plugins-enabled
    
  • Signet
    # aliases:
    scl | sclconf | scllog
    
    # daemon service name: 
    slightningd
    
    # config file:
    /home/bitcoin/.lightningd/signet/config
    
    # plugin directory:
    /home/bitcoin/scl-plugins-enabled
    

Backups

Seed

How to display the hsm_secret in a human-readable format?

  • If there is no seed available it isbest is to save the hsm_secret as a file with scp. To display as text:
    sudo cat /home/bitcoin/.lightning/bitcoin/hsm_secret | xxd
    

Channel database

Recovery

Script file help list

# generate a list of help texts on a RaspiBlitz:
cd /home/admin/config.scripts/
ls cl*.sh > clScriptList.txt
sed -i "s#cl#./cl#g" clScriptList.txt
sed -i "s#.sh#.sh -h#g" clScriptList.txt
bash -x clScriptList.txt
rm clScriptList.txt
+ ./cl.backup.sh -h

---------------------------------------------------
CL RESCUE FILE (tar.gz of complete cl directory)
---------------------------------------------------
cl.backup.sh cl-export
cl.backup.sh cl-export-gui
cl.backup.sh cl-import [file]
cl.backup.sh cl-import-gui [setup|production] [?resultfile]
---------------------------------------------------
SEED WORDS
---------------------------------------------------
cl.backup.sh seed-export-gui [lndseeddata]
cl.backup.sh seed-import-gui [resultfile]

+ ./cl.hsmtool.sh -h

Create new wallet or import seed
Unlock/lock, encrypt, decrypt, set autounlock or change password for the hsm_secret

Usage:
Create new wallet:
cl.hsmtool.sh [new] [mainnet|testnet|signet] [?seedPassword]
cl.hsmtool.sh [new-force] [mainnet|testnet|signet] [?seedPassword]
There will be no seedPassword(passphrase) used by default
new-force will delete any old wallet and will work without dialog

cl.hsmtool.sh [seed] [mainnet|testnet|signet] ["space-separated-seed-words"] [?seedPassword]
cl.hsmtool.sh [seed-force] [mainnet|testnet|signet] ["space-separated-seed-words"] [?seedPassword]
The new hsm_secret will be not encrypted if no NewPassword is given
seed-force will delete any old wallet and will work without dialog

cl.hsmtool.sh [unlock|lock] <mainnet|testnet|signet>
cl.hsmtool.sh [encrypt|decrypt] <mainnet|testnet|signet>
cl.hsmtool.sh [autounlock-on|autounlock-off] <mainnet|testnet|signet>

cl.hsmtool.sh [change-password] <mainnet|testnet|signet> <NewPassword>

+ ./cl.install-service.sh -h

Script to set up or update the C-lightning systemd service
Usage:
/home/admin/config.scripts/cl.install-service.sh <mainnet|testnet|signet>

+ ./cl.install.sh -h

C-lightning install script
The default version is: v0.10.1
Setting up on mainnet unless otherwise specified
mainnet / testnet / signet instances can run parallel

Usage:
cl.install.sh on <mainnet|testnet|signet>
cl.install.sh off <mainnet|testnet|signet> <purge>
cl.install.sh [update <version>|testPR <PRnumber>]
cl.install.sh display-seed <mainnet|testnet|signet>

+ ./cl-plugin.backup.sh -h

Install the backup plugin for C-lightning
Replicates the lightningd.sqlite3 database on the SDcard

Usage:
cl-plugin.backup.sh [on|off] [testnet|mainnet|signet]
cl-plugin.backup.sh [restore] [testnet|mainnet|signet] [force]
cl-plugin.backup.sh [backup-compact] [testnet|mainnet|signet]

https://github.com/lightningd/plugins/tree/master/backup

+ ./cl-plugin.clboss.sh -h

Install or remove the CLBOSS C-lightning plugin
version: v0.10
Usage:
cl-plugin.clboss.sh [on|off] [testnet|mainnet|signet]

+ ./cl-plugin.sparko.sh -h

Install, remove, connect or get info about the Sparko plugin for C-lightning
version: v2.7
Usage:
cl-plugin.sparko.sh [on|off|menu|connect] [testnet|mainnet|signet]

+ ./cl-plugin.standard-python.sh -h

Install and show the output of the chosen plugin for C-lightning
Usage:
cl-plugin.standard-python.sh on [plugin-name] [testnet|mainnet|signet] [runonce]

tested plugins:
summary | helpme | feeadjuster

find more at:
https://github.com/lightningd/plugins

+ ./cl-plugin.summary.sh -h

Install and show the output if the summary plugin for C-lightning
Usage:
cl-plugin.summary.sh [testnet|mainnet|signet] [runonce]

+ ./cl.rest.sh -h

C-lightning-REST install script
The default version is: v0.5.1
mainnet | testnet | signet instances can run parallel
The same macaroon and certs will be used for the parallel networks

Usage:
cl.rest.sh [on|off|connect] <mainnet|testnet|signet>

+ ./cl.setname.sh -h

Config script to set the alias of the C-lightning node
cl.setname.sh [mainnet|testnet|signet] [?newName]