DocumentacióLightningClient Lightning

Client Lightning

Hem configurat LND, la xarxa Lightning Daemon de Lightning Labs.

Preparacions

Creeu l’usuari/grup lnd

$SU addgroup -S lnd
$SU adduser \
    -S \
    -D \
    -H \
    -h /var/lib/lnd \
    -s /sbin/nologin \
    -G lnd \
    -g lnd \
    lnd

Afegiu l’usuari lnd al grup bitcoin

$SU adduser lnd bitcoin

Afegiu també l’usuari satoshi al grup lnd

$SU adduser satoshi lnd && exec su -l satoshi

Afegiu l’usuari lnd al grup tor

Això permet a l’usuari lnd utilitzar el port de control i configurar Tor directament

$SU adduser lnd tor

Creeu un enllaç simbòlic lnd a la casa de satoshi

ln -s /var/lib/lnd "$HOME/.lnd"

Instal·lació

La instal·lació de LND és senzilla, però l’aplicació és força potent i capaç de coses que no s’expliquen aquí. Consulteu el seu repositori GitHub per a trobar informació sobre el seu projecte de codi obert i Lightning en general.

Descarregueu els binaris

Descarregarem, verificarem i instal·larem LND.

  • Descarregueu l’aplicació i el fitxer de suma de comprovació (.txt) amb la seva signatura (.sig) i timestamp (.ots)
cd /tmp
VERSION=0.18.3-beta
wget https://github.com/lightningnetwork/lnd/releases/download/v$VERSION/lnd-linux-amd64-v$VERSION.tar.gz \
    https://github.com/lightningnetwork/lnd/releases/download/v$VERSION/manifest-v$VERSION.txt \
    https://github.com/lightningnetwork/lnd/releases/download/v$VERSION/manifest-roasbeef-v$VERSION.sig \
    https://github.com/lightningnetwork/lnd/releases/download/v$VERSION/manifest-roasbeef-v$VERSION.sig.ots \
    https://raw.githubusercontent.com/lightningnetwork/lnd/master/sample-lnd.conf

Comprovació de la suma de comprovació

  • Verifiqueu la suma de comprovació signat contra la suma de comprovació real de la vostra descàrrega
grep lnd-linux-amd64-v$VERSION.tar.gz manifest-v$VERSION.txt | sha256sum -c
output
lnd-linux-amd64-v0.17.4-beta.tar.gz: OK

Comprovació de la signatura

Ara que hem comprovat la integritat del binari descarregat, hem de comprovar l’autenticitat del fitxer manifest que acabem d’utilitzar, a partir de la seva signatura.

  • Instal·leu gnupg
$SU apk add gnupg
  • Obteniu la clau pública del desenvolupador de LND que va signar el fitxer manifest; i afegiu-lo al vostre clauer de GPG
wget -qO- \
    https://raw.githubusercontent.com/lightningnetwork/lnd/master/scripts/keys/roasbeef.asc |\
    gpg --import
output
[...]
gpg: key 372CBD7633C61696: public key "Olaoluwa Osuntokun <laolu32@gmail.com>" imported
[...]
  • Verifiqueu la signatura del fitxer de text que conté la suma de comprovació per a l’aplicació
gpg --verify manifest-roasbeef-v$VERSION.sig manifest-v$VERSION.txt
output
gpg: Signature made Tue Feb  6 20:39:45 2024 CET
gpg:                using RSA key 60A1FA7DA5BFF08BDCBBE7903BBD59E99B280306
gpg: Good signature from "Olaoluwa Osuntokun <laolu32@gmail.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: E4D8 5299 674B 2D31 FAA1  892E 372C BD76 33C6 1696
     Subkey fingerprint: 60A1 FA7D A5BF F08B DCBB  E790 3BBD 59E9 9B28 0306

Comprovació de la marca de temps

Podem també comprovar que el fitxer del manifest existia al voltant de la data de llançament utilitzant la seva data i hora de creació.

  • Verifiquem que la data del segell de temps del fitxer coincideix amb la data de llançament.
ots --no-cache verify manifest-roasbeef-v$VERSION.sig.ots -f manifest-roasbeef-v$VERSION.sig
output
[...]
Success! Bitcoin block 829257 attests existence as of 2024-02-06 CET
  • Comprovem que la data del segell de temps és propera a la data de llançament del binari LND.

Instal·lació

Havent verificat la integritat i autenticitat del binari de llançament, podem procedir a instal·lar-lo de forma segura!

  • Instal·lar LND
