Link original em inglês: https://medium.com/nervosnetwork/my-comparison-between-the-utxo-and-account-model-821eb46691b2

No mundo blockchain atual, existem dois métodos principais de manutenção de registros, o modelo UTXO (Unspent Transaction Output) e o modelo de conta. Bitcoin usa o modelo UTXO e Ethereum usa o modelo Account.

O Bitcoin foi originalmente projetado como um sistema de dinheiro eletrônico peer-to-peer. No Bitcoin, cada transação consome o UTXO gerado pela transação anterior e então gera um novo UTXO. O saldo da conta é o conjunto de todos os UTXO não gastos pertencentes ao. endereço O estado global do Bitcoin é uma coleção de todos os UTXOs atualmente não gastos. Ethereum pretende criar um protocolo mais geral que suporte linguagens de programação completas de Turing, nas quais os usuários possam escrever contratos inteligentes e criar vários aplicativos descentralizados. Devido às deficiências do modelo UTXO na preservação e programabilidade do estado, Ethereum introduziu o modelo de conta.

Abaixo expandimos ainda mais as vantagens e desvantagens dos dois modelos.

Modelo UTXO


No modelo UTXO, as transações representam apenas alterações na coleção UTXO. Os conceitos de contas e saldos são abstrações superiores nas coleções UTXO, e os conceitos de números de contas e saldos só existem em carteiras.

vantagem:

  1. O cálculo ocorre fora da cadeia e a transação em si é tanto o resultado quanto a prova. O nó só precisa realizar verificação e não precisa realizar cálculos adicionais na transação e não há armazenamento de estado adicional. O cálculo da saída UTXO da própria transação é concluído na carteira, de modo que a carga computacional da transação é totalmente suportada pela carteira, o que reduz até certo ponto a carga da cadeia.

  2. Exceto para transações Coinbase, a entrada da transação está sempre vinculada a um UTXO. As transações não podem ser reproduzidas e a sequência e as dependências das transações podem ser facilmente verificadas, e se as transações foram consumidas também podem ser facilmente comprovadas.

  3. O modelo UTXO não tem estado e é mais fácil de processar simultaneamente.

  4. Melhor privacidade para transações do tipo P2SH. As entradas na transação não estão relacionadas entre si e tecnologias como o CoinJoin podem ser usadas para aumentar um certo grau de privacidade.

deficiência:

  1. Ele é incapaz de implementar alguma lógica mais complexa e tem pouca programabilidade. Para lógicas complexas ou contratos que exigem preservação do estado, a implementação é difícil e a utilização do espaço estatal é relativamente baixa.

  2. Quando houver mais entradas, os scripts de testemunha também aumentarão. A própria assinatura consome mais CPU e espaço de armazenamento.

Modelo de conta

Para o modelo Account, o modelo Account salva o estado mundial, e o estado da cadeia é geralmente acordado na forma de StateRoot e ReceiptRoot no bloco. A transação é apenas o evento em si e não contém o resultado. O consenso da transação e o consenso do Estado podem ser essencialmente isolados.

vantagem:

  1. O contrato é armazenado na Conta na forma de código, e a Conta possui seu próprio estado. Este modelo tem melhor programabilidade, é mais fácil de entender pelos desenvolvedores e possui uma gama mais ampla de cenários.

  2. As transações em massa são mais baratas. Imagine que o pool de mineração pague aos mineradores uma taxa de manuseio em UTXO, porque cada entrada e saída exigem um script de testemunha ou script de bloqueio separado, a transação em si será muito grande e a verificação de assinatura e o armazenamento de transações consumirão recursos valiosos na cadeia. . O modelo de Conta pode reduzir bastante os custos por meio de contratos.

deficiência:

  1. Não há dependência entre as transações do modelo de conta e o problema de repetição precisa ser resolvido.

  2. Para a implementação de Lightning Network/Thunder Network, Plasma, etc., um mecanismo de prova de prova mais complexo é necessário para a prova do usuário, e um protocolo mais complexo é necessário para a migração de estado das subcadeias para a cadeia principal.

UTXO VS Conta

Vamos fazer algumas análises e comparações das vantagens e desvantagens acima.

Primeiro, em relação a questões de cálculo

