mirror of
https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line.git
synced 2025-06-07 16:06:26 +00:00
Fix links to
This commit is contained in:
parent
55fb576c95
commit
c4384baea5
@ -397,7 +397,7 @@ alias btcunspent="bitcoin-cli listunspent | jq -r '.[] | { txid: .txid, vout: .v
|
||||
|
||||
## Executando o Script de Taxa de Transação
|
||||
|
||||
O [Script de Cálculo de Taxa](src/04_2_i_txfee-calc.sh) está disponível no diretório `src/`. Você pode baixá-lo e salvá-lo como ```txfee-calc.sh```.
|
||||
O [Script de Cálculo de Taxa](../src/04_2_i_txfee-calc.sh) está disponível no diretório `src/`. Você pode baixá-lo e salvá-lo como ```txfee-calc.sh```.
|
||||
|
||||
> :warning: **ATENÇÃO:** Este script não foi verificado extensivamente. Se for usá-lo para verificar as taxas de transação reais, só deve fazê-lo depois de fazer uma verificação pessoal dos valores.
|
||||
|
||||
|
@ -68,7 +68,7 @@ Para completar nossa serialização, traduzimos o código hexadecimal em binári
|
||||
|
||||
## Executando o Script de Conversão de Inteiros
|
||||
|
||||
Um script completo para alterar um número inteiro entre -2147483647 e 2147483647 para uma representação de magnitude assinada do tipo _little-endian_ em hexadecimal pode ser encontrado no [diretório de código src](src/10_2_integer2lehex.sh). Podemos baixar o ```integeer2lehex.sh```.
|
||||
Um script completo para alterar um número inteiro entre -2147483647 e 2147483647 para uma representação de magnitude assinada do tipo _little-endian_ em hexadecimal pode ser encontrado no [diretório de código src](../src/10_2_integer2lehex.sh). Podemos baixar o ```integeer2lehex.sh```.
|
||||
|
||||
> :warning: **AVISO:** Este script não foi verificado de forma consistente. Se formos utilizá-lo para criar scripts de bloqueio reais, precisamos nos certificar de verificar e testar os resultados.
|
||||
|
||||
|
@ -155,7 +155,7 @@ bitcoinrpc_global_cleanup();
|
||||
|
||||
### Testando o Código de Teste
|
||||
|
||||
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).
|
||||
O código de teste pode ser encontrado [no diretório src com o nome 16_1_testbitcoin.c](../src/16_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).
|
||||
|
||||
Podemos compilar e executar o código da seguinte maneira:
|
||||
```
|
||||
@ -223,7 +223,7 @@ printf("Block Count: %d\n",blocks);
|
||||
|
||||
### Testando o Código de Informação
|
||||
|
||||
Vamos recuperar o código de teste que está no [diretório src](15_1_GetMiningInfo.c).
|
||||
Vamos recuperar o código de teste que está no [diretório src](../src/16_1_getmininginfo.c).
|
||||
```
|
||||
$ cc getmininginfo.c -lbitcoinrpc -ljansson -o getmininginfo
|
||||
$ ./getmininginfo
|
||||
|
@ -330,7 +330,7 @@ O código inteiro, com um _pouco_ mais verificação de erros, está disponível
|
||||
|
||||
## Testando o Código
|
||||
|
||||
O código completo pode ser encontrado no [diretório src/](src/16_2_sendtoaddress.c).
|
||||
O código completo pode ser encontrado no [diretório src/](../src/16_2_sendtoaddress.c).
|
||||
|
||||
Compile-o como de costume:
|
||||
```
|
||||
|
@ -121,7 +121,7 @@ Claro, quando terminar o processo, precisamos limpar tudo:
|
||||
|
||||
### Testando o Código de Notificação
|
||||
|
||||
O código-fonte completo está no [diretório src/](src/15_3_chainlistener.c) como de costume. Precisamos compilá-lo:
|
||||
O código-fonte completo está no [diretório src/](../src/16_3_chainlistener.c) como de costume. Precisamos compilá-lo:
|
||||
```
|
||||
$ cc -o chainlistener chainlistener.c -I/usr/local/include -L/usr/local/lib -lzmq -lczmq
|
||||
```
|
||||
|
@ -129,7 +129,7 @@ Em ambos os casos, o argumento é para flags, mas atualmente está definido como
|
||||
|
||||
## Testando um Programa de Teste da Libwally
|
||||
|
||||
O diretório src contém o arquivo [testwally.c](src/17_1_testwally.c), que apenas mostra como funcionam as funções de inicialização e de limpeza.
|
||||
O diretório src contém o arquivo [testwally.c](../src/17_1_testwally.c), que apenas mostra como funcionam as funções de inicialização e de limpeza.
|
||||
|
||||
Podemos compilá-lo da seguinte maneira:
|
||||
```
|
||||
|
@ -82,7 +82,7 @@ Se dizermos tudo certo, devemos obter uma seed de 64 bytes. (Essa é a variável
|
||||
|
||||
## Testando o Código Mnemônico
|
||||
|
||||
O código completo para gerar entropia, gerar um mnemônico BIP39, validar o mnemônico e gerar uma seed pode ser encontrado no [diretório src/](src/17_2_genmnemonic.c). Podemos fazer o download e compilar:
|
||||
O código completo para gerar entropia, gerar um mnemônico BIP39, validar o mnemônico e gerar uma seed pode ser encontrado no [diretório src/](../src/17_2_genmnemonic.c). Podemos fazer o download e compilar:
|
||||
```
|
||||
$ cc genmnemonic.c -lwallycore -lsodium -o genmnemonic
|
||||
```
|
||||
|
@ -115,7 +115,7 @@ Há também uma função `wally_bip32_key_to_address`, que pode ser usada para g
|
||||
|
||||
## Testando o Código HD
|
||||
|
||||
O código para esses exemplos HD pode, como de costume, ser encontrado no [diretório src/](src/17_3_genhd.c).
|
||||
O código para esses exemplos HD pode, como de costume, ser encontrado no [diretório src/](../src/17_3_genhd.c).
|
||||
|
||||
Podemos compilá-lo e testá-lo:
|
||||
```
|
||||
|
@ -116,7 +116,7 @@ Obviamente, há muito mais coisas que poderemos observar nos PSBTs. Na verdade,
|
||||
|
||||
### Testando Nosso Leitor PSBT
|
||||
|
||||
Novamente, o código para este leitor PSBT (extremamente rudimentar e específico) está no [diretório src/](src/17_4_examinepsbt.c).
|
||||
Novamente, o código para este leitor PSBT (extremamente rudimentar e específico) está no [diretório src/](../src/17_4_examinepsbt.c).
|
||||
|
||||
Podemos compilá-lo normalmente:
|
||||
```
|
||||
@ -289,7 +289,7 @@ Mas o que temos ainda não é um PSBT legal, por falta de entradas. Podemos cri
|
||||
```
|
||||
### Testando nosso PSBT Criado
|
||||
|
||||
Neste ponto, devemos ter um PSBT vazio, mas funcionando, que pode ser visto compilando e executando [o programa](src/17_4_createemptypsbt.c).
|
||||
Neste ponto, devemos ter um PSBT vazio, mas funcionando, que pode ser visto compilando e executando [o programa](../src/17_4_createemptypsbt.c).
|
||||
```
|
||||
$ cc createemptypsbt.c -lwallycore -o createemptypsbt
|
||||
$ ./createemptypsbt
|
||||
|
@ -112,7 +112,7 @@ Mostraremos como fazer uso disso na seção §17.7.
|
||||
|
||||
## Testando Nosso Script de Substituição
|
||||
|
||||
Podemos pegar o código de teste do [diretório src/](src/17_5_replacewithscript.c) e compilá-lo:
|
||||
Podemos pegar o código de teste do [diretório src/](../src/17_5_replacewithscript.c) e compilá-lo:
|
||||
```
|
||||
$ cc replacewithscript.c -lwallycore -o replacewithscript
|
||||
```
|
||||
|
@ -33,7 +33,7 @@ $ utxo_vout=$(bitcoin-cli listunspent | jq -r '.[0] | .vout')
|
||||
$ recipient=tb1qycsmq3jas5wkhf8xrfn8k7438cm5pc8h9ae2k0
|
||||
$ rawtxhex=$(bitcoin-cli -named createrawtransaction inputs='''[ { "txid": "'$utxo_txid'", "vout": '$utxo_vout' } ]''' outputs='''{ "'$recipient'": 0.0009 }''')
|
||||
```
|
||||
Embora tenhamos colocado um destinatário e uma quantia na saída, isto é irrelevante, porque nós o reescreveremos. Um código mais elaborado poderia ler as informações `vout` existentes antes de reescrever, mas estamos mantendo as coisas muito próximas do nosso [código original](src/17_5_replacewithscript.c).
|
||||
Embora tenhamos colocado um destinatário e uma quantia na saída, isto é irrelevante, porque nós o reescreveremos. Um código mais elaborado poderia ler as informações `vout` existentes antes de reescrever, mas estamos mantendo as coisas muito próximas do nosso [código original](../src/17_5_replacewithscript.c).
|
||||
|
||||
Aqui está a única alteração necessária, para permitir que especifiquemos os satoshis no `vout`, sem ter que codificá-lo, como no original:
|
||||
```
|
||||
@ -182,7 +182,7 @@ Infelizmente, nem todas as interações entre a Libwally e o `bitcoin-cli` são
|
||||
|
||||
## Importando Chaves Privadas
|
||||
|
||||
Felizmente, podemos fazer quase a mesma coisa importando uma chave privada gerada na Libwally. Dê uma olhada no [genhd-for-import.c](src/17_7_genhd_for_import.c), uma versão simplificada do programa `genhd` da seção [§17.3](17_3_Using_BIP32_in_Libwally.md) que também usa a biblioteca `jansson` da seção [§16.1](16_1_Accessing_Bitcoind_with_C.md) para saída regularizada.
|
||||
Felizmente, podemos fazer quase a mesma coisa importando uma chave privada gerada na Libwally. Dê uma olhada no [genhd-for-import.c](../src/17_7_genhd_for_import.c), uma versão simplificada do programa `genhd` da seção [§17.3](17_3_Using_BIP32_in_Libwally.md) que também usa a biblioteca `jansson` da seção [§16.1](16_1_Accessing_Bitcoind_with_C.md) para saída regularizada.
|
||||
|
||||
O código atualizado também contém uma alteração importante, pois ele solicita uma impressão digital da Libwally para que se possa criar um caminho de derivação de maneira adequada:
|
||||
```
|
||||
|
@ -160,7 +160,7 @@ No entanto, uma peculiaridade com hashes no `rpcclient` é que normalmente eles
|
||||
|
||||
### Executando Nosso Código
|
||||
|
||||
Podemos baixar o código completo do [diretório src](src/18_1_blockinfo.go).
|
||||
Podemos baixar o código completo do [diretório src](../src/18_1_blockinfo.go).
|
||||
|
||||
Podemos então, executar:
|
||||
```
|
||||
@ -185,7 +185,7 @@ Devido às limitações do `btcd` no `rpcclient`, não podemos fazer uso da fun
|
||||
```
|
||||
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.
|
||||
|
||||
Se executarmos [o código src](src/18_1_getbalance.go), deveremos obter uma saída semelhante a esta:
|
||||
Se executarmos [o código src](../src/18_1_getbalance.go), deveremos obter uma saída semelhante a esta:
|
||||
```
|
||||
$ go run getbalance.go
|
||||
0.000689 BTC
|
||||
@ -281,7 +281,7 @@ Só depois disso usamos o RPC `getreceivedbyaddress` no nosso endereço decodifi
|
||||
|
||||
fmt.Println(wallet)
|
||||
```
|
||||
Ao executar [o código](src/18_1_getamountreceived.go), devemos obter uma saída semelhante a esta:
|
||||
Ao executar [o código](../src/18_1_getamountreceived.go), devemos obter uma saída semelhante a esta:
|
||||
```
|
||||
$ go run getamountreceived.go
|
||||
0.0085 BTC
|
||||
@ -333,7 +333,7 @@ func main() {
|
||||
fmt.Println(sent)
|
||||
}
|
||||
```
|
||||
Quando executamos [o código](src/18_1_sendtransaction.go), o txid da transação nos será retornado:
|
||||
Quando executamos [o código](../src/18_1_sendtransaction.go), o txid da transação nos será retornado:
|
||||
|
||||
```
|
||||
$ go run sendtransaction.go
|
||||
@ -382,7 +382,7 @@ func main() {
|
||||
```
|
||||
> **NOTA:** Novamente, vamos querer trocar o txid por um que realmente será reconhecido pelo nosso sistema.
|
||||
|
||||
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:
|
||||
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:
|
||||
|
||||
```
|
||||
$ go run lookuptransaction.go
|
||||
|
@ -154,7 +154,7 @@ PubKey: 0368d0fffa651783524f8b934d24d03b32bf8ff2c0808943a556b3d74b2e5c7d65
|
||||
|
||||
### Executando Nosso Código
|
||||
|
||||
O código para esses exemplos pode ser encontrado no [diretório src/](src/18_2_App-getinfo.java) e deve ser instalado na estrutura de diretório padrão criada neste caso como `~/java-project/src/main/java/com/blockchaincommons/lbtc/App.java`. Ele pode então ser compilado e executado.
|
||||
O código para esses exemplos pode ser encontrado no [diretório src/](../src/18_2_App-getinfo.java) e deve ser instalado na estrutura de diretório padrão criada neste caso como `~/java-project/src/main/java/com/blockchaincommons/lbtc/App.java`. Ele pode então ser compilado e executado.
|
||||
|
||||
```
|
||||
$ mvn compile
|
||||
@ -277,7 +277,7 @@ System.out.println("Sent signedRawTx (txID): " + sentRawTransactionID);
|
||||
|
||||
### Executando Nosso Código
|
||||
|
||||
Agora podemos executar [o código da transação](src/18_2_App-sendtx.java) como `~/java-project/src/main/java/com/blockchaincommons/lbtc/App.java`.
|
||||
Agora podemos executar [o código da transação](../src/18_2_App-sendtx.java) como `~/java-project/src/main/java/com/blockchaincommons/lbtc/App.java`.
|
||||
|
||||
```
|
||||
$ mvn compile
|
||||
@ -316,7 +316,7 @@ Para fazer isso, podemos usar a classe `BitcoinAcceptor` do `JavaBitcoindRpcClie
|
||||
acceptor.run();
|
||||
```
|
||||
|
||||
Veja [o diretório src/](src/18_2_App-listen.java) para o código completo. Cada vez que uma transação é enviada ou um novo bloco é gerado, devemos ver a saída em nosso console:
|
||||
Veja [o diretório src/](../src/18_2_App-listen.java) para o código completo. Cada vez que uma transação é enviada ou um novo bloco é gerado, devemos ver a saída em nosso console:
|
||||
```
|
||||
Transaction: {account=Tests, address=mhopuJzgmTwhGfpNLCJ9CRknugY691oXp1, category=receive, amount=5.0E-4, label=Tests, vout=1, confirmations=0, trusted=false, txid=361e8fcff243b74ebf396e595a007636654f67c3c7b55fd2860a3d37772155eb, walletconflicts=[], time=1513132887, timereceived=1513132887, bip125-replaceable=unknown}
|
||||
|
||||
|
@ -109,7 +109,7 @@ O resultado das funções BCRPC é um objeto JSON contendo informações sobre q
|
||||
|
||||
### Executando Nosso Código
|
||||
|
||||
Podemos encontrar o código `getinfo` no [diretório src/](src/18_3_getinfo.js).
|
||||
Podemos encontrar o código `getinfo` no [diretório src/](../src/18_3_getinfo.js).
|
||||
```
|
||||
$ node getinfo.js
|
||||
1831094
|
||||
@ -162,7 +162,7 @@ agent.getWalletInfo(function (err, walletInfo) {
|
||||
});
|
||||
```
|
||||
|
||||
O código está disponível como [walletinfo.js](src/18_3_walletinfo.js).
|
||||
O código está disponível como [walletinfo.js](../src/18_3_walletinfo.js).
|
||||
```
|
||||
$ node walletinfo.js
|
||||
0.008498
|
||||
@ -260,7 +260,7 @@ Devemos obter uma saída semelhante a esta:
|
||||
}
|
||||
```
|
||||
|
||||
O código completo está disponível no [sendtx.js](src/18_3_sendtx.js).
|
||||
O código completo está disponível no [sendtx.js](../src/18_3_sendtx.js).
|
||||
|
||||
## Resumo: Acessando o Bitcoind com NodeJS
|
||||
|
||||
|
@ -128,7 +128,7 @@ print("---------------------------------------------------------------\n")
|
||||
|
||||
### Executando nosso código
|
||||
|
||||
Podemos usar [o código que está no src/](src/18_4_getinfo.py) e executá-lo com `python3`:
|
||||
Podemos usar [o código que está no src/](../src/18_4_getinfo.py) e executá-lo com `python3`:
|
||||
|
||||
```
|
||||
$ python3 getinfo.py
|
||||
@ -244,7 +244,7 @@ pprint(utxo_tx_details)
|
||||
print("---------------------------------------------------------------\n")
|
||||
```
|
||||
|
||||
Este código está disponível no arquivo [walletinfo.py](src/18_4_walletinfo.py).
|
||||
Este código está disponível no arquivo [walletinfo.py](../src/18_4_walletinfo.py).
|
||||
```
|
||||
$ python3 walletinfo.py
|
||||
---------------------------------------------------------------
|
||||
@ -422,7 +422,7 @@ send_tx = rpc_client.sendrawtransaction(signed_tx['hex'])
|
||||
```
|
||||
### Executando Nosso Código
|
||||
|
||||
[Este código](src/18_4_sendtx.py) está cheio de instruções com `print` para demonstrar todos os dados disponíveis a cada momento:
|
||||
[Este código](../src/18_4_sendtx.py) está cheio de instruções com `print` para demonstrar todos os dados disponíveis a cada momento:
|
||||
```
|
||||
$ python3 sendtx.py
|
||||
Creating a Transaction
|
||||
|
@ -134,7 +134,7 @@ Aqui está o código completo para recuperar um hash de bloco, transformando-o e
|
||||
|
||||
### Executando Nosso Código
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
```
|
||||
$ cargo run
|
||||
@ -289,7 +289,7 @@ println!("{:?}", txid_sent);
|
||||
|
||||
### Executando Nosso Código
|
||||
|
||||
Agora podemos executar o código completo do [src](src/18_5_main-sendtx.rs).
|
||||
Agora podemos executar o código completo do [src](../src/18_5_main-sendtx.rs).
|
||||
|
||||
|
||||
```
|
||||
|
@ -191,7 +191,7 @@ makeCommand(method: method,param: param) { result in
|
||||
|
||||
### Executando Nosso Código
|
||||
|
||||
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:
|
||||
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:
|
||||
```
|
||||
{
|
||||
bestblockhash = 00000000000000069725608ebc5b59e520572a8088cbc57ffa5ba87b7f300ac7;
|
||||
@ -384,7 +384,7 @@ Enviar nossa transação é igualmente simples:
|
||||
}
|
||||
```
|
||||
|
||||
O código para este remetente de transação pode ser encontrado no [diretório src/](src/18_6_sendtx.playground).
|
||||
O código para este remetente de transação pode ser encontrado no [diretório src/](../src/18_6_sendtx.playground).
|
||||
|
||||
## Usando o Swift de Outras Maneiras
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user