Sisältö ei ole yksilöllistä sijoitus-, vero-, oikeus- tai tietoturvaneuvontaa.
Kryptoville.

Kryptoista selkoa.
Ilman hypetystä.

Artikkeli · r7-bitcoin-002

Bitcoinin locktime: aikaraja ei ole vahvistuslupaus

Bitcoin-tapahtuman nLockTime voi rajoittaa sitä, milloin tapahtuma kelpaa lohkoon tämän yksittäisen tarkistuksen puolesta. Se ei varaa lohkopaikkaa tai lupaa vahvistusta. Tässä kuvataan Bitcoin Core v31.1:n sääntöjä aktivoinnin jälkeisessä kontekstissa, ei ohjeisteta tapahtuman rakentamista.[3], [4]

Korkeus, aika ja poikkeukset

Jos nLockTime on nolla, tämä tarkistus täyttyy. Muista arvoista alle 500 000 000 tarkoittaa lohkokorkeutta ja vähintään 500 000 000 Unix-aikaan perustuvaa rajaa. Jos kaikkien syötteiden nSequence on 0xffffffff, nLockTime ohitetaan tässä tarkistuksessa. Muuten rajaa verrataan tiukasti: rajan on oltava pienempi kuin ehdokaslohkon korkeus tai sovellettava aika-arvo.[4], [7], [12]

Kuvitellaan korkeuspohjainen nLockTime 1 000 ja vähintään yksi syöte, jonka nSequence ei ole 0xffffffff. Ehdokaslohko 1 000 ei läpäise tätä tarkistusta, mutta 1 001 läpäisee. Se on vain ensimmäinen tämän ehdon puolesta mahdollinen korkeus, ei lupaus sisällyttämisestä.[4]

BIP 113:n aktivoinnin jälkeen aikapohjaista rajaa verrataan ehdokaslohkon edeltäjän median time past -aikaan (MTP), ei ehdokaslohkon aikaleimaan. MTP on tavallisesti 11 edeltävän lohkon aikaleiman mediaani; ketjun alussa käytettävissä voi olla vähemmän. MTP:n on oltava suurempi kuin asetettu raja: samuus ei riitä. Se ei ole seinäkellon vahvistuslupaus.[3], [4], [9]

Coren tekninen sana final tässä tarkoittaa tämän nLockTime-tarkistuksen läpäisemistä. Se ei tarkoita vahvistusta, peruuttamatonta maksua, mempool-hyväksyntää tai levityksen onnistumista. Myös muut konsensussäännöt ja mahdolliset solmukohtaiset mempool- ja välityskäytännöt vaikuttavat.[4]

Suhteellinen viive koskee syötettä

BIP 68:n aktivoinnin jälkeisessä tarkastelussa Core v31.1 soveltaa suhteellista sequence-tarkistusta, kun version 32-bittinen etumerkitön arvo on vähintään 2 ja tarkistuksen LOCKTIME_VERIFY_SEQUENCE-lippu on käytössä. Kunkin syötteen oma nSequence voi silti poistaa sen suhteellisen lukon käytöstä: bitti 31 eli 0x80000000 on poistobitti. Coinbase-tapahtuman oma syöte ei kuulu BIP 68:n tarkistukseen.[2], [4], [7]

Kun poistobitti ei ole asetettu, bitti 22 (0x00400000) valitsee aikapohjaisen viiveen; muuten kyse on lohkoista. Alimmat 16 bittiä (0x0000ffff) sisältävät viiveen arvon. Aikayksikkö on 512 sekuntia.[2], [7]

Esimerkiksi lohkossa 1 000 syntyneen lähdön aktiivinen yhden lohkon suhteellinen viive ei täyty ehdokaslohkossa 1 000, mutta täyttyy lohkossa 1 001. Kyse on nimenomaan tämän syötteen suhteellisesta ikäehdosta, ei koko tapahtuman kelpoisuuden varmistuksesta.[2], [4]

Aikapohjainen viive lasketaan lähtölohkoa edeltävän lohkon MTP:stä ja sitä verrataan ehdokaslohkoa edeltävän lohkon MTP:hen. Jos viive on kaksi yksikköä, tarvittava MTP-ero on vähintään 1 024 sekuntia: täsmälleen tämä ero riittää kyseiseen tarkistukseen, pienempi ei. Tämä on mediaaniaikojen ero, ei lupaus 1 024 sekunnin seinäkello-odotuksesta.[2], [4], [7]

Kaikkien syötteiden 0xffffffff ohittaa siis edellä kuvatun absoluuttisen nLockTime-tarkistuksen, kun taas bitti 31 poistaa yksittäisen syötteen BIP 68 -suhteellisen lukon. Nämä eivät ole sama sääntö: esimerkiksi 0xfffffffe ei ole nLockTime-tarkistuksessa lopullinen, vaikka sen suhteellisen lukon poistobitti on asetettu. Tästä arvosta ei yksin voi päätellä skriptin kelpoisuutta tai korvaamisen onnistumista kaikissa solmuissa.[4], [7]

Myös muut syötteet, skriptit ja säännöt voivat estää tapahtuman. Palvelun näyttämä päivämäärä ei yksin kerro, mitä kenttää tai käytäntöä se kuvaa. Nämä aikarajat eivät itsessään ole vahvistus tai taattu käsittelyaika.

Lähteet