O ciclo de vida de uma transação Bitcoin | A Star Labs

As transações são os elementos mais importantes na rede bitcoin; Todos os outros elementos foram construídos para garantir que o ciclo de vida das transações propagadas na rede possam ser completados de forma segura, confiável e verificável por qualquer nó conectado à rede bitcoin.

Neste artigo, explico o percurso que uma transação percorre desde a sua originação até a sua verificação e inclusão na blockchain por um minerador. Vale lembrar que cada parte do processo explicado pode ser aprofundada e estudada de forma muito mais detalhada de acordo com o nível de abstração requerido pelo leitor.

A proposta deste artigo é prover uma primeira exposição a todo o ciclo de vida de uma transação Bitcoin a fim de desmistificar o processo e facilitar a escolha por um estudo mais aprofundado de cada uma de suas partes.

ANTES…

Uma resumida definição de alguns termos usados no artigo, caso precise ao longo do texto:

EndereçoUma string de cerca de 26 a 35 caracteres alfanuméricos usada como identificador para o envio de um pagamento em bitcoins (exemplo: 14rruWSPHSCCNzCGyCqreAVp1rfyCZKt9B). Bitcoin usa criptografia de chave pública para permitir a validação da autoria de uma transação na rede por meio de uma assinatura digital e o endereço é produzido a partir da chave pública pertencente a um usuário que, por sua vez, é produzida a partir da chave privada deste mesmo usuário.

CarteiraSoftware comumente usado por usuários Bitcoin para criar e listar um ou mais endereços de recebimento sob o controle de uma ou mais chaves privadas pertencentes ao usuário, e criar, assinar e transmitir transações para a rede. Elas existem na forma de aplicativos web, desktop, mobile e em hardwares dedicados.

ciclo-vida-transacao-bitcoin - capa

Transação Bitcoin ou apenas Transação

A transação nada mais é do que uma estrutura de dados que representa a transferência de um certo valor proveniente de uma ou mais fontes de fundos, chamados inputs, para um ou mais destinos, chamados outputs.

Taxa de Transação (fee)

Um montante de bitcoins adicionado à transação como forma de recompensa ao minerador que conseguir minerar o bloco em que aquela transação se encontra. O montante da taxa de transação é escolhido pelo usuário e/ou software que o usuário está utilizando e varia de acordo com a prioridade requerida pelo usuário para que a transação seja confirmada. No momento, em média, costuma-se pagar cerca de 0.0009 bitcoins de fee por cada 1 Kilobyte em uma transação para pagamentos com prioridade normal. No entanto, isso pode variar bastante de acordo com as características da sua transação – especialmente, tamanho – e demanda por espaço em bloco de outros usuários num dado momento, e, deve mudar bastante nos próximos meses ou anos.

Transação Bitcoin - Hyperledger - Brasília - DF

A TRANSAÇÃO

Em nossa história, Raphael, que está em Tóquio, vai enviar 0.3 bitcoin para a sua irmã Annie, que está em São Paulo.

  1. Annie cria um endereço bitcoin usando a carteira em seu laptop e envia para o seu irmão Raphael que, então, abre a sua carteira no celular e usa sua interface para preencher algumas informações necessárias:
  2. Endereço recipiente sob controle de Annie, que pode ser copiado e colado ou escaneado pelo próprio aplicativo mobile em formato de código QR (15EyiDxFMyVJLWmpt8w5SnKoj1HoVvA62W);
  3. montante a ser enviado (0.3 bitcoin)
  4. taxa de transação, que normalmente é preenchida automaticamente pelo aplicativo de acordo com a prioridade de confirmação do pagamento desejada pelo usuário da carteira e de acordo com as configurações salvas no aplicativo (normal que, neste caso, significa uns 0.0009 bitcoin por cada 1 Kilobyte).

Para enviar, tudo que ele precisa agora é clicar “enviar” no aplicativo e digitar a sua senha/PIN (caso tenha… bom que tenha!) que serve para descriptografar a chave privada utilizada para assinar a transação. A parte de Raphael está feita e, estando conectado à internet, em questão de segundos tanto Annie quanto Raphael já poderão ver a transação em suas carteiras como “não confirmada”, ou seja, esperando por um minerador para verificar e incluir aquela transação na blockchain.

