UTXO
Uma saída de transação não gasta
Uma UTXO é uma saída de transação não gasta (Unspent Transaction Output).
Toda transação de bitcoin cria saídas que podem ser consumidas como entradas em transações futuras. As UTXOs são simplesmente as saídas de transação que ainda não foram consumidas e que ainda podem ser usadas para gastar.
Então, se você pensar nos bitcoins como parte de um grande grafo de transações, as UTXOs estão nas pontas dele.
A coleção de todas as UTXOs é chamada de conjunto de UTXOs (UTXO set).
Uso
Como as UTXOs são usadas no Bitcoin?
Acompanhar as UTXOs é útil por dois motivos:
1. Validar transações
Quando seu nó recebe uma nova transação, ele precisa validar que todas as entradas dela referenciam saídas que ainda não foram gastas. Se todas as entradas forem saídas não gastas (UTXOs), a transação é válida. Se ela tentar gastar uma saída já gasta, é inválida e será rejeitada.
2. Calcular o saldo de endereços
O "saldo" de um endereço é a soma de todas as UTXOs travadas a esse endereço.
É importante notar que os bitcoins não "moram" dentro dos endereços. Os bitcoins ficam dentro de saídas, e um endereço é essencialmente uma trava que pode ser colocada sobre uma saída. Portanto, o saldo de um endereço é apenas a soma de todas as UTXOs travadas a ele.
Localização
Onde as UTXOs são armazenadas?
No Bitcoin Core, todas as UTXOs são armazenadas no banco de dados chainstate:
~/.bitcoin/chainstate
Esse é um banco de dados separado que fica na memória (RAM), o que torna o acesso mais rápido do que vasculhar os arquivos brutos da blockchain. É um simples banco LevelDB de chave:valor:
- Chave – Formada pelo TXID:VOUT de cada saída (chamado de "outpoint"). Cada saída na blockchain tem o seu outpoint único.
- Valor – Contém: a altura do bloco da UTXO, se ela é de uma transação coinbase, o valor em satoshis e o código de travamento que foi colocado na saída.
O chainstate é atualizado a cada nova transação minerada: as UTXOs gastas são removidas e as novas saídas são adicionadas.
Você pode ver informações básicas sobre o conjunto de UTXOs do seu nó com bitcoin-cli gettxoutsetinfo.