Artikkeli · r7-bitcoin-001
Bitcoinin lohkopalkkion kypsyminen: miksi coinbase-lähtöä ei voi käyttää heti?
Bitcoinin lohkossa syntyvää coinbase-tapahtuman lähtöä ei Bitcoin Core v31.1:n sääntöjen mukaan voi käyttää seuraavassa lohkossa. Sen pitää ensin kypsyä: käyttävän lohkon korkeuden ja alkuperäisen lohkon korkeuden erotuksen on oltava vähintään 100. Ehto koskee itse coinbase-tapahtuman lähtöjä, ei jokaista myöhempää bitcoin-vastaanottoa.[4], [5]
Coinbase on tässä Bitcoin-lohkon erityinen ensimmäinen tapahtuma, ei samanniminen kaupankäyntipalvelu. Lohkotuki ja kyseisen lohkon tapahtumamaksut muodostavat enimmäismäärän, jonka coinbase-tapahtumassa saa kerätä; koko summaa ei ole pakko ottaa. Se poikkeaa tavallisesta tapahtumasta: sen syöte ei käytä aiempaa normaalia UTXO-lähtöä.[7], [8], [9]
Mitä 100 lohkoa tarkoittaa?
Bitcoin Coren tarkistus vertaa sitä korkeutta, johon käyttävä tapahtuma ollaan sisällyttämässä, sen lohkon korkeuteen, jossa coinbase-lähtö syntyi. Jos erotus on alle 100, käyttöyritys on ennenaikainen. Luku on lohkojen korkeusero, ei lupaus tietystä määrästä tunteja tai päiviä.[4], [5]
Kuvitellaan, että coinbase-lähtö syntyy lohkossa 1 000. Sitä käyttävä tapahtuma ei tämän ikäehdon puolesta kelpaa lohkoon 1 099: erotus on 99. Lohkossa 1 100 erotus on 100, jolloin tämä erityinen kypsyysraja täyttyy. Luvut ovat vain laskuharjoitus, eivät viittaus todelliseen palkkioon tai ennusteeseen. Muutkin tapahtuman kelpoisuusehdot täytyy täyttää; ikärajan täyttyminen ei tee erityistapauksessa käyttökelvotonta lähtöä käytettäväksi.[4], [5]
Vahvistuksia laskettaessa alkuperäinen lohko voi näkyä ensimmäisenä vahvistuksena. Kun ketjun kärki on esimerkissä lohkossa 1 099, alkuperäisellä lohkolla on tässä laskutavassa 100 vahvistusta ja seuraava lohko olisi korkeudella 1 100. Pelkkä ilmaus ”odota sata vahvistusta” voi siksi jättää epäselväksi, tarkoitetaanko nykyistä kärkeä vai mahdollista käyttävää lohkoa. Korkeuseron laskeminen tekee rajan selväksi.[4], [5]
Onko tavallisella vastaanotolla sama odotus?
Ei coinbase-kypsyyssäännön vuoksi. Kun tavallinen tapahtuma myöhemmin käyttää kypsynyttä coinbase-lähtöä ja luo uusia lähtöjä, nämä uudet lähdöt eivät ole itse coinbase-tapahtuman lähtöjä. Bitcoin Coren tässä tarkasteltu erityinen ikäraja kohdistuu coinbase-lähtöön.[4]
Se ei kuitenkaan tarkoita, että mikä tahansa muu lähtö olisi kaikissa tilanteissa heti käytettävissä. Lähtöön liittyvät käyttöehdot, tapahtuman mahdollinen aikarajoitus ja se, onko kyseinen lähtö jo käytetty, ovat erillisiä kysymyksiä. Myös sovellus tai säilytyspalvelu voi esittää oman tilansa eri tavalla kuin lohkosääntö.[4], [6]
Miksi lohkon asema on tärkeä?
Kypsyys lasketaan sen ketjun tilanteessa, jota tarkastellaan. Jos aiemmin nähty lohko poistuu käytetystä ketjusta uudelleenjärjestymisessä, pelkkä aiemmin näytetty vahvistusmäärä ei enää kerro saman lähtöerän asemasta samalla tavalla. Tämän vuoksi yksittäistä kuvakaappausta ei pidä tulkita pysyväksi vakuutukseksi.[8]
Tässä selitetään Bitcoin Core v31.1:n koodista tarkistettava korkeusero, ei minkään louhintapoolin maksuaikataulua. Poolin käyttäjälle näkyvä hyvitys voi olla palvelun oma kirjanpitomerkintä; pelkän saldon perusteella ei voi päätellä, että se vastaa suoraan tietyn coinbase-lähdön kypsymistä. Jos kyse on palvelun maksusta, sen ehdot ja maksutiedot pitää selvittää erikseen.
Lohkopalkkion kypsyys, tavallisen vastaanoton vahvistukset ja palvelun oma maksuaikataulu ovat siis kolme eri asiaa. Niiden erottaminen auttaa ymmärtämään, mitä lohkosääntö sanoo – ja mitä se ei kerro tietyn käyttäjän tilin näkymästä. Yhden lähtöerän ikäraja ei myöskään kuvaa koko lompakon kaikkien erien ikää: jokainen tarkasteltava lähtö pitää tunnistaa erikseen.
Lähteet
- [4] Bitcoin Core v31.1 transaction consensus — IsFinalTx; CalculateSequenceLocks; Consensus::CheckTxInputs
- [5] Bitcoin Core v31.1 consensus constants — COINBASE_MATURITY constant
- [6] Bitcoin Developer Guide transactions — Transactions: Introduction; Locktime And Sequence Number; Transaction Malleability
- [7] Bitcoin Core v31.1 transaction data structures — CTxIn sequence flags; SerializeTransaction
- [8] Bitcoin Developer Guide blockchain — Block Chain: Block Height And Forking; Transaction Data
- [9] Bitcoin Core v31.1 validation — CheckTxInputs; ConnectBlock; block subsidy