UTXO-settet og chainstate

Databasen hver node sjekker bruk mot.

For å avgjøre om en ny transaksjon er gyldig, søker ikke en node gjennom hele blokkjeden. Den slår opp i én tabell: UTXO-settet, listen over hver mynt som finnes og ikke er brukt.

Hva som lagres

Hver oppføring er nøklet etter sitt outpoint (txid + utdataindeks) og holder beløpet, låsescriptet, høyden til blokken som skapte den, og et flagg hvis den kom fra en coinbase-transaksjon. I Bitcoin Core kalles denne databasen chainstate og ligger i LevelDB i chainstate-mappen.

Hvordan blokker endrer den

Når en blokk kobles til, fjernes brukte inndata og nye utdata legges til. Bitcoin Core lagrer også «undo»-data for hver blokk, så hvis en reorganisering fjerner en blokk, kan brukte mynter settes tilbake.

Hastighet og minne

Oppslag skjer for hver inndata i hver transaksjon, så hastighet betyr noe. Bitcoin Core cacher mynter i RAM, styrt av -dbcache. Versjon 31.0 hevet standarden fra 450 MiB til 1 024 MiB på systemer med minst 4 096 MiB RAM. En større cache kan kraftig fremskynde første synk.

Størrelse

UTXO-settet er mye mindre enn hele kjeden, men det er fortsatt flere gigabyte på disk, og hver fullnode må beholde alt. Hver ny utdata legger til til den er brukt, så å skape mange bitte små utdata har en kostnad for alle. Dette er én grunn til dust-grenser.

Pruning

En pruned node kan slette gamle blokkfiler, og beholde så lite som 550 MiB av dem, men den må beholde hele chainstate. Pruned noder validerer fortsatt alt.

Snapshots

Bitcoin Core kan eksportere settet med dumptxoutset. Med assumeutxo kan en ny node laste et slikt snapshot hvis hashet matcher ett skrevet inn i kildekoden, og deretter sjekke historien i bakgrunnen. Les om det i Initial block download.