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
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
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
[...]
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
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
[...]
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
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
[...]
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
[...]
; 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
#!/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}
name="LND"
description="Lightning Network Daemon"
required_files="${LND_CONFIGFILE}"
pidfile="/run/${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}"
[ -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:
- Exemple de LND: utilitzant un gestor de contrasenyes amb un pipe
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.
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ó.
lncli newaddress p2tr
{
"address": "bc1...[REDACTED]..."
}
- Comprova el saldo de la teva cartera LND
lncli walletbalance
{
"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 ara03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f
- 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.
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.
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.
lncli walletbalance
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.
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
{
"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"
}
]
}
]
}
-
Consulta aquesta llista de watchtowers públics altruistes mantinguda per Openoms i afegeix-ne uns quants més.
-
Si vols desactivar un watchtower actiu
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
{
"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
- Comprova l’estat dels teus canals pendents:
pendingchannels
lncli pendingchannels
- Comprova l’estat dels teus canals actius:
listchannels
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>
- Comprova els pagaments que has enviat:
listpayments
lncli listpayments
- Crea una factura:
addinvoice
lncli addinvoice [AMOUNT_IN_SATOSHIS]
- Llista totes les factures:
listinvoices
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