Agora, vamos ver o que aconteceu por trás da interface de usuário…

CRIANDO A TRANSAÇÃO

A carteira usou as entradas do usuário, além de outras informações, para estruturar a transação desejada. Aqui estão os campos contidos em uma transação:

Versão

Com 4 bytes de tamanho, identifica as regras que esta transação segue.

Contador de Inputs

Com 1 a 9 bytes de tamanho, contém o número de inputs utilizados na transação.

Lista de Inputs

Com tamanho variável, contém um ou mais inputs que foram utilizados na transação.

Contador de Outputs

Com 1 a 9 bytes de tamanho, contém o número de outputs utilizados na transação.

Lista de Outputs

Com tamanho variável, contém um ou mais outputs que foram utilizados na transação.

Locktime

Com 4 bytes de tamanho, contém um timestamp Unix ou um número de bloco que representa a partir de que tempo ou bloco uma transação passará a ser considerada válida.

Aqui, você pode se perguntar “Mas e a taxa da transação?”. É importante saber que todos os inputs de uma transação devem ser gastos. Logo, as taxas de transação estão implícitas como a diferença entre a soma de todos inputs e a soma de todos outputs, ou seja, “Taxas = Soma(Inputs) – Soma(Outputs)”.

O que, na prática, significa que todos os inputs não gastos são considerados como taxas de transação para o minerador que processar o bloco em que transação for incluída. Assim, se a soma dos Inputs for maior do que o que Raphael quer pagar a Annie, a carteira, normalmente, é programada para adicionar um endereço sob controle de Raphael como Output para receber o troco da transação; O que, neste caso, pode ser exemplificado como no exemplo abaixo:

Input

1.3 bitcoins de 1GnydUf3Q8rTXViGz89gSagztKxfCLL56i (sob controle de Raphael)

Output de pagamento para Annie

0.3 bitcoins para 166dTQomKMAgqD1ttDcv5tWJ56JaQyVnLK (sob controle de Annie)

Output de troco

0.9999 bitcoin para 17qcKN8S1reYYSrWBQ79KaHLBhhXmtTVfc (sob controle de Raphael)

Taxa de Transação (a sobra da diferença entre Input e Output)

0.0001

Após a carteira estruturar os campos necessários para a transação, o usuário clicar em “enviar” e digitar a senha/PIN para descriptografar a chave privada, a carteira descriptografará a chave privada sob controle do usuário e a usará para assinar a transação como prova de que cada input gasto na transação foi aprovado pelo usuário com controle da chave privada correspondente.

Uma coisa interessante de perceber é que Raphael não precisaria ter criado a estrutura da transação com a própria carteira; Annie poderia ter estruturado a transação e enviado para Raphael apenas assinar e transmitir à rede… Entre outros casos de uso mais úteis e interessantes.

TRANSMITINDO A TRANSAÇÃO BITCOIN

Agora que a transação já está devidamente formada e assinada pela carteira de Raphael, ela precisa ser enviada à rede Bitcoin para que possa chegar a um minerador e, finalmente, ser incluída na blockchain.

Atualmente, o tamanho de uma transação média é de cerca de uns 226 bytes e tudo que a transação criada por Raphael precisa agora é atingir algum dos milhares de nós da rede bitcoin. E, diferente de outros métodos de pagamento como cartões de créditos, Bitcoin é um meio “push” de transferência de valores, ou seja, Raphael não está enviando nenhuma informação confidencial que pode ser usada por agentes maliciosos conectados à rede para criar ou alterar uma transação se passando por ele como nos clássicos roubos de identidade.

Esta característica do Bitcoin permite muitos casos de uso interessantes e inovadores, a simplificação da lógica de gateways de pagamento e uma liberdade na lista de meios que Raphael poderia usar para transferir esta mesma transação.

Por motivos de limitação de hardware e facilidade, a carteira mobile de Raphael não é um nó completo na rede bitcoin, o que significa que ela não guarda a blockchain completa no hardware do celular e não verifica todas as transações por si própria. Sendo assim, a carteira se conecta a um ou mais nós completos na rede e transmite a transação para ele(s) – ele só precisa que a transação chegue a pelo menos um nó conectado à rede bitcoin.

