Pular para o conteúdo

UTxO vs. modelo de contas: como funcionam as transações em blockchain

blockchain-transactions-1 | Cheesecake Labs
Resumo
  • Existem dois modelos principais de registro de transações em blockchain: o baseado em contas (usado pelo Ethereum), que controla saldos diretamente como um ledger tradicional, e o UTxO (introduzido pelo Bitcoin), em que cada transação consome outputs não gastos por inteiro e gera novos outputs, incluindo troco.
  • No modelo UTxO, a taxa é a diferença entre inputs e outputs, e cada output fica travado a um endereço que só é liberado com a assinatura da chave privada do dono; o saldo do usuário é a soma de todos os seus UTxOs.
  • O UTxO oferece mais rastreabilidade, privacidade e paralelização, enquanto o modelo baseado em contas é mais simples e eficiente para sistemas com mudanças frequentes de estado, como smart contracts.
  • O Cardano criou o eUTxO, que estende o UTxO com datum e redeemer para suportar smart contracts de forma determinística: o script atua como validador na hora de gastar o UTxO, e a validade da transação depende apenas dela e de seus inputs, podendo ser verificada off-chain.

As transações em blockchain sustentam as redes de criptomoedas. São elas que determinam como o valor é transferido entre usuários.

Se você trabalha com Bitcoin, Ethereum ou Cardano, entender os mecanismos por trás dessas transações é essencial para quem explora tecnologia blockchain

Neste post, você vai entender dois modelos centrais de registro de transação, o UTxO e o baseado em contas: como cada um funciona, no que eles diferem e por que essa escolha é decisiva para a segurança e o funcionamento das redes blockchain.

Tipos de transação em blockchain

Existem dois modelos principais de registro para pagamentos em blockchain: o baseado em UTxO e o baseado em contas.

Transações baseadas em contas

O modelo baseado em contas é uma das principais abordagens usadas em redes blockchain para acompanhar os saldos e as transações dos usuários.

Nesse modelo, cada usuário tem uma conta única, identificada por um endereço, que guarda o saldo atual. As transações alteram esses saldos diretamente, do mesmo jeito que um banco atualiza uma conta depois de um depósito ou de um saque. 

A força do modelo baseado em contas está na simplicidade e na forma direta de gerenciar saldos. O funcionamento lembra o de um banco atualizando uma conta depois de um depósito ou saque, o que torna o sistema familiar e eficiente para os usuários. 

O Ethereum é um exemplo conhecido de blockchain que adota o modelo baseado em contas. Como o foco está no estado das contas, o processamento de transações e smart contracts fica mais rápido.

Unspent Transaction Output (UTxO)

No modelo UTxO, cada transação consome inputs (que são outputs não gastos de transações anteriores) e gera novos outputs.

Cada input precisa ser usado por inteiro e produz outputs de transação que ainda não foram gastos, chamados de UTxOs. Cada UTxO representa uma quantia de Bitcoin que pode servir de input em transações futuras. Assim que o UTxO original é usado como input, ele passa a ser considerado “gasto” e não pode mais ser usado.

O modelo UTxO, com o conceito de Unspent Transaction Output, foi introduzido pelo Bitcoin para organizar como as transações são registradas no seu blockchain.

Esse modelo garante mais segurança e privacidade. Ele reduz de forma significativa o risco de certos tipos de ataque e cria um ambiente protegido para as transações.

Leia mais: Escalando uma carteira cripto: 30% de crescimento com melhorias de backend e UX/UI

Exemplos de Unspent Transaction Output

Vamos ver como isso funciona na prática. O exemplo clássico de comprar uma pizza com Bitcoin costuma ser usado para explicar o modelo UTxO (Unspent Transaction Output). Nesse caso, assim como quem paga a pizza com dinheiro em espécie, você usa outputs de transações anteriores para pagar e recebe troco na forma de um novo output, se for necessário. 

Suponha que o Gus tenha 10 tokens em um único UTxO e queira comprar uma pizza do John por 7 tokens. Veja como isso funcionaria. 

Como o UTxO precisa ser gasto por inteiro, o UTxO de 10 tokens vira o input e dois UTxOs são gerados como outputs. Depois da transação, o John recebe um UTxO de 7 tokens como pagamento e o Gus recebe um de 3 tokens como troco.

Como o UTxO precisa ser gasto por inteiro, o UTxO de 10 tokens vira o input e dois UTxOs são gerados como outputs. Depois da transação, o John recebe um UTxO de 7 tokens como pagamento e o Gus recebe um de 3 tokens como troco.

A mesma lógica vale quando vários UTxOs entram como inputs. Se um UTxO sozinho não cobre o valor da transação, dá para usar vários, e eles produzem outputs da mesma forma.

Falta um último detalhe: as taxas de transação. Em resumo, a taxa é a diferença entre os inputs e os outputs da transação. Se uma transação tem 10 tokens como inputs e 9 tokens como outputs, o token restante é descontado como taxa. É preciso atenção para não pagar taxas altas por não aproveitar todo o valor dos inputs.

