Como rodar um node da Lightning Network do Bitcoin sem depender do Umbrel

Alex Bit
8 min readSep 21, 2022

--

Texto por Alex Bit.

INTRODUÇÃO

Nos últimos anos aconteceu uma explosão do que vou chamar aqui de “empacotadores de software” para rodar aplicativos relacionados à rede do Bitcoin. Uma lista não exaustiva destes inclui o Umbrel, MyNode e Raspiblitz.

Interface do Umbrel.

O que a maioria destes empacotadores faz é simplificar a instalação e a operação de diversos softwares como o sistema operacional da máquina, Bitcoin Core, LND e gerenciadores de canais da Lightning Network, como o Ride The Lightning, Thunderhub e LNDg. Via de regra a instalação é feita com apenas “alguns cliques” e a mágica acontece “por debaixo do capô”, sem que o usuário tenha que se preocupar com linha de comando e diversas configurações. Finalizado o processo, o usuário acessa alguma forma de gerenciamento do seu node em uma interface web no seu navegador de preferência.

Tanta conveniência tem o seu preço, entretanto. Você não vai conseguir alterar algumas configurações com tanta liberdade como se tivesse os softwares instalados de forma individual. Você não pode escolher qual é a versão do Bitcoin Core que deseja rodar, por exemplo. Em alguns casos, nem é possível alterar algumas configurações, como no caso do Umbrel que roda na rede TOR por padrão, e não há forma de alterar seu node para rodar na clearnet ou mesmo em modo híbrido TOR + clearnet.

Além disso, você fica refém do desenvolvedor do empacotador. Você vai ter que seguir muitas das decisões que ele tomar, independentemente de gostar delas ou não. Na medida em que a maioria das novas instalações de nodes são feitas através desses empacotadores, os desenvolvedores destes ganharam um poder/influência na rede do Bitcoin que não existia antes, quando todos os usuários rodavam um full-node apenas com o Bitcoin Core instalado.

E isso não é muito condizente com o ethos bitcoinheiro de não depender e não confiar em ninguém. Vide o clássico “Terceiros de confiança são um problema de segurança” do Nick Szabo.

No meu caso específico, já rodo um full node com Bitcoin Core há no mínimo cinco anos em uma máquina Windows que mantenho ligada o tempo todo. No início de 2021, incentivado pelo pessoal do The Bitcoin Discord e da PlebNET, resolvi instalar e brincar com um node da Lightning Network (LN daqui para a frente) e a forma mais fácil de fazer isso foi através do Umbrel. A partir do Windows 10 é possível rodar uma instalação linux “quase que nativa”, através do que chamaram de WSL — Windows Subsystem for Linux, então instalei o Umbrel ali. A única coisa que tive que fazer foi aumentar o tamanho da partição do disco do WSL, que por padrão é de 500GB, para 1TB, a fim de comportar o espaço utilizado pelo full node do Bitcoin Core e o próprio Umbrel. Operei meu node LN por uns bons meses, até que precisei de algum dinheiro e optei por encerrar o node e vender os sats que estavam nele.

Agora em 2022, com o surgimento de uma nova e vibrante comunidade de operadores de Lightning nodes brasileira (NodeRunnersBR), decidi configurar um novo LN node, mas dessa vez eu quis fazer tudo “na unha”, instalando e configurando sozinho todos os softwares necessários.

Montei uma máquina Linux com configurações mais robustas para rodar os softwares do meu node e também para computação científica e para outros projetos de análise de dados on-chain que toco em paralelo ao meu emprego FIAT. Nada contra o popular Raspberry Pi, o considero uma boa opção para quem tem menos familiaridade com montagem de computadores e também pelo baixo consumo de energia.

Meu background é em economia/finanças e métodos quantitativos/estatística, não sou da área da computação, mas desde os anos 1990 mexo com computadores, já trabalhei muito em linha de comando, e posso dizer que sou um “power user”. Não tinha tanta familiaridade com linux e com bash, que são os comandos do terminal, mas supri essa lacuna com vários tutoriais disponíveis na web.

