Glossario / Transazioni e commissioni
UTXO
Noto anche come Unspent transaction output, output non speso.
- Che cos'è un UTXO?
- Un UTXO è una porzione di bitcoin non spesa che si trova a un indirizzo, creata per intero da una transazione precedente e spendibile solo nella sua totalità, mai in parte.
Il bitcoin non ha conti né saldi. Ogni nodo tiene invece traccia di un insieme attivo di output non spesi, e il saldo del tuo wallet è solo la somma di quelli per cui detiene le chiavi. Spenderli distrugge i bitcoin che scegli e ne crea di nuovi, ed è per questo che spostare 100.000 satoshi può costare più che spostarne 10.000.000.
Come funziona
Il registro è una raccolta di monete, non una tabella di totali per conto. Ogni output registra due cose: un importo in satoshi, memorizzato come numero di otto byte, e uno script di blocco che indica che cosa bisogna presentare per sbloccarlo. Finché qualcosa non lo spende, quell'output resta nell'insieme degli output non spesi, che ogni nodo completo conserva e aggiorna blocco per blocco.
Una spesa è una distruzione seguita da una creazione. Il tuo wallet sceglie output interi come input, dimostra di poterli sbloccare e scrive nuovi output. Nulla viene sottratto sul posto, quindi pagare 0,3 BTC da una moneta da 1 BTC significa creare una moneta da 0,3 per il destinatario e una moneta di resto di circa 0,7 per te. La moneta da cui sei partito sparisce dall'insieme per sempre, e al posto di una voce ce ne sono due.
Bitcoin Core conserva l'intero insieme in un database LevelDB chiamato chainstate e ne tiene una parte in cache in memoria, con -dbcache che vale per impostazione predefinita 1.024 MiB, oppure 450 sulle macchine con meno di 4 GiB di RAM. È quell'insieme, non l'archivio dei blocchi, che un nodo consulta per rispondere all'unica domanda che conta quando arriva un pagamento: questo input rimanda a qualcosa che esiste ancora? Un nodo potato può scartare centinaia di gigabyte di vecchi blocchi e continuare a validare perfettamente, perché l'insieme degli output non spesi è lo stato.
Due curiosità stanno ai margini. I 50 BTC pagati al coinbase del blocco genesi il 3 gennaio 2009 non sono mai stati scritti nel database, quindi non potranno mai essere spesi. E nel 2010, prima che il BIP30 fosse applicato, due transazioni coinbase ne duplicarono altre precedenti e le sovrascrissero, cancellando 100 BTC dall'insieme; la regola che vieta identificatori di transazione duplicati esiste proprio per quei blocchi.
Anche i bitcoin appena minati arrivano bloccati. Un output coinbase non può essere speso per 100 blocchi, circa 16 ore, ed è la difesa del protocollo stesso contro le riorganizzazioni brevi della catena.
Perché questo conta quando compri bitcoin
Ogni prelievo da un exchange crea esattamente una moneta nel tuo wallet, quindi la forma dei tuoi bitcoin detenuti dipende da quanto spesso premi quel pulsante. Un acquisto settimanale prelevato ogni settimana ti lascia 52 monete dopo un anno; gli stessi acquisti prelevati ogni trimestre ne lasciano quattro. Swan e River impostano entrambi gli acquisti ricorrenti su questo principio, avviando i prelievi al raggiungimento di una soglia invece che a ogni ordine, e il motivo è aritmetico: spendere in seguito ciascuna di quelle monete costa circa 68 byte virtuali di spazio nel blocco.
La seconda conseguenza è la provenienza. Una moneta non è denaro contante anonimo. Porta con sé la storia della transazione che l'ha creata, e un prelievo da qualsiasi piattaforma che verifica l'identità, cioè quasi ogni exchange recensito qui, produce una moneta documentata come tua in un database di conformità. Gli acquisti tramite Relai, che consegna direttamente nel tuo wallet, arrivano con la stessa traccia documentale. Tenere separate queste monete da quelle acquistate altrove è possibile solo perché, in partenza, sono oggetti distinti.
Terzo, ripristinare un wallet non ripristina le monete. Una frase di recupero rigenera le chiavi; poi il software deve cercare sulla catena gli output che quelle chiavi possono sbloccare. Se usi un percorso di derivazione insolito, o ripristini in un software che non controlla il tipo di indirizzo, le monete restano al sicuro nell'insieme degli output non spesi mentre il tuo saldo segna zero. Conservare un descrittore di output insieme alle parole della frase di recupero è ciò che evita quel pomeriggio di panico.
Seguire un acquisto di 0,02 BTC attraverso l'insieme
Compra 0,02 BTC su Kraken e prelevalo. L'exchange raggruppa il tuo pagamento con quelli di altri clienti, e un output di quel gruppo, del valore di 2.000.000 satoshi, è bloccato sul tuo indirizzo. Il tuo wallet contiene ora una sola moneta.
Due mesi dopo paghi a qualcuno 500.000 satoshi mentre la tariffa per il blocco successivo è di 5 sat/vB. Spendere un input SegWit nativo e creare due output occupa circa 141 byte virtuali, quindi la commissione è di 705 satoshi. Accadono tre cose insieme: la moneta da 2.000.000 satoshi esce dall'insieme degli output non spesi, compare una moneta da 500.000 satoshi per il destinatario e compare una moneta di resto da 1.499.295 satoshi su un nuovo indirizzo che il tuo wallet gestisce.
Il tuo saldo è passato da 2.000.000 a 1.499.295 satoshi. L'insieme globale è cresciuto di una voce, che è il costo silenzioso di ogni pagamento fatto da chiunque e il motivo per cui i nodi hanno bisogno di un database e non di un foglio di calcolo.
UTXO vs output di transazione
Ogni UTXO è un output di transazione; la maggior parte degli output di transazione ha smesso da tempo di essere un UTXO. Un output è una riga permanente della storia, ancora leggibile nel blocco che l'ha trasportato dieci anni dopo. Un UTXO è un diritto sul presente. Nell'istante in cui qualcuno spende un output, questo esce dall'insieme degli output non spesi pur restando per sempre nella catena, ed è per questo divario che un nodo può buttare via i vecchi blocchi ma mai lo stato attuale.
UTXO vs dust
Il dust è un UTXO con un problema economico, non un tipo diverso di oggetto. Appartenere all'insieme degli output non spesi non dice nulla sul fatto che valga la pena spostare una moneta. Un output da 600 satoshi è esattamente valido quanto un output da 6 BTC, ma a 30 sat/vB l'input che lo spende costa circa 2.040 satoshi, più del triplo di quanto contiene. Per questo un wallet può mostrare un saldo che non puoi spendere per intero.