Il codice di funzionamento nSequence è un sistema che consente blocchi temporali in Bitcoin. Ci aiuta a programmare determinate condizioni nelle transazioni che devono essere soddisfatte in primo luogo, in modo che questa transazione possa essere accettata in rete in modo definitivo. Un enorme potere di programmazione che Bitcoin ci offre per un gran numero di casi d'uso.
Unon del blocchi temporali o TimeLock più particolare di Bitcoin es nSequence. Questo è un blocco temporale relativo operante a livello di transazione e ciò consente l'uso dei numeri di sequenza di input per programmare un blocco temporale su Transazioni Bitcoin.
NSequences consente a una voce di specificare la prima volta in cui può essere aggiunta a un blocco. Cioè, impediscono la conferma di una transazione fino a quando non è trascorsa una certa età nelle uscite della transazione. Questa età può essere misurata in blocchi confermati o nel tempo trascorso.
Analogamente, nSequences consente la creazione e la programmazione di più condizioni temporali sulla stessa transazione Bitcoin utilizzando Bitcoin Script . Che, pur essendo diversi, saranno correlati tra loro, quindi devono essere pienamente adempiuti in modo che la transazione possa essere convalidata e inclusa in un blocco del blockchain. Nel caso in cui tutte le condizioni stabilite non siano soddisfatte, la transazione semplicemente non può essere convalidata. Pertanto, questa transazione verrà rifiutata dalla rete.
Come funzionano le nSequences?
I nSequence utilizzano solo 18 bit dei 32 bit disponibili nel campo sequenza di ciascuna transazione. Ciò mantiene i restanti 14 bit in riserva per future implementazioni. Così la nSequence è uno dei blocchi temporali o TimeLock più leggeri che esistono nella rete Bitcoin.
Allo stesso modo, dei 18 bit utilizzati, 16 bit vengono utilizzati per configurare i tempi di blocco. Il che rende questi blocchi temporali limitati a un totale di 65.535 unità di blocco disponibili. O in un tempo di 18 ore, che equivale a 64.800 secondi.
Quindi, sebbene inizialmente le nSequences siano state implementate per consentire la modifica delle transazioni all'interno del file bitcoin mempool. E consentire la sostituzione di una transazione prima che sia stata finalizzata o confermata. Vale a dire, sono attualmente utilizzati come tempo di blocco relativo. Ciò impedisce l'estrazione di una transazione fino a quando non vengono soddisfatte le condizioni stabilite. Queste condizioni possono essere un intervallo di tempo definito o un'altezza di blocco. Questo vale anche quando le tue firme digitali sono completamente valide.
In tal caso, se il valore di nSequence è maggiore di 0xEFFFFFFF, non c'è consenso sul numero di sequenza, quindi la transazione può essere inclusa in qualsiasi blocco con tutte le circostanze possibili. Mentre se il valore di nSequence è minore o uguale a 0xEFFFFFFF, allora significa che c'è un tempo di blocco. Dove il bit numero 22 della sequenza è chi determina se il blocco è basato su un intervallo di tempo o sull'altezza del blocco.
Se questo bit ha un valore di "1", il tempo di blocco si basa su un intervallo di tempo; mentre se il suo valore non è stabilito viene considerato "0" e si riferisce ad un numero o all'altezza di un blocco.
Avvio delle nSequences: attivazione del BIP 68
El BIP 68 che è chiamato "Tempo di blocco relativo utilizzando numeri di sequenza imposti dal consenso". Questo ha dato un nuovo concetto e definizione ai numeri di sequenza per le transazioni Bitcoin con una versione maggiore o uguale a "2". Consentire il riutilizzo di questi numeri di sequenza per nuovi casi d'uso. Così come per future implementazioni senza comprometterne le funzionalità.
Allo stesso modo, in BIP 68 si definisce che l'intervallo di tempo è misurato partendo dalla mediana del tempo passato (MTP) del blocco prima dell'uscita e termina con la mediana del tempo passato (MTP) del blocco precedente. Il tempo passato mediano (MTP) è definito nel BIP 113, che specifica MTP come punto finale per i calcoli del tempo di blocco.
Interpretazione di una nSequence
L'interpretazione del tempo di blocco viene eseguita contando i bit dal numero 16 nella sequenza nSequence.
D'altra parte, quando il tempo di blocco è basato su un intervallo di tempo, il blocco viene sviluppato come una limitazione minima al tempo di blocco sull'età dell'ingresso. Se invece il tempo di blocco è basato sui blocchi, questo viene interpretato come una limitazione minima all'altezza del blocco sull'età dell'ingresso.
Nel primo caso, una nSequence basata su un tempo “n” può essere inclusa in uno qualsiasi dei blocchi che vengono prodotti 512 * n secondi dopo la data di estrazione dell'output speso o l'MTP del blocco precedente che lo ha estratto. Per i blocchi temporali basati sul tempo, è stata scelta una scala di 512 secondi poiché i blocchi Bitcoin vengono prodotti ogni 10 minuti, che equivale a 600 secondi. Ciò consente di codificare la stessa quantità di tempo con il numero di bit disponibili in entrambi i casi. O quando si utilizzano blocchi temporali basati su blocchi o quando si utilizzano blocchi temporali basati su intervalli di tempo.
Per il secondo caso, dove il tempo di blocco è basato su blocco, la nSequence indica una voce che può essere inclusa dopo un numero "n" di blocchi dopo la data di estrazione dell'output speso o qualsiasi blocco successivo.
Quanto sai, Cryptonuta?
NSequence può significare un problema di sicurezza perché consente di modificare le transazioni nel mempool?FALSO!
Le nSequences non rappresentano alcun rischio per Bitcoin consentendo di modificare le transazioni all'interno del mempool, questo perché queste transazioni vengono effettivamente sostituite da nuove, con un nuovo insieme di condizioni se programmate in quel modo.
Implementazioni di NSequence
CHECKSEQUENCEVERIFY blocco temporale
Il blocco temporale relativo di NSequence può essere implementato nel codice OP_CHECKSEQUENCESEVERIFY. Questo codice consente di creare un blocco di spesa su un output specifico di una transazione. Questo fino a quando non vengono soddisfatte determinate condizioni. Come raggiungere determinati blocchi o un intervallo di tempo definito dall'estrazione della transazione che contiene detto output.
In questo caso, quando un utente utilizza e spende UTXO su una voce di transazione, il valore di nSequence su quella voce deve essere impostato in modo che sia maggiore o uguale al parametro impostato su CHECKSEQUENCEVERIFY. Così come il formato del valore di nSequence deve corrispondere al valore di CHECKSEQUENCEVERIFY. Cioè, se CHECKSEQUENCEVERIFY è specificato in termini di blocchi, anche il valore di nSequence deve essere basato su blocchi.
Monete colorate
Le colored coins Sono un metodo di identificazione che consente di rappresentare e riconoscere determinati asset del mondo reale sulla blockchain di Bitcoin. Al fine di evitare le manipolazioni e le falsificazioni che questi asset possono subire, sfruttano le proprietà e le caratteristiche offerte dalla tecnologia blockchain per la loro protezione e salvaguardia.
Anche se attualmente ha perso molta popolarità con la nascita di Ethereum e i Gettoni ERC-20, questi tipi di transazioni che vengono creati nella blockchain Bitcoin sono contrassegnati in modo tale da poter essere distinti dal resto delle transazioni che avvengono all'interno della blockchain Bitcoin. Per il quale viene utilizzato un valore di etichetta nel campo nSequence della prima voce della transazione. E sebbene nSequence sia sempre presente nelle transazioni, in questo caso non viene utilizzato come blocco ma come identificatore, utilizzando 6 dei suoi bit per formare e codificare il valore del tag.
Canali di pagamento Decker-Wattenhofer
I canali di pagamento I duplex sono descritti per la prima volta nei documenti di Christian Decker e Roger Wattenhofer. Questo tipo di canale di pagamento richiede l'uso di nSequence. Come suggerisce il nome, un canale di pagamento duplex è costituito da due canali di pagamento unidirezionali, uno in entrambe le direzioni.
Questi canali utilizzano una struttura chiamata "albero di invalidazione" delle transazioni off-chain. Una proprietà tra la transazione di finanziamento e le transazioni di completamento del canale di pagamento. Anche le transazioni dell'albero di invalidazione utilizzano il tempo di blocco relativo; la prima versione della transazione ha un tempo di blocco relativo elevato. E la versione successiva della transazione (che invalida la prima) utilizza un tempo di blocco relativo leggermente inferiore e così via. C'è anche una transazione "start" che avvia il timeout per il relativo tempo di blocco.
La sequenza delle transazioni è così:
Finanziamento -> Home -> Albero di annullamento -> Canale di pagamento.
Grazie a ciò è possibile creare canali di pagamento sicuri con un'operazione simile a quella offerta dal Lightning Network, anche se tecnicamente più complessa nel suo funzionamento.