Blokovi originalnog protokola Bitcoin imali su verziju
1. Polje za verziju bloka veliko je 32 bita, a zapisuje se u
little-endian formatu. Pojavom BIP 34, verzija je povećana na 2 te
je uveden mehanizam za provođenje soft-fork promjena. Mehanizam je
provjeravao koliko blokova na 1000 ima zadanu verziju bloka što je
signaliziralo da je promjena softvera prihvaćena. Problem ove metode
je što podržava samo jedan soft-fork u paraleli. BIP 66 povećao je
verziju bloka na 3, a BIP 65 na 4.
BIP 9 uvodi nov mehanizam provođenja soft-fork
promjena te nov način tretiranja polja verizije u bloku. Verzija se
od sada tretira kao vektor bitova u kojem se svaki bit može
koristiti za praćenje verzije soft-forka. U dvotjednom (retarget)
periodu zbrajaju se bitovi pojedinih verzija kako bi se ustanovilo
ima li pojedina promjena dovoljnu podršku rudara (jesu li prešli
"prag").
Specifikacija
Svaki soft-fork obilježavaju sljedeći parametri:
Ime: Vrlo kratko opisuje soft-fork (npr. bip N).
Bit: Označuje koji će se bit u verziji bloka
koristiti za praćenje konkretnog soft-forka. Bira se iz skupa [0,
28].
Starttime: Vrijeme u budućnost od kada bit
počinje vrijediti specificirano kao srednje proteklo vrijeme
(medium time past).
Timeout: Specificira vrijeme nakon kojeg se
prihvaćanje soft-forka smatra neuspjelim.
Stanja
Uz svaki blok i soft-fork vežu se stanja:
DEFINED – svaki soft-fork započinje u ovom
stanju.
STARTED – svi blokoi za koje je prošlo
starttime.
LOCKED_IN – svi blokovi kojih nakon stanja
STARTED u dvotjednom periodu ima barem za prijelaz praga određene
verzije.
ACTIVE – svi blokovi nakon stanja LOCKED_IN.
FAILED – svi blokovi za koje prošao timeout, a
LOCKED_IN nije postignut.
Bitovi kao zastavice
Blokovi u stanju STARTED postavljaju bitove u polju
verzije na 1 kako bi signalizirali koji soft-fork podržavaju. Vršna
tri bita takvih blokova moraju biti 001. Budući da su BIP 34, 66 i
65 imali verzije 00000000000000000000000000000010 (2),
00000000000000000000000000000011 (3) i
00000000000000000000000000000100 (4), odnosno u little-endian formatu
10000000000000000000000000000000, 11000000000000000000000000000000
i 00100000000000000000000000000000, mogu se koristiti samo bitovi od
3. do 31., odnosno svaka verzija mora imati tri vršna bita 001.
Dakle, mogući raspon bitova je [0x20000000,
0x3FFFFFFF]. Do tog se raspona dolazi ako se uzme najmanja moguća
verzija u little-endian formatu 00100000000000000000000000000000
(0x20000000) i najveća moguća verzija
00111111111111111111111111111111 (0x3fffffff). To predstavlja 29
mogućih paralelnih soft-forkova.
Prijelazi između stanja
Svi blokovi unutar dvotjednog perioda imaju isto stanje. Iduće
stanje ovisi o prethodnom. Prag za prijelaz u stanje LOCKED_IN je
1915 (95%) blokova.