ASICBoost je optimalizace bitcoinové těžby: dovoluje opakovaně využít část práce při výpočtu hashů, digitálních otisků blokové hlavičky. Snižuje některé náklady na pokusy, ale neusnadňuje podmínku, kterou musí úspěšný hash splnit. Úspora vzniká vhodnou přípravou zadání a návrhem výpočetního čipu.
Představte si vyřizování podobných objednávek: společné údaje připravíte jednou, ale každou objednávku musíte dál dokončit zvlášť. Tak lze přiblížit základní nápad ASICBoostu. Timo Hanke jej popsal v roce 2016 ve spolupráci se Sergiem Demianem Lernerem. ASIC je čip určený pro konkrétní výpočetní úlohu; úprava jeho práce může omezit zbytečné opakování. Nemění SHA-256, používanou hashovací funkci, ani pravidla sítě Bitcoin. Výsledný dvojitý hash hlavičky stále musí být nejvýše roven cílové hodnotě a celý blok musí být platný. [1]
Bajt je jednotka velikosti digitálních dat. Hlavička je krátký souhrn údajů o bloku. Má 80 bajtů, ale první průchod hashovací funkcí zpracovává nejprve 64 bajtů a potom zbylých 16, doplněných předepsaným zakončením. Merkle root, společný otisk transakcí, přes tuto hranici přechází: jeho poslední 4 bajty jsou ve druhé části. Vedle nich leží čas, bits, tedy zhuštěný zápis těžebního cíle, a nonce, měněný čítač pokusů. Které údaje změníme, proto rozhoduje o tom, kterou část výpočtu lze znovu použít. [1]
Hanke mluví o colliding work items, tedy vhodně sladěných zadáních. Jejich první části hlavičky se liší, a dávají proto různé midstate, průběžné stavy výpočtu. Stejná naopak zůstává část označená Message. Pro zvolený nonce tak čip může sdílet message schedule, rozpis pomocných hodnot pro zpracování druhé části prvního SHA-256. Výpočty pokračují z různých mezistavů samostatně. Nejde o nalezení stejných konečných hashů ani prolomení funkce. Slovo „kolize“ tu označuje shodu vybrané části zadání; první části hlaviček se naopak liší. [1]
Sergio Demian Lerner rozlišuje overt a covert ASICBoost. Overt mění povolené bity nVersion, pole verze v hlavičce, takže jeho příprava nemusí hledat shodu části Merkle root. Covert takovou shodu hledá: poslední 4 bajty Merkle root zůstávají stejné, zatímco první část se mění. Pomoci mohou změny přípustných transakčních údajů nebo pořadí transakcí. Změny však nesmějí porušit návaznost transakcí a otisky zapsané v bloku musí dál odpovídat jeho datům. Pozorování různých verzí hlavičky samo neprokazuje konkrétní úsporu energie ani identitu provozovatele. [2]
Pool sdružuje práci těžařů. Jeho server, počítačová služba, se kterou zařízení komunikuje, přijímá výsledky podle dohodnutých podmínek. Petrův stroj nemůže měnit hlavičku libovolně. Dokument s označením BIP310 popisuje vyjednání přes mining.configure: parametr version-rolling.mask označuje bity, které lze měnit, a odpověď vybere průnik možností těžaře a serveru. Maska je tedy přehled povolených pozic, nikoli příslib vyššího výkonu. Technická podmínka version_bits & ~last_mask == 0 říká, že odevzdané bity nesmějí zasahovat mimo poslední platnou masku. Přijde-li mining.set_version_mask, nová maska platí okamžitě; nelze čekat na další zadání. Firmware, program řídící zařízení, musí tuto dohodu dodržovat. [3]
BIP320 navrhuje 16 obecných bitů nVersion; BIP323 jako navržená náhrada popisuje 24 bitů. Oba dokumenty mají při této redakční kontrole stav Draft, tedy návrh. Ten sám neříká, že nic není implementováno, ani že změnu podporuje každý pool. Dokument řeší zamýšlené použití pole, zatímco konkrétní spojení se řídí skutečně používanou maskou a softwarem. Petr proto z čísla BIP nevyvozuje, co jeho zařízení právě smí měnit, a návrh nezaměňuje za automatickou změnu pravidel sítě. [4] [5]
Hankeho model zapisuje úsporu jako x × (n − 1) / n. Písmeno x označuje podíl práce, který lze sdílet, a n počet vhodných zadání. Pro x = 25% a n = 4 dostaneme 18.75%. Jinými slovy: místo opakování sdílené části pro všechna zadání ji připravíme společně. Tento výsledek platí pro popsaný model výpočetní práce, nikoli automaticky stejný pokles elektrického příkonu u libovolného zařízení. Spotřebu ovlivňují také ostatní obvody a provozní podmínky. Stejné procento proto nelze bez měření převzít jako zvýšení výkonu či výnosu. [1]
Petr si nejprve ověří podporu čipu, firmwaru a spolupráci s poolem. Potom sleduje, zda pool práci přijímá, a měří celé zařízení při srovnatelných podmínkách. Ukazatel J/TH znamená jouly na terahash: množství energie potřebné na bilion hashovacích pokusů. Při porovnání musí měření zahrnovat stejné části zařízení a stejné časové období. Název ASICBoost sám takové měření nenahradí. Funkce není synonymem přetaktování, při kterém se zvyšuje pracovní frekvence, a nezaručuje nález bloku ani zisk. Je to způsob, jak určitou práci vykonat úsporněji, pokud ji podporuje celý používaný řetězec. [1] [3]
Pro nejúplnější obraz čtěte toto heslo společně s ASIC Miner, Těžba, Block Header, Proof of Work, Bitcoin, SHA-256. Opačným směrem na něj odkazují také Mining Firmware.