Skip to content

Commit cfd260f

Browse files
authored
Merge pull request #400 from KoreaComK/chapter18
Chapter 18 Translated by @KoreaComK need review
2 parents 37c8cf4 + b804f51 commit cfd260f

5 files changed

Lines changed: 1165 additions & 0 deletions
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Capítulo 19: Compreendendo a Configuração da Lightning
2+
3+
> :information_source: **NOTA:** Este é um rascunho que está em andamento. Seu objetivo é que possa obter alguns comentários dos revisores iniciais. Ainda não está pronto para ser produzido.
4+
5+
O capítulo anterior concluiu nosso trabalho com o Bitcoin propriamente dito, por meio do CLI, scripts e linguagens de programação. No entanto, existem muitos outros utilitários dentro do ecossistema Bitcoin. Neste capítulo e no próximo, iremos cobrir o que pode ser o maior e mais importante deles, a Lightning Network. Aqui, começaremos a trabalhar com a interface de linha de comando `lightning-cli`, entendendo a configuração do c-lightning e dos seus recursos, incluindo alguns exemplos e configuração básica.
6+
7+
## Objetivos Deste Capítulo
8+
9+
Depois de trabalhar neste capítulo, um desenvolvedor será capaz de:
10+
11+
* Avaliar se um node c-lightning está instalado e atualizado;
12+
* Executar comandos básicos de uma carteira Lightning;
13+
* Criar um canal na Lightning.
14+
15+
Os objetivos secundários do capítulo incluem a capacidade de:
16+
17+
* Compreender a configuração básica da Lightning;
18+
* Compreender a interação dos canais Lightning;
19+
* Entender como usar a Lightning.
20+
21+
## Tabela de Conteúdo
22+
23+
* [Seção 1: Verificando a Configuração da c-lightning](19_1_Verifying_Your_Lightning_Setup.md)
24+
* [Seção 2: Conhecendo a Configuração da c-lightning](19_2_Knowing_Your_lightning_Setup.md)
25+
* [Adendo: Acessando um Segundo Node Lightning](19_2__Interlude_Accessing_a_Second_Lightning_Node.md)
26+
* [Seção 3: Criando um Canal na Lightning](19_3_Setting_Up_a_Channel.md)
Lines changed: 288 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,288 @@
1+
# 19.1: Verificando a Configuração da c-lightning
2+
3+
>: information_source: **NOTA:** Esta seção foi adicionada recentemente ao curso e é um rascunho inicial que ainda pode estar aguardando revisão.
4+
5+
Nesta seção, instalaremos e verificaremos a c-lightning, nosso utilitário para acessar a Lightning Network.
6+
7+
> :book: ***O que é a Lightning Network?*** A Rede Lightning é uma rede descentralizada que usa a funcionalidade de contrato inteligente da blockchain do Bitcoin para permitir pagamentos instantâneos em uma rede de participantes. A Lightning é construída como um protocolo de segunda camada que interage com o Bitcoin para permitir que os usuários troquem seus bitcoins "fora da blockchain" (ou o jargão em inglês, "off-chain").
8+
9+
> :book: ***O que é um protocolo de segunda camada?*** A segunda camada refere-se a um protocolo secundário criado em cima do sistema de blockchain do Bitcoin. O objetivo principal desses protocolos é resolver a velocidade de transação e as dificuldades de escala que estão presentes no Bitcoin. O Bitcoin não é capaz de processar milhares de transações por segundo (TPS), então protocolos de segunda camada foram criados para resolver o problema de escalabilidade da blockchain. Essas soluções também são conhecidas como soluções de dimensionamento "off-chain".
10+
11+
## Instalando a c-lightning
12+
13+
Se já usamos os [Bitcoin Standup Scripts](https://github.com/BlockchainCommons/Bitcoin-Standup-Scripts), talvez já o tenhamos instalado no início deste curso. Podemos testar isto verificando se o `lightningd` está em execução:
14+
```
15+
$ ps auxww | grep -i lightning
16+
standup 31213 0.0 0.2 24144 10424 pts/0 S 15:38 0:00 lightningd --testnet
17+
standup 31214 0.0 0.1 22716 7444 pts/0 S 15:38 0:00 /usr/local/bin/../libexec/c-lightning/plugins/autoclean
18+
standup 31215 0.0 0.2 22992 8248 pts/0 S 15:38 0:00 /usr/local/bin/../libexec/c-lightning/plugins/bcli
19+
standup 31216 0.0 0.1 22756 7604 pts/0 S 15:38 0:00 /usr/local/bin/../libexec/c-lightning/plugins/keysend
20+
standup 31217 0.0 0.1 22776 7648 pts/0 S 15:38 0:00 /usr/local/bin/../libexec/c-lightning/plugins/pay
21+
standup 31218 0.0 0.1 22720 7652 pts/0 S 15:38 0:00 /usr/local/bin/../libexec/c-lightning/plugins/txprepare
22+
standup 31219 0.0 0.1 22744 7716 pts/0 S 15:38 0:00 /usr/local/bin/../libexec/c-lightning/plugins/spenderp
23+
standup 31227 0.0 0.1 22748 7384 pts/0 SL 15:38 0:00 /usr/local/libexec/c-lightning/lightning_hsmd
24+
standup 31228 0.0 0.2 23044 8192 pts/0 S 15:38 0:00 /usr/local/libexec/c-lightning/lightning_connectd
25+
standup 31229 0.0 0.1 22860 7556 pts/0 S 15:38 0:00 /usr/local/libexec/c-lightning/lightning_gossipd
26+
standup 32072 0.0 0.0 6208 888 pts/0 S+ 15:50 0:00 grep -i lightning
27+
```
28+
Caso contrário, precisaremos instalá-lo agora. Infelizmente, se estivermos usando o Debian, precisaremos instalá-lo manualmente, compilando o código-fonte, mas ainda assim deve ser muito simples se seguirmos estas instruções. Se acontecer de estarmos em um sistema Ubuntu padrão, podemos tentar [Instalar a partir do Ubuntu ppa](#variant-install-from-ubuntu-ppa), e sempre podemos tentar [Instalar os binários pré-compilados](#variant-install-pre-compiled-binaries).
29+
30+
> :book: ***O que é a c-lightning?*** Existem três implementações diferentes da Lightning no momento: C-lightning, LND e Eclair. Todos devem ser funcionalmente compatíveis, com base nas mesmas [RFCs do BOLT](https://github.com/lightningnetwork/lightning-rfc/blob/master/00-introduction.md), mas os detalhes de implementação podem ser diferentes. Escolhemos a c-lightning como base do curso porque ela também faz parte do [projeto Elements](https://github.com/ElementsProject), que contém a Libwally.
31+
32+
### Compilando o Código-Fonte da c-lightning
33+
34+
A instalação da Lightning a partir do código-fonte deve ser bem simples se seguirmos estas instruções.
35+
36+
_Provavelmente_ desejaremos fazer isso em um node não prunado, pois trabalhar com nodes prunados na Lightning pode causar problemas de instalação e uso. Se, no início deste curso, configuramos nosso node para ser prunado, podemos querer substituí-lo por um full node agora. Se estivermos usando a testnet, provavelmente conseguiremos usar o mesmo tipo de máquina que usamos para o node prunado.
37+
38+
> :warning: **AVISO:** Realmente podemos executar a c-lightning em um node prunado. No entanto, conforme observamos no [repositório Lightning](https://github.com/ElementsProject/lightning#pruning), pode haver uma série de problemas. Para fazer isso funcionar, devemos garantir que o node da Lightning sempre tente atualizar informações sobre os blocos que o node do Bitcoin não excluiu. Para fazermos isso, devemos nos certificar de que (1) nosso node de Bitcoin está totalmente atualizado antes de iniciar nosso node da Lightning pela primeira vez e; (2) nosso node Lightning nunca fique defasado do node do Bitcoin (para um node prunado em 550 blocos padrão, ele nunca pode ser desligado por 4 dias ou mais). Portanto, podemos usar o node assim, mas apresenta algum perigo, o que não é uma boa ideia se estivermos executando um serviço em produção.
39+
40+
Dito isso, estamos prontos para instalar a Lightning:
41+
42+
Primeiro, vamos instalar as dependências, incluindo requisitos de desenvolvimento.
43+
```
44+
$ sudo apt-get install -y \
45+
autoconf automake build-essential git libtool libgmp-dev \
46+
libsqlite3-dev python3 python3-mako net-tools zlib1g-dev libsodium-dev \
47+
gettext
48+
$ sudo apt-get install -y valgrind python3-pip libpq-dev
49+
```
50+
Isso pode demorar um pouco, porque há várias dependências e algumas são bem grandes.
51+
52+
Em segundo lugar, vamos clonar o repositório Lightning:
53+
```
54+
$ cd ~
55+
$ git clone https://github.com/ElementsProject/lightning.git
56+
$ cd lightning
57+
```
58+
Agora podemos usar o `pip3` que instalamos para instalar requisitos adicionais para a compilação e posteriomente configurar tudo:
59+
```
60+
$ pip3 install -r requirements.txt
61+
$ ./configure
62+
```
63+
Agora, vamos compilar. Isso pode levar algum tempo também, dependendo do processamento da nossa máquina.
64+
```
65+
$ make
66+
```
67+
Depois disso, o que precisamos fazer é instalar:
68+
```
69+
$ sudo make install
70+
```
71+
72+
## Verificando Nossa Instalação
73+
74+
Podemos confirmar que o lightningd foi instalado corretamente usando o parâmetro `help`:
75+
76+
```
77+
$ lightningd --help
78+
lightningd: WARNING: default network changing in 2020: please set network=testnet in config!
79+
Usage: lightningd
80+
A bitcoin lightning daemon (default values shown for network: testnet).
81+
--conf=<file> Specify configuration file
82+
--lightning-dir=<dir> Set base directory: network-specific
83+
subdirectory is under here
84+
(default: "/home/javier/.lightning")
85+
--network <arg> Select the network parameters (bitcoin,
86+
testnet, regtest, litecoin or
87+
litecoin-testnet) (default: testnet)
88+
--testnet Alias for --network=testnet
89+
--signet Alias for --network=signet
90+
--mainnet Alias for --network=bitcoin
91+
```
92+
93+
## Executando lightningd
94+
95+
Começaremos a explorar a Lightning Network com o comando `lightning-cli`. No entanto, `lightningd` _deve_ estar rodando para podermos usar o `lightning-cli`, já que `lightning-cli` envia comandos JSON-RPC para o `lightningd` (tudo exatamente como o `bitcoin-cli` e o `bitcoind`).
96+
97+
Se instalamos a `c-lightning` manualmente, precisaremos iniciá-la:
98+
```
99+
$ nohup lightningd --testnet &
100+
```
101+
102+
### Executando o lightningd como um serviço
103+
104+
Se preferirmos, podemos instalar o `lightningd` como um serviço que será executado toda vez que reiniciarmos nossa máquina. Os comandos seguintes farão isso e ele começará a funcionar imediatamente:
105+
106+
```
107+
$ cat > ~/lightningd.service << EOF
108+
# It is not recommended to modify this file in-place, because it will
109+
# be overwritten during package upgrades. If you want to add further
110+
# options or overwrite existing ones then use
111+
# $ systemctl edit bitcoind.service
112+
# See "man systemd.service" for details.
113+
# Note that almost all daemon options could be specified in
114+
# /etc/lightning/config, except for those explicitly specified as arguments
115+
# in ExecStart=
116+
[Unit]
117+
Description=c-lightning daemon
118+
[Service]
119+
ExecStart=/usr/local/bin/lightningd --testnet
120+
# Process management
121+
####################
122+
Type=simple
123+
PIDFile=/run/lightning/lightningd.pid
124+
Restart=on-failure
125+
# Directory creation and permissions
126+
####################################
127+
# Run as standup
128+
User=standup
129+
# /run/lightningd
130+
RuntimeDirectory=lightningd
131+
RuntimeDirectoryMode=0710
132+
# Hardening measures
133+
####################
134+
# Provide a private /tmp and /var/tmp.
135+
PrivateTmp=true
136+
# Mount /usr, /boot/ and /etc read-only for the process.
137+
ProtectSystem=full
138+
# Disallow the process and all of its children to gain
139+
# new privileges through execve().
140+
NoNewPrivileges=true
141+
# Use a new /dev namespace only populated with API pseudo devices
142+
# such as /dev/null, /dev/zero and /dev/random.
143+
PrivateDevices=true
144+
# Deny the creation of writable and executable memory mappings.
145+
MemoryDenyWriteExecute=true
146+
[Install]
147+
WantedBy=multi-user.target
148+
EOF
149+
$ sudo cp ~/lightningd.service /etc/systemd/system
150+
$ sudo systemctl enable lightningd.service
151+
$ sudo systemctl start lightningd.service
152+
```
153+
154+
### Habilitando Conexões Remotas
155+
156+
Se tivermos algum tipo de firewall, precisaremos abrir a porta 9735 para permitir que outros nodes da Lightning interajam conosco.
157+
158+
Se usarmos o `ufw` do Bitcoin Standup, podemos fazer da seguinte maneira:
159+
```
160+
$ sudo ufw allow 9735
161+
```
162+
163+
## Verificando o Nosso Node
164+
165+
Podemos verificar se o nosso node Lightning está pronto para funcionar comparando a saída de `bitcoin-cli getblockcount` com o resultado de `blockheight` do `lightning-cli getinfo`.
166+
167+
```
168+
$ bitcoin-cli -testnet getblockcount
169+
1838587
170+
$ lightning-cli --testnet getinfo
171+
{
172+
"id": "03d4592f1244cd6b5a8bb7fba6a55f8a91591d79d3ea29bf8e3c3a405d15db7bf9",
173+
"alias": "HOPPINGNET",
174+
"color": "03d459",
175+
"num_peers": 0,
176+
"num_pending_channels": 0,
177+
"num_active_channels": 0,
178+
"num_inactive_channels": 0,
179+
"address": [
180+
{
181+
"type": "ipv4",
182+
"address": "74.207.240.32",
183+
"port": 9735
184+
},
185+
{
186+
"type": "ipv6",
187+
"address": "2600:3c01::f03c:92ff:fe48:9ddd",
188+
"port": 9735
189+
}
190+
],
191+
"binding": [
192+
{
193+
"type": "ipv6",
194+
"address": "::",
195+
"port": 9735
196+
},
197+
{
198+
"type": "ipv4",
199+
"address": "0.0.0.0",
200+
"port": 9735
201+
}
202+
],
203+
"version": "v0.9.1-96-g6f870df",
204+
"blockheight": 1838587,
205+
"network": "testnet",
206+
"msatoshi_fees_collected": 0,
207+
"fees_collected_msat": "0msat",
208+
"lightning-dir": "/home/standup/.lightning/testnet"
209+
}
210+
```
211+
Neste caso, o `blockheight` é mostrado como `1838587` por ambos os comandos.
212+
213+
Em vez disso, podemos obter um erro, dependendo da situação.
214+
215+
Se o node Bitcoin ainda estiver sincronizando com a rede, devemos ver uma mensagem como esta:
216+
```
217+
"warning_bitcoind_sync": "Bitcoind is not up-to-date with network."
218+
```
219+
Se o nosso node Lightning não estiver atualizado, receberemos uma mensagem como esta:
220+
```
221+
"warning_lightningd_sync": "Still loading latest blocks from bitcoind."
222+
```
223+
Se tentarmos executar em uma blockchain prunada cujo node Bitcoin não estava atualizado quando iniciamos o node Lightning, receberemos mensagens de erro em nosso log parecidas com esta:
224+
```
225+
bitcoin-cli -testnet getblock 0000000000000559febee77ab6e0be1b8d0bef0f971c7a4bee9785393ecef451 0 exited with status 1
226+
```
227+
228+
## Criando Aliases
229+
230+
Sugerimos a criação de alguns aliases (apelidos de comandos) para facilitar o uso da c-lightning.
231+
232+
Podemos fazer isso colocando-os em nosso arquivo `.bash_profile`.
233+
```
234+
cat >> ~/.bash_profile <<EOF
235+
alias lndir="cd ~/.lightning/" #linux default c-lightning path
236+
alias lnc="lightning-cli"
237+
alias lnd="lightningd"
238+
alias lninfo='lightning-cli getinfo'
239+
EOF
240+
```
241+
Depois de inserir esses aliases, podemos executar o comando `source ~/.bash_profile` para inseri-los, ou apenas efetuar logout e login novamente.
242+
243+
Podemos observar que esses aliases incluem atalhos para executar o `lightning-cli`, para executar o `lightningd` e para ir para o diretório c-lightning. Esses aliases têm como objetivo principal tornar nossa vida mais fácil. Sugerimos criar outros apelidos para facilitar o uso de comandos frequentes (e seus argumentos) e para minimizar erros. Os aliases desse tipo podem ser ainda mais úteis se tivermos uma configuração complexa onde regularmente executamos comandos associados a Mainnet, com Testnet _e_ com a Regtest, conforme explicado mais adiante.
244+
245+
Dito isso, o uso desses aliases _neste_ livro pode acidentalmente obscurecer as lições principais que estão sendo ensinadas sobre a c-lightning, portanto, continuaremos a mostrar os comandos completos. Podemos ajustá-los para nosso próprio uso conforme apropriado.
246+
247+
## Opcional: Modificando Nossos Tipos de Servidor
248+
249+
> :link: **TESTNET vs MAINNET:** Ao configurar nosso node, escolhemos criá-lo como um node Mainnet, Testnet ou Regtest. Embora este documento presuma uma configuração no Testenet, vale a pena entender como podemos acessar e usar os outros tipos de configuração, mesmo todos estando na mesma máquina! Mas, se você for um usuário iniciante, pode pular esta parte, pois não é necessária para uma configuração básica.
250+
251+
Quando o lightningd é inicializado, geralmente ele lê um arquivo de configuração cuja localização depende da rede que estamos usando (o padrão é `~/.lightning/testnet/config`). Isso pode ser alterado com os sinalizadores `–conf` e `–lightning-dir`.
252+
253+
```
254+
~/.lightning/testnet$ ls -la config
255+
-rw-rw-r-- 1 user user 267 jul 12 17:08 config
256+
```
257+
Também existe um arquivo de configuração geral (o padrão é `~/.lightning/config`). Se desejarmos executar vários tipos diferentes de nodes simultaneamente, devemos deixar o sinalizador testnet (ou regtest) fora deste arquivo de configuração. Devemos então escolher se estamos usando a mainnet, a testnet ou a regtest toda vez que executarmos o `lightningd` ou o `lightning-cli`.
258+
259+
Nossa configuração pode não ter nenhum arquivo de configuração: a c-lightning será executada com uma boa configuração padrão, sem eles.
260+
261+
## Resumo: Verificando a Configuração da c-lightning
262+
263+
Antes de começar a brincar com a lightning, devemos nos certificar de que nossos aliases estão configurados, nosso `lightningd` está rodando e nosso node está sincronizado. Também podemos querer configurar algum acesso a configurações alternativas da Lightning, em outras redes.
264+
265+
## O Que Vem Depois?
266+
267+
Vamos continuar "Compreendendo a Configuração da Lightning" na seção [§19.2: Conhecendo a Configuração da c-lightning](19_2_Knowing_Your_lightning_Setup.md).
268+
269+
## Variante: Instalando do Ubuntu ppa
270+
271+
Se estivermos usando uma versão do Ubuntu diferente do Debian, podemos instalar a c-lightning usando [Ubuntu ppa](https://launchpad.net/~lightningnetwork/+archive/ubuntu/ppa):
272+
273+
```
274+
$ sudo apt-get install -y software-properties-common
275+
$ sudo add-apt-repository -u ppa:lightningnetwork/ppa
276+
$ sudo apt-get install lightningd
277+
```
278+
279+
## Variante: Instalando Binários Pré-Compilados
280+
281+
Outro método para instalar a Lightning é usar os binários pré-compilados no [repositório Github](https://github.com/ElementsProject/lightning/releases). Vamos escolher o arquivo mais recente, como `clightning-v0.9.1-Ubuntu-20.04.tar.xz`.
282+
283+
Depois de baixá-lo, precisaremos ir para o diretório raiz e descompactá-lo:
284+
```
285+
$ cd /
286+
$ sudo tar xf ~/clightning-v0.9.1-Ubuntu-20.04.tar.xz
287+
```
288+
Aviso: Isso exigirá que tenhamos exatamente as mesmas bibliotecas que foram usadas para criar o binário. Geralmente é mais fácil apenas recompilar.

0 commit comments

Comments
 (0)