diff --git a/pt/08_0_Expanding_Bitcoin_Transactions_Other.md b/pt/08_0_Expanding_Bitcoin_Transactions_Other.md index 6779937..6453a79 100644 --- a/pt/08_0_Expanding_Bitcoin_Transactions_Other.md +++ b/pt/08_0_Expanding_Bitcoin_Transactions_Other.md @@ -1,4 +1,4 @@ -# Capítulo 8: Expandindo Transações de Bitcoin de Outras Maneiras +# Capítulo 8: Expandindo Transações no Bitcoin de Outras Maneiras A definição de transações básicas descrita no [Capítulo Seis](06_0_Expanding_Bitcoin_Transactions_Multisigs.md) diz que enviamos os _fundos_ _imediatamente_, mas esses são os dois elementos que podem ser alterados. Esta seção final sobre _Expandindo transações de Bitcoin_ fala sobre como enviar coisas que não sejam moedas e como fazer isso em um momento diferente do atual. @@ -15,7 +15,7 @@ Os objetivos secundários incluem a capacidade de: * Planejar usando o poder do Locktime; * Planejar usando o poder de OP_RETURN. -## Tabela de conteúdo +## Tabela de Conteúdo - * [Seção Um: Enviando uma transação com Locktime](08_1_Sending_a_Transaction_with_a_Locktime.md) - * [Seção Dois: Enviando uma transação com dados](08_2_Sending_a_Transaction_with_Data.md) \ No newline at end of file + * [Seção Um: Enviando uma Transação com um Locktime](08_1_Sending_a_Transaction_with_a_Locktime.md) + * [Seção Dois: Enviando uma Transação com Dados](08_2_Sending_a_Transaction_with_Data.md) \ No newline at end of file diff --git a/pt/08_1_Sending_a_Transaction_with_a_Locktime.md b/pt/08_1_Sending_a_Transaction_with_a_Locktime.md index 6b4d446..cdf66d3 100644 --- a/pt/08_1_Sending_a_Transaction_with_a_Locktime.md +++ b/pt/08_1_Sending_a_Transaction_with_a_Locktime.md @@ -1,8 +1,8 @@ -# 8.1: Enviando uma transação com Locktime +# 8.1: Enviando uma Transação com um Locktime Os capítulos anteriores mostraram duas maneiras diferentes de enviar fundos de várias máquinas e para vários destinatários. Mas, existem duas outras maneiras de alterar fundamentalmente as transações básicas. A primeira delas é variar o tempo, escolhendo um tempo de bloqueio ou mais conhecido pela expressão em inglês locktime. Isso nos dá a capacidade de enviar transações brutas em algum momento no futuro. -## Entendendo como o Locktime funciona +## Entendendo Como o Locktime Funciona Ao criar uma transação do tipo locktime, a bloqueamos com um número que representa a altura do bloco (se for um número pequeno) ou um carimbo de data/hora usando o padrão UNIX (se for um número grande). Isso informa à rede Bitcoin que a transação não pode ser colocada no bloco até que o tempo especificado chegue ou a blockchain tenha atingido a altura especificada. @@ -16,11 +16,11 @@ Quando uma transação do tipo locktime está esperando para entrar em um bloco, > O Bitcoin Script capacita ainda mais os dois tipos de timelocks, permitindo o bloqueio de saídas individuais ao invés de toda a transação. Os timelocks absolutos (como Locktime) estão vinculados ao opcode Script OP_CHECKLOCKTIMEVERIFY, que é definido no [BIP 65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki) e que será estudado na seção [§11.2: Usando CLTV em Scripts](11_2_Using_CLTV_in_Scripts.md), enquanto os timelocks relativos (como o Timelock) estão vinculados ao opcode de Script OP_CHECKSEQUENCEVERIFY, que é definido no [BIP 112](https://github.com/bitcoin/bips /blob/master/bip-0112.mediawiki) e que também será abordado na seção [§11.3](11_3_Using_CSV_in_Scripts.md). -## Criando uma transação de Locktime +## Criando uma Transação com Locktime Para criar uma transação com locktime, precisamos primeiro determinar como definiremos o tempo. -### Descobrindo nosso tempo de bloqueio usando o carimbo de data/hora do UNIX +### Descobrindo Nosso Locktime Usando o Carimbo de Data/Hora do UNIX Provavelmente, iremos definir com muito mais frequência o nosso tempo de bloqueio usando um carimbo de data/hora do tipo UNIX que representa uma data e hora específica. Podemos calcular um carimbo de data/hora UNIX usando sites que fazem essa conversão, como o [UNIX Time Stamp](http://www.unixtimestamp.com/) ou o [Epoch Convertor](https://www.epochconverter.com/). No entanto, seria melhor [escrevermos nosso próprio script](https://www.epochconverter.com/#code) em nossa máquina local, para que saibamos que o carimbo de data/hora UNIX que recebemos está correto (lembre-se, não confie, verifique). Se não fizermos isso, pelo menos seria interessante verificar em dois sites diferentes para ter a certeza que tudo está correto. @@ -28,7 +28,7 @@ Provavelmente, iremos definir com muito mais frequência o nosso tempo de bloque > :warning: **AVISO:** O Locktime com carimbos de data/hora tem menos flexibilidade, pois a liberação de blocos não é regular e os tempos de bloqueio podem ser duas horas antes do tempo real, então um locktime significa "mais ou menos nesta data e nesta hora". -### Descobrir o locktime usando a altura do bloco +### Descobrindo Nossoo Locktime Usando a Altura do Bloco Como alternativa, podemos definir o locktime usando um número menor, que representa a altura de um bloco. Para calcular a altura do bloco futuro, precisamos primeiro saber qual é a altura do bloco atual. O ```bitcoin-cli getblockcount``` nos dirá a altura do bloco atual baseado na blockchain da máquina local. Podemos verificar um explorador do Bitcoin como a [mempool.space](https://mempool.space/). @@ -38,7 +38,7 @@ Depois de descobrir a altura atual, podemos decidir até que ponto no futuro ire > :warning: **AVISO:** Se desejamos definir um locktime usando a altura do bloco, devemos definir o tempo de bloqueio para menos de 500 milhões. Se definirmos como sendo 500 milhões ou mais, nosso número será interpretado como um carimbo de data/hora. Como o carimbo de data/hora usando o padrão UNIX com valor de 500 milhões era dia 5 de novembro de 1985, provavelmente significa que nossa transação será permitida a qualquer momento a entrar na blockchain. -## Escrevendo a transação +## Escrevendo a Transação Depois de descobrir o locktime, tudo o que precisamos fazer é escrever uma transação bruta padrão, com uma terceira variável para o ```locktime```: ``` @@ -104,7 +104,7 @@ Observe que o número de sequência (```4294967294```) é menor que ```0xfffffff > :warning: **ATENÇÃO:** Se estivermos criando uma transação bruta com locktime por algum outro meio que não seja o ```bitcoin-cli```, teremos que definir a sequência para um valor menor que ```0xffffffff``` manualmente. -## Enviando a transação +## Enviando a Transação Agora, já estamos familiarizados com a parte final, que é enviar a transação para a rede: ``` @@ -120,11 +120,11 @@ Desde 2013, geralmente não podemos colocar a transação usando um timelock na Assim que o bloqueio de tempo expirar, qualquer pessoa pode enviar a transação assinada para a rede, e o destinatário receberá o saldo como esperado... Desde que a transação não tenha sido cancelada. -## Cancelando uma transação com timelock +## Cancelando uma Transação com Locktime Cancelar uma transação de tempo de bloqueio é _muito_ simples: precisamos apenas enviar uma nova transação usando pelo menos um dos UTXOs. -## Resumo: Enviando uma transação com Locktime +## Resumo: Enviando uma Transação com um Locktime O Locktime oferece uma maneira de criar uma transação que _precisa_ esperar e que _não será aceita_ até que um determinado bloco chegue ou um momento pré-definido passe. Enquanto isso, ela pode ser cancelada simplesmente reutilizando um dos UTXO da transação. @@ -132,4 +132,4 @@ O Locktime oferece uma maneira de criar uma transação que _precisa_ esperar e ## O que vem depois? -Vamos continuar "Expandindo transações de Bitcoin" na seção [§8.2: Enviando uma transação com dados](08_2_Sending_a_Transaction_with_Data.md). \ No newline at end of file +Vamos continuar "Expandindo Transações no Bitcoin" na seção [§8.2: Enviando uma Transação com Dados](08_2_Sending_a_Transaction_with_Data.md). \ No newline at end of file diff --git a/pt/08_2_Sending_a_Transaction_with_Data.md b/pt/08_2_Sending_a_Transaction_with_Data.md index a367ed7..8e5476b 100644 --- a/pt/08_2_Sending_a_Transaction_with_Data.md +++ b/pt/08_2_Sending_a_Transaction_with_Data.md @@ -1,10 +1,10 @@ -# 8.2: Enviando uma transação com dados +# 8.2: Enviando uma Transação com Dados O último jeito de variar a forma como enviamos uma transação simples é usar a transação para enviar dados ao invés de saldos (ou, na prática, enviar algo além dos saldos). Isso nos dá a capacidade de inserir informações na blockchain. Isso é feito através de um comando especial, o ```OP_RETURN```. A pegadinha? Só podemos armazenar 80 bytes por vez! -## Criando nossos dados +## Criando Nossos Dados A primeira coisa que precisamos fazer é criar os 80 bytes (ou menos) de dados que iremos gravar no nosso ```OP_RETURN```. Isso pode ser tão simples quanto preparar uma mensagem ou podemos usar o hash dos dados existentes. Por exemplo, o ```sha256sum``` produz 256 bits de dados, que são apenas 32 bytes, bem abaixo do nosso limite: ``` @@ -14,7 +14,7 @@ $ op_return_data="b9f81a8919e5aba39aeb86145c684010e6e559b580a85003ae25d78237a12e ``` > :book: _O que é um OP_RETURN?_ Todas as transações Bitcoin são construídas com scripts que iremos ver mais a fundo no próximo capítulo. O ```OP_RETURN``` é um script simples que define o OUTPUT como sendo inválido. A convenção resultou no uso dele para incorporar dados na blockchain. -## Separando algumas moedas +## Separando Algumas Moedas Nosso objetivo ao criar uma transação de dados não é enviar dinheiro para alguém, mas colocar dados dentro da blockchain. No entanto, _devemos_ gastar algumas moedas para fazer isso. Só precisamos usar um endereço de troco como sendo nosso _ único_ destinatário. Em seguida, podemos identificar um UTXO e enviá-lo para nosso endereço de troco, sem esquecer da taxa de transação, ao mesmo tempo que usamos a mesma transação para criar um OP_RETURN. @@ -41,7 +41,7 @@ $ utxo_vout=$(bitcoin-cli listunspent | jq -r '.[0] | .vout') $ changeaddress=$(bitcoin-cli getrawchangeaddress) ``` -## Escrevendo uma transação bruta +## Escrevendo uma Transação Bruta Agora podemos escrever uma nova transação bruta com duas saídas: uma é o nosso endereço de alteração para recuperar (a maior parte) do nosso saldo, a outra é um endereço de dados, que é uma variável ```bitcoin-cli``` para um OP_RETURN. ``` @@ -97,18 +97,18 @@ Esta é a cara da transação: ``` Como podemos observar, ela envia a maior parte do dinheiro de volta para o endereço de troco (`tb1qnx9fkrksw6aaaswc3kj0gademhn4ud3q7cz4fm`) menos a taxa de transação. Mais importante, a primeira saída mostra um OP_RETURN com os dados (`b9f81a8919e5aba39aeb86145c684010e6e559b580a85003ae25d78237a12e75`) logo depois. -## Enviando uma transação bruta +## Enviando uma Transação Bruta Assine a transação bruta e envie-a, e logo esse OP_RETURN será incorporado a blockchain! -## Verificando nosso OP_RETURN +## Verificando Nosso OP_RETURN Novamente, podemos olhar para essa transação usando um explorador da blockchain: [https://mempool.space/pt/testnet/tx/a600148ac3b05f0c774b8687a71c545077ea5dfb9677e5c6d708215053d892e8/] Podemos observar um aviso sobre os dados estarem em um "protocolo desconhecido". Se estivermos projetando algum uso regular dos dados ```OP_RETURN```, provavelmente iremos marcar com um prefixo especial, para marcar esse protocolo. Então, os dados OP_RETURN reais podem ser algo como "CONTRACTS3b110a164aa18d3a5ab064ba93fdce62". Este exemplo não usa um prefixo para evitar qualquer tipo de confusão com os espaços de dados. -## Resumo: Enviando uma transação com dados +## Resumo: Enviando uma Transação com Dados Podemos usar o ```OP_RETURN``` para armazenar até 80 bytes de dados na blockchain. Fazemos isso com a palavra-código ```data``` em um ```vout```. Ainda precisaremos enviar alguns satoshinhos, mas basta enviá-lo de volta para um endereço de troco, retirando a taxa de transação. @@ -116,6 +116,6 @@ Podemos usar o ```OP_RETURN``` para armazenar até 80 bytes de dados na blockcha Observe que há alguma controvérsia sobre o uso da blockchain do Bitcoin usando-a para este fim. -## O que vem depois? +## O Que Vem Depois? -Vamos conhecer mais sobre o "Script no Bitcoin" no [Capítulo Nove: Apresentando os Scripts no Bitcoin](09_0_Introducing_Bitcoin_Scripts.md). \ No newline at end of file +Vamos conhecer mais sobre "Programando no Bitcoin" no [Capítulo Nove: Apresentando os Scripts do Bitcoin](09_0_Introducing_Bitcoin_Scripts.md). \ No newline at end of file