Anatomie bloku
K popisu anatomie bitcoinového bloku použijeme blok obsahující transakci z dílu anatomie transakce s pořadovým číslem 676274 a hashem 00000000000000000000706c7f21388b285414c4829ee3981398e0cac82e43e3. Následuje hexadecimální reprezentace serializace hlavičky bloku:
0000802094dbc3cc1db91c6a106f6fb55b6e99a0b80eccc84b6d0b0000000000000000006b63e7d1a32149535d3f429ff5f9e7d9b1b19326876faff54d19610d7923ae7d1ebc5c606fdf0c174bf00ded
barva | hodnota | význam | formát |
---|---|---|---|
20800000 | verze bloku | 4 bajty LE | |
00…3db94 | hash předchozího bloku | 32 bajtů LE | |
d7ae2…6b | merkle root; kořenový hash Merkleho stromu transakcí | 32 bajtů LE | |
605cbc1e | časové razítko (timestamp) | 4 bajty LE | |
170cdf6f | bits; stanovuje cíl těžby | 4 bajty LE | |
ed0df04b | nonce; změnou se dosahuje změny hashe, jinak nemá význam | 4 bajty LE |
Z verze, konkrétně prvních tří bitů zleva (001), můžeme vyčíst signalizaci podle BIP 9. Přítomnost hashe předchozího bloku je jasná, blok je tím – podobně jako oka řetězu – pevně spojen s předchozím blokem. Kořenový hash Merkleho stromu transakcí zaručuje, že se změna byť jediného bajtu v jediné do bloku zahrnuté tx projeví v konečném důsledku změnou hashe hlavičky tohoto bloku. Časové razítko říká, že k vytěžení bloku došlo 1616690206 sekund od 1/1/1970, tedy 25/3/2021 v 16:36:46 UTC. Tento údaj ovšem nemusí být zcela přesný. Aby byl blok přijat sítí, musí být časové razítko větší, než medián časových razítek posledních 11 bloků a menší než o dvě hodiny navýšený medián aktuálních časů uzlů, ke kterým je uzel připojen. Z pole bits si vypočteme target – první bajt (zleva) je exponent, zbytek koeficient. Zůstaneme‐li v hexa, bude target cdf6f × 10017−3. Porovnáme, je‐li hash našeho bloku menší než vypočtený target. Poslední pole obsahuje nonci, které se budeme věnovat později.
Za hlavičkou následuje LE varint s počtem transakcí v bloku a pak už serializace všech těchto transakcí. První z nich je ovšem speciální, tzv. mincetvorná (coinbase). Ta se oproti zbytku liší tím, že nemá žádný skutečný vstup, resp. technicky vzato má mincetvorná transakce právě jeden vstup – hash předchozí transakce je 32 bajtů nul, index výstupu je ffffffff, podpisový skript musí být v rozmezí 2 a 100 bajtů, a musí být sám o sobě pravdivý. Právě sem umístil Satoshi v genesis bloku legendární titulek Timesů, zatímco ve scriptSigu mincetvorné transakce našeho bloku si můžeme přečíst zprávu „Mined by AntPool713“. Od BIPu 34 se do podpisového skriptu mincetvorné transakce dává na první místo element s číslem bloku. Tím je zajištěno, aby bylo možno odlišit jinak stále stejné mincetvorné transakce jejich unikátním hashem txid. Navzdory tomu, že neutrácí žádné UTXO, může si těžař na výstupu uzamknout odměnu (v době psaní) až 6,25 BTC plus součet poplatků všech zahrnutých transakcí. Pokud blok obsahuje segwitovou transakci, musí také obsahovat OP_RETURN výstup s kořenem paralelního Merkleho stromu svědků (witness). Protože podpisové skripty segwit transakcí již nejsou součástí výpočtu hashe transakce, a jejich změna by se tedy neprojevila změnou kořenového hashe Markleho stromu v hlavičce bloku (a protože strukturu hlavičky nelze změnit soft-forkem), jsou hashe svědků (witness) transakcí zahrnuty do hlavního Merkleho stromu (a tím i do hashe hlavičky bloku) právě touto cestou. Díky tomu platí, že změna kteréhokoliv bajtu kterékoliv v bloku zahrnuté transakce se nakonec projeví změnou hashe bloku.
Velikost zahrnutých transakcí v bloku nesmí překročit 4 miliony WU. Na druhou stranu však nemusí blok obsahovat žádnou další transakci, kromě mincetvorné. To se dělo zejména v prvních měsících fungování sítě, nyní už jen zřídka.