Skip to content

Commit 41eefa1

Browse files
committed
Revise chapter 16 titles, fix typos
1 parent c12abd1 commit 41eefa1

File tree

4 files changed

+45
-49
lines changed

4 files changed

+45
-49
lines changed

pt/16_0_Talking_to_Bitcoind.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
2-
# Capítulo 15: Conversando com Bitcoind usando C
1+
# Capítulo 16: Conversando com Bitcoind com C
32

43
Enquanto trabalhamos com Bitcoin Scripts, atingimos os limites do que era possível com o `bitcoin-cli`: Atualmente, ele não pode ser usado para gerar transações contendo scripts incomuns. Os scripts shell também não são bons para algumas coisas, como criar programas de escuta que estão constantemente em polling. Felizmente, existem outras maneiras de acessar a rede Bitcoin: Através de APIs programáveis.
54

@@ -19,9 +18,9 @@ Os objetivos secundários do capítulo incluem a capacidade de:
1918
* Compreender as capacidades do ZMQ;
2019
* Entender como usar uma biblioteca ZMQ.
2120

22-
## Tabela de conteúdo
21+
## Tabela de Conteúdo
2322

24-
* [Seção 1: Acessando o Bitcoind usando C com Bibliotecas RPC](15_1_Accessing_Bitcoind_with_C.md)
25-
* [Seção 2: Programando o Bitcoind usando C com Bibliotecas RPC](15_2_Programming_Bitcoind_with_C.md)
26-
* [Seção 3: Recebendo notificações usando C com bibliotecas ZMQ](15_3_Receiving_Bitcoind_Notifications_with_C.md)
23+
* [Seção 1: Acessando o Bitcoind em C com Bibliotecas RPC](16_1_Accessing_Bitcoind_with_C.md)
24+
* [Seção 2: Programando o Bitcoind em C com Bibliotecas RPC](16_2_Programming_Bitcoind_with_C.md)
25+
* [Seção 3: Recebendo Notificações em C com Bibliotecas ZMQ](16_3_Receiving_Bitcoind_Notifications_with_C.md)
2726

pt/16_1_Accessing_Bitcoind_with_C.md

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
2-
# 15.1: Acessando o Bitcoind usando C com bibliotecas RPC
1+
# 16.1: Acessando o Bitcoind em C com Bibliotecas RPC
32

43
> :information_source: **NOTA:** Esta seção foi adicionada recentemente ao curso e é um esboço que ainda pode estar aguardando revisão. Portanto, leitor, tenha cuidado.
54
@@ -29,7 +28,7 @@ $ git clone https://github.com/gitmarek/libbitcoinrpc
2928