$SU tar xzf lnd-linux-amd64-v$VERSION.tar.gz -C /usr/bin --strip-components=1
$SU install -D -m 0660 -o lnd -g lnd ./sample-lnd.conf /etc/lnd/lnd.conf
lnd --version
output
lnd version 0.17.4-beta commit=v0.17.4-beta

Configuració

  • Modifica/descomenta aquestes línies. Desa i surt.
$SU $EDITOR /etc/lnd/lnd.conf
/etc/lnd/lnd.conf
[...]
tlsautorefresh=true
[...]
tlsdisableautofill=true
[...]
listen=127.0.0.1
[...]
debuglevel=info
[...]
maxpendingchannels=5
[...]
wallet-unlock-password-file=/etc/lnd/passwd.txt
[...]
wallet-unlock-allow-create=true
[...]
minchansize=100000
[...]
coop-close-target-confs=24
[...]
ignore-historical-gossip-filters=1
[...]
stagger-initial-reconnect=true
[...]
accept-keysend=true
[...]
accept-amp=true
[...]
gc-canceled-invoices-on-startup=true
[...]
gc-canceled-invoices-on-the-fly=true
[...]
alias=YOUR_FANCY_ALIAS
[...]
bitcoin.active=true
[...]
bitcoin.chaindir=/var/lib/lnd/chain/bitcoin
[...]
bitcoin.mainnet=true
[...]
bitcoin.node=bitcoind
[...]
bitcoin.basefee=1000
[...]
bitcoin.feerate=1
[...]
bitcoind.dir=/var/lib/bitcoind
[...]
bitcoind.config=/etc/bitcoin/bitcoin.conf
[...]
bitcoind.rpccookie=/var/lib/bitcoind/.cookie
[...]
bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332
[...]
bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333
[...]
tor.active=true
[...]
tor.streamisolation=true
[...]
tor.v3=true
[...]
watchtower.active=true
[...]
wtclient.active=true
[...]
protocol.wumbo-channels=true
[...]
protocol.simple-taproot-chans=true
[...]
db.bolt.auto-compact=true
[...]
db.bolt.auto-compact-min-age=168h
[...]
Dispositius de baix rendiment
/etc/lnd/lnd.conf
[...]
; watchtower.active=true
[...]
💡

Consulta la configuració de mostra de LND al navegador web i visita el lloc de Gestió del Node Lightning de Openoms per aprendre’n més.

Inici automàtic a l’arrencada

Ara, configurem LND perquè s’iniciï automàticament en e l’arrencada del sistema.

  • Crea la unitat init.d de LND amb el següent contingut. Desa i surt.
$SU $EDITOR /etc/init.d/lnd
/etc/init.d/lnd
#!/sbin/openrc-run
 
: ${LND_CONFIGFILE:=/etc/lnd/lnd.conf}
: ${LND_PASSWDFILE:=/etc/lnd/passwd.txt}
: ${LND_DATADIR:=/var/lib/lnd}
: ${LND_LOGDIR:=/var/log/lnd}
: ${LND_USER:=lnd}
: ${LND_GROUP:=lnd}
: ${LND_BIN:=/usr/bin/lnd}
: ${LND_OPTS=${LND_OPTS}}
: ${LND_SIGTERM_TIMEOUT:=600}
 
LND_PIDDIR="/run/lnd"
 
name="LND"
description="Lightning Network Daemon"
 
required_files="${LND_CONFIGFILE}"
pidfile="${LND_PIDDIR}/${SVCNAME}.pid"
retry="${LND_SIGTERM_TIMEOUT}"
 
command="${LND_BIN}"
command_args="--lnddir=${LND_DATADIR}
              --configfile=${LND_CONFIGFILE}
              ${LND_OPTS}"
command_user="${LND_USER}:${LND_GROUP}"
command_background="true"
 
depend() {
    need bitcoind
    checkdepend tor.active tor
}
 
checkdepend() {
    if grep -qs "^${1}=" "${LND_CONFIGFILE}"; then
        need "${2:-$1}"
    fi
}
 
start_pre() {
    checkpath --file      --mode 0660 --owner "${command_user}" "${LND_CONFIGFILE}"
    checkpath --file      --mode 0600 --owner "${command_user}" "${LND_PASSWDFILE}"
    checkpath --directory --mode 0750 --owner "${command_user}" "${LND_DATADIR}"
    checkpath --directory --mode 0755 --owner "${command_user}" "${LND_LOGDIR}"
    checkpath --directory --mode 0755 --owner "${command_user}" "${LND_PIDDIR}"
 
    [ -e "${LND_DATADIR}/logs" ] || ln -s "${LND_LOGDIR}" "${LND_DATADIR}/logs"
 
    checkconfig
}
 
