You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: pt/18_1_Accessing_Bitcoind_with_Go.md
+35-36Lines changed: 35 additions & 36 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,4 +1,4 @@
1
-
# 17.1: Acessando o Bitcoind com Go
1
+
# 18.1: Acessando o Bitcoind com Go
2
2
3
3
> :information_source:**NOTA:** Esta seção foi adicionada recentemente ao curso e é um rascunho inicial que ainda pode estar aguardando revisão.
4
4
@@ -12,7 +12,7 @@ Para nos preparamos para o uso do Go em nossa máquina UNIX, primeiro precisamos
12
12
$ sudo apt install curl
13
13
```
14
14
15
-
Então, vamos ler a [página de downloads do Go](https://golang.org/dl/), para obtermos o link para o download mais recente e posteriormente fazer o download usando `curl`. Para uma configuração Debian, vamos querer usar a versão `linux-amd64`:
15
+
Então, vamos ler a [página de downloads do Go](https://golang.org/dl/) para obtermos o link para o download mais recente e posteriormente fazer o download usando `curl`. Para uma configuração Debian, vamos querer usar a versão `linux-amd64`:
Agora precisamos criar um caminho no Go para especificar nosso ambiente. Abra o arquivo `~ / .profile` com o editor de texto mais utilizado por nós e vamos escolher e adicionar o seguinte ao final dele:
34
+
Agora precisamos criar um caminho no Go para especificar nosso ambiente. Abra o arquivo `~ / .profile` com o editor de texto de sua escolha e adicione o seguinte ao final dele:
35
35
36
36
```
37
37
export GOPATH=$HOME/work
@@ -86,7 +86,7 @@ Devemos ver a contagem de blocos impressa:
86
86
2020/09/01 11:41:24 Block count: 1830861
87
87
```
88
88
89
-
### Criando um projeto`rpcclient`
89
+
### Criando um Projeto`rpcclient`
90
90
91
91
Normalmente, iríamos criar projetos no diretório `~/work/src/myproject/bitcoin`:
92
92
```
@@ -101,13 +101,13 @@ import (
101
101
"github.com/btcsuite/btcd/rpcclient"
102
102
)
103
103
```
104
-
Esta declaração `import` permite que importemos bibliotecas relevantes. Para cada exemplo aqui, precisaremos importar `"log","fmt"` e `"github.com/btcsuite/btcd/rpcclient"`. Podemos precisar importar bibliotecas adicionais em alguns exemplos.
104
+
Esta declaração `import` permite que importemos bibliotecas relevantes. Para cada exemplo aqui, precisaremos importar `"log","fmt"` e `"github.com/btcsuite/btcd/rpcclient"`. Podemos precisar importar bibliotecas adicionais em alguns exemplos.
105
105
106
106
* O `log` é usado para mostrar mensagens de erro na tela. Após cada vez que o node Bitcoin for chamado, uma instrução `if` irá verificar se há algum erro. Se houver erros, o `log` é usado para imprimi-los;
107
107
* O `fmt` é usado para imprimir a saída;
108
108
* O `rpcclient` é obviamente a biblioteca do `rpcclient`;
109
109
110
-
## Construindo nossa conexão
110
+
## Construindo Nossa Conexão
111
111
112
112
Cada função do `bitcoind` no Go começa com a criação da conexão RPC, usando a função `ConnConfig`:
113
113
```
@@ -126,15 +126,15 @@ Cada função do `bitcoind` no Go começa com a criação da conexão RPC, usand
126
126
```
127
127
Os parâmetros da `connCfg` permitem que escolhamos a porta Bitcoin RPC, nome de usuário, senha e se estamos usando a testnet ou mainnet.
128
128
129
-
> **NOTA:** Novamente, precisamos nos certificar de substituir o `User` e o `Pass` com aquele encontrado no nosso `~/.bitcoin/bitcon.conf`.
129
+
> **NOTA:** Novamente, precisamos nos certificar de substituir o `User` e o `Pass` com aqueles encontrados no nosso `~/.bitcoin/bitcon.conf`.
130
130
131
-
A função `rpcclient.New(connCfg, nil)` configura o`client` para nos conectarmos ao nosso node de Bitcoin.
131
+
A função `rpcclient.New(connCfg, nil)` configura o`client` para nos conectarmos ao nosso node Bitcoin.
132
132
133
-
A linha `defer client.Shutdown()` é para desconectar do nosso node Bitcoin, uma vez que a função `main()` termina de ser executada. Após a linha `defer client.Shutdown()` é onde as coisas interessantes acontecem, e será muito fácil de utilizar. Isso porque o `rpcclient` ajuda a transformar os comandos `bitcoin-cli` em funções, usando PascalCase. Por exemplo, `bitcoin-cli getblockcount` se transformará em `client.GetBlockCount` no Go.
133
+
A linha `defer client.Shutdown()` é para desconectar do nosso node Bitcoin, uma vez que a função `main()` termina de ser executada. Após a linha `defer client.Shutdown()` é onde as coisas interessantes acontecem –– e será muito fácil de utilizar. Isso porque o `rpcclient` ajuda a transformar os comandos `bitcoin-cli` em funções, usando PascalCase. Por exemplo, `bitcoin-cli getblockcount` se transformará em `client.GetBlockCount` no Go.
134
134
135
-
### Fazendo uma chamada RPC
135
+
### Fazendo uma Chamada RPC
136
136
137
-
Agora, tudo o que é necessário é fazer uma chamada informativa como `GetBlockCount` ou` GetBlockHash` usando nosso `client`:
137
+
Agora, tudo o que precisamos fazer é uma chamada informativa como `GetBlockCount` ou` GetBlockHash` usando nosso `client`:
138
138
```
139
139
blockCount, err := client.GetBlockCount()
140
140
if err != nil {
@@ -149,7 +149,7 @@ Agora, tudo o que é necessário é fazer uma chamada informativa como `GetBlock
149
149
fmt.Printf("%s\n", blockHash.String())
150
150
```
151
151
152
-
### Fazendo uma chamada RPC com argumentos
152
+
### Fazendo uma Chamada RPC com Argumentos
153
153
154
154
As funções `rpcclient` também podem receber entradas, por exemplo, `client.GetBlockHash(blockCount)` recebe a contagem de blocos como uma entrada. O `client.GetBlockHash (blockCount)` de cima seria parecido com um comando `bitcoin-cli`:
No entanto, uma peculiaridade com hashes no `rpcclient` é que normalmente eles irão ser mostrados em uma codificação diferente se imprimirmos normalmente com o ` blockHash`. Para imprimi-los como uma string, precisamos usar o `blockHash.String()`.
160
160
161
-
### Executando nosso código
161
+
### Executando Nosso Código
162
162
163
-
Podemos baixar o código completo do [diretório src](src / 17_1_blockinfo.go).
163
+
Podemos baixar o código completo do [diretório src](src/18_1_blockinfo.go).
O último número do bloco junto com nosso hash deve ser impresso.
172
+
O último número do bloco, junto com nosso hash, devem ser impressos.
173
173
174
-
## Pesquisando os fundos
174
+
## Procurando por Fundos
175
175
176
-
Devido às limitações do `btcd` no `rpcclient`, não pode fazer o uso da função `getwalletinfo`. No entanto, podemos usar o RPC `getbalance`:
176
+
Devido às limitações do `btcd` no `rpcclient`, não podemos fazer uso da função `getwalletinfo`. No entanto, podemos usar o RPC `getbalance`:
177
177
178
178
```
179
179
wallet, err := client.GetBalance("*")
@@ -183,22 +183,21 @@ Devido às limitações do `btcd` no `rpcclient`, não pode fazer o uso da funç
183
183
184
184
fmt.Println(wallet)
185
185
```
186
-
O `client.GetBalance("*")` requer a entrada `"*"`, devido a uma peculiaridade do `btcd`. O asterisco significa que desejamos obter o saldo de todas as nossas carteiras.
186
+
O `client.GetBalance("*")` requer a entrada `"*"` devido a uma peculiaridade do `btcd`. O asterisco significa que desejamos obter o saldo de todas as nossas carteiras.
187
187
188
-
Se executarmos [o código src](src / 17_1_getbalance.go), deveremos obter uma saída semelhante a esta:
188
+
Se executarmos [o código src](src/18_1_getbalance.go), deveremos obter uma saída semelhante a esta:
189
189
```
190
190
$ go run getbalance.go
191
191
0.000689 BTC
192
192
```
193
193
194
-
## Criando um endereço
194
+
## Criando um Endereço
195
195
196
196
Podemos gerar endereços em Go, mas não podemos especificar o tipo do endereço:
197
197
198
198
Isso requer o uso de uma função especial `chaincfg`, para especificar para qual rede os endereços estão sendo criados. Esta especificação é necessária apenas durante a geração do endereço, por isso é usada apenas neste exemplo. Também podemos incluir isso nos demais exemplos, mas não é necessário.
199
199
200
-
Be sure to import ```"github.com/btcsuite/btcd/chaincfg"```:
201
-
Vamos nos certificar de importar o `"github.com/btcsuite/btcd/chaincfg"`:
200
+
Certifique-se de importar o `"github.com/btcsuite/btcd/chaincfg"`:
202
201
```
203
202
import (
204
203
"log"
@@ -235,20 +234,20 @@ Podemos então criar nosso endereço:
235
234
```
236
235
Uma peculiaridade com o `client.GetNewAddress("")` é que uma string vazia precisa ser incluída para que tudo funcione perfeitamente.
237
236
238
-
Executando o [the source](17_1_getaddress.go) teremos os seguintes resultados:
237
+
Executando o [código fonte](18_1_getaddress.go) teremos os seguintes resultados:
239
238
```
240
239
$ go run getaddress.go
241
240
tb1qutkcj34pw0aq7n9wgp3ktmz780szlycwddfmza
242
241
```
243
242
244
-
### Decodificando um endereço
243
+
### Decodificando um Endereço
245
244
246
-
Criando um endereço exigia um trabalho extra, ao especificar a blockchain correta. Usar um endereço também funcionará, porque teremos que decodificá-lo antes de usá-lo.
245
+
Criar um endereço exigia um trabalho extra, em especificar a blockchain correta. Usar um endereço também exigirá, porque teremos que decodificá-lo antes de usá-lo.
247
246
248
247
Isso significa que teremos que importar as bibliotecas `"github.com/btcsuite/btcutil"` e `"github.com/btcsuite/btcd/chaincfg"`.
249
248
250
249
* O `btcutil` permite que um endereço Bitcoin seja decodificado de uma forma que o `rpcclient` possa entender. Isso é necessário ao trabalhar com endereços no `rpcclient`;
251
-
* O `chaincfg` é (novamente) usado para configurar nossa cadeia como a cadeia Testnet. Isso é necessário para a decodificação de endereços, pois os endereços usados na Mainnet e na Testnet são diferentes.
250
+
* O `chaincfg` é (novamente) usado para configurar nossa chain como a chain Testnet. Isso é necessário para a decodificação de endereços, pois os endereços usados na Mainnet e na Testnet são diferentes.
252
251
253
252
```
254
253
import (
@@ -259,7 +258,7 @@ import (
259
258
"github.com/btcsuite/btcd/chaincfg"
260
259
)
261
260
```
262
-
A variável defaultNet agora é usada para especificar se nosso node do Bitcoin que está na Testnet ou na Mainnet. Essa informação (e o objeto `btcutil`) é então usado para decodificar o endereço.
261
+
A variável defaultNet agora é usada para especificar se nosso node Bitcoin está na Testnet ou na Mainnet. Essa informação (e o objeto `btcutil`) é então usada para decodificar o endereço.
263
262
264
263
> **MAINNET VS TESTNET:**`&chaincfg.TestNet3Params` deve ser `& chaincfg.MainNetParams` na Mainnet.
265
264
@@ -271,9 +270,9 @@ A variável defaultNet agora é usada para especificar se nosso node do Bitcoin
271
270
}
272
271
```
273
272
274
-
> **NOTA:** Precisamos alterar o endereço (`mpGpCMX6SuUimDZKiVViuhd7EGyVxkNnha`) para um que seja da nossa carteira. Podemos usar o `bitcoin-cli listunspent` para encontrar alguns endereços com fundos para o teste. Se quisermos ser realmente sofisticados, podemos modificar o código Go para obter um argumento e, em seguida, escrever um script que executa o `listunspent`, para depois salvarmos a informação em uma variável e executar o código Go nela.
273
+
> **NOTA:** Precisamos alterar o endereço (`mpGpCMX6SuUimDZKiVViuhd7EGyVxkNnha`) para um que seja da nossa carteira. Podemos usar o `bitcoin-cli listunspent` para encontrar alguns endereços com fundos para teste. Se quisermos ser realmente sofisticados, podemos modificar o código Go para obter um argumento e, em seguida, escrever um script que executa o `listunspent`, para depois salvarmos a informação em uma variável e executar o código Go nela.
275
274
276
-
Só depois disso usamos o RPC `getreceivedbyaddress`, no nosso endereço decodificado:
275
+
Só depois disso usamos o RPC `getreceivedbyaddress` no nosso endereço decodificado:
277
276
```
278
277
wallet, err := client.GetReceivedByAddress(addr)
279
278
if err != nil {
@@ -282,20 +281,20 @@ Só depois disso usamos o RPC `getreceivedbyaddress`, no nosso endereço decodif
282
281
283
282
fmt.Println(wallet)
284
283
```
285
-
Ao executar [o código](src/17_1_getamountreceived.go), devemos obter uma saída semelhante a esta:
284
+
Ao executar [o código](src/18_1_getamountreceived.go), devemos obter uma saída semelhante a esta:
286
285
```
287
286
$ go run getamountreceived.go
288
287
0.0085 BTC
289
288
```
290
289
291
-
## Enviando uma transação
290
+
## Enviando uma Transação
292
291
293
292
Agora temos todas as peças do quebra-cabeça no lugar para enviar uma transação. Vamos querer:
294
293
295
294
1. Importar as bibliotecas corretas, incluindo a `chaincfg` para especificar uma rede e o `btcutil` para decodificar um endereço;
296
295
2. Escolher um endereço para enviar;
297
296
3. Decodificar esse endereço;
298
-
4. Executar o `sendtoaddress` para enviar fundos da maneira mais fácil.
297
+
4. Executar o `sendtoaddress` para enviar fundos da maneira fácil.
299
298
```
300
299
package main
301
300
@@ -334,14 +333,14 @@ func main() {
334
333
fmt.Println(sent)
335
334
}
336
335
```
337
-
Quando executamos [o código](src/17_1_sendtransaction.go), o txid da transação nos será retornado:
336
+
Quando executamos [o código](src/18_1_sendtransaction.go), o txid da transação nos será retornado:
Para consultar uma transação, como a que acabamos de enviar, precisaremos fazer mais uma vez algumas conversões, desta vez do txid. O `"github.com/btcsuite/btcd/chaincfg/chainhash"` é importado para permitir que os hashes sejam armazenados no código Go. O `chainhash.NewHashFromStr("hash")` converte um hash em uma string para um formato que funciona com o rpcclient.
347
346
@@ -383,7 +382,7 @@ func main() {
383
382
```
384
383
> **NOTA:** Novamente, vamos querer trocar o txid por um que realmente será reconhecido pelo nosso sistema.
385
384
386
-
Ao executar [o código](src/17_1_lookuptransaction.go), ele imprimirá os detalhes associados a uma transação, como nosso valor e quantas vezes foi confirmado:
385
+
Ao executar [o código](src/18_1_lookuptransaction.go), ele imprimirá os detalhes associados a uma transação, como seu valor e quantas vezes foi confirmada:
387
386
388
387
```
389
388
$ go run lookuptransaction.go
@@ -418,4 +417,4 @@ Embora o `btcd` e o `rpcclient` tenham alguns limites, ainda podemos executar os
418
417
419
418
## O Que Vem Depois?
420
419
421
-
Vamos aprender mais sobre "Conversando com o Bitcoind com Outras Linguagens" na seção [§17.2: Acessando Bitcoin com Java](17_2_Accessing_Bitcoind_with_Java.md).
420
+
Vamos aprender mais sobre "Conversando com o Bitcoind com Outras Linguagens" na seção [§18.2: Acessando Bitcoin com Java](18_2_Accessing_Bitcoind_with_Java.md).
0 commit comments