Skip to content

Commit cb8b8de

Browse files
committed
Review 18_5
1 parent 73e1a65 commit cb8b8de

1 file changed

Lines changed: 33 additions & 33 deletions

File tree

pt/18_5_Accessing_Bitcoind_with_Rust.md

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 17.5: Acessando o Bitcoind com Rust
1+
# 18.5: Acessando o Bitcoind com Rust
22

33
> :information_source: **NOTA:** Esta seção foi adicionada recentemente ao curso e é um rascunho inicial que ainda pode estar aguardando revisão.
44
@@ -23,9 +23,9 @@ $ source $HOME/.cargo/env
2323

2424
### Configurando o `bitcoincore-rpc`
2525

26-
Para a maioria das linguagens de programação, precisamos instalar uma biblioteca Bitcoin RPC antes de criar nosso primeiro projeto, mas aqui iremos fazer como parte da criação do nosso projeto.
26+
Para a maioria das linguagens de programação, precisamos instalar uma biblioteca Bitcoin RPC antes de criar nosso primeiro projeto, mas aqui iremos fazê-lo como parte da criação do nosso projeto.
2727

28-
### Criando um projeto `bitcoincore-rpc`
28+
### Criando um Projeto `bitcoincore-rpc`
2929

3030
Podemos criar um novo projeto usando `cargo new btc_test`:
3131