start_post() {
    chmod -R u=rwX,g=rX,o= "${LND_DATADIR}" "${LND_LOGDIR}"
}
 
checkconfig() {
    if ! grep -qs '^bitcoind.rpccookie=' "${LND_CONFIGFILE}"
    then
        eerror ""
        eerror "ERROR: You must set a bitcoind.rpccookie= path to run LND."
        eerror "The setting must appear in ${LND_CONFIGFILE}"
        eerror ""
        return 1
    fi
}
  • Habilita el permís d’execució
$SU chmod +x /etc/init.d/lnd

LND en acció

Contrasenya de la cartera

LND inclou una cartera de Bitcoin que gestiona les vostres monedes on-chain i Lightning. Està protegida per contrasenya i s’ha de desbloquejar quan s’inicia LND. Això crea el dilema que o bé desbloquegeu manualment LND després de cada reinici del vostre ordinador, o bé emmagatzemeu la contrasenya en algun lloc del node.

Per a aquesta configuració inicial, triem el camí fàcil: emmagatzemem la contrasenya en un fitxer que permet a LND desbloquejar la cartera automàticament. Aquesta no és la configuració més segura, però la podeu millorar més endavant si voleu. Per posar-ho en perspectiva: altres implementacions Lightning com c-lightning o Eclair ni tan sols tenen una contrasenya.

  • Creeu un fitxer de text i introduïu la vostra contrasenya [C] de la cartera de LND. Desa i surt.
$EDITOR /etc/lnd/passwd.txt

Per millorar la seguretat de la vostra cartera, consulteu aquests mètodes més avançats:

Habilitar i iniciar LND

$SU rc-update add lnd
$SU rc-service lnd start
 

Configuració de la cartera

Un cop iniciat LND, el procés espera que creem la cartera integrada de Bitcoin.

  • Creeu la cartera de LND
lncli create

Introduïu la vostra contrasenya [C] de la cartera com a contrasenya de la cartera (ha de ser exactament la mateixa que heu emmagatzemat a passwd.txt). Per crear una nova cartera, seleccioneu n quan se us pregunti si teniu una llavor de xifrat existent. Simplement premeu enter si se us pregunta per una frase de contrasenya addicional, a menys que sàpigues el que fas. Es crea una nova llavor de xifrat que consisteix en 24 paraules.

output
Input wallet password:
Confirm password:
 
Do you have an existing cipher seed mnemonic or extended master root key you want to use?
Enter 'y' to use an existing cipher seed mnemonic, 'x' to use an extended master root key
or 'n' to create a new seed (Enter y/x/n): n
 
Your cipher seed can optionally be encrypted.
Input your passphrase if you wish to encrypt it (or press enter to proceed without a cipher seed passphrase):
 
Generating fresh cipher seed...
 
!!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!

---------------BEGIN LND CIPHER SEED---------------
 1. [REDACTED]   2. [REDACTED]   3. [REDACTED]   4. [REDACTED]
 5. [REDACTED]   6. [REDACTED]   7. [REDACTED]   8. [REDACTED]
 9. [REDACTED]  10. [REDACTED]  11. [REDACTED]  12. [REDACTED]
13. [REDACTED]  14. [REDACTED]  15. [REDACTED]  16. [REDACTED]
17. [REDACTED]  18. [REDACTED]  19. [REDACTED]  20. [REDACTED]
21. [REDACTED]  22. [REDACTED]  23. [REDACTED]  24. [REDACTED]
---------------END LND CIPHER SEED-----------------
 
!!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!
 
lnd successfully initialized!

Aquests 24 mots són tot el que necessites per restaurar la cartera Bitcoin a la cadena. No obstant això, l’estat actual dels teus canals no es pot recrear a partir d’aquesta llavor. Per a això, la Static Channel Backup emmagatzemada a /var/lib/lnd/data/chain/**/**/channel.backup s’actualitza contínuament.

⚠️

Aquesta informació ha de mantenir-se en secret en tot moment.

  • Escriu aquests 24 mots manualment en un paper i emmagatzema’l en un lloc segur.

Pots utilitzar un simple paper, escriure’ls a la targeta de còpia de seguretat de SeedSigner personalitzada, o fins i tot gravar les paraules de la llavor en metall. Aquest paper és tot el que un atacant necessita per buidar completament la teva cartera a la cadena!

No ho emmagatzemis en un ordinador.

No facis una foto amb el teu telèfon mòbil.

Aquesta informació mai ha d’emmagatzemar-se en cap forma digital.

Reinicia LND

