Coinbase adalah jenis transaksi konsensual, bukan perusahaan Coinbase atau pembayaran reguler. Bersama dengan blok tersebut, node memverifikasi titik keluar nol, tinggi menurut BIP34, batas atas hadiah, posisi nol, jatuh tempo, dan kemungkinan komitmen SegWit. Itu tidak diterima ke dalam mempool secara terpisah.
Sebuah blok harus berisi setidaknya satu transaksi dan coinbase hanya dapat menjadi yang pertama. Bitcoin Core mengenalinya berdasarkan struktur persisnya: masukan tunggal dengan 32 byte nol dalam hash keluaran sebelumnya dan indeks 0xffffffff. Masukan tersebut tidak membuka kunci UTXO yang sudah ada, sehingga tidak memiliki nilai tanda tangan atau nilai sebelumnya yang biasa. Suatu transaksi masih dapat memiliki banyak keluaran, versi reguler serta waktu penguncian dan txid khusus. [Referensi Pengembang Bitcoin — masukan Coinbase] [Referensi Pengembang Bitcoin — Rantai blok] [Bitcoin Core — transaksi.h (IsCoinBase)]
Jumlah keluaran coinbase tidak boleh melebihi GetBlockSubsidy untuk jumlah tersebut ditambah biaya semua transaksi valid lainnya di blok tersebut. Hanya komponen hadiah yang baru dikeluarkan yang menghasilkan satoshi baru; biaya mengkonversi satoshi yang sudah ada sebelumnya. Seorang penambang dapat mengklaim lebih sedikit dan selisihnya hilang selamanya, tetapi satu satoshi yang melebihi batas akan membuat seluruh blok tidak valid. Konsensus tidak menentukan pemisahan antara kumpulan, penambang, atau beberapa skrip. [Bitcoin Core — validasi.cpp] [Bitcoin Core — miner.cpp]
Mulai BIP34, scriptSig coinbase harus dimulai dengan tinggi blok saat ini sebagai nomor CScript yang dikodekan secara minimal. Keseluruhan scriptSig berukuran 2 hingga 100 byte. Sisanya mungkin membawa nonce tambahan, tag kumpulan, atau komitmen penambangan gabungan, namun hal ini tidak berada di luar aturan: tinggi atau panjang yang salah akan membuat blok tidak valid, dan opcode tanda tangan yang tertanam dapat menghabiskan batas sigop. [Referensi Pengembang Bitcoin — masukan Coinbase] [BIP 34 — Tinggi blok di coinbase]
ASIC mengubah nonce di header, tetapi ruang 32-bit cepat habis. Oleh karena itu, perangkat lunak penambangan mengubah nonce ekstra menjadi coinbase; ini akan mengubah txid-nya, transaksi root Merkle dan selanjutnya header blok, sehingga mendapat ruang hash baru. Protokol pool membagi ruang ini di antara para pekerja sehingga bagian mereka tidak bertabrakan. Nonce ekstra adalah bagian koordinasi, bukan emisi ekstra. [Bitcoin Core — miner.cpp] [BIP 22 — getblocktemplate] [Stratum V2 — spesifikasi Protokol Penambangan]
Keluaran Coinbase menggunakan skrip kunci umum dan dapat dibagi menjadi beberapa alamat atau kebijakan. Kumpulan tersebut dapat membayar ke alamat pengumpulan, segera membagi pendapatan, atau memesan hasilnya untuk operator. Namun, node memverifikasi jumlah dan skrip, bukan kontrak atau pemilik sebenarnya. Ambang batas pembayaran, PPS, FPPS, PPLNS, dan penarikan selanjutnya adalah aturan kumpulan non-protokol. [Bitcoin Core — miner.cpp] [BIP 22 — getblocktemplate]
Jika blok berisi transaksi saksi, BIP141 memerlukan komitmen saksi coinbase dalam satu keluaran: OP_RETURN dimulai dengan 6a24aa21a9ed dan komitmen 32-byte. Saksi masukan coinbase berisi satu nilai cadangan 32-byte. Jika terdapat lebih banyak output yang sesuai, konsensus mengambil indeks tertinggi. Keluaran ini mengikat akar saksi Merkle; bukan hadiah untuk penambang. [BIP 141 — Komitmen Saksi Terpisah]
Output dari coinbase ditandai dengan bendera khusus di set UTXO dan hanya dapat dibelanjakan ketika perbedaan ketinggian blok pembelanjaan dan pembuatan mencapai COINBASE_MATURITY, hari ini 100. Oleh karena itu, hadiah dari ketinggian H dapat dibelanjakan untuk pertama kalinya di blok H+100. Dompet mungkin menunjukkan perbedaan nyata pada satu konfirmasi karena blok penghasil dihitung terlebih dahulu. Kedewasaan bukanlah finalitas. [Bitcoin Inti — konsensus.h (COINBASE_MATURITY)]
Jika blok yang ditambang keluar dari rantai aktif dengan pekerjaan terbanyak selama reorganisasi, keluaran coinbase-nya akan hilang dari set UTXO aktif. Transaksi berikutnya yang telah menghabiskan hadiah yang sudah jatuh tempo juga mungkin tidak valid. Penundaan 100 blok membatasi dampak buruk dari reorganisasi jangka pendek, namun tidak menjamin kekekalan. Suatu kumpulan harus secara terpisah memantau rantai aktif, kematangan, dan komitmennya terhadap penambang. [Bitcoin Core — validasi.cpp] [Bitcoin Core — konsensus.h (COINBASE_MATURITY)]
Node penuh memerlukan coinbase di posisi nol selama validasi, menolak coinbase tambahan, memeriksa panjang scriptSig dan tinggi BIP34, menghitung biaya transaksi lain dan menolak hadiah di atas penerbitan baru ditambah biaya. Hal ini juga memverifikasi rentang nilai, bobot, komitmen saksi dan jatuh tempo pembelanjaan di kemudian hari. Coinbase terpisah tanpa konteks tinggi dan blok tidak termasuk dalam mempool. [Bitcoin Core — transaksi.h (IsCoinBase)] [Bitcoin Core — validation.cpp] [BIP 141 — Komitmen Saksi Terpisah]
Di blok awal, coinbase txid yang sama dapat dibuat karena tingginya belum wajib. BIP30 mencegah output yang tidak terpakai dari transaksi lama agar tidak ditimpa, dan BIP34 membuat basis koin modern umumnya memiliki ketinggian yang unik. Genesis adalah pengecualian historis: basis koinnya berada dalam blok serial, tetapi kode inisialisasi tidak pernah memasukkan keluarannya ke dalam basis data UTXO yang dapat dibuang. Oleh karena itu, 50 BTC yang terkenal tidak dapat dibelanjakan. [BIP 30 — Transaksi duplikat] [BIP 34 — Tinggi blok di coinbase] [Bitcoin Core — chainparams.cpp (konstruksi genesis)]
Untuk gambaran yang lebih utuh, baca entri ini bersama Blok, Imbalan penerbitan blok, Biaya transaksi, Penambangan Bitcoin, Block Template, Bitcoin. Entri ini juga dirujuk dari Imbalan penerbitan blok, Konfirmasi, Reorg, Stale Block.