Ou seja, pra fazer essa instalação “raiz” é bom que você já tenha um pouco de familiaridade com a linha de comando do linux, com editar arquivos de texto, se movimentar entre diretórios, copiar arquivos, etc. Caso contrário, o Umbrel e pacotes similares continuam sendo uma excelente opção, e são, no mínimo, uma excelente escola.

Dito isso, vamos ao que interessa.

INSTALAÇÃO

Logo do LND — Lightning Network Daemon.

Vou supor que você já possua uma máquina com um linux instalado (no meu caso, Ubuntu Desktop) e com o daemon bitcoind do Bitcoin Core sincronizado e rodando. Existem diversos tutoriais ensinando a rodar um full-node, como o do próprio Bitcoin Core ou o dos Bitcoinheiros.

bitcoind rodando e sincronizado.

Para rodar o LND, no arquivo de configuração do Bitcoin Core bitcoin.confvocê tem que obrigatoriamente possuir as seguintes configurações, sem prejuízo de outras:

txindex=1
zmqpubrawblock=tcp://127.0.0.1:28332 zmqpubrawtx=tcp://127.0.0.1:28333
rpcauth=SEU_USERNAME:HASH_DO_SEU_PASSWORD
# ou
rpcuser=SEU_USERNAME
rpcpassword=SEU_PASSWORD

Você só precisa definir um dos dois métodos de autenticação acima, ou rpcauthou rpcuser + rpcpassword. Se o seu LND não rodar na mesma máquina em que o bitcoindestiver rodando, você precisará alterar os endereços de IP nas linhas de zmq...acima.

Após isso, eu basicamente segui o tutorial de instalação do LND da Lightning Labs, cujos procedimentos vou sumarizar aqui. Este vídeo aqui também ajuda bastante. Existem três formas de instalá-lo: a partir dos binários, a partir da origem (from source) e através do Docker. Vou listar abaixo os procedimentos para instalá-lo a partir da origem, que é como fiz.

  1. Primeiro você precisa da Golang, baixe a versão correta para seu sistema operacional aqui. Instale ela assim (atenção para o nome correto do arquivo que você baixou na primeira linha):
sudo tar -C /usr/local -xzf go[version].linux-[platform].tar.gz
export PATH=$PATH:/usr/local/go/bin
export GOPATH=~/go
export PATH=$PATH:$GOPATH/bin

2. Instale o LND:

git clone https://github.com/lightningnetwork/lnd
cd lnd
make install

Pronto, agora estará com o LND instalado. Você deve alterar as configurações do LND no arquivo ~/.lnd/lnd.conf, ou criá-lo, caso ele ainda não exista, o que pode ser feito da seguinte forma:

sudo nano ~/.lnd/lnd.conf

O LND possui MUITAS configurações. Aqui e aqui você encontra alguns arquivos modelo. Não se assuste com o tamanho do lnd.conf, a maioria das linhas vai ficar comentada (;na frente da linha), você só precisa editar o que for preciso. No meu caso, utilizo as seguintes configurações:

[Application Options]
listen=localhost
rpclisten=localhost:10009
rpclisten=[::1]:10010
restlisten=0.0.0.0:8080
maxpendingchannels=100
minchansize=2000000
alias=NOME_DO_SEU_NODE_SEJA_CRIATIVO
color=#3399FF
[Bitcoin]
bitcoin.active=true
bitcoin.mainnet=true
bitcoin.node=bitcoind
bitcoin.defaultchanconfs=2
bitcoin.basefee=5
bitcoin.basefee=300
[Bitcoind]
bitcoind.dir=~/.bitcoin
bitcoind.config=~/.bitcoin/bitcoin.conf
bitcoind.rpccookie=~/.bitcoin/.cookie
bitcoind.rpcuser=SEU_USERNAME
bitcoind.rpcpass=SEU_PASSWORD
bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333
[bolt]
db.bolt.auto-compact=true