As taxas servem para incentivar os mineradores a processar transações e manter a rede segura. Elas também evitam que usuários sobrecarreguem a rede com transações sem valor. Dentro da transação, um endereço é indicado para criar o output. O direito de usar aquele UTxO em uma transação futura depende desse endereço.

Ele funciona como uma trava que só abre com a assinatura da chave privada do dono. O blockchain acompanha todos os UTxOs de um usuário e soma esses valores para chegar ao saldo.

Modelo de contas vs. UTxO

Comparar o modelo UTxO com o baseado em contas revela algumas diferenças importantes. 

O modelo UTxO, usado pelo Bitcoin, trata cada transação como o gasto de outputs recebidos antes, o que gera novos outputs para transações futuras. É parecido com lidar com dinheiro em espécie, onde cada moeda ou cédula é uma unidade discreta que precisa ser contabilizada. 

Já o modelo baseado em contas, usado em redes como o Ethereum, controla saldos em contas, como um ledger tradicional.

O modelo UTxO oferece mais rastreabilidade e mais paralelização na verificação das transações. Em compensação, o modelo baseado em contas tende a ser mais simples e mais eficiente em sistemas que mudam de estado com frequência, como os que envolvem smart contracts. 

Os dois modelos têm vantagens, e a escolha depende do caso de uso e da arquitetura da rede.

Leia mais: Escalando interoperabilidade em mais de 140 blockchains

Extended Unspent Transaction Output (eUTxO)

Uma das vantagens do modelo baseado em contas introduzido pelo Ethereum é o uso de smart contracts. Um smart contract é um programa autoexecutável armazenado em um blockchain, que roda quando condições predeterminadas são atendidas.

Só que rodar smart contracts no Ethereum altera o ledger carregando apenas as modificações, sem referência ao estado anterior do blockchain. O problema é que o contrato pode nem ser mais aplicável quando chega ao produtor do bloco. Esse modelo não é determinístico, o que o torna imprevisível na prática.

O Cardano, uma plataforma de blockchain de terceira geração, criou o conceito de Extended Unspent Transaction Output (eUTxO) para resolver esse problema. O novo modelo parte da base do UTxO original e o aprimora para lidar com smart contracts sem abrir mão do determinismo.

Uma das diferenças centrais entre os smart contracts tradicionais e o modelo eUTxO é o momento da execução. Contratos no estilo Ethereum são executados quando uma transação é enviada para eles. Já os eUTxOs são executados quando alguém tenta gastar o UTxO que tem um smart contract anexado. 

No Cardano, o script do smart contract é um validador: ele verifica a transação e autoriza ou rejeita o gasto. Por isso as aplicações precisam de uma infraestrutura off-chain para monitorar a atividade on-chain e disparar as ações certas.

A principal vantagem do novo modelo é que o sucesso da transação depende só dela mesma e dos seus inputs. Diferente dos smart contracts baseados em contas, ele não depende do estado global da rede. Na prática, dá para verificar a validade da transação off-chain e, se ela falhar, nem é transmitida para a rede.

Para isso, o eUTxO acrescenta dois elementos novos e decisivos: o datum e o redeemer. Esses componentes permitem uma lógica de transação mais avançada, principalmente na interação com smart contracts.

O papel do datam e do redeemer no eUTxO

O datum é o dado adicional anexado a um output, que dá contexto ou informação sobre a transação.

Esse dado pode ser qualquer coisa relevante para o smart contract: detalhes de propriedade, condições de gasto ou informações necessárias para executar a lógica do contrato.

Já o redeemer é um dado fornecido pelo input da transação que destrava ou “resgata” o UTxO, permitindo que ela siga adiante. O redeemer pode incluir parâmetros que o smart contract vai checar para garantir que a transação cumpre as condições exigidas.

Este diagrama ilustra os modelos UTxO e eUTxO, mostrando como as transações funcionam nos dois casos, com os componentes datum e redeemer no modelo eUTxO.
Este diagrama ilustra os modelos UTxO e eUTxO, mostrando como as transações funcionam nos dois casos, com os componentes datum e redeemer no modelo eUTxO.

Veja um exemplo de como o datum e o redeemer funcionam em transações eUTxO. Quando um participante compra um bilhete de loteria, o smart contract anexa um datum ao UTxO que representa o bilhete.

O datum pode conter o endereço do participante e o número do bilhete. Essa informação é decisiva para determinar o vencedor quando o sorteio termina.

Na hora do sorteio, uma transação separada é iniciada para escolher o bilhete premiado. O smart contract exige um redeemer como input para verificar se as condições corretas foram cumpridas (por exemplo, o prazo do sorteio já passou e existe uma inscrição válida).

O redeemer pode conter o resultado do gerador de números aleatórios da loteria, usado para identificar o bilhete premiado. Assim que o bilhete premiado é identificado, o UTxO com o valor do prêmio é liberado para o endereço do vencedor.

