Vai al contenuto
buybitcoinsmart

Glossario / Protocollo e aggiornamenti

Median time past

Noto anche come MTP.

Che cos'è il median time past?
Il median time past è l'orologio di consenso di bitcoin: la mediana delle marche temporali degli undici blocchi precedenti, e il valore con cui si confronta ogni locktime basato sul tempo.

Specificato nel BIP-113.

I nodi prendono le marche temporali degli undici blocchi precedenti a quello che stanno validando, le ordinano e usano il valore centrale come ora corrente. Quella mediana si colloca circa sei blocchi indietro, quindi resta indietro di circa un'ora rispetto all'orologio reale. Un bitcoin che blocchi fino a mezzogiorno diventa quindi spendibile più verso l'una del pomeriggio.

Come funziona

Il median time past deriva da una funzione chiamata GetMedianTimePast, che risale le voci di undici blocchi, copia ogni marca temporale in un array, lo ordina e restituisce l'elemento centrale.

La costante definita dal BIP-113 è nMedianTimeSpan = 11, quindi il risultato è sempre il sesto più piccolo di undici numeri. È l'ordinamento a rendere affidabile il risultato. La marca temporale di un blocco può essere precedente a quella del suo blocco genitore, ma le regole di consenso impongono già che ogni nuova marca temporale superi la mediana delle undici precedenti, quindi la mediana può solo avanzare. Alterare una singola marca temporale non porta quindi quasi nulla a un miner.

Il problema che il BIP-113 ha risolto era un incentivo, non un bug. Con la vecchia regola, l'ammissibilità di una transazione era giudicata sulla base della marca temporale del blocco che la includeva, un numero scritto dal miner, che la sezione di motivazione del BIP chiama "a perverse incentive for miners to lie about the time of their blocks in order to collect more fees". La correzione è stata una sola sostituzione: le chiamate di consenso a IsFinalTx prendono GetMedianTimePast del blocco precedente invece dell'ora del blocco stesso, e la regola copre ogni transazione, compresa la coinbase.

È arrivato come soft fork con i versionbits del BIP9 sul bit 0, con l'apertura della segnalazione sulla mainnet alla mezzanotte del 1º maggio 2016 UTC e la scadenza un anno dopo, ed è stato distribuito insieme al BIP68 e al BIP112, così che le tre regole sui timelock arrivassero in un unico pacchetto.

Dove lo vedi

Il median time past compare nell'output RPC di Bitcoin Core come campo chiamato mediantime, posto subito accanto al campo time grezzo.

getblock restituisce entrambi per qualsiasi blocco, e getblockchaininfo riporta il tempo mediano della punta accanto alla marca temporale della punta, che è il modo più rapido per osservare il ritardo di un'ora su un nodo attivo. getchaintxstats va oltre e misura l'ampiezza della sua finestra come differenza tra i tempi mediani di due blocchi invece che tra le marche temporali dei loro header, così una marca temporale alterata a uno dei due estremi sposta appena il risultato.

Il punto in cui pesa è la mempool. CheckFinalTxAtTip di Bitcoin Core valuta una transazione candidata rispetto al median time past della punta corrente e a un'altezza superiore di uno, quindi un wallet che trasmette nell'istante in cui scade un termine riceve un rifiuto invece dell'inoltro, e deve continuare a riprovare finché la mediana non raggiunge l'orologio reale.

I timelock relativi ereditano lo stesso orologio ad entrambi gli estremi. Il BIP-68 misura un sequence lock basato sul tempo, contato in unità di 512 secondi, dal median time past del blocco precedente a quello che ha minato il bitcoin fino al median time past del blocco precedente alla spesa, quindi il ritardo compare due volte e in gran parte si annulla.

Median time past vs la marca temporale dell'header del blocco

Il median time past è calcolato da undici marche temporali degli header ma non è memorizzato in nessun blocco, mentre la marca temporale di un header è un campo che il miner scrive e che ogni nodo conserva per sempre.

Bitcoin usa entrambi, per compiti diversi. I locktime usano la mediana, perché avanza in modo monotono e non può essere trascinata in avanti per ricavare commissioni. Il ricalcolo della difficoltà legge ancora le marche temporali grezze degli header: Bitcoin Core prende il block time dell'ultimo blocco della finestra di 14 giorni, sottrae il block time del primo e ridimensiona il target a partire da quella differenza. Due orologi su una stessa catena sembrano disordinati, e la scelta è deliberata. Un ricalcolo vuole il tempo effettivamente trascorso in due settimane di blocchi, mentre un locktime vuole un numero che nessun singolo miner possa spostare.

Da non confondere con

Domande frequenti

Perché una transazione con locktime basato sul tempo si conferma circa un'ora dopo l'ora che ho impostato?

Perché bitcoin verifica i locktime basati sul tempo rispetto al median time past, la mediana delle marche temporali degli undici blocchi precedenti, che resta indietro di circa un'ora rispetto all'orologio reale. Il BIP-113 lo dice nella sua sezione sulla compatibilità. Se il momento esatto è importante, imposta la scadenza un'ora prima del momento in cui vuoi che abbia effetto.

Il median time past è memorizzato dentro un blocco?

No, ogni nodo calcola da sé il median time past dalle marche temporali degli undici blocchi che precedono quello che sta validando. Bitcoin Core espone il risultato come campo mediantime in getblock e getblockchaininfo, ma nessuna parte dei dati del blocco lo contiene.

Il median time past incide su un normale acquisto di bitcoin?

No, un normale prelievo da un exchange o un pagamento da un wallet non comporta alcun lock basato sul tempo, quindi il median time past non lo ritarda mai. Conta solo quando una spesa dipende da un locktime basato sul tempo, da uno script OP_CHECKLOCKTIMEVERIFY o da un timelock relativo basato sul tempo.

Leggi anche

Termini correlati

Altro in Protocollo e aggiornamenti

Leggi questa pagina in inglese