$SU rc-service lnd restart
  • Comprova el registre per veure la sortida de LND. Surts amb Ctrl-C
tail -f /var/log/lnd/**/**/lnd.log

🎉 Ara el teu node Lightning està llest. Aquest també és el punt de no retorn. Fins ara, simplement podries començar de nou. Un cop enviïs bitcoins reals al teu Microbolt, tindras exposició.

Finançament del vostre node Lightning
  • Genera una nova adreça Bitcoin (p2tr = taproot) per rebre fons a la cadena i envia una petita quantitat de Bitcoin a aquesta des de qualsevol cartera de la teva elecció.

newaddress

lncli newaddress p2tr
example output
{
    "address": "bc1...[REDACTED]..."
}
  • Comprova el saldo de la teva cartera LND

walletbalance

lncli walletbalance
example output
{
    "total_balance": "0",
    "confirmed_balance": "0",
    "unconfirmed_balance": "0",
    "locked_balance": "0",
    "reserved_balance_anchor_chan": "0",
    "account_balance": {
        "default": {
            "confirmed_balance": "0",
            "unconfirmed_balance": "0"
        }
    }
}

Tan aviat com es mina la teva transacció de finançament (1 confirmació), LND mostrarà el seu import com “confirmed_balance”.

💡

Si vols obrir uns quants canals, potser voldràs enviar algunes transaccions. Si només tens una UTXO, hauràs d’esperar que el canvi torni a la teva cartera després de cada nova obertura de canal.

Obertura de canals

Tot i que LND disposa d’un “autopilot” opcional, obrim manualment alguns canals.

Recomanem anar a Amboss.Space o 1ML.com i buscar una combinació de nodes grans i petits amb Node Ranks decent. Una altra gran manera de trobar companys per configurar canals de manera col·laborativa és LightningNetwork+.

Per connectar-se a un node remot, necessites la seva URI que té el format <pubkey>@host:

  • la <pubkey> és només un nombre hexadecimal llarg, com ara 03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f
  • el host pot ser un nom de domini, una adreça IP o una adreça onion de Tor, seguida del número de port (normalment :9735)

Agafa tota la URI sobre el gran codi QR i utilitza-la com segueix (utilitzarem el node ACINQ com a exemple):

  • Connecta’t al node remot, amb la URI completa.

connect

lncli connect 03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f@34.239.230.56:9735
  • Obre un canal utilitzant només la <pubkey> (és a dir, la part de la URI abans de l’@) i la capacitat del canal en satoshis.

openchannel

Un Bitcoin equival a 100 milions de satoshis. La comanda té un estimador de comissions integrat, però per evitar pagar comissions massa altes, pots controlar manualment les comissions per a la transacció de finançament utilitzant l’argument sat_per_vbyte de la següent manera (per seleccionar la comissió adequada, en sats/vB, consulta mempool.space)

lncli openchannel --sat_per_vbyte 8 03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f 100000 0
  • Comprova els teus fons, tant a la cartera a la cadena com als saldos dels canals.

walletbalance

lncli walletbalance

channelbalance

lncli channelbalance
  • Llista els canals actius. Una vegada que s’hagi minat la transacció de finançament del canal i hagi obtingut suficients confirmacions, el teu canal estara totalment operatiu. Això pot trigar una hora o més.

listchannels

lncli listchannels
  • Fes un pagament Lightning. Per defecte, aquests funcionen amb factures, de manera que quan compres alguna cosa o vols enviar diners, has de demanar primer una factura. No obstant això, també pots pagar sense demanar una factura sempre que el node receptor suporti la funció keysend o amp!

Per provar-ho, per què no m’envies 21 satoshis! Simplement has d’introduir la meva clau pública del node Stadicus node, l’import en satoshis i afegir el flag —keysend.

lncli sendpayment --dest 02acd93e3352fd59066ca3f23e8865de1926301e8be03c6a52f0f7e43533fe9888 --amt 21 --keysend
Afegir watchtowers

Els canals Lightning han de ser monitoritzats per prevenir comportaments maliciosos pels teus companys de canal. Si el teu Microbolt està inactiu durant un període de temps més llarg, per exemple, a causa d’un problema de maquinari, un node a l’altre costat d’un dels teus canals podria intentar tancar el canal amb un saldo de canal anterior que els sigui més favorable.

Els watchtowers són altres nodes Lightning que poden monitoritzar els teus canals per tu. Si detecten aquest tipus de comportament dolent, poden reaccionar en el teu nom i enviar una transacció de càstig per tancar aquest canal. En aquest cas, tots els fons del canal s’enviaran a la teva cartera a on-chain de LND.

