getblocktemplate je rozhraní, kterým software získává od bitcoinového uzlu podklady pro sestavení kandidáta na blok. Používá JSON-RPC, tedy požadavek a strukturovanou odpověď mezi programy. Standardní režim poskytne šablonu; samostatný režim umí předběžně posoudit vlastní návrh. Ani jeden sám nehledá důkaz práce.
Petrův program v běžném režimu mode=template obdrží například předchůdce bloku, transakce a dovolenou odměnu. To je návrh zadání, nikoli nalezený blok. Software musí sestavit coinbase, zvláštní první transakci přidělující odměnu, a dokončit blok. Hlavička je stručný souhrn dat bloku. Teprve pro ni software hledá hash, číselný kryptografický otisk, který splní těžební cíl a představuje Proof of Work, důkaz vykonané práce. Samotné getblocktemplate nepřijímá adresu pro výplatu ani nespouští výpočty těžebního stroje. Úspěšná odpověď tedy ještě neznamená, že Petr těží. [1]
Představme si, že uzel pošle data v podobě, které Petrův program nerozumí. Proto požadavek uvádí podporovaná pravidla v poli rules. Zde ověřovaný Bitcoin Core v29.0 vyžaduje segwit; pro testovací síť Signet také signet. SegWit upravuje mimo jiné zacházení s údaji pro ověření transakcí. Nestačí pouze připsat správné slovo: software je musí umět zpracovat. Pole capabilities oznamuje jiné schopnosti rozhraní a není náhradou za rules. Přesná pravidla přitom vždy závisejí na použité implementaci a verzi. [2]
Pole data obsahuje celý zápis transakce připravený pro přenos mezi programy. Tomuto uspořádání dat se říká serializace. Bajty, základní jednotky těchto dat, jsou zde zapsané šestnáctkově pomocí číslic 0–9 a písmen a–f. Odpověď obsahuje také krátké identifikátory transakcí. Podle technického dokumentu BIP 145 vzniká txid bez dat witness, zatímco hash je zahrnuje. Witness obsahuje například podpisy dokládající oprávnění utratit prostředky. Pro hlavní Merkle root, souhrnný otisk transakcí v hlavičce bloku, se používá txid, nikoli witness hash. Záměna polí není jen jiný název: může vytvořit chybný souhrnný otisk a znehodnotit sestavený blok. [3]
Petr nepotřebuje bombardovat uzel otázkou, zda už se něco změnilo. Long polling dovoluje ponechat požadavek otevřený, dokud server nechce původní podklady nahradit. Program převezme longpollid a pošle ho zpět beze změny. Podle tohoto označení server pozná, na jakou změnu program čeká. Z jeho znaků však program nemá odvozovat další informace. BIP 22 počítá s dlouhým časovým limitem čekání. Opakované neúplné či chybné odpovědi vyžadují odstup mezi pokusy, ne okamžitou smyčku. Tiché čekání samo o sobě proto není výpadek. [4]
Ani obyčejný opakovaný dotaz nezaručuje nově vybraný obsah. Bitcoin Core v29.0 uchovává připravenou šablonu v mezipaměti. Novou sestaví při změně předchůdce, nebo když se změnil mempool, místní zásobník nepotvrzených transakcí, a od přípravy uběhlo více než pět sekund. Čas v hlavičce přitom může aktualizovat zvlášť. Petr tak může obdržet stejný výběr transakcí znovu; neznamená to zaseknutí uzlu. Toto chování konkrétní verze také není slib, že každé zavolání vytvoří jedinečnou těžební úlohu. [2]
Petr upravil sestavení bloku a chce chybu odhalit dříve, než začne náročné hledání. V režimu proposal předá celý blok v poli data jako šestnáctkový zápis. Bitcoin Core v29.0 kontroluje i Merkle root, ale nevyžaduje již nalezený platný Proof of Work, důkaz výpočetní práce. Pokud návrh nenavazuje na poslední blok řetězce, který uzel právě používá, vrátí inconclusive-not-best-prevblk. To znamená, že není splněn předpoklad této kontroly; není to úplné posouzení platnosti návrhu. Předběžné posouzení také blok nerozesílá do sítě. [2]
Až software najde potřebný důkaz práce, může celý blok odevzdat přes submitblock. Parametr hexdata nese celý serializovaný blok v šestnáctkovém zápisu, nikoli pouze jeho hlavičku nebo otisk. Dokumentace Bitcoin Core 29 uvádí při přijetí výsledek null a jinak textový výsledek podle specifikace. Volitelný druhý parametr dummy se ignoruje; neslouží k zadání odměny. Přijetí uzlem neznamená zaručené trvalé potvrzení: další vývoj řetězce může změnit, která větev zůstane hlavní. [5]
Po prvním spuštění nemusí mít uzel staženou a ověřenou potřebnou historii. Bitcoin Core v29.0 na hlavní síti, mainnet, odmítá vydat šablonu bez připojených protějšků nebo během počáteční synchronizace označované IBD (initial block download). Jde o připravenost uzlu k práci s aktuální sítí, ne o zamítnutí konkrétního bloku. Při hledání chyby proto rozlišujeme čekající long polling, nepřipravený uzel a výsledek kontroly návrhu. Podobně mohou vypadat jako „nemám novou práci“, ale každý případ potřebuje jiné řešení. [2]
Pro nejúplnější obraz čtěte toto heslo společně s Block Template, Těžba, Stratum V2, Extranonce, Bitcoin, Bitcoin Core. Opačným směrem na něj odkazují také ASIC Miner, Solo Mining, Job Negotiation.