UTXO

acronimo di: Unspent transaction output

Output non spesi delle transazioni

Difficoltà: intermedio

Argomento: tecnologia


DEFINIZIONE

Gli UTXO, o output non spesi delle transazioni, sono spesso indicati semplicemente come output.

Per capire gli UTXO possiamo pensare ad un portafoglio che contiene monete e banconote. Ognuno di questi pezzi di valuta metallici o di carta, ha un suo valore, e il valore in un portafoglio corrisponde alla somma dei valori di questi pezzi. Un UTXO è un pezzo discreto di bitcoin, ogni UTXO ha un importo a lui associato. Il saldo di un wallet Bitcoin è dato dalla somma degli importi dei singoli UTXO. Ogni UTXO oltre l'importo ha anche uno script, chiamato scriptPubKey, che specifica come l'UTXO può essere speso o meglio come l'importo può essere sbloccato per essere trasferito ad un nuovo UTXO.

Bitcoin non usa conti e bilanci, i wallet quindi non hanno un importo totale in blockchain, ma un insieme di UTXO ognuno con un suo importo.

Possedere Bitcoin significa essere capace di spendere l'importo degli UTXO, e quindi significa poter eseguire lo script di sblocco degli UTXO.

Una transazione Bitcoin ha un certo numero di UTXO in ingresso, che vengono completamente spesi, creando dei nuovi UTXO in uscita. Quando uno o più UTXO vengono spesi in una transazione, vengono distrutti e vengono creati uno o più nuovi UTXO. Tutti i nodi mantengono un insieme di UTXO esistenti, chiamato UTXO set, che aggiornano ogni volta che un blocco di transazioni crea e distrugge gli UTXO. Questo permette ai nodi di verificare in modo indipendente se una data transazione e il bitcoin che sta tentando di spendere sono validi.

Gli UTXO sono analoghi ai contanti fisici in quanto di solito richiedono il cambio quando vengono spesi. Se Alice possiede un UTXO del valore di 1 BTC e desidera pagare Bob 0,4 BTC, deve spendere l'intero 1 BTC come input. Per inviare a Bob esattamente 0,4 BTC, Alice crea due output: il primo a Bob, dell'importo di 0,4 BTC, e il secondo a se stessa, dell'importo di 0,59 BTC, assumendo che abbia pagato una fee di transazione di 0,01 BTC. Questa transazione consumerà un UTXO e ne creerà 2 nuovi. Si noti che la fee pagata non è di per sé un output, ma è il resto implicito nella somma degli input (1 BTC) meno la somma degli output: 0,4 + 0,59 = 0,99 BTC. Il miner di questa transazione calcola questa fee e la rivendica per se stesso nella transazione coinbase.

Nel modello UTXO, gli input totali devono essere uguali o superiori agli output totali. Questo è uno dei controlli preliminari che i nodi validatori eseguono per verificare se una transazione è valida. Il modello UTXO funziona benissimo in un sistema decentralizzato perché può verificare la presenza di doppie spese in un modo computazionalmente semplice.

Gli UTXO sono costituiti da due parti: l'importo trasferito all'output e lo script di blocco (scriptPubKey) che specifica le condizioni da soddisfare per spendere l'output.

Questi due dati dell'UTXO significano: ci sono tot satoshi in questo UTXO, e potranno essere spesi (trasferiti) da chi riesce a "risolvere" lo script. Lo script, e il modo per essere risolto, può essere di diversi tipi. Il primo, il più semplice, ma ormai obsoleto, è P2PK, Pay-to-Public-Key, paga alla chiave pubblica che è inserita in chiaro nello script. Per risolvere lo script, e quindi poter trasferire i satoshi di quell'UTXO, è sufficiente firmare con la chiave privata corrispondente alla chiave pubblica. Questo primo script è stato presto sostituito da P2PKH, Pay-to-Public-Key-Hash, che sostituisce la chiave pubblica in chiaro con l'hash della chiave pubblica, aggiungendo sicurezza e privacy. A questi primi tipi di script se ne sono aggiunti altri nel tempo: P2PSH, P2WPKH e P2WSH (SegWit), P2TR Pay-to-Taproot per citarne alcuni


aggiornato il 2022-06-03