Un watchtower només pot enviar una transacció de càstig com aquesta a la teva cartera, de manera que no has de confiar-hi. És una bona pràctica afegir uns quants watchtowers, només per estar segur.

  • Afegeix el watchtower de la Lightning Network+ com a primer exemple
lncli wtclient add 023bad37e5795654cecc69b43599da8bd5789ac633c098253f60494bde602b60bf@iiu4epqzm6cydqhezueenccjlyzrqeruntlzbx47mlmdgfwgtrll66qd.onion:9911
  • Comprova si el watchtower està actiu i llista els teus watchtowers
lncli wtclient towers
output
{
    "towers": [
        {
            "pubkey": "023bad37e5795654cecc69b43599da8bd5789ac633c098253f60494bde602b60bf",
            "addresses": [
                "iiu4epqzm6cydqhezueenccjlyzrqeruntlzbx47mlmdgfwgtrll66qd.onion:9911"
            ],
            "active_session_candidate": true,
            "num_sessions": 0,
            "sessions": [],
            "session_info": [
                {
                    "active_session_candidate": true,
                    "num_sessions": 0,
                    "sessions": [],
                    "policy_type": "ANCHOR"
                },
                {
                    "active_session_candidate": true,
                    "num_sessions": 0,
                    "sessions": [],
                    "policy_type": "LEGACY"
                }
            ]
        }
    ]
}
lncli wtclient remove <pubkey>
Servidor de watchtower
💡

No utilitzeu amb la configuració de Dispositius de baix rendiment

De la mateixa manera que podeu connectar-vos com a client de watchtower a altres servidors de watchtower, també podeu proporcionar el mateix servei executant un servidor de watchtower altruista. Això esta ja activat anteriorment al fitxer lnd.conf, i podeu veure la informació sobre això escrivint la següent comanda i compartint-la amb els vostres iguals.

lncli tower info
output
{
    "pubkey": "02929aec329a822516a0c5c51f31e7f9b371192a43bf8b6473039915174368a928",
    "listeners": [
        "[::]:9911"
    ],
    "uris": [
        "02929aec329a822516a0c5c51f31e7f9b371192a43bf8b6473039915174368a928@ypeqsjqgafod2772ycabbv762o3blavfkmn3unxdqdnofltyxcendfqd.onion:9911"
    ]
}
Més comandes bàsiques útils

Una referència ràpida amb les comandes més comunes per probar:

  • Llista tots els arguments per a la CLI (interfície de línia de comandes)
lncli
  • Obtenir ajuda per a una comanda específica
lncli help [COMMAND]
  • Descobreix algunes estadístiques generals sobre el teu node: getinfo
lncli getinfo
  • Comprova els nodes als quals estàs connectat actualment: listpeers
lncli listpeers
lncli pendingchannels
lncli listchannels
  • Abans de pagar una factura, has de descodificar-la per comprovar si l’import i altres informacions són correctes: decodepayreq
lncli decodepayreq [INVOICE]
  • Paga una factura:
lncli payinvoice [INVOICE]
  • Envieu un pagament a un node sense factura utilitzant AMP (els nodes emissors i receptors han d’estar habilitats amb AMP): sendpayment
lncli sendpayment --amp --fee_limit 1 --dest=<node_pubkey> --final_cltv_delta=144 --amt=<amount_in_sats>
lncli listpayments
lncli addinvoice [AMOUNT_IN_SATOSHIS]
lncli listinvoices
  • Per tancar un canal, necessites els següents dos arguments que es poden determinar amb listchannels i es llisten com “channel_point”: FUNDING_TXID:OUTPUT_INDEX closechannel
lncli listchannels
lncli closechannel --sat_per_vbyte <fee> [FUNDING_TXID] [OUTPUT_INDEX]
  • Per tancar un canal a la força (si el teu igual és fora de línia o no coopera), utilitza --force
lncli closechannel --force [FUNDING_TXID] [OUTPUT_INDEX]
💡

Més: referència completa de l’API de LND

Pel futur: actualització de LND

Actualitzar LND pot generar diversos problemes. Sempre llegeix les notes de versió de LND completament per entendre els canvis. Aquestes també cobreixen molts temes addicionals i moltes funcionalitats noves no mencionades aquí.

  • Comprova la versió del teu LND
lnd --version
  • Atura el servei de LND
$SU rc-service lnd stop
  • Descarrega, verifica i instal·la els últims binaris de LND com s’indica a la secció de LND d’aquesta guia.

  • Reinicia els serveis amb la nova configuració

$SU rc-service lnd restart