Sunday, July 17, 2016

Relativno vremensko zaključavanje transakcija (CHECKSEQUENCEVERIFY)


BIP65 odnosno naredba CHECKLOCKTIMEVERIFY omogućuje trošenje transakcije u budućnosti, na točno određeni datum ili visinu bloka. BIP112, odnosno naredba CHECKSEQUENCEVERIFY, omogućuje zaključavanje transakcije na neki vremenski period, npr. tjedan dana ili 48 sati. Specifikacija se sastoji od tri dijela: BIP113 (srednje prošlo vrijeme), BIP68 (relativno vremensko zaključavanje korištenjem broja niza [sequence numbera]) i BIP112 (naredba CHECKSEQUENCEVERIFY).

Srednje prošlo vrijeme



Prije pojave BIP113 transakcije nisu se uključivale u blok ako su trenutačno vrijeme ili visina bloka manji od onoga specificiranog u polju locktime. Ovakvo ponašanje omogućivalo je rudarima da netočno prijavljuju vrijeme blokova kako bi u njih uključili što više transakcija.


BIP113 mijenja određivanje proteklog vremena na temelju oznake iz prethodnog bloka u određivanje proteklog vremena na temelju srednje vrijednosti polja locktime zadnjih 11 blokova. Potrebno je uzeti prethodnih 11 blokova te ih poredati po veličini prema vrijednosti polja locktime. Na kraju se iz tog niza uzima srednja vrijednost kao proteklo vrijeme. Ovo garantira da će se vrijednost proteklog vremena monotono povećavati.


Ovakav mehanizam koristit će se i kod apsolutnog vremenskog zaključavanja transakcija (BIP65).

Broj niza



Prije pojave relativnog vremenskog zaključavanja transakcija, polje broj niza nije se koristilo, odnosno uvijek je bilo postavljeno na maksimalnu vrijednost 0xFFFFFFFF. U novoj specifikaciji prvi bit (1<<31) određuje kako će se polje interpretirati. Ako je prvi bit postavljen, vrijednost se polja zanemaruje, a ako nije postavljen, polje se tretira kao relativno vrijeme zaključavanja.


Bit 1<<22 određuje kako će se zapisano vrijeme tumačiti. Ako je bit postavljen, tumači se kao relativno vrijeme u intervalima od 512 sekundi. Vremenski interval počinje srednjim prošlim vremenom prethodnog bloka izlaza koji se zaključava, a završava srednjim prošlim vremenom prethodnog bloka. Ako bit nije postavljen, tumači se kao broj blokova. Sam vremenski interval zapisan je u bitovima 0-15.



Interval od 512 sekundi odabran je da bude sličan intervalu u kojem se blokovi generiraju. Na taj se način u isti broj bitova može zapisati ili visina bloka ili relativno vrijeme.

Primjena



CHECKSEQUENCEVERIFY primjenjuje se na zaključavanje pojedniih izlaza kao i CHECKLOCKTIMEVERIFY. Može se koristiti kod zajamčenih pologa (escrow), dvosmjerne platne kanale, mrežu Lighntning i slične mehanizme za transakcije izvan lanca blokova.