Dessa forma, seu node vai rodar na clearnet, com seu endereço de IP real sendo divulgado através da rede. Não recomendo essa situação, pois você pode incorrer em geolocalização e fica vulnerável à um ataque de chave inglesa (inevitável quando 1 Bitcoin valer USD 1 milhão). Se mesmo assim quiser rodar seu node na clearnet, recomendo estes tutoriais aqui e aqui, pois será necessário atualizar o endereço de IP nas configurações do LND a cada vez que sua ISP (operadora de internet), alterar seu endereço de IP dinâmico (a não ser que você tenha uma conexão comercial com IP fixo).

Para os plebes, a minha recomendação é rodar o LN node através da rede TOR e evitar que seu IP real seja divulgado. Com um endereço TOR, seu node vai poder se comunicar normalmente com outros nodes e não vai se importar quando sua operadora alterar seu endereço de IP dinâmico. Instale previamente o TOR na sua máquina (eu segui esse tutorial do Jameson Lopp, mas também existe este da Lightning Labs) e adicione as seguintes linhas no lnd.conf:

[tor]
tor.active=true
tor.streamisolation=true
tor.v3=true

Você precisa iniciar o daemon do LND através do comando lnd e na primeira vez, através de outra sessão do terminal, deve criar uma nova carteira, definir um password e opcionalmente uma passphrase, tudo através do comando lncli --create. O LND vai gerar as 24 palavras do seu mnemonic seed. Anote e guarde bem essas palavras, elas são o seu “backup” para recuperação dos fundos do node, caso alguma tragédia ocorra com ele.

Depois disso, sempre que iniciar o daemon lnd, você terá que desbloqueá-lo com sua senha, através do comando lncli unlock em outra sessão do terminal . Pronto, agora o LND estará rodando pelo tempo em que a máquina estiver ligada.

Eu não faço isso, mas você pode configurar o linux para inicializar automaticamente o bitcoinde o lndno boot do sistema, para não precisar inicializá-los manualmente. Aqui aos 7min20s existe uma explicação para isso, imagino que não deva ser difícil fazer.

Se tudo deu certo, você começará a ver os logs do LND mais ou menos da seguinte forma:

Logs do LND.

Por fim, você precisará de um explorador de forma que tenha um painel em uma interface web para abrir canais, alterar as fees, fazer rebalances, etc. Em teoria você poderia fazer esse gerenciamento utilizando apenas LND através do comando lncli, mas não é viável na prática. É uma boa prática, entretanto, explorar um pouco desse comando através do lncli --help para saber tudo o que o LND pode fazer.

No meu node escolhi utilizar o LNDg, que rodo através de Docker (você precisa instalar antes o docker e o docker-compose), instalado da seguinte forma:

git clone https://github.com/cryptosharks131/lndg.git
cd lndg

Edite o arquivo docker-compose.yaml assim:

services:
lndg:
build: .
volumes:
- /home/SEU_USERNAME/.lnd:/root/.lnd:ro
- /home/SEU_USERNAME/lndg/data:/lndg/data:rw
command:
- sh
- -c
- python initialize.py -net 'mainnet' -server '127.0.0.1:10009' -d && supervisord && python manage.py runserver 0:8000
ports:
- 8889:8000

Depois, dentro do diretório ~/lndg/execute docker-compose up e pronto, a interface gráfica do LNDg deve estar acessível no seu navegador no endereço http://localhost:8889, se estiver acessando na própria máquina, ou substitua localhost pelo IP da rede interna do node, se o estiver acessando via SSH.

Interface do LNDg, do github deles. Esse não é o meu node.

Ufa, foi uma maratona chegar até aqui, parabéns se deu tudo certo!

Caso encontre alguma falha ou tenha alguma sugestão de alteração neste tutorial não hesite em entrar em contato comigo no twitter através do @alex_bit_. Fique a vontade se quiser abrir canais com o meu node, será uma honra, minha pubkey é:

03c7eb52b2f34a8fbc9a346c43c94d9f9e177620fa7086861453894271f904c74c

Caso queira me pagar um café, pode enviar alguns sats para meu Lightning Address dimsampan13@walletofsatoshi.com a partir da sua carteira Lighting favorita, ou on-chain para o seguinte endereço:

3GhQuztTyjbm2L1SXqMxnujMcvK3JifDwY

Um abraço,

Alex Bit, setembro de 2022.

--

--