Glossario / Transazioni e commissioni
ID di transazione
Noto anche come Txid, Transaction ID, Hash di transazione.
- Che cos'è un ID di transazione?
- Un ID di transazione è l'impronta esadecimale di 64 caratteri di una transazione bitcoin, ottenuta applicandole due volte SHA-256, ed è il modo in cui tutti identificano quel pagamento.
Nessuno assegna l'identificatore: deriva dal contenuto stesso della transazione, quindi modificare un solo satoshi ne produce uno completamente diverso. Il valore è lungo 32 byte, si stampa come 64 caratteri esadecimali e ogni explorer lo mostra in ordine di byte invertito. È l'unica stringa che permette a te e all'assistenza di un exchange di guardare lo stesso pagamento.
Come funziona
Ricavare un ID di transazione richiede due passaggi e nessun segreto. La transazione viene serializzata nella sua forma grezza in byte, poi passa due volte attraverso SHA-256, e i 32 byte risultanti sono l'identificatore. Chiunque abbia i byte grezzi calcola lo stesso risultato, ed è per questo che un identificatore non può essere riservato, richiesto o falsificato.
L'ordine di visualizzazione è la prima cosa che confonde le persone. Bitcoin calcola gli hash internamente in una direzione e li stampa nell'altra, quindi i byte che vedi su un explorer sono l'inverso dei byte nel file. Nulla è sbagliato quando uno strumento per sviluppatori ti mostra una stringa che sembra al contrario.
SegWit ha diviso l'identificatore in due. Da quando il BIP141 è stato attivato al blocco 481.824, il 24 agosto 2017, l'ID di transazione è calcolato sulla transazione senza i suoi dati witness, mentre un secondo identificatore, il wtxid, copre tutto, comprese le firme. Il motivo è la malleabilità: in precedenza chiunque rilanciava la transazione poteva ricodificare le firme, cambiando l'identificatore lasciando il denaro esattamente dove stava andando. Mt. Gox attribuì alla malleabilità i suoi bitcoin mancanti a febbraio 2014, ma uno studio di Decker e Wattenhofer ha misurato gli attacchi reali e ha rilevato che solo 386 BTC potevano essere attribuiti alla malleabilità prima che l'exchange fermasse i prelievi, contro le centinaia di migliaia di bitcoin che aveva perso.
L'identificatore è anche ciò a cui un blocco si impegna. Ogni ID di transazione in un blocco viene trasformato in hash nella radice di Merkle memorizzata nell'intestazione del blocco, quindi un miner non può scambiare silenziosamente un pagamento con un altro a posteriori.
Perché questo conta quando compri bitcoin
L'ID di transazione è l'unica prova che sopravvive al divario tra due aziende. Quando un prelievo da Coinbase o da Bitstamp non è arrivato, il ticket di assistenza non va da nessuna parte finché non lo fornisci, e una volta che lo hai non hai più bisogno del ticket: incolla la stringa in qualsiasi explorer di blocchi e puoi vedere da solo gli output, la commissione e il numero di conferme. È anche il modo più rapido per sapere se il ritardo è nella coda dell'exchange o in quella della rete.
Il caso inverso è quello pericoloso. Un ID di transazione prova che un pagamento esiste, non che sia stato inviato a te, non che verrà confermato e non che il mittente sia chi dice di essere. Ai venditori sui marketplace peer-to-peer viene di norma mostrato lo screenshot di una pagina di un explorer, e consegnano la merce prima di controllare se qualche output di quella transazione paga un indirizzo che gestiscono. Controlla l'indirizzo, controlla l'importo e controlla le conferme, in quest'ordine.
Anche gli identificatori non confermati possono sparire. Il replace-by-fee completo è la politica di relay predefinita nelle versioni moderne di Bitcoin Core, quindi un mittente può trasmettere una versione concorrente dello stesso pagamento, e quella versione ha un identificatore diverso. Bitcoin Core scarta anche le transazioni che ha tenuto per più di 336 ore, ovvero 14 giorni. Un explorer che dice "transaction not found" di solito significa che è accaduta una di queste due cose, non che i tuoi bitcoin siano spariti.
Leggere l'ID di transazione del blocco genesi
L'ID di transazione più antico di bitcoin è 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b, l'unica transazione nel blocco minato il 3 gennaio 2009. Poiché quel blocco contiene una sola transazione e nient'altro, la radice di Merkle del blocco è la stringa identica, che è l'illustrazione più chiara di come funziona l'impegno.
Quella transazione paga 50 BTC a una chiave pubblica, e Bitcoin Core non ha mai aggiunto l'output al suo insieme di output non spesi, quindi l'identificatore indica denaro che non potrà mai muoversi. Porta anche il titolo di giornale "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks" all'interno del suo campo coinbase.
La dipendenza va in una sola direzione. Cambia una sola lettera di quel titolo e sia l'ID di transazione sia la radice di Merkle diventano irriconoscibili, ed è per questo che un identificatore è un'impronta digitale e non un'etichetta. Non puoi sceglierne uno e non puoi modificare una transazione senza produrne uno nuovo.
ID di transazione vs indirizzo bitcoin
Un indirizzo è una destinazione e un ID di transazione è la registrazione di un evento. Gli indirizzi possono essere forniti in anticipo e riutilizzati; gli identificatori esistono solo dopo che una transazione è stata costruita. Inviare bitcoin a un ID di transazione è impossibile, e i wallet rifiutano il tentativo perché la stringa non supera la validazione del checksum dell'indirizzo. I falsi operatori di assistenza sfruttano la confusione chiedendo "il tuo ID di transazione" e poi fornendo un indirizzo proprio.
ID di transazione vs outpoint
Un ID di transazione indica un'intera transazione, che potrebbe pagare 300 persone diverse in un unico lotto di un exchange. Un outpoint indica un output al suo interno, scritto come l'identificatore, due punti e l'indice dell'output. Le schermate di coin control, le conferme dei wallet hardware e i file PSBT lavorano tutti con gli outpoint, quindi un identificatore da solo non basta a dire quale output intendi.