Nesse exemplo, o datum carrega a informação relevante do bilhete e o redeemer fornece a condição (o número sorteado) necessária para destravar os fundos da loteria. Essa interação entre datum e redeemer garante que a transação seja segura e só aconteça quando as condições predefinidas forem cumpridas.

Com datum e redeemer, o modelo eUTxO ganha flexibilidade e segurança em transações complexas, como loterias, leilões ou pagamentos condicionais.

Leia mais: Smart contracts: o que são e como construir os seus

Exemplos de eUTxO no mundo real

Veja alguns exemplos de eUTxO. 

Imagine uma campanha de crowdfunding descentralizada. Cada contribuição seria um UTxO separado e, quando a meta fosse atingida, o smart contract distribuiria os fundos automaticamente, seguindo regras predefinidas.

Isso permite transações rastreáveis e condicionais, que só são executadas se determinados critérios forem cumpridos. Pense em um smart contract que administra um empréstimo. Quando o usuário deposita a garantia, o smart contract retém o UTxO, que representa o valor emprestado.

Se o empréstimo é pago no prazo, a garantia volta para o usuário. Se não é, o smart contract transfere automaticamente a propriedade da garantia para quem emprestou. Esse caráter condicional das transações mostra a flexibilidade do modelo eUTxO em cenários mais complexos, com mais confiabilidade e segurança.

Esses exemplos deixam claro que o eUTxO amplia o que o UTxO tradicional consegue fazer, ao permitir uma lógica de transação mais dinâmica e programável, principalmente em ambientes que dependem de smart contracts.

UTxO vs. eUTxO vs. modelos baseados em contas

Veja um comparativo entre UTxO, eUTxO e modelos baseados em contas:

UTxOeUTxOBaseado em contas
Uso principalBitcoinCardanoEthereum
Modelo de transaçãoBaseado em outputs de transação não gastosUTxO estendido com dados e lógicaBaseado em saldos
Unidade básicaUTxO (output de transação)UTxO com datum e redeemerConta com saldo
Smart contractsLimitadoSuporte nativo e avançadoSuporte nativo
FlexibilidadeMenos flexível para contratosAlta flexibilidade, com lógica programávelAlta flexibilidade
ComplexidadeSimples, cada transação gasta outputs específicosMais complexa por causa das informações adicionaisSimples, focada em saldos
PrivacidadeMaior, por causa da fragmentação dos UTxOsAlta, porque cada UTxO é tratado individualmenteMenor, já que as contas são atualizadas diretamente
ParalelizaçãoAlta, já que transações independentes podem ser processadas em paraleloAlta, pela independência entre UTxOs e contratosBaixa, todas as contas compartilham o mesmo estado

Em UTxOs comuns, o endereço do output aponta para chaves públicas. Em eUTxOs, o endereço também pode apontar para scripts.

Cada script define uma lógica arbitrária que precisa ser satisfeita para gastar o output. Na execução, cada script usa o próprio datum, o redeemer e os elementos da transação para decidir se os fundos podem ser liberados.

Dá para pensar no script como uma equação matemática. Os parâmetros representam o datum e os argumentos representam o redeemer. A equação devolve uma decisão “True” ou “False” sobre liberar ou não os fundos.

Comparação entre os modelos UTxO, eUTxO e baseado em contas

O eUTxO abre novas possibilidades e funcionalidades nas transações em blockchain 

Ao adotar o eUTxO, o Cardano entrega smart contracts mais robustos e seguros do que blockchains que usam o modelo de conta e saldo. O modelo permite que o Cardano sustente aplicações financeiras complexas e apps descentralizados com mais segurança e previsibilidade, já que cada transação é processada de forma independente.

Essa abordagem também ajuda a manter um nível alto de escalabilidade, peça central da missão do Cardano de oferecer uma plataforma blockchain sustentável e eficiente.

Não existe um modelo de transação em blockchain que sirva para tudo. Modelos baseados em contas, como o do Ethereum, oferecem simplicidade e velocidade. O UTxO e sua versão estendida no Cardano, o eUTxO, entregam mais segurança e mais programabilidade, principalmente para smart contracts.

Cada modelo tem seus pontos fortes, ajustados a casos de uso diferentes, da transferência simples de valor até aplicações descentralizadas complexas. Conforme a tecnologia blockchain evolui, entender esses modelos ajuda você a acompanhar as inovações que estão moldando o futuro dos sistemas descentralizados.

Se você quer se aprofundar em transações em blockchain e em como elas funcionam, o blog da Cheesecake Labs tem bastante material.

Tem posts sobre o básico de blockchain e sobre pagamentos em blockchain, além de recortes mais detalhados do universo das transações, incluindo as taxas do Soroban e o nosso estimador de custos de Stellar Lumens (XLM).

E se a sua empresa quer entender melhor como usar transações em blockchain, entre em contato! Vamos adorar conversar sobre as suas ideias.