UTXO ou Unspent transaction output (saída de transação não gasta) é um dos conceitos centrais que permitem o correto funcionamento da tecnologia blockchain que Satoshi Nakamoto desenvolveu para o Bitcoin, a primeira criptomoeda do mundo.
Décadas antes de ser criado Bitcoin, a obsessão em criar um dinheiro puramente digital assombrava a cabeça de muitas pessoas. Mas um dos principais problemas que todos enfrentaram foi o famoso gasto duplo.
Foi Satoshi Nakamoto que, graças a um conjunto de técnicas, resolveu este grande problema, conseguindo criar o primeiro dinheiro descentralizado puramente digital. Neste artigo explicaremos o que são UTXOs e o grande papel que eles desempenham na criação de transações para que seus bitcoins possam viajar com segurança dentro do protocolo blockchain.
UTXO, um conceito para evitar gastos em dobro
Como já explicamos no artigo Como funcionam as transações em Bitcoin?, uma transação é composta de entradas e saídas. O conjunto de entradas e saídas, juntamente com as moedas a serem enviadas e as assinaturas criptográficas, resultam em um hash da transação, denominado HASH ID.
As entradas são HASH ID de uma transação que recebeu a carteira e que não foram utilizadas anteriormente, ou seja, são UTXO, enquanto a saída é o endereço de destino, para o qual será criado UTXO que posteriormente poderá ser utilizado em uma transação. O mesmo endereço pode ter infinitos UTXO. É por isso que os UTXOs são definidos como um conjunto de transações.
Quando uma pessoa precisa enviar uma transação, ela precisa se alimentar de UTXO. Isto é, de transações recebidas que não foram gastas. Isso significa que uma pessoa pode usar um ou mais UTXOs para a mesma transação. Na verdade, esses UTXOs podem fazer parte de um ou mais endereços em sua carteira. E vamos além, até mesmo uma transação pode ser criada com endereços UTXO de diferentes carteiras, desde que cada uma seja assinada com sua correspondente chave privada.
Isso tudo leva a um lugar: um UTXO só pode ser usado uma vez. E isso é fundamental dentro do funcionamento da tecnologia blockchain, já que faz parte do conjunto de ferramentas que garante que algumas moedas não sejam utilizadas mais de uma vez (o famoso gasto duplo).
Tal é a confiabilidade de usar este mecanismo para identificar moedas não gastas que é a maneira pela qual no Bitcoin podem ser contadas quantas moedas estão em circulação. O que se faz é somar todas as moedas que estão no UTXO, ou seja, nas transações que não foram gastas.
A seguir, deixamos um exemplo simples para que você entenda o fluxo:
Imagine que Maria queira pagar a Pedro um total de R$ 100 em bitcoins por um trabalho. María espera receber o pagamento de algumas pessoas que devem seus bitcoins e desse dinheiro ela pagará pelo trabalho de Pedro.
Quando Maria receber esses pagamentos, ela terá algumas "Entradas" de dinheiro, e com essas entradas fará uma "Saída" para pagar o Pedro. Pagaram as dividas que tinham com Maria, que eram um pagamento de R$ 75 e outro de R$ 50.
Quando ela paga Pedro, Maria tem que usar as duas entradas, já que nenhuma delas tem o suficiente, e ela colocará Pedro como saída.
Depois disso, Pedro terá uma entrada UTXO (ele recebeu o pagamento).
Para onde vão as moedas restantes?
Como você viu, María tinha um total de R$125 divididos em dois UTXOs, mas ela só precisava enviar R$ 100. Ela teve que usar os dois UTXOs, definindo o endereço de Pedro como Saída, mas sua carteira terá feito outra coisa de forma transparente para María. Sua carteira terá colocado como saída um endereço da Maria, à qual terá atribuído os restantes R$ 25. É o que se conhece como direção de troco.
A propósito, existem algumas transações que são convertidas em um UTXO, mas não são geradas por um UTXO anterior, você verá em que consistem mais tarde.
Com o que está descrito acima, você pode entender como esse modelo de "Entradas" y "Saídas", pode nos ajudar a estabelecer relações de posse e concessão de dinheiro. Uma relação que em blockchain é marcada pelo uso de criptografia e que nos dá segurança absoluta de que o dinheiro chegou ao seu destino e que está efetivamente sob o controle do destinatário.
UTXO e sua importância no Bitcoin
No Bitcoin todas as transações têm essa estrutura de entradas e saídas.
- Nas "Inputs" de uma transação Bitcoin, podemos ver as origens do saldo que estamos gerenciando com nossa carteira ou wallet.
- Enquanto nas "Saídas", podemos ver para onde enviamos nosso dinheiro.
- Além disso, podemos ver o dinheiro restante devolvido. Tudo isso é visível e rastreável por qualquer pessoa, já que a blockchain do Bitcoin é pública e transparente.
Se você olhar bem, esse modelo permite que você tenha controle total sobre como o dinheiro é usado e em que condições ele pode ser gasto. Em primeiro lugar, Para usar um saldo Bitcoin, ele deve ser considerado como um UTXO em sua carteira.. Ou seja, alguém deve efetuar um pagamento (uma saída ou UTXO) para que esse pagamento se torne sua entrada e assim você tenha saldo disponível para gastar.
Este é um processo recursivo. Ou seja, ele se repete a partir do momento em que a moeda é gerada como resultado de um bloco minerado. Por exemplo, uma transação coinbase é na verdade um UTXO criado pelo minerador para enviar esse saldo para um endereço sob seu controle. Assim, essa transação de saída se torna uma entrada de dinheiro para o minerador que ele pode gastar posteriormente. O mesmo processo é repetido para o resto dos usuários do Bitcoin. Com isso podemos perceber que os UTXOs são parte essencial das transações Bitcoin e sem eles, seu funcionamento seria impossível.
Expandindo o exemplo de como um UTXO funciona no Bitcoin
Podemos ver a operação de um UTXO em Bitcoin da seguinte maneira:
Daniel quer pagar pelo carro de Luis, avaliado em 1 BTC, e um total de 1,5 BTC está disponível em sua carteira. O saldo de Daniel é dividido em duas direções, a A com 0,8 BTC e a B com 0,7 BTC.
Assim, Daniel vai até Luis e faz o pagamento de 1 BTC. Neste ponto, a carteira de Daniel não pode enviar 1 BTC diretamente porque o saldo está dividido entre dois endereços. Assim que pega ambos os saldos e os converte nas entradas da transação de pagamento. Em seguida, ele pega o endereço de Luis e atribui o envio de 1 BTC a ele, atribui adicionalmente um total de 0,4995 BTC ao endereço da exchange e o restante permanece como comissão de mineração.
Assim que Daniel enviar sua transação, ela será processada e confirmada pela rede, iniciando seu caminho para a irreversibilidade. E neste ponto, será fácil ver onde estão os UTXOs da transação.
Os primeiros UTXOs que podemos detectar no exemplo são os saldos de Daniel. Esses endereços com saldo de 0,8 BTC e 0,7 BTC são dois UTXOs que estão sob seu controle e são os que permitem fazer o pagamento a Luis. Como Daniel está no controle desses saldos, ele pode transformar seu UTXO em “Inputs” para um novo pagamento, como efetivamente faz neste exemplo.
Imediatamente após a rede confirmar a transação de Daniel, a situação muda. Agora, Daniel não está mais no controle dos saldos que tinha originalmente e, em vez disso, sua transação gerou novos UTXOs que substituem os antigos. Os novos UTXOs em questão são representados primeiro, pelo endereço de Luis e o 1 BTC que ele recebeu de Daniel. E segundo, pelo endereço da exchange e os 0,4995 BTC que o Daniel recebeu da rede, pois é o que sobrou do pagamento que ele fez. Como dissemos, o restante para completar o 1,5 BTC que Daniel tinha, em princípio, permanece como pagamento de comissão para o minerador.
Bitcoin Scripts e sua relação com UTXOs
Todo o funcionamento do UTXO em Bitcoin é garantido pelo Bitcoin Script, a linguagem de programação usada para escrever todas as operações em Bitcoin. Cada transação possui um script associado que nos permite:
- Validar se o saldo utilizado é realmente nosso.
- Garantir que os saldos enviados só podem ser gastos pela pessoa para quem os enviamos.
Mas como essas operações são realizadas? Isso é o que explicamos abaixo:
Validando que o saldo é nosso
A primeira tarefa para poder usar um saldo em Bitcoin é demonstrar que esse saldo é de fato nosso. Para isso, a primeira coisa a levar em conta é que cada UTXO que transformamos ema entrada (saldo que vamos gastar) é na verdade a saída de uma transação anterior que nos deu acesso a esses BTC. Ou seja, todo saldo em Bitcoin tem um UTXO associado a ele, e esse UTXO tem um script de bloqueio associado a ele.
Este script de bloqueio é um cadeado digital que devemos abrir para usar o saldo do referido UTXO. Os scripts de bloqueio no Bitcoin são variados, mas o mais comum é o P2PKH (Pay to Public Key Hash). Embora também haja o P2SH (multissig), o P2PK (o mais primitivo de todos). Este script de bloqueio pode ser aberto com a chave privada que resulta no endereço indicado no UTXO.
Portanto, para desbloquear este script, o que devemos fazer é pegar o endereço Bitcoin, junto com nossa chave privada e gerar a chave pública do referido endereço. Ao final carimbamos nossa assinatura digital e com todos esses dados verificados, o saldo do referido endereço é desbloqueado para que possamos utilizá-lo. Ou seja, os nós aceitarão a transação e a colocarão no mempool esperando os mineiros
Pelo contrário, se deixarmos de fazer esse procedimento, simplesmente a transação é rejeitada pelos nós e não poderemos usar o saldo. Esse processo é chamado de script de desbloqueio. Claro, este processo criptográfico é automático e transparente para usuários de uma carteira, todo o processo é feito pela própria carteira, mas agora você sabe o que acontece dentro dela. Nesse esquema, essa parte da operação é descrita no scriptSig de cada Bitcoin Script.
Criação do script de bloqueio
Demonstrando que podemos gastar nossos UTXOs, passamos para o processo de criação da transação, criando um script de bloco para o novo UTXO vinculado ao destino. Nesse caso, o que a carteira faz é criar um script semelhante ao que foi criado para nós anteriormente, o que indica que só pode gastar este novo UTXO quem tiver em sua posse as chaves privadas que controlam os endereços para os quais enviamos.
Desta forma, o que é criado é uma string de validação, onde os bitcoins ao passarem de um endereço para outro, são bloqueados para serem utilizados pela última pessoa que tomar posse deles.
Como você pode ver, no Bitcoin tudo tem uma razão bem definida, e isso permite que todas as suas partes juntas permitam o bom funcionamento da criptomoeda. Sendo um protocolo aberto, todos os nodes que querem fazer parte do protocolo interpretam as regras da mesma forma.
Todas as transações são revisadas por todos os nós, sendo validadas as aceitas pela maioria e confirmadas as aceitas pela maioria do hash power (gerado pelos mineradores). Esses controles garantem democraticamente o cumprimento do protocolo.
Curiosidades do UTXO em Bitcoin
Agora, no exemplo anterior, você certamente viu algumas coisas curiosas sobre UTXOs e como eles funcionam no Bitcoin, e daremos uma explicação nesta seção.
Transações que não vêm de um UTXO
Como indicamos antes, existem algumas transações especiais, algumas que não são geradas com UTXOs, pois as moedas aparecem "magicamente". Este caso particular ocorre nas transações coinbase, que são criadas pelos mineradores no momento da mineração de um bloco e são usadas para obter a recompensa do bloco.
Por que não fazer um pagamento fracionado usando os saldos no BTC?
Lendo o exemplo anterior, você certamente se perguntou por que a carteira Bitcoin de Daniel não fez um pagamento exato de 1 BTC usando uma única entrada? A resposta para isso é que UTXOs representam o saldo dentro do Bitcoin de forma indivisível. Ou seja, não podemos transformar esse saldo em valores menores, a menos que gastemos o saldo criando uma nova transação.
Para tornar mais fácil, vejamos este exemplo: se queremos pagar 1 BTC com nossa carteira, mas esse valor é dividido em 100 UTXOs diferentes que têm 0,01 BTC cada, então nossa carteira pegará os 100 endereços como entradas para nossa transação e com eles fará o pagamento. Ou seja, o protocolo Bitcoin marca esses 100 UTXOs como "gastos". A partir daí, gera uma nova transação com um novo UTXO que é para onde enviamos o pagamento de 1 BTC, e nos deixa sem controle de saldo nos endereços utilizados.
Relacionamento com comissões em Bitcoin
Outra utilidade do UTXO tem a ver com as comissões ou taxas em Bitcoin. No exemplo anterior explicamos que toda vez que fazemos uma transação, a comissão da referida operação é igual à diferença entre as entradas e as saídas. Quer dizer:
Entrada total - produção total = Comissões
Isso nos diz que a construção de uma transação tem desde o início um saldo de comissões. A comissão para os mineradores não está associada a nenhuma saída, então os mineradores ficam com o que não está associado. Ou seja, a entrada total deve ser sempre maior que a saída total associada.
A comissão para os mineiros não é fixa, cada um decide quanto quer pagar dependendo da pressa em que estão, mas é algo que vemos em todas as transações dentro do Bitcoin e tem dois propósitos:
- Incentivar o trabalho dos mineiros que ao gerar um bloco recebem não só a recompensa do mesmo, mas também as comissões de todas as transações confirmadas por dito bloco.
- Impedir que a rede fique vulnerável a ataques maliciosos como DDoS, dusting attack, entre outros. Isso ocorre porque cada transação tem um custo e fazer transações em grandes números tem um custo alto para o invasor.
UTXO em outras blockchains e criptomoedas
O esquema UTXO é tão bom que o resto das criptomoedas decidiram usá-lo em seus sistemas. Claro, cada blockchain pode ajustar esse conceito de maneira diferente. Desta forma, ela pode se adaptar às funções adicionais que cada protocolo blockchain onde são executados pode apresentar. No entanto, a operação básica é a mesma. Portanto, até moedas de privacidade como Monero o Zcash, usam este esquema ajustado às particularidades do seu protocolo.
Curso Avançado de Bitcoin
Nivel avançadoNa Bit2Me Academy, oferecemos a você este curso avançado gratuito sobre Bitcoin, para que você se torne o próximo Satoshi Nakamoto.