@@ -49,7 +49,7 @@ Hello, world!
4949
> :information_source: **NOTA:** se encontrarmos o erro `linker‘ cc ’not found`, teremos que instalar um
5050
Compilador C. Se estivermos no Linux, podemos instalar com as [ferramentas de desenvolvimento](https://www.ostechnix.com/install-development-tools-linux/).
5151

52-
Para acessar o crate (biblioteca) `bitcoincore-rpc`, devemos adicioná-la ao nosso arquivo `Cargo.toml` na seção `dependencies`:
52+
Para acessar o crate (biblioteca) `bitcoincore-rpc`, devemos adicioná-lo ao nosso arquivo `Cargo.toml` na seção `dependencies`:
5353

5454
```rust
5555
[dependencies]
@@ -70,12 +70,12 @@ $ cargo run
7070
Hello, world!
7171
```
7272

73-
Quando estiver usando o `bitcoin-rpc`, normalmente precisaremos incluir o seguinte:
73+
Quando estivermos usando o `bitcoin-rpc`, normalmente precisaremos incluir o seguinte:
7474
```
7575
use bitcoincore_rpc::{Auth, Client, RpcApi};
7676
```
7777

78-
## Construindo nossa conexão
78+
## Construindo Nossa Conexão
7979

8080
Para criarmos um `RPC client` do Bitcoin, vamos modificar o `src/main.rs`:
8181

@@ -94,16 +94,16 @@ fn main() {
9494

9595
Como de costume, vamos nos certificar de inserir nosso nome de usuário e senha corretos no `~/.bitcoin/bitcoin.conf`. Aqui, eles serão usados ​​como argumentos para `Auth :: UserPass`.
9696

97-
> :link: **TESTNET vs MAINNET:** E, como de costume, vamos usar a porta 8332 para a Mainnet.
97+
> :link: **TESTNET vs MAINNET:** E, como de costume, use a porta 8332 para a Mainnet.
9898
99-
Quando terminar, também deve fechar nossa conexão:
99+
Quando terminarmos, também devemos fechar nossa conexão:
100100
```rust
101101
let _ = rpc.stop().unwrap();
102102
```
103103

104104
O `cargo run` deve compilar e executar o exemplo com sucesso com um aviso `warning: unused variable: rpc`
105105

106-
### Fazendo uma chamada RPC
106+
### Fazendo uma Chamada RPC
107107

108108
As chamadas RPC são feitas usando o `rpc Client` que criamos:
109109

@@ -113,7 +113,7 @@ println!("{:#?}", mining_info);
113113
```
114114
Geralmente, as palavras na chamada RPC são separadas por `_`s. Uma lista completa está disponível na [documentação do crate](https://crates.io/crates/bitcoincore-rpc).
115115

116-
### Fazendo uma chamada RPC com argumentos
116+
### Fazendo uma Chamada RPC com Argumentos
117117

118118
O envio de uma chamada RPC com argumentos usando Rust requer apenas o conhecimento de como a função é apresentada. Por exemplo, a função `get_block` é definida da seguinte forma na [documentação](https://docs.rs/bitcoincore-rpc/0.11.0/bitcoincore_rpc/trait.RpcApi.html#method.get_block):
119119

@@ -130,11 +130,11 @@ Aqui está o código completo para recuperar um hash de bloco, transformando-o e
130130
println!("{:?}", block);
131131
```
132132

133-
> **NOTA:** Outra chamada possível que consideramos para esta seção é a `get_address_info`, mas, infelizmente, no momento em que este livro foi escrito, a função `bitcoincore-rpc` não funciona com versões recentes do Bitcoin Core devido ao crate não abordar as mais recentes mudanças de API no Bitcoin Core. Esperamos que isso seja resolvido no próximo lançamento do crate, mas enquanto isso, damos essa atenção ao programador.
133+
> **NOTA:** Outra chamada possível que consideramos para esta seção é a `get_address_info`, mas, infelizmente, no momento de escrita, a função `bitcoincore-rpc` não funciona com versões recentes do Bitcoin Core devido ao crate não abordar as mais recentes mudanças de API no Bitcoin Core. Esperamos que isso seja resolvido no próximo lançamento do crate, mas, enquanto isso programador, _cuidado_.
134134
135-
### Executando nosso código
135+
### Executando Nosso Código
136136

137-
Podemos acessar o [código src](src/17_5_main-getinfo.rs) e executá-lo. Infelizmente, a informação do "Block" sairá um pouco feia porque este exemplo não inclui uma biblioteca para embelezá-la.
137+
Podemos acessar o [código src](src/18_5_main-getinfo.rs) e executá-lo. Infelizmente, a informação do "Block" sairá um pouco feia porque este exemplo não inclui uma biblioteca para embelezá-la.
138138

139139
```
140140
$ cargo run
@@ -154,7 +154,7 @@ GetMiningInfoResult {
154154
Block { header: BlockHeader { version: 541065216, prev_blockhash: 000000000000027715981d5a3047daf6819ea3b8390b73832587594a2074cbf5, merkle_root: 4b2e2c2754b6ed9cf5c857a66ed4c8642b6f6b33b42a4859423e4c3dca462d0c, time: 1599602277, bits: 436469756, nonce: 218614401 }, txdata: [Transaction { version: 1, lock_time: 0, input: [TxIn { previous_output: OutPoint { txid: 0000000000000000000000000000000000000000000000000000000000000000, vout: 4294967295 }, script_sig: Script(OP_PUSHBYTES_3 8ff51b OP_PUSHBYTES_22 315448617368263538434f494e1d00010320a48db852 OP_PUSHBYTES_32 <push past end>), sequence: 4294967295, witness: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] }], output: [TxOut { value: 19721777, script_pubkey: Script(OP_HASH160 OP_PUSHBYTES_20 011beb6fb8499e075a57027fb0a58384f2d3f784 OP_EQUAL) }, TxOut { value: 0, script_pubkey: Script(OP_RETURN OP_PUSHBYTES_36 aa21a9ed63363f3620ab5e38b8860a50c84050e5ec31af3636bbd73f01ba9f14103100ee) }] }, Transaction { version: 2, lock_time: 1832282, input: [TxIn { previous_output: OutPoint { txid: cbf880f73d421baf0aa4f0d28e63ba00e5bc6bd934b91eb0641354ce5ca42f7e, vout: 0 }, script_sig: Script(OP_PUSHBYTES_22 00146b8dbd32e5deb90d22934e1513bae6e70156cd50), sequence: 4294967294, witness: [[48, 68, 2, 32, 13, 89, 205, 30, 67, 24, 196, 83, 65, 224, 44, 138, 98, 58, 81, 135, 132, 209, 23, 166, 23, 44, 3, 228, 95, 102, 166, 214, 62, 38, 155, 147, 2, 32, 119, 2, 34, 246, 148, 255, 166, 10, 90, 52, 242, 32, 74, 241, 123, 148, 89, 199, 197, 3, 152, 134, 242, 215, 109, 61, 241, 241, 13, 70, 86, 207, 1], [2, 192, 145, 170, 206, 55, 4, 36, 138, 145, 217, 50, 19, 73, 130, 136, 245, 131, 184, 142, 239, 75, 13, 67, 17, 177, 57, 86, 151, 139, 89, 35, 109]] }], output: [TxOut { value: 1667908, script_pubkey: Script(OP_HASH160 OP_PUSHBYTES_20 908ca2b8b49ccf53efa2226afa85f6cc58dfd7e7 OP_EQUAL) }, TxOut { value: 9093, script_pubkey: Script(OP_DUP OP_HASH160 OP_PUSHBYTES_20 42ee67664ce16edefc68ad0e4c5b7ce2fc2ccc18 OP_EQUALVERIFY OP_CHECKSIG) }] }, ...] }
155155
```
156156

157-
## Pesquisando os fundos
157+
## Procurando por Fundos
158158

159159
Podemos procurar fundos sem argumentos opcionais usando a função `get_balance`:
160160

@@ -167,12 +167,12 @@ Conforme mostrado, a função `as_btc()` ajuda a gerar o saldo em um formato leg
167167
Balance: 3433.71692741 BTC
168168
```
169169

170-
## Criando um endereço
170+
## Criando um Endereço
171171

172172
A criação de um endereço demonstra como fazer uma chamada RPC com vários argumentos opcionais especificados (por exemplo, um rótulo e um tipo de endereço).
173173

174174
```rust
175-
// Generate a new address
175+
// Gerar um novo endereço
176176
let myaddress = rpc
177177
.get_new_address(Option::Some("BlockchainCommons"), Option::Some(json::AddressType::Bech32))
178178
.unwrap();
@@ -183,7 +183,7 @@ Isso também exigirá que tragamos a definição `json` para o escopo:
183183
use bitcoincore_rpc::{json, Auth, Client, RpcApi};
184184
```
185185

186-
## Enviando uma transação
186+
## Enviando uma Transação
187187

188188
Agora temos tudo de que precisamos para criar uma transação, o que será feito em cinco partes:
189189

@@ -193,9 +193,9 @@ Agora temos tudo de que precisamos para criar uma transação, o que será feito
193193
4. Assinar transação;
194194
5. Enviar transação.
195195

196-
### 1. Listando o UTXOs
196+
### 1. Listando os UTXOs
197197

198-
Para iniciar a criação de uma transação, primeiro encontramos um UTXO para usar. O seguinte leva o primeiro UTXO com pelo menos 0,01 BTC:
198+
Para iniciar a criação de uma transação, primeiro encontramos um UTXO para usar. O seguinte pega o primeiro UTXO com pelo menos 0,01 BTC:
199199

200200

201201
```rust
@@ -218,15 +218,15 @@ let selected_tx = &unspent[0];
218218

219219
println!("selected unspent transaction: {:#?}", selected_tx);
220220
```
221-
Isso exigirá trazer mais estruturas para o escopo:
221+
Isso nos exigirá trazer mais estruturas para o escopo:
222222

223223
```rust
224224
use bitcoincore_rpc::bitcoin::{Address, Amount};
225225
```
226226

227227
Podemos observar que estamos passando cinco variáveis ​​ao comando `list_unspent`. Os primeiros quatro (`minconf`,` maxconf`, `address` e `include_unsafe`) não são usados ​​aqui. O quinto é o `query_options`, que não usamos antes, mas temos algumas opções de filtragem poderosas, incluindo a capacidade de olhar apenas para os UTXOs com um certo valor, mínimo ou máximo.
228228

229-
### 2. Preenchendo as variáveis
229+
### 2. Preenchendo as Variáveis
230230

231231
Para começar a preencher as variáveis ​​que precisaremos para criar uma nova transação, criamos a entrada do `txid` e do `vout` ao UTXO que selecionamos:
232232
```rust
@@ -237,35 +237,35 @@ let selected_utxos = json::CreateRawTransactionInput {
237237
};
238238
```
239239
Em seguida, podemos calcular a quantia que vamos gastar subtraindo uma taxa de mineração dos fundos no UTXO:
240-
```
241-
// send all bitcoin in the UTXO except a minor value which will be paid to miners
240+
```rust
241+
// enviar todo o bitcoin no UTXO exceto um valor pequeno que será pago aos mineradores
242242
let unspent_amount = selected_tx.amount;
243243
let amount = unspent_amount - Amount::from_btc(0.00001).unwrap();
244244
```
245245
Por fim, podemos criar um mapa do hash do endereço e da quantidade para formar a saída:
246-
```
246+
```rust
247247
let mut output = HashMap::new();
248248
output.insert(
249249
myaddress.to_string(),
250250
amount,
251251
);
252252
```
253-
Outra característica é necessária para a variável de saída: O `HashMap`. Ele permite que armazenemos
253+
Outra característica é necessária para a variável de saída: o `HashMap`. Ele nos permite armazenar
254254
valores por chave, que iremos precisar para representar a informação `{address: amount}`.
255255

256256
```rust
257257
use std::collections::HashMap;
258258
```
259259

260-
### 3. Criando a transação bruta
260+
### 3. Criando a Transação Bruta
261261

262-
Agora, estamos prontos para criar uma transação bruta:
262+
Agora estamos prontos para criar uma transação bruta:
263263
```rust
264264
let unsigned_tx = rpc
265265
.create_raw_transaction(&[selected_utxos], &output, None, None)
266266
.unwrap();
267267
```
268-
### 4. Assinando a transação
268+
### 4. Assinando a Transação
269269

270270
A assinatura da transação pode ser feita com um simples uso do `sign_raw_transaction_with_wallet`:
271271
```rust
@@ -276,7 +276,7 @@ let signed_tx = rpc
276276
println!("signed tx {:?}", signed_tx.transaction().unwrap());
277277
```
278278

279-
### 5. Enviando a transação
279+
### 5. Enviando a Transação
280280

281281
Finalmente, podemos transmitir a transação:
282282
```rust
@@ -287,9 +287,9 @@ let txid_sent = rpc
287287
println!("{:?}", txid_sent);
288288
```
289289

290-
### Executando nosso código
290+
### Executando Nosso Código
291291

292-
Agora podemos executar o código completo do [src](src/17_5_main-sendtx.rs).
292+
Agora podemos executar o código completo do [src](src/18_5_main-sendtx.rs).
293293

294294

295295
```
@@ -355,8 +355,8 @@ b0eda3517e6fac69e58ae315d7fe7a1981e3a858996cc1e3135618cac9b79d1a
355355

356356
## Resumo: Acessando o Bitcoind com Rust
357357

358-
O `bitcoincore-rpc` é um crate simples e robusto que permitirá que possamos interagir com o Bitcoin RPC usando Rust. No entanto, no momento em que este livro foi escrito, ele ficou para trás no Bitcoin Core, o que pode causar alguns problemas de uso.
358+
O `bitcoincore-rpc` é um crate simples e robusto que nos permitirá interagir com o Bitcoin RPC usando Rust. No entanto, no momento em que este livro foi escrito, ele ficou para trás no Bitcoin Core, o que pode causar alguns problemas de uso.
359359

360360
## O Que Vem Depois?
361361

362-
Vamos aprender mais sobre "Conversando com o Bitcoind com Outras Linguagens" na seção [§17.6: Acessando o Bitcoind com Swift](17_6_Accessing_Bitcoind_with_Swift.md).
362+
Vamos aprender mais sobre "Conversando com o Bitcoind com Outras Linguagens" na seção [§18.6: Acessando o Bitcoind com Swift](18_6_Accessing_Bitcoind_with_Swift.md).

0 commit comments

Comments
 (0)