39 / 691CBTX

Coinbase transakce

Coinbase transakce je povinná první transakce každého bitcoinového bloku. Má jediný zvláštní vstup, který neutrácí starší UTXO, dovoluje těžaři nárokovat nejvýše nově emitovanou složku odměny danou výškou plus poplatky v bloku a vytváří výstupy nezralé po dalších 100 bloků.

Coinbase je konsenzuální typ transakce, nikoli firma Coinbase ani běžná platba. Uzel spolu s blokem ověřuje nulový outpoint, výšku podle BIP34, strop odměny, pozici nula, zralost a případný SegWit commitment. Samostatně se do mempoolu nepřijímá.

Blok musí obsahovat alespoň jednu transakci a coinbase smí být pouze první. Bitcoin Core ji pozná podle přesné struktury: jediný vstup s 32 nulovými bajty v hashi předchozího výstupu a indexem 0xffffffff. Vstup neodemyká existující UTXO, proto nemá běžný podpis ani hodnotu prevoutu. Transakce přesto může mít více výstupů, běžnou verzi i locktime a vlastní txid. [Bitcoin Developer Reference — Coinbase input] [Bitcoin Developer Reference — Block chain] [Bitcoin Core — transaction.h (IsCoinBase)]

Součet výstupů coinbase nesmí překročit GetBlockSubsidy pro danou výšku plus poplatky všech ostatních platných transakcí v bloku. Nové satoshi vytváří pouze nově emitovaná složka odměny; poplatky převádějí už existující satoshi. Těžař může nárokovat méně a rozdíl navždy zanikne, ale jediný satoshi nad limitem zneplatní celý blok. Konsenzus neurčuje rozdělení mezi pool, těžaře či více skriptů. [Bitcoin Core — validation.cpp] [Bitcoin Core — miner.cpp]

Od BIP34 musí scriptSig coinbase začínat aktuální výškou bloku jako minimálně zakódované číslo CScript. Celý scriptSig má 2 až 100 bajtů. Zbytek může nést extra nonce, značku poolu či závazek merged miningu, ale není mimo pravidla: chybná výška nebo délka blok zneplatní a vložené podpisové opkódy mohou spotřebovat sigop limit. [Bitcoin Developer Reference — Coinbase input] [BIP 34 — Block height in coinbase]

ASIC mění nonce v hlavičce, jenže 32bitový prostor rychle vyčerpá. Těžební software proto mění extra nonce v coinbase; tím změní její txid, Merkle root transakcí a následně hlavičku bloku, takže získá nový prostor hashů. Poolové protokoly rozdělují tento prostor mezi workery, aby nekolidovaly jejich share. Extra nonce je koordinační údaj, nikoli další emise. [Bitcoin Core — miner.cpp] [BIP 22 — getblocktemplate] [Stratum V2 — Mining Protocol specification]

Výstupy coinbase používají běžné zamykací skripty a lze je rozdělit mezi několik adres či politik. Pool může platit na sběrnou adresu, rozdělit výnos hned nebo vyhradit výstup provozovateli. Uzel však ověřuje částky a skripty, ne smlouvy ani skutečné vlastníky. Prahy výplat, PPS, FPPS, PPLNS a pozdější výběry jsou mimoprotokolová pravidla poolu. [Bitcoin Core — miner.cpp] [BIP 22 — getblocktemplate]

Obsahuje-li blok witness transakce, BIP141 vyžaduje v jednom výstupu coinbase witness commitment: OP_RETURN začínající 6a24aa21a9ed a 32bajtový závazek. Witness vstupu coinbase obsahuje jedinou 32bajtovou rezervovanou hodnotu. Je-li odpovídajících výstupů více, konsenzus bere nejvyšší index. Tento výstup zavazuje witness Merkle root; není odměnou těžaři. [BIP 141 — Segregated Witness commitment]

Výstup coinbase je v UTXO sadě označen zvláštním příznakem a smí být utracen, až když rozdíl výšky utrácejícího a vytvářejícího bloku dosáhne COINBASE_MATURITY, dnes 100. Odměnu z výšky H lze tedy poprvé utratit v bloku H+100. Peněženka může ukazovat zdánlivý rozdíl o jednu konfirmaci, protože vytvářející blok počítá jako první. Zralost není konečná finalita. [Bitcoin Core — consensus.h (COINBASE_MATURITY)]

Vypadne-li vytěžený blok při reorganizaci z aktivního řetězce s nejvíce prací, jeho coinbase výstupy zmizí z aktivní UTXO sady. Neplatné mohou být i navazující transakce, které už zralou odměnu utratily. Prodleva 100 bloků omezuje škody krátkých reorganizací, ale nezaručuje nezměnitelnost. Pool musí zvlášť sledovat aktivní řetězec, zralost a své závazky k těžařům. [Bitcoin Core — validation.cpp] [Bitcoin Core — consensus.h (COINBASE_MATURITY)]

Full node při validaci vyžaduje coinbase na pozici nula, odmítne další coinbase, zkontroluje délku scriptSig a výšku BIP34, spočítá poplatky ostatních transakcí a odmítne odměnu nad novou emisi plus poplatky. Ověřuje také rozsahy hodnot, weight, witness commitment a pozdější zralost utrácení. Samostatná coinbase bez kontextu výšky a bloku do mempoolu nepatří. [Bitcoin Core — transaction.h (IsCoinBase)] [Bitcoin Core — validation.cpp] [BIP 141 — Segregated Witness commitment]

V raných blocích mohly vzniknout stejné txid coinbase, protože výška ještě nebyla povinná. BIP30 brání přepsání neutracených výstupů starší transakce a BIP34 činí moderní coinbase běžně jedinečnou výškou. Genesis je historická výjimka: jeho coinbase je v serializovaném bloku, ale inicializační kód její výstup nikdy nevložil do utratitelné UTXO databáze. Proto slavných 50 BTC nelze utratit. [BIP 30 — Duplicate transactions] [BIP 34 — Block height in coinbase] [Bitcoin Core — chainparams.cpp (genesis construction)]

Pro nejúplnější obraz čtěte toto heslo společně s Blok, Odměna za blok, Transakční poplatky, Těžba, Block Template, Bitcoin. Opačným směrem na něj odkazují také Odměna za blok, Potvrzení, Nonce.

DOC · 001Bitcoin Developer Reference — Coinbase inputDokumentaceDOC · 002Bitcoin Developer Reference — Block chainDokumentaceDOC · 003Bitcoin Core — transaction.h (IsCoinBase)DokumentaceDOC · 004Bitcoin Core — validation.cppDokumentaceDOC · 005Bitcoin Core — consensus.h (COINBASE_MATURITY)DokumentaceDOC · 006Bitcoin Core — miner.cppDokumentaceDOC · 007BIP 22 — getblocktemplateSpecifikaceDOC · 008BIP 30 — Duplicate transactionsSpecifikaceDOC · 009BIP 34 — Block height in coinbaseSpecifikaceDOC · 010BIP 141 — Segregated Witness commitmentSpecifikaceDOC · 011Bitcoin Core — chainparams.cpp (genesis construction)DokumentaceDOC · 012Stratum V2 — Mining Protocol specificationSpecifikace
Ověřeno 1. srpna 2026Primární zdroje · Nejde o investiční doporučení