Você sabe o que são Unspent Transactions Outputs (UTXOs) e como funciona uma transação de bitcoin (BTC)?
Vamos começar explicando de forma simples para, posteriormente, entrarmos melhor nos detalhes. Antes de mais nada, é importante sabermos que um investidor precisa de uma carteira criada na blockchain para ser capaz de possuir BTCs. A rede Bitcoin possui nuances muito particulares sobre o funcionamento de suas transações.
Veja também:
Como guardar criptomoedas? Aumente a segurança da sua wallet!
QUAL O CAMINHO DE UMA TRANSAÇÃO DE BITCOIN?
Como exemplo, vamos imaginar um simples envio de 1,5 BTC de Felipe para Ricardo.
- Felipe – 1,5 BTC à Ricardo
Inicialmente, é criada uma mensagem de transação contendo as informações sobre o remetente (Felipe), sobre o destinatário (Ricardo) e sobre a quantia sendo enviada (1,5 BTC). Uma assinatura digital única e específica para aquela transação será criada, e a transação será transmitida progressivamente aos nodes da rede para que eles verifiquem se está tudo certo com os fundos e com a assinatura.
Feito isto e estando tudo em ordem, a transação de bitcoin fica aguardando em uma área chamada “Mempool” (que deriva do termo Memory Pool) sob o status de “válida”, mas ainda “não-confirmada”. É dessa Mempool que os mineradores irão “pinçar” várias transações e agrupá-las para montar um bloco. Este processo é feito por meio da mineração (Proof-of-Work), onde hardwares super potentes ficam executando algoritmos por meio de tentativa e erro, processo que demanda muito esforço e gasto energético.
Assim, quando o bloco é confirmado, as transações em seu interior também o são. Ao ser validado, este bloco é novamente enviado para os outros computadores da rede a fim de verificarem se está tudo “ok”. Se sim, será adicionado à blockchain e as transações em seu interior serão concluídas.
COMO FUNCIONA A TRANSAÇÃO DE BITCOIN? O QUE SIGNIFICA UTXO?
Ao contrário de transações “convencionais” e do que nossa intuição pode achar, a transação de bitcoin não apresenta saldos de fato, ou seja, não apresenta balanços mantidos em nenhum lugar. O que há é um encadeamento de transações mostrando as quantias que foram passadas de pessoa para pessoa. O crucial para entender como funciona a ledger ou o “saldo” em bitcoins é compreender que eles são compostos somente de transações não gastas, as UTXO – Unspent Transaction Outputs – ou seja, endereços de chaves públicas que receberam transações e que não foram usadas para transferir fundos. Acalmem-se que já iremos entender!
Na verdade, quando uma carteira de bitcoin informa que você tem um número X de BTCs, na prática ela está computando (somando) nada mais do que todas as UTXOs para as quais você possui a chave. É esta soma que, quando olhamos em nossa carteira, determina o que vemos como nosso “saldo”. Pegando nosso exemplo de antes, podemos dizer que uma transferência funciona da seguinte forma:
Para que Felipe envie 1,5 BTCs para Ricardo, ele precisa referenciar uma ou mais transações que recebeu e que, somadas, possuam ao menos 1,5 bitcoins. Isto porque, na rede Bitcoin. Essas transações serão chamadas de “inputs” e o endereço de Ricardo será chamado de “Output”. Ou seja, Felipe precisa que seus inputs somem mais do que 1,5 BTCs.
- Inputs (entrada): Os fundos de origem do valor são chamados de inputs. Essas entradas se referem à saída de uma transação que não foi usada em nenhuma outra. Elas contêm informações do endereço de origem da criptomoeda.
- Outputs (saídas): Já o destino do valor é chamado de output. As saídas contêm o endereço para o qual a transferência foi feita, juntamente com o valor enviado, bem como o endereço de devolução ou de troca.
Podemos dizer que uma transação de bitcoin basicamente consiste em uma estrutura de dados que representa a transferência de um determinado valor de uma origem específica para um destino específico. O node que receber essa transação de Felipe vai verificar se os inputs somam mais de 1,5 BTCs e se Felipe assinou corretamente cada um deles para, aí sim, adicionar essa transação ao tal do Mempool.
Vamos a exemplos mais tangíveis:
Suponhamos, por um momento, que somente 40 bitcoins já tenham sido criados em toda a história, e todos eles estão em posse de Jayme. Jayme quer pagar esses 40 bitcoins a Caio em razão de algum trabalho prestado e, portanto, cria uma transação (transação 1) na rede Bitcoin. Essa transação possuirá 1 output, que é justamente o valor de saída da carteira de Jayme correspondente aos 40 BTCs enviados para Caio. Após essa transação ser validada, Caio passa a ser o detentor da quantia, certo?
Agora, suponhamos que Caio queira pagar à Larissa os 40 bitcoins por um serviço prestado. Caio cria uma nova transação (transação 2), cujo input são os 40 bitcoins que Jayme pagou a Caio. A transação possuirá também 1 output, que será destes mesmos 40 BTCs que Caio está pagando à Larissa. Assim como anteriormente, a transação é a evidência de que Larissa agora tem 40 Bitcoins, e Caio zero. E assim sucessivamente. Vemos que não há registro de saldo pois não há contas individuais, somente uma sequência de transações que se referenciam. Na prática, nunca houve qualquer moeda de fato, apenas um registro eletrônico dizendo que Jayme detinha uma quantia que foi passada de pessoa para pessoa em uma sequência de transações.
No entanto, há uma regra importantíssima na rede Bitcoin que é: Toda vez que se inclui um input, ele será utilizado por inteiro. Ou seja, supondo que Jayme queira enviar 1,5 BTCs para Caio e ele só tenha um input de 2 BTCs, não é possível dividí-lo para enviar a quantia exata de 1,5 BTC. Assim, enviar-se-á o input inteiro de 2 BTCs onde 1,5 será direcionado para Caio e o outro 0,5 será novamente redirecionado para a carteira de Jayme. A diferença do valor voltará para ele.
Pode acontecer também o contrário. Suponhamos que Jayme possua uma carteira com as seguintes transações não gastas (UTXO):
- 0,82776917 (UTXO 1)
- 0,24916314 (UTXO 2)
- 0,71151890 (UTXO 3)
- 0,28951261 (UTXO 4)
A soma de todas essas entradas totalizaria um saldo de 2,07796382 BTCs. Vamos enumerar esses UTXOs de 1 a 4. Caso Jayme quisesse enviar 2 BTCs para Caio precisaria enviar os 4 UTXOs em conjunto, ou seja, utilizando 4 inputs na transação. Na outra ponta, teríamos 2 outputs, sendo um deles direcionado ao pagamento dos 2 BTCs para Caio e, outro, com o retorno dos 0,07796382 BTCs restantes para Jayme. A ideia é a mesma de, ao pagar um comerciante, você precisar dar sua nota de 100 para receber o troco ao invés de poder repartir a ntoa e pagar exatamente o valor específico. Vamos mudar um pouco o cenário e dar mais exemplos.
Desta vez, Jayme tem 40 bitcoins, mas só quer pagar 10 a Caio, mantendo 30 para si. Jayme cria uma transação (transação 1) com 40 BTCs de input (Lembram que é impossível quebrar os UTXOs?), mas desta vez ela possui 2 outputs:
- Os 10 bitcoins que quer enviar para Caio e;
- Os 30 bitcoins que ele quer manter consigo. Então ele basicamente envia 30 BTCs para si próprio.
Posteriormente, Caio quer pagar 5 BTCs para Larissa. Ele cria uma nova transação (transação 2). O input da transação serão os 10 BTCs que ele recebeu de Jayme na transação 1. Aqui, também haverá 2 outputs:
- O primeiro output de 5 BTCs que deseja enviar à Larissa e,
- O segundo output de 5 BTCs remanescentes que ele pagará a ele mesmo, por assim dizer.
Dias depois, Jayme quer pagar 20 bitcoins a Ricardo. Ele cria uma transação (transação 3), cujo input são os 30 bitcoins que ele enviou para si próprio e manteve sob sua posse na transação 1. Também teremos 2 outputs aqui:
- Os 20 bitcoins que quer pagar a Ricardo
- Os 10 bitcoins que quer manter e precisarão ser enviados em retorno para si próprio.
Ricardo decide, então, pegar seus novos ativos e pagar 20 BTC para Larissa. Ele cria a transação 4, cujo input serão os 20 BTCs que recebeu de Jayme. Desta vez, haverá apenas um output, já que diz respeito à exata quantia de envio para Larissa.
Finalmente, Larissa quer pagar 21 BTCs para Felipe. Larissa já recebeu 5 BTCs de Caio e 20 BTCs de Ricardo, mas nenhum desses inputs consegue cobrir a quantia desejada de 21 BTCs. Portanto, Larissa terá que criar uma transação 5 com 2 inputs: o de 5 BTCs recebidos de Caio e o de 20 BTCs recebidos de Ricardo, totalizando 25 BTCs e ultrapassando a quantia desejada (21 BTCs). Assim, teremos 2 outputs:
- 21 BTCs enviados para Felipe e
- 4 BTCs enviados a si própria como “troco”.
Nesta dinâmica, podemos perceber que cada input se refere a um output de uma transação anterior. Na realidade, um usuário ativo da rede Bitcoin pode ter acesso aos outputs de muitas transações anteriores, incluindo várias quantias de “troco” que ele enviou a si próprio no passado. Como vimos, essas quantias são o que chamamos de UTXOs. Se sua carteira te diz ter 50 BTCS, na verdade ela está dizendo que você tem 50 BTCs disponíveis em um ou mais UTXOs que totalizam esse valor.
Percebam que a transação 999 criada por Caio tem 4 inputs, incluindo 1 UTXO de uma transação prévia criada por Pat e outro UTXO de uma transação criada por Carol, além de 2 próprias de Caio onde ele “se pagou” com relação ao troco de transações anteriores. Vale o adendo de que, para fins didáticos, desconsideramos as taxas pagas aos mineradores nos exemplos.