Skip to content

Commit 0ae3949

Browse files
committed
Review 18_6
1 parent cb8b8de commit 0ae3949

1 file changed

Lines changed: 42 additions & 42 deletions

File tree

pt/18_6_Accessing_Bitcoind_with_Swift.md

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 17.6: Acessando o Bitcoind com Swift
1+
# 18.6: Acessando o Bitcoind com Swift
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
@@ -12,29 +12,29 @@ Ao invés disso, sugerimos a criação de um ambiente Swift ideal em um Mac. Exi
1212

1313
### 1. Instalando o Xcode
1414

15-
Vamos precisar do `Xcode`, o ambiente de desenvolvimento integrado para o Swift e para o Objective-C. Isso pode ser facilmente instalado acessando a Mac App Store e o `Get` Xcode.
15+
Vamos precisar do `Xcode`, o ambiente de desenvolvimento integrado para o Swift e para o Objective-C. Isso pode ser facilmente instalado acessando a Mac App Store e baixando o Xcode.
1616

17-
#### Alternativa: Instalando manualmente
17+
#### Alternativa: Instalando Manualmente
1818

19-
Algumas pessoas desaconselham a instalação da App Store porque é tudo ou nada. Também não funcionará se estivermos usando o Mojave, pois iremos querer evitar as incompatibilidades da Catalina. Nesse caso, podemos fazer o download diretamente da [Área do desenvolvedor](https://developer.apple.com/download/more/) na Apple.
19+
Algumas pessoas desaconselham a instalação da App Store porque é tudo ou nada. Também não funcionará se estivermos usando o Mojave, pois desejaremos evitar as incompatibilidades do Catalina. Nesse caso, podemos fazer o download diretamente da [Área do desenvolvedor](https://developer.apple.com/download/more/) na Apple.
2020

2121
Se estivermos usando o Mojave, precisaremos do arquivo `xip` para o Xcode 10.3.1. Caso contrário, podemos utilizar o mais recente.
2222

23-
Depois de baixado, podemos clicar no `xip` para extraí-lo e mover o aplicativo Xcode para a pasta Aplicativos.
23+
Depois de baixado, podemos clicar no `xip` para extraí-lo e mover o aplicativo Xcode para a pasta de Aplicativos.
2424

25-
De qualquer forma, devemos ter o Xcode instalado na pasta Aplicativos no final desta etapa.
25+
De qualquer forma, devemos ter o Xcode instalado na pasta de Aplicativos no final desta etapa.
2626

27-
### 2. Instalando o servidor Gordian
27+
### 2. Instalando o Servidor Gordian
2828

2929
Também vamos precisar de um node Bitcoin em nosso Mac, para que possamos nos comunicar com ele. Tecnicamente, poderíamos usar um node remoto e acessá-lo com o login e senha RPC pela rede. No entanto, sugerimos a instalação do full node diretamente no Mac, porque essa é a configuração mais segura e limpa, garantindo que nenhuma das comunicações saia de nossa máquina.
3030

31-
Para instalar facilmente um full node em nosso Mac, podemos usar Blockchain Commons '[GordianServer for MacOS](https://github.com/BlockchainCommons/GordianServer-macOS). Podemos seguir as [instruções de instalação](https://github.com/BlockchainCommons/GordianServer-macOS#installation-instructions) no README, mas geralmente tudo que precisamos fazer é baixar o arquivo `dmg` atual, abri-lo e instalar a aplicação em nosso diretório de aplicações.
31+
Para instalar facilmente um full node em nosso Mac, podemos usar o [GordianServer for MacOS](https://github.com/BlockchainCommons/GordianServer-macOS) da Blockchain Commons. Podemos seguir as [instruções de instalação](https://github.com/BlockchainCommons/GordianServer-macOS#installation-instructions) no README, mas geralmente tudo que precisamos fazer é baixar o arquivo `dmg` atual, abri-lo e instalar a aplicação em nosso diretório de aplicações.
3232

33-
Depois, vamos executar o aplicativo GordianServer e dizer a ele para `Start` a Testnet.
33+
Depois, vamos executar o aplicativo GordianServer e dizer a ele para `Start` na Testnet.
3434

3535
> :link: **TESTNET vs. MAINNET:** Ou `Start` na Mainnet.
3636
37-
#### 3. Tornando nosso bitcoin-cli Gordian acessível
37+
#### 3. Tornando Nosso bitcoin-cli Gordian Acessível
3838

3939
Quando desejarmos acessar o `bitcoin-cli` criado pelo GordianServer em nosso Mac local, podemos encontrá-lo em `~/.standup/BitcoinCore/bitcoin-0.20.1/bin/bitcoin-cli`.
4040

@@ -43,9 +43,9 @@ Podemos criar um alias para isso:
4343
alias bitcoin-cli="~/.standup/BitcoinCore/bitcoin-0.20.1/bin/bitcoin-cli -testnet"
4444
```
4545

46-
> :link: **TESTNET vs. MAINNET:** Obviamente, o parâmetro `-testnet` só é necessário se estivermos executando a testnet.
46+
> :link: **TESTNET vs. MAINNET:** Obviamente, o parâmetro `-testnet` só é necessário se estivermos rodando na testnet.
4747
48-
### 4. Encontrando nossas informações do GordianServer
48+
### 4. Encontrando Nossas Informações do GordianServer
4949

5050
Finalmente, precisaremos de nossas informações de `rpcuser` e `rpcpassword`. Essas informações estarão em `~/Library/Application Support/Bitcoin/bitcoin.conf` por padrão no Gordian.
5151
```
@@ -54,9 +54,9 @@ rpcuser=oIjA53JC2u
5454
rpcpassword=ebVCeSyyM0LurvgQyi0exWTqm4oU0rZU
5555
...
5656
```
57-
## Construindo nossa conexão manualmente
57+
## Construindo Nossa Conexão Manualmente
5858

59-
No momento em que este artigo foi escrito, não havia uma biblioteca Bitcoin RPC atualizada e simples de ser usada, que fosse específica para Swift, algo que pudesse entrar e começar a usar imediatamente. Portanto, faremos algo que nunca fizemos antes: Construir uma conexão RPC manualmente.
59+
No momento em que este artigo foi escrito, não havia uma biblioteca Bitcoin RPC atualizada e simples de ser usada, que fosse específica para Swift, algo que pudéssemos baixar e começar a usar imediatamente. Portanto, faremos algo que nunca fizemos antes: construir uma conexão RPC manualmente.
6060

6161
### Grave o Transmissor RPC
6262

@@ -65,9 +65,9 @@ Isso requer apenas a escrita de uma função que passe os comandos RPC para o `b
6565
func makeCommand(method: String, param: Any, completionHandler: @escaping (Any?) -> Void) -> Void {
6666
```
6767

68-
As conexões RPC para o `bitcoind` usam o protocolo HTML, o que significa que precisamos fazer três coisas: Criar uma URL, fazer um URLRequest e, iniciar uma URLSession.
68+
As conexões RPC para o `bitcoind` usam o protocolo HTML, o que significa que precisamos fazer três coisas: Criar uma URL, fazer um URLRequest e iniciar uma URLSession.
6969

70-
#### 1. Criando um URL
70+
#### 1. Criando uma URL
7171

7272
Dentro da função, precisamos criar uma URL a partir do nosso IP, porta, `rpcuser`, `rpcpassword` e wallet:
7373
```
@@ -77,7 +77,7 @@ Dentro da função, precisamos criar uma URL a partir do nosso IP, porta, `rpcus
7777
let rpcpassword = "ebVCeSyyM0LurvgQyi0exWTqm4oU0rZU"
7878
let walletName = ""
7979
```
80-
A conexão RPC real com o Bitcoin Core é construída usando um URL no formato "http://rpcusername:rpcpassword@nodeIp/walletName":
80+
A conexão RPC real com o Bitcoin Core é construída usando uma URL no formato "http://rpcusername:rpcpassword@nodeIp/walletName":
8181
```
8282
let walletUrl = "http://\(rpcusername):\(rpcpassword)@\(nodeIp)/\(walletName)"
8383
@@ -154,9 +154,9 @@ Claro que eventualmente teremos que dizer à `task` para que ela seja iniciada:
154154
```
155155
E isso é "tudo" o que precisamos fazer nessa interação RPC manual, usando uma linguagem de programação como o Swift.
156156

157-
> :pray: **AGRADECIMENTOS:** Obrigado a @Fonta1n3 que forneceu o [código principal](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/issues/137) para nosso Transmissor RPC.
157+
> :pray: **AGRADECIMENTO:** Obrigado @Fonta1n3, que forneceu o [código principal](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/issues/137) para nosso Transmissor RPC.
158158
159-
### Fazendo uma chamada RPC
159+
### Fazendo uma Chamada RPC
160160

161161
Tendo escrito a função RPC `makeCommand`, podemos enviar uma chamada RPC executando-a. Aqui está `getblockchaininfo`:
162162
```
@@ -169,7 +169,7 @@ makeCommand(method: method,param: param) { result in
169169
170170
}
171171
```
172-
### Fazendo uma chamada RPC com argumentos
172+
### Fazendo uma Chamada RPC com Argumentos
173173

174174
Poderíamos da mesma forma obter a contagem de bloco atual a partir dessa informação e usá-la de modo redundante para obter o hash do bloco atual, usando o parâmetro `param`:
175175
```
@@ -189,9 +189,9 @@ makeCommand(method: method,param: param) { result in
189189
}
190190
```
191191

192-
### Executando nosso código
192+
### Executando Nosso Código
193193

194-
O código completo está disponível no [diretório src/](src / 17_6_getinfo.playground). Carregue-o no playground Xcode e, em seguida, "Editor -> Executar Playground" e devemos obter resultados como:
194+
O código completo está disponível no [diretório src/](src/18_6_getinfo.playground). Carregue-o no playground Xcode e, em seguida, "Editor -> Executar Playground" e devemos obter resultados como:
195195
```
196196
{
197197
bestblockhash = 00000000000000069725608ebc5b59e520572a8088cbc57ffa5ba87b7f300ac7;
@@ -236,7 +236,7 @@ O código completo está disponível no [diretório src/](src / 17_6_getinfo.pla
236236
}
237237
Blockhash for 1836745 is 00000000000000069725608ebc5b59e520572a8088cbc57ffa5ba87b7f300ac7
238238
```
239-
## Pesquisando fundos
239+
## Procurando por Fundos
240240

241241
Com nosso novo `makeCommand` para funções RPC, podemos executar um comando como `getwalletinfo` ou `getbalance`:
242242
```
@@ -277,11 +277,11 @@ Balance is 0.01
277277
walletversion = 169900;
278278
}
279279
```
280-
## Criando um endereço
280+
## Criando um Endereço
281281

282282
Criar um endereço é bastante simples, mas que tal criar um endereço legado com um rótulo específico? Isso requer dois parâmetros na nossa chamada RPC.
283283

284-
Uma vez que a simples função `makeCommand` desta seção apenas passa nossos `param`s como as entranhas de um objeto JSON, tudo o que precisamos fazer é formatar corretamente essas entranhas. Esta é uma maneira para fazermos isso:
284+
Uma vez que a simples função `makeCommand` desta seção apenas passa nossos `param`s como as entranhas de um objeto JSON, tudo o que precisamos fazer é formatar corretamente essas entranhas. Aqui está uma maneira para fazermos isso:
285285
```
286286
method = "getnewaddress"
287287
param = "\"learning-bitcoin\", \"legacy\""
@@ -296,7 +296,7 @@ Executá-lo no playground do Xcode produz o seguinte resultado:
296296
```
297297
mt3ZRsmXHVMMqYQPJ8M74QjF78bmqrdHZF
298298
```
299-
Esse resultado é obviamente um endereço legado, op rótulo pode então ser verificado na linha de comando:
299+
Esse resultado é obviamente um endereço legado; seu rótulo pode então ser verificado na linha de comando:
300300
```
301301
$ bitcoin-cli getaddressesbylabel "learning-bitcoin"
302302
{
@@ -309,19 +309,19 @@ Sucesso!
309309

310310
> :information_source: **NOTA:** Como costumamos dizer nesses exemplos de programação, um programa do mundo real seria muito mais sofisticado. Em particular, gostaríamos de poder enviar um objeto JSON real como um parâmetro e, em seguida, ter no nosso programa um `makeCommand` analisando-o e inserindo-o na URLSession de forma adequada. O que temos aqui maximiza a legibilidade e a simplicidade sem enfocar na facilidade de uso.
311311
312-
## Enviando uma transação
312+
## Enviando uma Transação
313313

314314
Como de costume, o envio de uma transação (da maneira mais difícil) é um processo de várias etapas:
315315

316-
0. Gerar ou recebar um endereço de recebimento;
316+
0. Gerar ou receber um endereço de recebimento;
317317
1. Encontrar um UTXO não gasto;
318318
2. Criar uma transação bruta;
319319
3. Assinar a transação bruta;
320320
4. Enviar a transação bruta.
321321

322322
Usando o `address` gerado na etapa anterior como nosso destinatário.
323323

324-
### 1. Encontrando um UTXO não gasto
324+
### 1. Encontrando um UTXO Não Gasto
325325

326326
O RPC `listunspent` permite que encontremos nosso UTXO:
327327
```
@@ -338,11 +338,11 @@ O RPC `listunspent` permite que encontremos nosso UTXO:
338338
let amount = utxo["amount"] as! NSNumber
339339
let new_amount = amount.floatValue - 0.0001
340340
```
341-
Como em outros exemplos, vamos arbitrariamente pegar o enésimo UTXO e pegar o `txid`,`vout` e `amount` dele.
341+
Como em outros exemplos, vamos arbitrariamente pegar o enésimo UTXO e pegar o `txid`, `vout` e `amount` dele.
342342

343343
> :information_source **NOTA:** Mais uma vez, um programa real seria muito mais sofisticado.
344344
345-
### 2. Criando uma transação bruta
345+
### 2. Criando uma Transação Bruta
346346

347347
Criar uma transação bruta é a coisa mais complicada, porque precisamos acertar todos os nossos objetos JSON, arrays e aspas. Veja como fazer isso no Swift, usando a formatação `param` muito básica do transmissor:
348348
```
@@ -352,7 +352,7 @@ Criar uma transação bruta é a coisa mais complicada, porque precisamos acerta
352352
353353
let hex = result as! NSString
354354
```
355-
### 3. Assinando a transação bruta
355+
### 3. Assinando a Transação Bruta
356356

357357
Assinar nossa transação requer apenas que executemos o RPC `signrawtransactionwithwallet`, usando nosso novo `hex`:
358358
```
@@ -365,7 +365,7 @@ Assinar nossa transação requer apenas que executemos o RPC `signrawtransactio
365365
let signedhex = signedhexinfo["hex"] as! NSString
366366
```
367367

368-
### 4. Enviando a transação bruta
368+
### 4. Enviando a Transação Bruta
369369

370370
Enviar nossa transação é igualmente simples:
371371
```
@@ -384,26 +384,26 @@ Enviar nossa transação é igualmente simples:
384384
}
385385
```
386386

387-
O código para este remetente de transação pode ser encontrado no [diretório src/](src/17_6_sendtx.playground).
387+
O código para este remetente de transação pode ser encontrado no [diretório src/](src/18_6_sendtx.playground).
388388

389-
## Usando o Swift de outras maneiras
389+
## Usando o Swift de Outras Maneiras
390390

391391
Isso cobre nossas discussões habituais sobre a programação do Bitcoin RPC usando uma linguagem, mas o Swift é uma linguagem particularmente importante, pois pode ser implantada em dispositivos móveis, um dos principais locais para nossas carteiras. Como tal, podemos querer considerar algumas outras bibliotecas:
392392

393-
* O Blockchain Commons [ios-Bitcoin framework](https://github.com/BlockchainCommons/iOS-Bitcoin) converte a biblioteca Libbitcoin de C++ para Swift;
393+
* O [framework ios-Bitcoin](https://github.com/BlockchainCommons/iOS-Bitcoin) da Blockchain Commons converte a biblioteca Libbitcoin de C++ para Swift;
394394
* [Libwally Swift](https://github.com/blockchain/libwally-swift) é um wrapper Swift para a Libwally.
395395

396396
## Resumo: Acessando o Bitcoind com Swift
397397

398-
O Swift é uma linguagem de programação robusta e moderna que infelizmente ainda não tem nenhuma biblioteca RPC fácil de ser utilizada... O que apenas nos deu a oportunidade de escrever uma função de acesso ao RPC. Com isso em mãos, podemos interagir com o `bitcoind` em um Mac ou criar aplicativos complementares em um iPhone, o que é uma combinação perfeita para usar o Bitcoin com airgap.
398+
O Swift é uma linguagem de programação robusta e moderna que infelizmente ainda não tem nenhuma biblioteca RPC fácil de ser utilizada... o que acabou de nos dar a oportunidade de escrever uma função de acesso ao RPC. Com isso em mãos, podemos interagir com o `bitcoind` em um Mac ou criar aplicativos complementares em um iPhone, o que é uma combinação perfeita para usar o Bitcoin com airgap.
399399

400400
## O Que Vem Depois?
401401

402-
Aprenda sobre o Lightning em [Capítulo 18: Compreendendo a configuração da Lightning](18_0_Understanding_Your_Lightning_Setup.md).
402+
Aprenda sobre o Lightning em [Capítulo 19: Compreendendo Sua Configuração da Lightning](19_0_Understanding_Your_Lightning_Setup.md).
403403

404-
## Variante: implantando o Swift no Ubuntu
404+
## Variante: Implantando o Swift no Ubuntu
405405

406-
Se preferirmos implantar o Swift no Ubuntu, pode fazê-lo, embora a funcionalidade não seja a mesma. Parte do código neste capítulo provavelmente gerará erros que precisaremos resolver e também precisaremos trabalhar mais para vincular as bibliotecas C.
406+
Se preferirmos implantar o Swift no Ubuntu, podemos fazê-lo, embora a funcionalidade não seja a mesma. Parte do código neste capítulo provavelmente gerará erros que precisaremos resolver e também precisaremos trabalhar mais para vincular as bibliotecas C.
407407

408408
Para começar, vamos instalar algumas bibliotecas Debian necessárias:
409409
```
@@ -432,7 +432,7 @@ Swift version 5.1.3 (swift-5.1.3-RELEASE)
432432
Target: x86_64-unknown-linux-gnu
433433
```
434434

435-
### Criando um projeto
435+
### Criando um Projeto
436436
Depois de instalar o Swift em nossa máquina Ubuntu, podemos criar projetos com o comando `package init`:
437437
```
438438
$ mkdir swift-project
@@ -450,7 +450,7 @@ Creating Tests/swift-projectTests/
450450
Creating Tests/swift-projectTests/swift_projectTests.swift
451451
Creating Tests/swift-projectTests/XCTestManifests.swift
452452
```
453-
Também editaremos o `Sources/.../main.swift` e quando estivermos pronto para compilar, podemos usar o comando `build`:
453+
Também editaremos o `Sources/.../main.swift` e, quando estivermos pronto para compilar, podemos usar o comando `build`:
454454
```
455455
$ swift build
456456
[4/4] Linking swift-project

0 commit comments

Comments
 (0)