225 / 736TARGET

Mining Target

Hranice, kterou výsledek těžby nesmí překročit

Jana ví, že těžaři opakují výpočty, ale pořád jí není jasné, na co čekají. Každý pokus vytvoří hash, výsledek, který lze chápat jako velmi velké číslo. Nestačí získat jakýkoli výsledek: musí se vejít pod stanovenou hranici, přičemž rovnost je také přípustná. Této hranici říkáme Mining Target. Čím je nižší, tím vzácnější je úspěch. Ostatní účastníci sítě potom mohou snadno ověřit, že nalezený výsledek podmínku skutečně splňuje.

Mining Target je číselný cíl, se kterým se porovnává hash hlavičky bloku, tedy jeho stručného datového souhrnu. Pro platný důkaz práce nesmí být hash vyšší než správný cíl. V síti Bitcoin musí být tento cíl kladný a odpovídat pravidlům pro daný blok; těžař si ho nemůže libovolně zvolit.

Představ si jen pro ilustraci hranici 20: výsledky 19 i 20 by vyhověly, 21 už ne. Skutečná čísla při těžbě jsou mnohem větší, ale vztah je stejný: hash ≤ target. Znak znamená „menší nebo rovno“, nejen „menší než“. Takto porovnání provádí i zde odkazovaný Bitcoin Core v29.0, program, kterým účastníci sítě ověřují bloky a transakce. Porovnává hash celé hlavičky. Nonce, hodnota, kterou těžař při hledání mění, je jedním ze vstupů. S cílem se porovnává výsledný hash. [1]

Jana na obrázku vidí úspěšný hash začínající dlouhou řadou nul. Je to dobrá pomůcka: více úvodních nul při stejné délce zápisu znamená menší číslo. Ale dva hashe se stejným počtem nul mohou ležet na opačných stranách cíle. Záleží i na zbytku číslic. Nuly proto nenahrazují úplné porovnání hash ≤ target. Pravidlo není soutěž o hezký vzor znaků, nýbrž přesná číselná podmínka. [1]

Bit zaznamenává nulu nebo jedničku; osm bitů tvoří bajt. Aby nebylo nutné do hlavičky ukládat celé dlouhé číslo, používá se pole nBits o délce 32 bitů. Kóduje cíl v prostoru 256bitových čísel. Obsahuje koeficient, exponent určující posun a bit pro znaménko. Například 0x04123456 se rozbalí na 0x12345600; předpona 0x označuje šestnáctkový zápis, který používá i písmena. Jde o ukázku kódování, ne o aktuální síťový cíl. Pro základní porozumění stačí rozlišit číslo a jeho zkrácený zápis. [3] [5]

Při čtení surových dat může stejné číslo vypadat obráceně. V hlavičce o délce 80 bajtů zabírá nBits čtyři bajty uložené jako little-endian: nejméně významný bajt je první. Proto se číselný zápis 0x1d00ffff v datech objeví jako ff ff 00 1d. Pořadí bajtů není změna cíle, pouze způsob uložení. Je to detail pro práci s daty; při běžném čtení průzkumníku bloků není potřeba převracet zobrazená čísla. [2]

Jana by mohla navrhnout uložit vyšší číslo a usnadnit si hledání. Jenže software nekontroluje pouze to, zda umí nBits přečíst. Funkce DeriveTarget v Bitcoin Core v29.0 odmítá záporný cíl, nulu, přetečení mimo číselný rozsah i hodnotu nad powLimit, nejvyšším povoleným cílem dané sítě. Správné dekódování tedy pouze vysvětluje, jaké číslo zápis představuje; samo o sobě ale neznamená, že ho pravidla dovolují použít. [1]

Ani cíl uvnitř povoleného rozsahu nemusí být správný pro konkrétní blok. Bitcoin Core porovnává nBits s výsledkem GetNextWorkRequired, výpočtu vycházejícího z předchozího bloku a pravidel sítě. Při neshodě vrací chybu bad-diffbits. Nízký hash pod vlastním snazším cílem neomlouvá nesprávnou hodnotu v hlavičce. Jana tak nemůže získat uznaný blok pouhým snížením nároků: ostatní uzly, počítače ověřující pravidla, takový pokus odmítnou. [4]

V modelu rovnoměrného 256bitového hashe má každý možný výsledek stejnou pravděpodobnost. Pro povolený cíl T jsou přijatelné hodnoty od nuly do T včetně. Odtud plyne p = (T + 1) / 2^256 pro jeden pokus; p označuje pravděpodobnost úspěchu. Přičtená jednička zahrnuje i nulu. Tento vztah vysvětluje, proč nižší cíl ztěžuje hledání. Neříká však, kolik pokusů stroj stihne za sekundu, ani kdy přesně přijde další blok. [1]

Když Jana podmínku splní, prokázala potřebnou výpočetní práci, nikoli správnost všeho uvnitř bloku. Bitcoin Core dále ověřuje souhrnný otisk transakcí, zvláštní odměnovou transakci coinbase, limity bloku i platnost transakcí. Slovo coinbase zde není název burzy, ale technické označení první transakce bloku. Nízký hash nemůže napravit neplatný obsah. Cíl je proto důležitou součástí pravidel, nikoli povolením jejich zbytek obejít. [4]

Pro nejúplnější obraz čtěte toto heslo společně s Share Difficulty, Proof of Work, Nonce, Block Header, Bitcoin. Opačným směrem na něj odkazují také ASIC Miner, Nonce, Mining Share, Share Difficulty.

DOC · 001Bitcoin Core v29.0 — Proof-of-work checksPrimární zdroj DOC · 002Bitcoin Developer Reference — Block headers and nBitsDokumentace DOC · 003Bitcoin Core v29.0 — Compact arithmeticPrimární zdroj DOC · 004Bitcoin Core v29.0 — Contextual and block validationPrimární zdroj DOC · 005NIST — Binary data unitsDokumentace
Revidováno: Primární zdroje · Nejde o investiční doporučení