I timelock sono una delle caratteristiche più pratiche di Bitcoin, che consentono di programmare azioni secondo una serie di parametri e quindi di convertire Bitcoin in qualcosa di meglio del denaro, un denaro digitale completamente programmabile.
UUna delle caratteristiche innovative che ha Bitcoin è conosciuto come TimeLock. Questo è uno strumento che serve a stabilire e specificare determinate condizioni in base alle quali le transazioni possono essere convalidate.
Un blocco temporale o timelock, è un tipo di contratto intelligente primitivo, che si riferisce a quale specifica altezza o tempo del blocco, una particolare transazione può essere inclusa dai minatori sulla blockchain. Così che funziona come una sorta di blocco assoluto o restrizione sulla spesa di alcuni bitcoin fino a quando queste condizioni non saranno soddisfatte.
È possibile impostare un blocco temporale in base al tempo reale o all'altezza di un blocco specifico. Quindi, quando quella volta o quella altezza del blocco definito nel timelock, i minatori potranno includere la transazione nel file hash del albero di Merklee aggiungilo all'ultimo blocco della blockchain. E in questo momento è che la transazione può essere confermata.
Classificazione dei TimeLock
I timelock sono stati aggiunti al software Bitcoin originale dal suo creatore, Satoshi Nakamoto. Sono presenti in tutte le transazioni sebbene la maggior parte non utilizzi questa funzione, quindi il tempo di blocco predefinito è 0x00000000 (0) o 0xFFFFFFFF (4294967295). Tuttavia, per quelle transazioni in cui viene utilizzato il blocco temporale, è importante sapere che ha 3 attributi importanti. Quali sono: posizione, orientamento y metrica.
Posizione
Come abbiamo già detto, i timelock possono essere trovati nelle transazioni anche se questa funzione non viene utilizzata. E possono anche essere inclusi negli script. Entrambi sono molto simili, ma svolgono funzioni completamente diverse.
Nelle transazioni, i timelock significano che non possono essere convalidati fino a raggiungere un certo tempo o raggiungere un'altezza di blocco definita, sebbene le loro firme digitali e script si sono validi. Durante i tempi di blocco negli script, determinano se uno script è valido. Quindi le condizioni possono essere impostate su tutte le transazioni che spendono un output.
A differenza del blocco delle transazioni, che limita solo quella particolare transazione. Da qui l'importanza della posizione del timelock in modo che possano eseguire l'operazione corrispondente.
orientamento
Ci sono sequenze temporali del tempo ABSOLUTO o il tempo parente. Il primo ci permette di definire il blocco in termini di un certo tempo. Quindi possiamo scegliere il momento esatto in cui terminerà il blocco.
Mentre il relativo time lock ci permette di definire un certo lasso di tempo che deve trascorrere a partire dalla conferma delle uscite precedenti. Entrambe le opzioni sono estremamente utili per definire gli intervalli di tempo necessari affinché una transazione venga elaborata dalla rete Bitcoin.
Metrica
In Bitcoin ci sono due modi per misurare il tempo: il numero di blocco e timestamp. Quindi possiamo usarli entrambi per impostare un blocco temporale. Quando si imposta un blocco temporale basato su un numero di blocco, i miner dovrebbero aspettarsi di raggiungere quel numero di blocco. Questo per validare e confermare l'operazione e includerla in un nuovo blocco.
Al contrario, quando il blocco temporale è impostato in base a un timestamp, i minatori attendono che trascorra il tempo impostato in secondi. Cioè, viene raggiunto un certo tempo per convalidare la transazione. Questo è misurato dal segno di Tempo di Unix.
Tipi di serrature
Oggi, Bitcoin ha attualmente 4 modi per impostare blocchi o timelock. Due di questi strumenti sono a livello di transazione e gli altri due sono a livello di script. Vediamoli tutti.
1.nTempo di blocco
Questo è un blocco temporale assoluto a livello di transazione. È l'unica volta che lo blocca era disponibile nella versione originale Software Bitcoin. Quando il nodi non hanno inoltrato né indebolito le transazioni con nLockTime uguale o maggiore dell'altezza del blocco corrente.
Pertanto, le transazioni non sono state convalidate fino a quando non è stato raggiunto il blocco stabilito. In questi blocchi, il tempo è espresso come numeri interi a 32 bit senza segno. Se il numero è inferiore a 500 milioni, viene interpretato come altezza del blocco. Al contrario, se è superiore a 500 milioni viene considerato come un timestamp Unix.
Nella versione Bitcoin 0.1.6, l'interpretazione di nLockTime è stato regolato per consentire anche il blocco basato sul tempo. Quindi, a partire dal blocco 31001, sono stati attivati di regola i vincoli nLockTime che si applicavano anche all'accettazione del blocco. Successivamente, nel luglio 2016, i blocchi basati sul tempo sono stati modificati per funzionare sul tempo medio passato anziché sul timestamp del blocco.
Un nLockTime può bloccare una transazione fino a 9.500 anni utilizzando i numeri di blocco e 2.106 anni utilizzando i timestamp. E sebbene ogni transazione attualmente contenga la funzione nLockTime, la maggior parte dei portafogli la ha preimpostata su 0. Ciò significa che le transazioni possono essere convalidate in qualsiasi blocco della catena.
2. nSequenza
Questo è un blocco temporale relativo al livello di transazione. Queste serrature sono state introdotte nel forcella morbida di BIP 68 a metà del 2016. In esso, i numeri di sequenza vengono utilizzati per stabilire scadenze temporali relative a livello di transazione. Ciò consente a una voce di specificare la prima ora che può essere aggiunta a un blocco. In base a quanto tempo fa l'output speso da quell'input è stato incluso in un blocco sulla blockchain.
Quando si applica un file nSequence diverse condizioni temporali possono essere impostate all'interno della stessa transazione. Pertanto, affinché la transazione sia valida, tutte le condizioni devono essere soddisfatte. E se ciò non accade, l'intera transazione verrà rifiutata.
A differenza di nLockTime, nSequence utilizza solo 18 dei 32 bit totali, quindi 14 bit vengono lasciati come riserva per implementazioni future. E di quei 18 bit in uso, 16 bit sono destinati a codificare il tempo di blocco. Quindi i blocchi nSequence sono limitati a 65.535 unità in blocchi e solo 18 ore in secondi.
3.CheckLockTimeVerify
Conosciuto anche con l'acronimo di CLTVÈ blocco temporale assoluto a livello di script. È dettagliato nel soft fork BIP 65 ed è stato introdotto nella rete alla fine del 2015 dallo sviluppatore Peter Todd. Tale proposta apre la possibilità di poter effettuare una transazione in cui può essere specificata la data specifica in cui diventerà effettiva (ovvero la data in cui il destinatario potrà usufruire dei fondi inviati).
Una delle funzioni avanzate che CTLV consente è modificare il parametro di autenticazione di un indirizzo multi-firma. Ad esempio, se è stato creato un indirizzo multi-firma con uno schema 2 di 3, CLTV può modificare detto parametro in base a determinati criteri in 1 di 3. In questo modo, la persona può recuperare i fondi a determinate condizioni precedentemente concordate e che sono definito nella transazione grazie alla capacità di Bitcoin di essere denaro programmabile.
Quanto sai, Cryptonuta?
I timelock possono estendere la programmazione e le funzionalità di Bitcoin?Certo!
I timelock sono molto utili per dare a Bitcoin nuove funzionalità di programmazione che consentono la costruzione di funzionalità nuove e accattivanti. Un esempio di questo è il Lightning Network, che si basa sui timelock e sulla loro capacità di programmare azioni in Bitcoin.
4.- CheckSquenceVerify
È il blocco temporale relativo a livello di script. Anche parte della forcella morbida BIP 68, ma è stato descritto nel BIP 112 ed è stato aggiunto a metà 2016. CSV fornisce un tempo di blocco relativo, proprio come il CLTV ne fornisce uno per il tempo di blocco assoluto, quindi sono estremamente simili. Tuttavia, invece di controllare l'ora come fa il CLTV, il CSV controlla lo stack superiore con il campo di input.
Quando viene chiamato il codice operativo CSV, lo script avrà esito negativo a meno che nSequence nella transazione non indichi che una quantità relativa di tempo di blocco è passata uguale o superiore al parametro fornito all'opcode CSV. Ciò garantisce che la transazione possa essere inclusa in un blocco valido quando il blocco temporale basato su CSV è scaduto.
Con questo codice operazione è possibile bloccare le transazioni per un massimo di 65.535 blocchi, che equivalgono a circa 455 giorni. Oppure un massimo di 65.535 × 512 secondi, ovvero circa 388 giorni.