Timelock/Locktime

Difficoltà: avanzato

Argomento: tecnologia


DEFINIZIONE

Timelock è una caratteristica che consente a Bitcoin di funzionare come denaro programmabile, impostando delle condizioni per cui una transazione viene elaborata solo in un certo momento o blocco della blockchain. Sono dei vincoli che impediscono che una transazione o la spesa di un output sia confermata prima di un tempo di maturazione o di un block height.

Un timelock permette di creare una transazione Bitcoin tale che il destinatario degli output non possa spenderli per un tempo specificato.

Il meccanismo di timelock è stato inizialmente inserito da Satoshi Nakamoto nel campo nLockTime.

Attualmente ci sono 4 tipi di timelock per Bitcoin:

I timelock hanno 3 attributi:

  • Posizione: a livello di transazione o a livello di script
  • Orientamento: assoluto o relativo
  • Metrica: block height (numero o altezza del blocco) o timestamp

Specchietto riassuntivo:

timelock Posizione Orientamento
nSequence transazione Relativo
nLocktime transazione Assoluto
CSV script Relativo
CLTV script Assoluto

Posizione

I timelock possono essere impostati nelle transazioni, e possono anche essere inclusi negli script.

Sono molto simili, ma svolgono funzioni completamente diverse. Se sono impostati a livello di transazione, i timelock non possono essere convalidati fino a che non si raggiunge un certo momento o una block height definita, sebbene le loro firme e script siano validi. I timelock a livello di script sono realizzati inserendo negli script delle condizioni che determinano quando uno script è valido, e le condizioni possono essere impostate su tutte le transazioni che spendono un output.

nLockTime e nSequence operano a livello di transazione, mentre CheckLockTimeVerify e CheckSquenceVerify operano a livello di script.

Orientamento

Gli orari dei timelock possono essere assoluti o relativi.

Quelli assoluti consentono di definire il lock secondo uno specifico orario, quindi si può scegliere il momento esatto in cui terminerà il blocco. Quelli relativi consentono di definire un certo lasso di tempo che deve trascorrere a partire dalla conferma degli output precedenti. Entrambe le opzioni sono estremamente utili per definire gli intervalli di tempo necessari affinché una transazione venga elaborata dalla rete Bitcoin.

nLockTime e CheckLockTimeVerify sono timelock assoluti, mentre nSequence e CheckSquenceVerify sono timelock relativi

Metrica

In Bitcoin ci sono due modi per misurare il tempo: il block height (numero di blocco) e timestamp.

Quando si imposta un blocco temporale basato su un block height, i miner aspettano di raggiungere quel numero di blocco per poter validare e confermare l'operazione e includerla in un nuovo blocco.

Nel caso sia impostato il timestamp, i miner attendono fino ad arrivare al momento indicato dal timestamp. Il timestamp è espresso secondo il formato del timestamp Unix.

Formato del campo

Il campo Locktime è un campo a 4 byte (32 bit) che può essere espresso in due modi:

  • Come un blocco numerico: Se il valore di Locktime è inferiore a 500 milioni, viene interpretato come il numero di blocco a partire dal quale la transazione può essere inserita nella blockchain. Ad esempio, se il valore di Locktime è 100, la transazione non potrà essere inserita nella blockchain prima del blocco numero 100.
  • Come un timestamp: se il valore di Locktime è uguale o superiore a 500 milioni, viene interpretato come un timestamp UNIX (numero di secondi trascorsi dal 1 gennaio 1970). Ad esempio, se il valore di Locktime è 1498870928, la transazione non potrà essere inclusa nella blockchain prima delle 14:48:48 UTC del 1 luglio 2017.

Il campo Locktime è facoltativo e può essere omesso se non è necessario. Se Locktime non è presente nella transazione, la transazione può essere inserita immediatamente nella blockchain.

Se si imposta un nLocktime futuro, la transazione non potrà essere inserita nella blockchain fino a quel momento specifico, ma non deve neanche essere trasmessa agli altri nodi ma deve essere conservata: se si tenta di inviare una transazione con un nLocktime futuro alla rete Bitcoin prima del momento specificato, la transazione verrà respinta come non valida dal primo nodo che la riceve e non verrà trasmessa ad altri nodi.


aggiornato il 2022-03-15