Svaka bitcoin transakcija ima polje nLockTime.
Zamišljeno je da sadrži vrijednost koja govori kada se transakcija
može potrošiti u budućnosti. Vrijednost polja može se
interpertirati na dva načina: ako je vrijednost manja od 500.000.000
tretira se kao visina bloka u kojem transakcija postane validna, a
ako je vrijednost veća od toga, tretira se kao datum kada
transakcija postaje validna (broj sekundi od 1. siječnja 1970.).
Takva se transakcija može uključiti u blok koji je na
zadanoj ili većoj visini, odnosno čije je vrijeme pronalaska veće
ili jednako onome u polju nLockTime. Problem je što se ne može
garantirati da izlazi koje koristi transakcija s popunjem nLockTime
poljem neće prije potrošiti neka druga transakcija.
Zato je definirana naredba CHECKLOCKTIMEVERIFY (odnosno
redefinirana je naredba NOP2). Ona služi tome da se zaključaju
pojedini izlazi iz transakcija koji će se potrošiti u budućnosti
te prima jedan parametar: rok valjanosti. Kada se tako zaključani
izlaz želi potrošiti, njegov se rok valjanosti uspoređuje s poljem
nLockTime transakcije koja ga troši. Izlaz će se potrošiti samo
ako je rok valjanosti manji od nLockTime. Transakcije zaključane s
CHECKLOCKTIMEVERIFY mogu se normalno uvrstiti u blok.
Primjer zamrzavanja sredstava
<rok valjanosti> CHECKLOCKTIMEVERIFY DROP DUP HASH160 <pubKeyHash> EQUALVERIFY CHECKSIG
Transakcija koja će potrošiti ovaj izlaz mora imati nLockTime veći od roka valjanosti. Budući da se transakcija s takvim poljem može tek uključiti u blok čija je visina ili vrijeme veće od vrijednosti nLockTime, originalna će transakcija ostati nepotrošena do zadanog vremena. Nakon isteka roka valjanosti, transakcija se dalje normalno validira.
Zaobilaženje roka valjanosti
Rok valjanosti moguće je zaobići ako transakcija koja troši vremenski zaključani izlaz redne brojeve svojih izlaza postavi na maksimum (0xffffffff). To je zaostatak iz starih verzija protokola Bitcoin te operacija CHECKLOCKTIMEVERIFY provjerava vrijednosti rednih brojeva ulaza. Ako redni broj nije maksimum transakcija će moći normalno potrošiti izlaz ako je prošao rok valjanosti. U suprotnom, transakcija ne može potrošiti izlaz.
No comments:
Post a Comment