3029
> :warning: **ATENÇÃO** Uma alteração no RPC "signrawtransaction" causou uma assinatura com ``libbitcoinrpc`` para o segfault no Bitcoin 0.17 ou superior. O [Pull Request foi submetido](https://github.com/gitmarek/libbitcoinrpc/pull/1/commits) para resolver o problema, mas se ainda não tiver sido feito o merge, podemos simplesmente fazer uma simples mudança no código-fonte para ``src/bitcoinrpc_method.c`` antes de compilarmos.
3130
32-
### Compilando o libbitcoinrpc.
31+
### Compilando o libbitcoinrpc
3332

3433
Antes de compilarmos e instalarmos o pacote, provavelmente precisaremos ajustar nosso ``$PATH``, para que possamos acessar o ``/sbin/ldconfig``:
3534
```
@@ -91,7 +90,7 @@ Installing man pages
9190
install -m 644 doc/man3/bitcoinrpc*.gz /usr/local/man/man3
9291
```
9392

94-
## Preparando o código
93+
## Preparando o Código
9594

9695
``libbitcoinrpc`` tem métodos simples e bem estruturados para conectar-se ao nosso `bitcoind`, executando chamadas RPC e decodificando a resposta.
9796

@@ -107,7 +106,7 @@ Precisaremos também vincular as bibliotecas apropriadas sempre que possamos com
107106
$ cc yourcode.c -lbitcoinrpc -ljansson -o yourcode
108107
```
109108

110-
## Construindo a conexão
109+
## Construindo a Conexão
111110

112111
Para construir a conexão com o servidor ``bitcoind`` é necessário alguns simples passos.
113112

@@ -154,7 +153,7 @@ Mais tarde, quando tivermos feito com a conexão de ``bitcoind``, poderemos fech
154153
bitcoinrpc_global_cleanup();
155154
```
156155

157-
### Testando o código de teste
156+
### Testando o Código de Teste
158157

159158
O código de teste pode ser encontrado [no diretório src com o nome 15_1_testbitcoin.c](src/15_1_testbitcoin.c). Vamos fazer o download para a nossa máquina TestNet e depois inserir a senha correta do RPC (e alterar o usuário RPC se não tivermos criado o servidor com StandUp).
160159

@@ -167,7 +166,7 @@ Successfully connected to server!
167166

168167
> :warning: **ATENÇÃO:** Se esquecermos de inserir a senha RPC nesta ou em qualquer outro código que possuem dependências do RPC, receberemos um misterioso ``ERROR CODE 5``.
169168
170-
## Fazendo uma chamada ao RPC
169+
## Fazendo uma Chamada ao RPC
171170

172171
Para usarmos um método RPC usando ``libbitcoinrpc``, devemos inicializar uma variável do tipo ``bitcoinrpc_method_t``. Podemos fazer com o valor apropriado para o método que desejamos utilizar, que estão todos listados na [Referências do BitcoinRPC](https://github.com/gitmarek/libbitcoinrpc/blob/master/doc/reference.md).
173172
``` c
@@ -188,7 +187,7 @@ Vamos usar a variável ``rpc_client`` que aprendemos no teste anterior e vamos a
188187
bitcoinrpc_call(rpc_client, getmininginfo, btcresponse, &btcerror);
189188
```
190189
191-
### Mostrando o retorno da chamada
190+
### Mostrando o Retorno da Chamada
192191
193192
Com certeza iremos querer saber o que a RPC retornou. Para fazermos isso, vamos recuperar a saída da nossa chamada como sendo um objeto JSON com ``bitcoinrpc_resp_get`` e vamos salvá-la em um objeto padrão ``jansson``, do tipo ``json_t``:
194193
``` c
@@ -222,7 +221,7 @@ printf("Block Count: %d\n",blocks);
222221
223222
> :warning: **ATENÇÃO:** É extremamente fácil ocasionar erros de segmentação no código C quando estivermos trabalhando com os objetos ``jansson`` caso fiquemos confusos com que tipo de objeto estamos recuperando. Por isso, precisamos fazer isso com cuidado usando o ``bitcoin-cli help`` para saber o que devemos esperar, e se tivermos uma falha de segmentação, primeiro precisamos analisar se nossas funções de recuperação JSON estão corretas.
224223
225-
### Testando o código de informação
224+
### Testando o Código de Informação
226225
227226
Vamos recuperar o código de teste que está no [diretório src](15_1_GetMiningInfo.c).
228227
```
@@ -253,11 +252,11 @@ Just the Result: {
253252
Block Count: 1804406
254253
```
255254
256-
## Fazendo uma chamada RPC usando argumentos
255+
## Fazendo uma Chamada RPC Usando Argumentos
257256
258257
Mas e se a sua chamada RPC tiver argumentos?
259258
260-
### Criando uma matriz JSON
259+
### Criando uma Matriz JSON
261260
262261
Para enviar parâmetros para a nossa chamada RPC usando ``libbitcoinrpc`` teremos que envolvê-los em uma matriz json. Como uma matriz é apenas uma simples listagem de valores, tudo o que precisamos fazer é codificar os parâmetros como elementos ordenados na matriz.
263262
@@ -275,20 +274,20 @@ Observe que existem duas variantes para o comando de anexação: ``json_array_ap
275274
276275
Esta metodologia simples ``json_array_apend_new`` servirá para a maioria dos comandos RPC com parâmetros, mas alguns dos comandos RPC exigem entradas mais complexas. Nesses casos, precisaremos criar objetos JSON ou arrays em JSON, que anexaremos ao parâmetros de array como de costume. A próxima seção contém um exemplo de como fazer isso usando o ``CrayAwTransaction``, que contém uma matriz JSON de objetos JSON para as entradas, um objeto JSON para as saídas e o parâmetro ``locktime``.
277276
278-
### Atribuindo os parâmetros
277+
### Atribuindo os Parâmetros
279278
280279
Quando criamos o parâmetro array no JSON, simplesmente o atribuímos depois de inicializar o método RPC, da seguinte maneira:
281280
``` c
282281
bitcoinrpc_method_set_params(rpc_method, params)
283282
```
284283
Esta seção não inclui uma amostra abrangente dessa metodologia mais complexa, mas vamos vê-la em ação várias vezes no nosso primeiro programa C mais abrangente usando o RPC, na próxima seção.
285284

286-
## Resumo do capítulo Acessando o Bitcoind usando C com bibliotecas RPC
285+
## Resumo: Acessando o Bitcoind em C com Bibliotecas RPC
287286

288287
Ao vincular às bibliotecas ``BitcoinRPC`` do RPC e as bibliotecas ``jansson`` do JSON, podemos acessar facilmente o ``bitcoind`` usando chamadas RPC de uma biblioteca C. Para fazer isso, criamos uma conexão RPC, que faz as chamadas individuais de RPC, algumas delas passando alguns parâmetros. O ``jansson`` permite decodificar as respostas no formato JSON. A próxima seção demonstrará como isso pode ser usado para um programa de uso do mundo real.
289288

290-
* :fire: ***Qual é o poder de C?*** O C permite que façamos o próximo passo muito além do script shell, permitindo a criação de programas mais complexos e robustos.
289+
* :fire: ***Qual é o poder do C?*** O C permite que façamos o próximo passo muito além do script shell, permitindo a criação de programas mais complexos e robustos.
291290

292291
## O Que Vem Depois?
293292

294-
Vamos falar mais um pouco no "Conversando com o Bitcoind usando C" no capítulo [15.2: Programando o Bitcoind usando C com bibliotecas RPC](15_2_Programming_bitcoind_with_c.md).
293+
Vamos falar mais um pouco no "Conversando com o Bitcoind com C" no capítulo [16.2: Programando o Bitcoind em C com Bibliotecas RPC](16_2_Programming_bitcoind_with_c.md).

pt/16_2_Programming_Bitcoind_with_C.md

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
2-
# 15.2: Programando o Bitcoind usando C com bibliotecas RPC
1+
# 16.2: Programando o Bitcoind usando C com bibliotecas RPC
32

43
> :information_source: **NOTA:** Esta seção foi adicionada recentemente ao curso e é um rascunho que pode estar aguardando revisão. Portanto, leitor, tenha cuidado.
54
6-
A sessão [§15.1](15_1_Accessing_Bitcoind_with_C.md) apresentou a metodologia para a criação de programas C usando bibliotecas RPC e JSON. Agora vamos mostrar o potencial dessas bibliotecas C fazendo algumas coisas um pouco mais avançadas usando o programa real do Bitcoin.
5+
A seção [§16.1](16_1_Accessing_Bitcoind_with_C.md) apresentou a metodologia para a criação de programas C usando bibliotecas RPC e JSON. Agora vamos mostrar o potencial dessas bibliotecas C fazendo algumas coisas um pouco mais avançadas usando o programa real do Bitcoin.
76

8-
## Planejando o código
7+
## Planejando o Código
98

109
Esta seção irá criar uma versão simples do ``sendtoaddress``, permitindo ao usuário enviar as moedas para um endereço, desde que tenha um UTXO grande o suficiente para isso. Aqui está o que precisamos fazer:
1110

@@ -18,7 +17,7 @@ Esta seção irá criar uma versão simples do ``sendtoaddress``, permitindo ao
1817
7. Assinar a transação;
1918
8. Enviar a transação.
2019

21-
### Planejando para o futuro
20+
### Planejando para o Futuro
2221

2322
Como este é o nosso primeiro programa C funcional, vamos mantê-lo simples (ou seja, vamos usar a filosofia, _Keep it Simple_ ou também conhecida como KISS). Se estivéssemos produzindo um programa para estar em produção, desejaríamos pelo menos os seguintes passos:
2423

@@ -31,11 +30,11 @@ Como este é o nosso primeiro programa C funcional, vamos mantê-lo simples (ou
3130

3231
Se deseja continuar a expandir este exemplo, seria ótimo começar a lidar com as inadequações do programa.
3332

34-
## Escrevendo o sistema de transação
33+
## Escrevendo o Sistema de Transação
3534

3635
Agora estamos prontos para realizar o passo a passo do nosso plano
3736

38-
### Etapa 1: Solicitando um endereço e uma quantia
37+
### Etapa 1: Solicitando um Endereço e uma Quantia
3938

4039
Inserir as informações é bem simples se usarmos os argumentos na linha de comando:
4140
``` c
@@ -54,7 +53,7 @@ printf("Sending %4.8f BTC to %s\n",tx_amount,tx_recipient);
5453
5554
> :aviso: **ATENÇÃO:** Um programa real precisaria de uma higienização muito melhor dessas variáveis.
5655
57-
### Etapa 2: Definindo uma taxa arbitrária
56+
### Etapa 2: Definindo uma Taxa Arbitrária
5857
5958
Este exemplo colocamos uma taxa arbitrária de 0.0005 BTC para garantir que as transações do teste sejam processadas rapidamente:
6059
@@ -65,9 +64,9 @@ float tx_total = tx_amount + tx_fee;
6564

6665
> :warning: **ATENÇÃO:** Um programa real calcularia uma taxa que minimizasse o custo, garantindo que a velocidade fosse aquela que o remetente estivesse disposto a utilizar.
6766
68-
### Etapa 3: Preparando nosso RPC
67+
### Etapa 3: Preparando Nosso RPC
6968

70-
Obviamente, precisaremos preparar todas as nossas variáveis novamente, conforme discutido na sessão [§15.1: Acessando o Bitcoind usando C](15_1_Accessing_Bitcoind_with_C.md). Também precisaremos inicializar a nossa biblioteca, conectar o cliente RPC e preparar nosso objeto de resposta:
69+
Obviamente, precisaremos preparar todas as nossas variáveis novamente, conforme discutido na seção [§16.1: Acessando o Bitcoind com C](16_1_Accessing_Bitcoind_with_C.md). Também precisaremos inicializar a nossa biblioteca, conectar o cliente RPC e preparar nosso objeto de resposta:
7170
``` c
7271
bitcoinrpc_global_init();
7372
rpc_client = bitcoinrpc_cl_init_params("bitcoinrpc", "YOUR-RPC-PASSWD", "127.0.0.1", 18332);
@@ -157,7 +156,7 @@ if(!tx_id) {
157156

158157
> **ATENÇÃO** Um programa em produção usaria sub-rotinas para este tipo de pesquisa, de forma que pudéssemos chamar vários RPCs de uma biblioteca de funções C. Vamos apenas colocar tudo em um `main` como parte da nossa filosofia KISS.
159158
160-
### Etapa 5: Criando um endereço de troco
159+
### Etapa 5: Criando um Endereço de Troco
161160

162161
Repita a metodologia padrão de pesquisa RPC para obter um endereço de troco:
163162
``` c
@@ -188,7 +187,7 @@ A única diferença é quais informações específicas são extraídas do objet
188187
189188
> :warning: **ATENÇÃO:** Aqui temos uma sub-rotina que seria bem legal: Abstrair toda a inicialização e chamada do método RPC.
190189
191-
### Etapa 6: Criando uma transação bruta
190+
### Etapa 6: Criando uma Transação Bruta
192191
193192
Criar a transação bruta real é outra parte complicada da programação da substituição do ``sendtoaddress``. Isso porque requer a criação de um objeto JSON complexo como parâmetro.
194193
@@ -200,7 +199,7 @@ createrawtransaction [{"txid":"id","vout":n},...] {"address":amount,"data":"hex"
200199
201200
Para relembrar, as entradas serão uma matriz JSON contendo um objeto JSON para cada UTXO. Então, as saídas estarão todas em um objeto JSON. É mais fácil criar esses elementos JSON de dentro para fora, usando os comandos ``jansson``.
202201
203-
#### Etapa 6.1: Criando os parâmetros de entrada
202+
#### Etapa 6.1: Criando os Parâmetros de Entrada
204203
205204
Para criar o objeto de entrada para nosso UTXO, vamos usar o ``json_object`` e preencher com os valores-chave usando ``json_object_set_new`` (para referências recém-criadas) ou ``json_object_set`` (para referências já existentes):
206205
``` c
@@ -220,7 +219,7 @@ inputparams = json_array();
220219
json_array_append(inputparams,inputtxid);
221220
```
222221
223-
#### Etapa 6.2: Criando os parâmetros de saída
222+
#### Etapa 6.2: Criando os Parâmetros de Saída
224223
225224
Para criar a matriz de saída para a transação, vamos seguir o mesmo processo, criando um objeto JSON com ``json_object`` e, em seguida, vamos preenchê-lo com o ``json_object_set``:
226225
``` c
@@ -248,7 +247,7 @@ json_array_append(params,inputparams);
248247
json_array_append(params,outputparams);
249248
```
250249
251-
#### Etapa 6.4: Fazendo a chamada ao RPC
250+
#### Etapa 6.4: Fazendo a Chamada ao RPC
252251
253252
Vamos usar o método normal para criar uma chamada ao RPC:
254253
``` c
@@ -271,7 +270,7 @@ lu_result = json_object_get(lu_response,"result");
271270

272271
char *tx_rawhex = strdup(json_string_value(lu_result));
273272
```
274-
### Etapa 7. Assinando a transação
273+
### Etapa 7. Assinando a Transação
275274
276275
É muito mais fácil atribuir um parâmetro simples a uma função. Basta criar uma matriz JSON e, em seguida, atribuir o parâmetro à matriz:
277276
``` c
@@ -301,7 +300,7 @@ json_decref(lu_signature);
301300
```
302301
> :warning: ***ATENÇÃO:*** Um programa em produção obviamente iria testar cuidadosamente a resposta de cada comando RPC para se certificar de que não teria erros. Isso é ainda mais verdadeiro para a função ``signrawtransaction``, porque podemos acabar com uma transação parcialmente assinada. Ou ainda pior, se não verificarmos os erros no objeto JSON, veremos apenas o ``hex`` e não iremos saber que ele não está assinado ou se está parcialmente assinado.
303302
304-
### Etapa 8. Enviando a transação
303+
### Etapa 8. Enviando a Transação
305304

306305
Agora podemos enviar a transação, usando todas as técnicas aprendidas anteriormente:
307306
``` c
@@ -329,9 +328,9 @@ printf("Txid: %s\n",tx_newid);
329328
330329
O código inteiro, com um _pouco_ mais verificação de erros, está disponível no Apêndice.
331330
332-
## Testando o código
331+
## Testando o Código
333332
334-
O código completo pode ser encontrado no [diretório src/](src/15_2_sendtoaddress.c).
333+
O código completo pode ser encontrado no [diretório src/](src/16_2_sendtoaddress.c).
335334
336335
Compile-o como de costume:
337336
```
@@ -345,10 +344,10 @@ Txid: b93b19396f8baa37f5f701c7ca59d3128144c943af5294aeb48e3eb4c30fa9d2
345344
```
346345
Você pode ver as informações sobre esta transação que enviamos clicando [aqui](https://mempool.space/pt/testnet/tx/b93b19396f8baa37f5f701c7ca59d3128144c943af5294aeb48e3eb4c30fa9d2/).
347346
348-
## Resumo do Programando o Bitcoind usando C com bibliotecas RPC
347+
## Resumo: Programando o Bitcoind em C com Bibliotecas RPC
349348
350349
Com acesso a uma biblioteca C, podemos criar programas com muito mais recursos quando comparados aos scripts no shell. Mas isso pode dar muito trabalho! Mesmo com 316 linhas de código, o ``sendtoaddress.c`` não cobre todos os detalhes necessários para transacionar bitcoins de forma segura e inteligente.
351350
352351
## O Que Vem Depois?
353352
354-
Aprenda mais sobre "Programando o Bitcoind usando C" na próxima sessão [15.3: Recebendo notificações usando C com a biblioteca ZMQ](15_3_Receiving_Bitcoind_Notifications_with_C.md).
353+
Aprenda mais sobre "Programando o Bitcoind com C" na próxima seção [16.3: Recebendo notificações usando C com a biblioteca ZMQ](16_3_Receiving_Bitcoind_Notifications_with_C.md).

0 commit comments

Comments
 (0)