Coinbase transakce určuje příjemce odměny za blok: povolených nových bitcoinů a poplatků z ostatních transakcí. Na rozdíl od běžné platby neutrácí dříve přijaté peníze. Platí ale jen jako součást platného bloku a její odměnu nelze hned použít. Název označuje typ transakce, nikoli burzu Coinbase.
Představte si Annu, která připravuje kandidátní blok pro těžbu. Poskládá do něj platby uživatelů a před ně vloží zvláštní transakci, v níž určí příjemce odměny. V našem příkladu pravidla dovolují vytvořit 3,125 BTC a vybrané platby přinášejí 0,075 BTC na poplatcích. Anna si proto může připsat nejvýše 3,2 BTC. Tato první transakce je coinbase. Samotným zápisem však Anna odměnu nezískala: blok ještě musí splnit požadavek těžby a všechny ostatní podmínky, které si přijímající uzly samy ověří. Kdyby si napsala víc, odmítnou celý blok, i kdyby na jeho nalezení vynaložila spoustu energie. Není tu centrální účet, který jí výplatu posílá. Nové mince vznikají podle společných pravidel uvnitř přijatého bloku. Z 3,2 BTC v příkladu je nových jen 3,125 BTC; zbytek zaplatili uživatelé. Jde o příklad odměny, ne výpočet zisku: náklady na těžbu v něm odečtené nejsou. [6] [4]
Povolená nová emise se nazývá Block Subsidy a v pravidelných intervalech se půlí při Halvingu. Satoshi je nejmenší jednotka bitcoinu. Výše poplatků naopak závisí na konkrétních platbách v bloku, takže dva bloky nemusí přinést stejnou odměnu. Horní mez odměny tvoří příspěvek nových bitcoinů pro danou výšku bloku, v Bitcoin Core vypočtený pomocí GetBlockSubsidy, a poplatky všech ostatních platných transakcí v bloku. Jen první část zvětšuje zásobu; poplatky jsou již existující satoshi. Těžař může vybrat méně. Nevyužitou část si později nedoplatí: nevybraná emise nevznikne a nevybrané poplatky už nelze utratit. Jediný satoshi navíc ale zneplatní celý blok. [4] [6]
Odměna často míří těžebnímu poolu, který sdružuje práci více těžařů. Zamykací skript je krátký program, který určuje, za jakých podmínek lze výstup později utratit. Zkratky PPS, FPPS a PPLNS níže označují různé způsoby, jak pool rozděluje výdělek svým účastníkům. Výstupy coinbase používají běžné zamykací skripty. Odměna může jít na jedinou sběrnou adresu, rozdělit se mezi více příjemců nebo obsahovat podíl provozovatele poolu. Uzel kontroluje částky a podmínky utracení; neověřuje smlouvy ani skutečné vlastníky. Způsoby odměňování PPS, FPPS a PPLNS, minimální výplata a pozdější převody účastníkům jsou pravidla poolu, nikoli součást konsensu Bitcoinu. [6] [7]
Anna může odměnu v bloku vidět, ale zatím s ní nezaplatí elektřinu. Nejde o zadržení peněz burzou: čekání vynucují samotná pravidla Bitcoinu. Výška bloku je jeho pořadové číslo; H zde označuje výšku bloku, ve kterém odměna vznikla. Pravidlo COINBASE_MATURITY vyžaduje rozdíl alespoň 100 mezi výškou bloku, který výstup utrácí, a výškou jeho vzniku. Výstup vytvořený ve výšce H lze poprvé utratit v platném bloku H+100. Peněženka může počítat potvrzení jinak, protože už vytvářející blok bere jako první. Rozhoduje rozdíl výšek, nikoli odhad v hodinách. Splnění této podmínky nezaručuje, že blok nikdy nevypadne z řetězce. [5]
Reorganizace znamená, že uzel přejde na jinou platnou větev s větším součtem prokázané těžební práce. UTXO jsou dosud neutracené výstupy, tedy jednotlivé dostupné částky. Odměna může z tohoto přehledu zmizet spolu s blokem, v němž vznikla. Při reorganizaci může původní blok opustit aktivní platný řetězec s největší kumulovanou prací. Jeho coinbase výstupy pak zmizí z aktivní sady UTXO. Dotčeny mohou být i navazující transakce, které odměnu utratily. Čekání 100 bloků omezuje dopady krátkých reorganizací, není však absolutní pojistkou. Pool proto musí rozlišovat odměnu v aktivním řetězci, možnost jejího utracení a vlastní závazky k těžařům. [4] [5]
Pro přesný zápis potřebujeme několik názvů: vstup obvykle odkazuje na utrácené peníze, výstup určuje částku a podmínky jejího použití. Txid je identifikátor transakce, verze určuje její formát a locktime může omezit, kdy smí být zařazena. Každý blok musí obsahovat alespoň jednu transakci a coinbase smí být jen ta první. Má jediný vstup s nulovým odkazem na předchozí výstup: hash tvoří 32 nulových bajtů a index má hodnotu 0xffffffff. Tento odkaz, označovaný outpoint, nic dřívějšího neutrácí, proto se zde neověřuje běžný podpis k utrácenému výstupu. Transakce však má vlastní txid, verzi, locktime a jeden či více výstupů. [1] [2] [3]
Výška je pořadové číslo bloku. BIP34 je označení návrhu, jehož pravidlo Bitcoin přijal; scriptSig je datové pole vstupu a CScript způsob, jakým Bitcoin zapisuje skriptové instrukce a čísla. BIP34 vyžaduje na začátku pole scriptSig výšku bloku jako minimálně zakódované číslo CScript. Celé pole má 2 až 100 bajtů. Za výškou může být extra nonce, označení poolu nebo údaj pro sloučenou těžbu. Nesprávná výška či délka způsobí odmítnutí bloku. Přestože se vstup nevykonává jako běžný odemykací skript, přítomné podpisové opkódy mohou přispívat do limitu sigops, tedy počtu podpisových operací. [1] [9]
Při těžbě se opakovaně počítá hash, digitální otisk krátkého souhrnu bloku zvaného hlavička. Nonce je měněné číslo a Merkle root společný otisk transakcí. Změna transakce tak otevře další pokusy. Pole nonce v hlavičce bloku má 32 bitů a těžební zařízení jeho možnosti rychle vyčerpá. Software proto mění také extra nonce v coinbase. Změní tím txid této transakce, kořen Merkleova stromu a následně hlavičku bloku: vznikne další prostor pro hledání vhodného hashe. Těžební pool rozděluje práci mezi zařízení tak, aby zbytečně nezkoušela stejné varianty. Extra nonce žádné další mince nevytváří. [6] [7] [12]
SegWit odděluje část ověřovacích dat transakce, například podpisy, do části zvané witness. Commitment je ověřitelná vazba na data, nikoli další výplata. Následující zápis je technická reference této vazby. Obsahuje-li blok witness data, BIP141 vyžaduje v coinbase výstup s witness commitment, tedy kryptografickou vazbou na tato data. Jeho skript začíná 6a24aa21a9ed: OP_RETURN, vložení 36 bajtů a značka aa21a9ed. Následuje 32bajtový dvojitý SHA-256 hash spojení witness Merkle root a rezervované hodnoty. Witness vstupu coinbase musí obsahovat právě tuto jedinou 32bajtovou rezervovanou hodnotu. Odpovídá-li vzoru více výstupů, platí nejvyšší index. Nejde o utratitelnou výplatu; bez witness dat v bloku je tento commitment volitelný. [10]
Full Node je počítač, který sám ověřuje bitcoinová pravidla. Váha bloku vyjadřuje využití jeho povolené datové kapacity; Mempool je místní zásobník běžných nepotvrzených transakcí. Kontrola odměny je součástí ověření celého bloku. Full Node vyžaduje coinbase na první pozici a další coinbase v témže bloku odmítne. Kontroluje scriptSig, výšku podle BIP34, rozsahy částek, váhu bloku, poplatky i případný witness commitment. Součet výstupů porovná s povolenou emisí a poplatky; pozdější utrácení podléhá pravidlu zralosti. Těžař tak nemůže platně přiznat sám sobě libovolnou částku. Coinbase bez příslušného bloku se do mempoolu nedostane. [3] [4] [10]
Genesis Block je počáteční blok Bitcoinu. Jeho zvláštní postavení a dřívější opakované identifikátory ukazují, proč se běžná dnešní pravidla nesmějí bez rozlišení přenášet na všechny historické případy. Než byla výška bloku povinná, mohly mít různé coinbase transakce stejné txid. BIP30 brání přepsání dosud neutracených výstupů starší transakce; BIP34 v běžných moderních blocích přidává rozlišující výšku. Zvláštní případ představuje Genesis Block. Jeho coinbase v zapsaném bloku existuje, ale inicializace ji nezavedla jako utratitelný výstup. Původních 50 BTC proto nelze utratit; nejde o obyčejné čekání na 100 bloků. [8] [9] [11]
Pro nejúplnější obraz čtěte toto heslo společně s Block, Block Subsidy, Transaction Fees, Těžba, Block Template, Bitcoin. Opačným směrem na něj odkazují také Block Subsidy, Potvrzení, Reorg, Stale Block.