A transação UTXO em si não possui cálculos complicados para o blockchain. Simplificando, não é totalmente preciso. Primeiro, a maioria das transações do Bitcoin são P2SH e o script Witness não é Turing completo. existe. Para o modelo de conta, como o Ethereum, como a maioria dos cálculos são feitos na cadeia e são Turing completos, os cálculos são geralmente mais complexos e a segurança do contrato pode facilmente se tornar um problema relativamente grande. É claro que o fato de ser Turing completo ou não não tem influência direta sobre se é um modelo de conta. Mas após a introdução do modelo de conta, o contrato pode existir como uma entidade independente que não é controlada por ninguém, o que é de grande importância.

Em segundo lugar, em relação à questão do UTXO ser mais fácil de concorrer

No modelo UTXO, o estado mundial é uma coleção de UTXOs. Para verificar as transações mais rapidamente, os nós precisam armazenar os índices de todos os UTXOs na memória, portanto, os UTXOs são muito caros. UTXOs que não são consumidos por muito tempo sempre ocuparão a memória do nó. Portanto, para este modelo, os usuários deveriam teoricamente ser incentivados a produzir menos UTXO e consumir mais UTXO. No entanto, se você quiser usar UTXO para transações paralelas, precisará de mais UTXO como entrada e, ao mesmo tempo, precisará gerar mais UTXO para garantir a simultaneidade. Isso é essencialmente um ataque de poeira na rede. E como as transações são construídas dentro da carteira, é necessário um design mais complexo da carteira. Olhando novamente para o modelo de Conta, cada conta pode ser considerada como uma máquina de estado separada que não afeta uma à outra, e as contas se comunicam por meio de mensagens. Portanto, em teoria, quando um usuário inicia múltiplas transações, e essas transações não chamam uma à outra a mesma Conta, as transações podem ser executadas simultaneamente.

Terceiro, em relação à questão da repetição da transação do modelo de conta

Ethereum usa o método de adição de nonce na conta. Cada transação corresponde a um nonce, e o nonce é incrementado a cada vez. Embora este método pretenda resolver o problema de repetição, ele também introduz problemas sequenciais e torna as transações incapazes de serem paralelizadas. Por exemplo, no Ethereum, um usuário envia múltiplas transações. Se a primeira transação não for empacotada, as transações subsequentes não serão empacotadas com sucesso. No CITA, utilizamos um esquema de nonce aleatório, para que não haja dependência sequencial entre as transações do usuário, o que não causará falha serial, e também possibilita que as transações sejam processadas em paralelo.

Quarto, problemas de armazenamento

Porque no modelo UTXO o estado só pode ser salvo em transações. O estado do modelo Account é salvo no nó e armazenado usando MPT no Ethereum. No Block, apenas o consenso StateRoot é necessário. Dessa forma, para dados on-chain, o modelo de conta é realmente menor e a quantidade de transmissão da rede é menor. Ao mesmo tempo, o estado é salvo localmente no nó usando MPT, que é mais eficiente no uso do espaço. Por exemplo, se A transfere dinheiro para B, se houver 2 entradas e 2 saídas em UTXO, 2 scripts de testemunha e 2 scripts de bloqueio são necessários no modelo de conta, apenas uma assinatura é necessária e o conteúdo da transação contém apenas o valor; . Após a implementação do mais recente Segregated Witness, a quantidade de dados de transação Bitcoin também foi bastante reduzida, mas, na verdade, os nós de verificação e os nós completos ainda precisam transmitir e verificar o script do Witness.

Quinto, para que os nós leves obtenham um determinado status de endereço, UTXO é mais complicado

Por exemplo, em uma carteira, você precisa solicitar todos os UTXOs sobre um determinado endereço do nó completo. O nó completo pode enviar alguns UTXOs. É difícil para a carteira verificar se o UTXO foi consumido. a carteira para provar que o UTXO é o conjunto completo e não uma coleção parcial. O modelo da Conta é muito mais simples. O estado correspondente no Estado é encontrado com base no endereço. A prova do estado atual pode comprovar a autenticidade dos dados do contrato. Claro, para UTXO, a raiz do UTXO também pode ser verificada em cada bloco. Isso está relacionado à implementação atual do Bitcoin e não é um recurso do UTXO.


para concluir

Resumindo, o modelo de Conta tem mais vantagens em termos de programabilidade e flexibilidade em negócios simples e cross-chain, o UTXO tem suas vantagens únicas e inovadoras. O modelo a ser escolhido deve ser baseado em cenários de negócios específicos.