Modelo UTXO de Bitcoin

O modelo contabilístico que o Bitcoin utiliza chama-se "Modelo UTXO". Neste artigo vamos rever qual é o seu propósito. O modelo contabilístico visa registar como a transferência de valor (transações) com o Bitcoin funciona. | Decentralized

Modelo UTXO de Bitcoin

Autor: @decentralized | Data Original: 28/04/22 | Traduzido por:: Cyber Hornet

Como é que o Bitcoin sabe que pode usar as 'Moedas' que queres 'Enviar'?

O modelo contabilístico utilizado pela Bitcoin chama-se "Modelo UTXO", que provém da abreviatura de 'Produção de Transações Não Gastas', e é amplamente conhecido como UTXO.

Este modelo contabilístico visa estabelecer a forma como todo o registo contabilístico será realizado, dentro da rede Bitcoin. Ou seja, como todas as transações de transferência de valor na rede Bitcoin serão registadas.

Por design, cada transação de Bitcoin tem uma entrada - que é de onde vêm as bitcoins, e uma saída - que é para onde vai a bitcoin de uma transação.

Assim, um UTXO, é sempre o resultado de uma transação anterior, e a entrada ou início de uma próxima transação. É por esta forma de registo que o Bitcoin é altamente rastreável, uma vez que todos os UTXO's provêm de uma transação que é registada e conhecida.

Outro objetivo deste modelo é facilitar a verificação e validade de cada transação, um UTXO nunca pode ser maior em equilíbrio do que a entrada original (isto é, montante/número de moedas num UTXO nunca pode ser maior do que a entrada inicial fornecida ou as moedas recebidas).

E o que é uma transação?

As transações são declarações criptograficamente certificadas que instruem os participantes da rede a atualizar a sua cópia da "cópia mantida independentemente (do livro-razão da rede Bitcoin)" do livro de contas de saldo (UTXOSET).

Assim, quando se quer gastar bitcoin, cria-se uma transação, que indica explicitamente quais as UTXO's que estão a ser gastas e, além disso, a transação define como esses fundos devem ser atribuídos ao novo proprietário sob a forma de novos UTXO's.

Considerações relacionadas com as da UTXO:

Os UTXO's são nomeados em 'Satoshis', a unidade nativa do protocolo Bitcoin. Um Satoshi é a unidade mais pequena de Bitcoin. 100.000.000 Satoshis é igual a 1 bitcoin.

Não podem ser parcialmente gastos, são criados uma vez e depois gastos na totalidade por outra transação.

Vamos considerar um exemplo:

  • Você tem 5000 Satoshis em um UTXO (0.00005000 bitcoin) e você envia 1000 Satoshis,
  • Será criada uma transação que irá gastar completamente esses 5000 Satoshis, gerando uma entrada para os 5000 Satoshis e duas saídas (2 UTXO's),
  • Um para 1000 Satoshis, que são os que são enviados para outro endereço,
  • E o outro UTXO para 4000 Satoshis, que é a mudança que corresponde a '5000-1000 = 4000' Satoshis. Que são devolvidos ao endereço de alteração correspondente às suas próprias chaves.

Não vamos mergulhar nos detalhes técnicos de como as transações são feitas, mas saiba apenas que para isso pode usar qualquer carteira e que são essas peças de software (que formam estas carteiras) que são responsáveis por fazê-lo por si. Em seguida, uma 'Transacção' é a transferência de bitcoin de uma carteira para outra (simplificada pelo mecanismo de movimentação de transações da carteira).

Aqui começa o processo principal, uma vez que você envia a transação através de uma carteira, deve ser validado que cada entrada da transação corresponde a um UTXO válido que existe na rede, como um exemplo diremos que cada UTXO é uma moeda que você vai enviar.

Só enquanto estiverem disponíveis para serem gastos, é que nos referimos a eles como saídas de transações "Não gastas", mas a cadeia (ledger) ou blockchain, mantém um registo de todas as transações efetáveis.

Cada UTXO é unicamente identificável pela combinação da transação que a criou (poupa o ID de transação) e o índice de produção de transações (quantos UTXO's foram gerados nessa produção e posição).

Agora, damos um mergulho para entender sobre os 'Nós', para sermos capazes de entender o que é feito dentro deles (que propósito cumprem). Torna-se importante compreender, por que é importante que saiba que cada 'Nó Completo' mantém uma base de dados totalmente autónoma de todos os UTXO's válidos em toda a rede e é contra essa base de dados que as transações que chegam ao nó são coligidas.

Assim, para validar uma transação, um nó completo (um nó que mantém uma cópia completa do livro-razão e da cadeia de tempo bitcoin) apenas procurará na Base de Dados UTXO a moeda que está a tentar gastar (validará a UTXO para UTXO, mesmo que a transação tenha mais do que uma "moeda"), certificando-se de que existe e está a ser utilizada de forma válida, ou seja, vêm da identificação correta da transação.

Isto é feito em cada nó e em cada transação.

É assim que o nó determina que a transação que está a chegar ou a entrar no nó, é válida em termos das despesas das moedas, ou seja, valida que essas moedas existem e provêm do ID de transação adequado, outras coisas são validadas mas para efeitos deste artigo basta saber isso.

Posteriormente, quando uma transação é confirmada dentro de um bloco, as moedas dessa transação são eliminadas da base de dados UTXO, é importante que compreenda que são eliminadas como parte dessa transação. Por exemplo, essas moedas são removidas da sua carteira e as novas saídas dessa transação (as moedas que chegaram ao seu novo proprietário) são adicionadas à base de dados, agora como novas moedas que estão relacionadas com o seu novo ID.

Por último, para elaborar que esta Base de Dados é conhecida como Conjunto UTXO (conjunto de saídas não gastas).

É graças a este Conjunto UTXO (juntamente com outras considerações de nível inferior) que pode ter uma aproximação para saber quantas Bitcoins existem em circulação (a oferta). A estimativa é aproximada e se estiver interessado em saber mais sobre o assunto convido-o a ler o seguinte twitter.

Onde está a UTXO armazenada?

Por falar em terminologia de Bitcoin, o TIP seria o último bloco da cadeia ativa, uma base de dados é mantida com o conjunto de saídas de transações não gastas (UTXOs), e é armazenada em $DATADIR/chainstate, e na memória.

E quando um novo bloco é recebido, os UTXOs gastos pelas transações no bloco são removidos dessa Base de Dados e as novas saídas dessas transações são adicionadas.

Se houver uma reorganização da cadeia (reorg), os dados armazenados em $DATADIR/blocos/rev*.dat são utilizados para desfazer as alterações na Base de Dados UTXO e deixar a Base de Dados UTXO de acordo com a nova cadeia (a reorganizada).

O que acontece às transações depois de serem incluídas num bloco recém-minado? São removidos da base de dados?

O mempool é um conjunto de transações que são válidas mas que ainda não estão num bloco, ou seja, ainda não foram confirmadas, pelo que não são tratadas como parte da Base de Dados UTXO. Pelo contrário, é apenas um grupo de transações que são internamente consistentes e consistentes com a cadeia ativa. Isto significa que qualquer transação de mempool apenas gasta as saídas que estão no Conjunto UTXO, ou de outras transações de mempool.

Cada vez que um novo bloco entra, as suas transações são removidas da mempool (assumindo que estavam lá), e quaisquer transações da mempool e suas dependências que entram em conflito com o novo Conjunto UTXO são removidas.


Este artigo foi originalmente publicado em espanhol em Dinero Sin Reglas