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 o seu nó recebe uma nova transação da rede, ele precisa validar que todas as entradas dela referenciam saídas que ainda não foram gastas.
Se todas as entradas da transação forem saídas não gastas (UTXOs), então a transação é válida:
Porém, se a transação tentar gastar uma saída que já foi gasta em uma transação anterior, então a transação é 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:
Você pode ver o saldo de endereços em exploradores de blockchain como mempool.space e bitcoinexplorer.org.
É 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 que foram 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 armazenado na memória (RAM), o que torna o acesso mais rápido do que ter que vasculhar os arquivos brutos da blockchain para verificar se uma saída foi gasta ou não.
O banco de dados chainstate é um simples banco LevelDB de chave:valor que contém as seguintes informações:
- Chave – Formada pelo TXID:VOUT de cada saída. Isso é conhecido como "outpoint", e cada saída na blockchain tem o seu outpoint único, o que significa que ele pode ser usado como referência para consultar cada saída individual diretamente.
- Valor – O valor de cada UTXO no banco de dados contém os seguintes campos:
- Altura – A altura do bloco que contém a UTXO.
- Coinbase – Se a UTXO é de uma transação coinbase ou não. Isso é importante porque saídas de transações coinbase não podem ser gastas até que a transação esteja 100 blocos de profundidade na blockchain.
- Valor – O valor da saída em satoshis.
- Código de Travamento – É o código de travamento que foi colocado na saída. Isso é importante porque toda saída precisa ser destravada quando está sendo gasta em uma transação, então isso permite verificar rapidamente se o código de destravamento da entrada satisfaz as condições do código de travamento da saída.
O banco de dados chainstate é atualizado a cada nova transação minerada na blockchain: as UTXOs gastas em uma transação são removidas do banco de dados, e as novas saídas são adicionadas a ele.
Você pode descobrir algumas informações básicas sobre o conjunto de UTXOs do seu nó local rodando o bitcoin-cli gettxoutsetinfo:
$ bitcoin-cli gettxoutsetinfo
{
"height": 796565,
"bestblock": "00000000000000000002f63578950b747bfaa88dcd0bc0d8730827176d01b1f9",
"txouts": 106662924,
"bogosize": 8071055609,
"hash_serialized_2": "596d06c8a5052e1d3e492ee26a811606f5fe30b20bbbd9db2fe64e44e411c17a",
"total_amount": 19415818.12246298,
"transactions": 68046641,
"disk_size": 6827932282
} O exemplo acima é apenas uma amostra da saída do bitcoin-cli gettxoutsetinfo. Ao rodar esse comando, pode levar alguns segundos para retornar os resultados.
Ferramentas
- bitcoin-utxo-dump – Esta ferramenta lê o banco de dados chainstate do seu nó local e salva todas as UTXOs em um arquivo CSV.
- Statoshi.info (Unspent Transaction Output Set) – Estatísticas em tempo real sobre o estado do conjunto de UTXOs de um nó em execução.
Resumo
Em poucas palavras
Uma UTXO é apenas um nome chique para uma saída de transação que ainda não foi gasta.
Portanto, o conjunto de UTXOs (UTXO set) representa o fornecimento de bitcoins em circulação.
Há muitas siglas no Bitcoin, mas, no fim, quase sempre são nomes que soam complexos para coisas bastante simples. Não deixe isso te assustar.