Bitcoin por debaixo do capô: 1. Transações no Bitcoin
Uma introdução para iniciantes com um exemplo interativo
O dicionário Cambridge define protocolo como “o sistema de regras e comportamento aceitável usado em cerimônias e ocasiões oficiais”. Se dermos um passo atrás e analisarmos a evolução da espécie humana, poderíamos dizer que talvez, por essa definição, a linguagem humana tenha sido o primeiro protocolo desenvolvido. Com a linguagem, os humanos podem transferir informações entre pares usando um sistema de regras - fonemas.
O problema com a linguagem humana sozinha é que ela não escala. Se o outro par estiver muito longe da pessoa que está falando, nenhuma informação poderá ser trocada. Como bons solucionadores de problemas que somos, novos protocolos de comunicação foram inventados à medida que novos meios foram usados para transmitir informações por maiores distâncias. Sinais de fumaça no ar, código morse nos telégrafos, protocolos de rádio em ondas e, finalmente, TCP-IP em cabos de fibra óptica e ondas de rádio.
Mas não são apenas texto, áudio e vídeo que podem ser trocados por protocolos. O Bitcoin, que é o assunto deste artigo, também é um protocolo. A diferença é que o Bitcoin é um protocolo para custódia e transferência de valor. Portanto, em uma visão geral, o Bitcoin nada mais é do que um conjunto de regras impostas aos participantes da rede para transferir valor uns para os outros.
Aqui eu quero fazer uma visão geral de uma parte do protocolo, as transações.
Transações
Uma transação bitcoin é uma forma de comunicar à rede bitcoin que o proprietário de uma certa quantidade de moedas autorizou a transferência do valor para outra pessoa. Em seguida, o novo proprietário dessas moedas pode autorizar uma transação para um terceiro proprietário e assim por diante, em uma cadeia de custódia. Podemos seguir essa cadeia de custódia até onde as moedas foram emitidas na rede.
Uma transação é simplesmente como uma entrada em um livro-razão. Este livro possui um par de colunas para entradas e seus valores, que debita em uma “conta”, e um par de colunas para saídas e seus valores, que credita valor em outras “contas”.
Observe que, para simplificar, estou usando o termo “conta”. Esse termo não é preciso, mas aprofundar em detalhes aqui apenas complicará demais minha explicação. Falaremos sobre como uma entidade é identificada na rede em outro artigo.
Há um detalhe específico sobre a transação que você deve ter notado: a soma das entradas é menor que as saídas. A diferença entre esses dois valores é uma taxa que é paga aos computadores responsáveis por anexar a transação no livro-razão.
Outro detalhe legal é que cada entrada de uma transação contém uma prova matemática de que o bitcoin que está sendo gasto é de propriedade da entidade que está tentando gastá-lo. Chamamos essa prova matemática de “assinatura digital”. Esta prova pode ser facilmente verificada por qualquer pessoa. Esta é uma técnica usada no Bitcoin para garantir que a entidade que gasta o bitcoin seja o proprietário real, não um mau ator tentando roubar o dinheiro de outra pessoa. Uma analogia disso no mundo analógico seria a assinatura em um cheque.
A saída contém a “conta” do novo proprietário, o valor que está sendo enviado e um conjunto de requisitos que precisam ser atendidos quando essa saída for usada como entrada em outra transação. A assinatura digital que mencionei no último parágrafo é um requisito muito comum. Você pode pensar nisso como um conjunto de regras que devem ser obedecidas para que o receptor possa gastar a saída. Alguns requisitos comuns são:
A entidade “gastante” deve fornecer uma assinatura digital válida, comprovando que as moedas são suas para serem gastas.
A entidade “gastante” deve esperar um tempo “X” antes de gastar a saída.
A entidade “gastante” deve fornecer uma mensagem secreta para gastar a saída.
É muito comum ver transações de bitcoin com pelo menos duas saídas. A razão para isso é que as entradas devem ser inteiramente gastas em uma transação. Ou você gasta tudo ou não gasta nada. Às vezes, a entrada que está sendo usada é maior que o valor que você deseja pagar, então a transação terá uma saída especial para enviar o troco de volta para você.
Exemplo Interativo
Eu preparei um app educativo para você observar as transações e o relacionamento de “cadeia” entre elas de maneira interativa. Você pode acessar esse app aqui.
Entre com a id de uma transação (15e10745f15593a899cef391191bdd3d7c12412cc4696b7bcb669d0feadc8521, por exemplo). O app vai exibir as partes envolvidas nas transações e algumas informações adicionais, como a taxa de transação, por exemplo.
Clique nos links em “INPUTS From” para visualizar a transação da onde essa entrada veio, na cadeia de transações. Clicando nos links em “OUTPUTS To”, você pode ver quantas transações estão associadas com o endereço.
Se quiser dar uma olhada no código fonte desta aplicação, você pode encontrá-lo aqui.
Padrões em Transações
Agora que você sabe o que é uma transação, você pode dar uma olhada em algumas transações em mempool.space (ou no app que eu fiz). Se você olhar o suficiente, verá alguns padrões surgindo.
O padrão mais usual observado é uma transação com uma ou mais entradas e duas saídas. Podemos supor que esta é uma transação comum entre pares na rede. Como mencionamos anteriormente, a segunda saída provavelmente é um endereço de troco, enviando o troco de volta ao remetente da transação.
Transação comum entre pares - mempool.space
Outro padrão que pode ser encontrado é o que chamamos de “Transação de Agregação”. Esse tipo de transação tem muitas entradas e apenas uma saída. Você pode pensar nisso como transformar um monte de moedas em uma nota do mesmo valor. Isso geralmente é feito por carteiras (aplicativos que fornecem suporte a usuários que desejam realizar transações na rede Bitcoin) como forma de consolidar um monte de pequenas saídas não gastas em uma única.
Transação de Agregação - mempool.space
O último padrão que podemos observar é uma transação em lote (ou transação de distribuição). Isso é o oposto da transação de agregação. Uma entrada é enviada para várias saídas. Isso geralmente é feito por entidades comerciais (ou seja, corretoras) para economizar em taxas de transação, pois está distribuindo fundos para seus clientes.
Transação em lote - mempool.space
Uma Carteira “por debaixo do capô”
Como eu disse anteriormente, uma carteira é um aplicativo de software (abreviado como um aplicativo) que fornece suporte a usuários que desejam realizar transações na rede Bitcoin. Dessa forma, o usuário só precisa se preocupar com as coisas que realmente importam para ele:
Para onde deve ser enviado o valor a ser gasto
O valor gasto
Ao utilizar um protocolo padrão para montar uma transação, é possível criar e fornecer a assinatura digital para uma transação totalmente offline, pois o app sabe quais regras deve seguir para criar a transação e pode interpretar os requisitos que devem ser atendidos para passar um saída anterior. Uma conexão com a Internet é necessária apenas para transmitir a transação para a rede.
Vamos supor que Alice quer fazer uma transação de bitcoin para enviar 1 bitcoin para Bob. O aplicativo de carteira de Alice fará o seguinte:
Encontrar as saídas não gastas que Alice possui para usar como entradas para a transação.
Se a soma das entradas for maior que o valor enviado mais a taxa de transação, a carteira criará uma nova saída para enviar os fundos de volta para Alice.
Assinar digitalmente as entradas.
Criar a saída.
Uma Saída é um conjunto de condições que o novo proprietário terá que cumprir quando desejar gastar a saída. Ou seja: “Esta saída paga qualquer entidade que apresente uma assinatura digital válida”.
Transmitir a transação para a rede Bitcoin.
Sumário
Bitcoin é um protocolo para custódia e transferência de valor.
As transações de Bitcoin seguem um conjunto de regras bem definidas. Se alguma das regras não for seguida, a transação é inválida e não pode ser transmitida ou processada.
A transação move os valores das entradas para as saídas
As transações criam uma cadeia de custódia das moedas.
As transações são registradas em um livro-razão.
Uma entrada é uma referência a uma saída de transação anterior, que mostra de onde vem esse valor.
As saídas de uma transação são usadas como entradas em transações mais recentes.
A diferença entre o valor de entrada e o valor de saída é uma taxa paga aos computadores que anexam transações no livro-razão.
Cada entrada fornece prova matemática de que a entidade que faz a transação pode realmente gastar essa entrada. Isso geralmente é fornecido por uma “assinatura digital”.
Esta prova pode ser facilmente verificada por qualquer pessoa.
Uma saída contém a “conta” do destinatário, a quantia que está sendo enviada e um conjunto de requisitos que precisam ser atendidos quando o remetente quiser usar essa saída.
Uma entrada deve ser totalmente gasta ou não ser gasta. É por isso que é comum ver transações de bitcoin com uma saída extra para enviar o troco de volta ao remetente.
Alguns tipos usuais de transações são:
Transações comuns (uma ou mais entradas, duas saídas)
Transações de agregação (várias entradas, uma saída)
Distribuir transações (uma ou mais entradas, várias saídas)
A Carteira é um App que dá suporte ao usuário que deseja realizar transações na rede Bitcoin.
Ótimo explicação! A introdução ficou especialmente boa!
Excelente explicação, aguardando proximos posts