PROPAGANDO A TRANSAÇÃO BITCOIN

Assim que a transação é enviada para qualquer nó conectado à rede bitcoin, ela será verificada por este nó. No caso da transação ser válida – não estar cometendo um duplo gasto de fundos, mal formatada, com assinatura inválida, etc -, este nó que recebeu a transação a propagará para todos os outros nós com os quais ele está conectado e uma mensagem de sucesso retornará de cada nó que validar a transação. Em caso da transação ser inválida, o nó apenas rejeitará a transação e retornará uma mensagem informando a rejeição.

Neste processo de propagação, cada novo nó da rede que receber a transação verificará a transação por si próprio e, em caso de validação, continuará transmitindo para todos os nós com os quais estiver conectado sucessivamente. A rede Bitcoin é uma rede p2p desenhada para propagar transações e blocos de transação de uma forma confiável.

Este processo de verificação independente da transação por cada nó da rede também serve como uma prevenção a spams, ataques de denial-of-service (DoS) e outros ataques do tipo ou erros provenientes de clientes mal programados, pois qualquer problema encontrado na transação fará com que ela seja rejeitada pelo nó e não transmitida aos outros nós conectados a ele. Em regra, uma transação inválida não passará do primeiro nó para o qual ela for transmitida.

Após a transação ser transmitida pela carteira do celular de Raphael para algum nó conectado à rede p2p do bitcoin, ela, atualmente, leva cerca de 1 segundo para ser recebida e processada pela maioria dos nós conectados à rede, e, em boas condições, menos de 10 segundos para ser recebida e processada por pelo menos 90% de todos os nós (tempos médios simplificados para valores em ótimas condições).

Assim sendo, em menos de 10 segundos a transação originada e transmitida por Raphael em Tóquio é vista pela carteira de Annie em São Paulo e adicionada ao histórico de transações como “não confirmada”.

CONFIRMANDO A TRANSAÇÃO

Até agora, passaram-se menos de 10 segundos desde a criação até a transmissão e propagação da transação de Raphael para praticamente todos os nós da rede bitcoin. Tudo o que precisa acontecer agora é um dos mineradores – que também é um nó conectado à rede bitcoin – aceitar esta transação, incluí-la em seu bloco e conquistar o direito de submeter este bloco à blockchain por meio de uma competição de processamento e probabilidade que resulta no Proof-of-Work.

Transação Bitcoin - A Star Labs

CONCLUSÃO

Neste momento final, mineradores ao redor de todo o mundo validaram e incluíram a transação de Raphael para Annie em seus blocos que estão sendo processados com o intuito de alcançar um resultado hash de acordo com a dificuldade atual da rede, que é ajustada a cada 2016 blocos.

Assim que o primeiro minerador com esta transação em seu bloco alcançar o resultado hash esperado pela rede, ele transmitirá o resultado de seu trabalho para que cada nó da rede possa validar por si próprio o trabalho do minerador, adicionar este novo bloco à sua própria cópia da blockchain e continuar propagando esta nova escrita na blockchain; que nada mais é do que um livro-razão público e descentralizado espalhado por todos os nós ao redor do mundo de forma pública e com a possibilidade de verificação por qualquer um que tenha acesso a esta informação.

Annie e Raphael poderão ver em suas carteiras ou por terceiros, como “block explorers” web, que a transação já tem uma confirmação e a cada novo bloco adicionado à blockchain do Bitcoin, uma nova confirmação será contada e a segurança da transação – que já era enorme – aumentará exponencialmente de acordo com que a transação vai sendo “enterrada” na blockchain.

E este foi o resumo de um processo incrível acontecendo a todo momento em computadores ao redor do mundo para permitir a transferência segura, verificável e descentralizada de valores por qualquer pessoa com acesso direto ou indireto à rede bitcoin pelos meios mais criativos possíveis; Um novo campo aberto para a liberdade de inovar e prosperar por meio da tecnologia da informação.

transação-bitcoin-curso-hyperledger brasília

Alex Braz

Atua com delivery de software há 15 anos, nas mais diversas linguagens de programação e tecnologias.
Também é entusiasta de Física Quântica e IoT.

 

 

 

 

 

 

Fazer login com suas credenciais

Esqueceu sua senha?