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

Kryptoista selkoa.
Ilman hypetystä.

Artikkeli · r7-bitcoin-003

Bitcoinin txid ja wtxid: miksi tapahtumalla voi olla kaksi tunnistetta?

Bitcoin-tapahtumalla on txid ja wtxid. Ne ovat saman tapahtuman laskennallisia tunnisteita, eivät automaattisesti kaksi maksua. Jos tapahtumassa ei ole witness-tietoja, wtxid on täsmälleen sama kuin txid. Tämä koskee myös witness-tiedotonta coinbase-tapahtumaa.[1], [7], [10]

Tässä puhutaan Bitcoinin ketjutapahtumista, ei palvelun sisäisestä tilaus- tai maksupyynnön viitenumerosta. Selitys perustuu BIP 141:een ja Bitcoin Core v31.1:een; tarkoitus ei ole arvioida yksittäistä siirtoa.[1], [10]

Miten tunnisteet lasketaan?

Txid on perinteisen sarjoituksen kaksinkertainen SHA-256-tiiviste: siihen kuuluvat nVersion, syötteet, lähdöt ja nLockTime, mutta ei witness. Jos witness-tietoja on, wtxid lasketaan laajennetusta sarjoituksesta, joka sisältää samat peruskentät sekä markerin, flagin ja witnessin. Sekin käyttää kaksinkertaista SHA-256:ta.[1]

Jos witnessiä ei ole, Core käyttää wtxid:lle samaa tiivistettä kuin txid:lle. Kun witnessiä on, sarjoitukset eroavat ja tunnisteet voivat erota; eri sarjoitus ei kuitenkaan ole matemaattinen todistus siitä, että tiivisteet olisivat aina erilaiset. Witness voi sisältää kelpoisuuden tarkistamiseen käytettävää tietoa, mutta sen mukanaolo ei yksin todista tapahtumaa kelvolliseksi.[1], [7], [10]

Perinteiseen esitykseen kuuluvat myös syötteiden scriptSig-tiedot. Siksi tapahtumaa, jossa on sekä vanhan muodon että SegWit-syötteitä, ei pidä esittää yleisesti txid:n muuntelulta suojattuna. BIP 141 käsittelee witness-tiedon erottamista yhtenä keinona vähentää tietynlaista muuntelua, ei lupaa poistaa kaikkia muuntelun lähteitä kaikista tapahtumista.[1], [7]

Kuvitteellinen näkymä

Oletetaan, että lohkoketjuselain näyttää yhden witness-tietoja sisältävän tapahtuman txid:n ja wtxid:n eri arvoina. Kahdesta kentästä ei seuraa kahta maksua: kyse on yhden tapahtuman kahdesta tunnistetyypistä. Jos palvelu näyttää vain yhden tunnisteen eikä kerro sen tyyppiä, merkkijonon pituus ei yksin ratkaise, kumpi on kyseessä.[1]

Myöhempi tapahtuma viittaa aiempaan lähtöön txid:n ja lähtöindeksin avulla. Palvelun oma viitenumero on eri asia kuin ketjutapahtuman tunniste. Tarkista siis, mitä tyyppiä verrattavat tunnisteet ovat ja mitä tapahtumaa ne kuvaavat.[6], [7]

Miten coinbase liittyy witness-sitoumukseen?

BIP 141 määrittelee witness-Merkle-puun ja lohkon coinbase-tapahtuman lähtöön tallennettavan witness-sitoumuksen. Puussa coinbasea vastaava lehti määritellään 32 nollatavuksi. Tämä on puun erityissääntö, ei väite siitä, että coinbase-tapahtuman tavalliseen tapaan laskettu wtxid olisi aina nolla.[1], [10], [11]

Sitoumus hyödyntää myös coinbase-syötteen 32-tavuista varattua witness-arvoa. Jos missään lohkon tapahtumassa ei ole witness-tietoja, sitoumus on valinnainen; sitä ei siis voi olettaa jokaiseen lohkoon. Txid:n witness-osattomuudesta ei seuraa, että witness voitaisiin sivuuttaa soveltuvassa kelpoisuustarkistuksessa.[1]

Mitä tunniste ei todista?

Tunniste yksin ei kerro, onko tapahtuma vahvistunut, kuka omistaa lähdön tai hyväksyykö palvelu suorituksen. Kaksi näkymää voi olla eri vaiheessa tai perustua eri ketjutilanteeseen. Se, ettei yksi palvelu löydä tapahtumaa, ei yksin todista, ettei sitä olisi olemassa. Vahvistuskaan ei ole ehdoton takuu peruuttamattomuudesta.

Vertaa tunnistetyyppiä ja tapahtuman tilaa erikseen. Tämä selitys ei lupaa tietyn selaimen tai palvelun näyttävän molempia kenttiä eikä määrittele kaikkien witness-versioiden yksityiskohtaisia suojauksia.

Lähteet