39 / 691CBTX

Coinbase-транзакция

Транзакция Coinbase — это обязательная первая транзакция каждого блока Биткойн. Он имеет один специальный вход, который не тратит старые UTXO, позволяет майнеру претендовать максимум на недавно выпущенный компонент вознаграждения в размере заданной суммы плюс комиссии в блоке и производит выходные данные, которые не созревают еще в 100 блоках.

Coinbase — это согласованный тип транзакции, а не компания Coinbase или регулярный платеж. Вместе с блоком узел проверяет нулевую точку, высоту в соответствии с BIP34, потолок вознаграждения, нулевую позицию, зрелость и возможное обязательство SegWit. Отдельно в мемпул он не принимается.

Блок должен содержать хотя бы одну транзакцию, а монетная база может быть только первой. Bitcoin Core распознает его по точной структуре: один вход с 32 нулевыми байтами в хеше предыдущего вывода и индексом 0xffffffff. Ввод не разблокирует существующий UTXO, поэтому он не имеет обычной подписи или значения prevout. Транзакция по-прежнему может иметь несколько выходов: обычную версию, а также время блокировки и собственный txid. [Справочник разработчика биткойна — входные данные Coinbase] [Справочник разработчика биткойна — цепочка блоков] [Bitcoin Core — транзакция.h (IsCoinBase)]

Сумма выходных данных Coinbase не может превышать GetBlockSubsidy для этой суммы плюс комиссии всех других действительных транзакций в блоке. Только вновь выпущенный компонент вознаграждения создает новые сатоши; комиссии конвертируют уже существующие сатоши. Майнер может потребовать меньше, и разница исчезнет навсегда, но один сатоши, превышающий лимит, делает весь блок недействительным. Консенсус не определяет разделение между пулом, майнерами или несколькими скриптами. [Bitcoin Core — validation.cpp] [Bitcoin Core — miner.cpp]

Начиная с BIP34, база монет scriptSig должна начинаться с текущей высоты блока как минимально закодированного номера CScript. Весь скриптSig занимает от 2 до 100 байт. Остальные могут содержать дополнительный одноразовый номер, тег пула или объединенное обязательство по майнингу, но это не выходит за рамки правил: неправильная высота или длина сделают блок недействительным, а встроенные коды операций подписи могут использовать лимит sigop. [Справочник разработчиков биткойнов — входные данные Coinbase] [BIP 34 — Высота блока в Coinbase]

ASIC меняет nonce в заголовке, но 32-битное пространство быстро заканчивается. Таким образом, программное обеспечение для майнинга превращает дополнительный одноразовый номер в базу монет; это изменит его txid, корневую транзакцию Merkle и, следовательно, заголовок блока, поэтому он получит новое хэш-пространство. Протоколы пула делят это пространство между воркёрами, чтобы их доли не конфликтовали. Дополнительный nonce — это часть координации, а не дополнительная эмиссия. [Bitcoin Core — miner.cpp] [BIP 22 — getblocktemplate] [Stratum V2 — спецификация протокола майнинга]

Выходные данные Coinbase используют общие сценарии блокировки и могут быть разделены между несколькими адресами или политиками. Пул может произвести оплату по адресу сбора, немедленно разделить доход или зарезервировать вывод для оператора. Однако узел проверяет суммы и сценарии, а не контракты или фактических владельцев. Пороги выплат, PPS, FPPS, PPLNS и последующие выплаты являются правилами пула, не относящимися к протоколу. [Bitcoin Core — miner.cpp] [BIP 22 — getblocktemplate]

Если блок содержит транзакцию-свидетеля, BIP141 требует подтверждения свидетеля Coinbase на одном выходе: OP_RETURN, начиная с 6a24aa21a9ed, и 32-байтового подтверждения. Входной свидетель coinbase содержит одно зарезервированное значение длиной 32 байта. Если совпадающих результатов больше, консенсус принимает самый высокий индекс. Этот вывод связывает корень-свидетель Меркла; не награда для майнеров. [BIP 141 — Обязательства по разделению свидетелей]

Вывод coinbase отмечен специальным флагом в наборе UTXO и может быть потрачен только тогда, когда разница высоты тратящего и создающего блоков достигнет COINBASE_MATURITY, сегодня 100. Таким образом, награду с высоты H можно будет потратить впервые в блоке H+100. Кошелек может показывать кажущуюся разницу в одно подтверждение, поскольку генерирующий блок считается первым. Зрелость – это не окончательность. [Bitcoin Core — консенсус.h (COINBASE_MATURITY)]

Если добытый блок выпадает из активной цепочки с наибольшим количеством работы во время реорганизации, его выходные данные монетной базы исчезнут из активного набора UTXO. Последующие транзакции, уже израсходовавшие зрелое вознаграждение, также могут быть недействительными. Задержка в 100 блоков ограничивает ущерб от коротких реорганизаций, но не гарантирует неизменности. Пул должен отдельно отслеживать активную цепочку, зрелость и свои обязательства перед майнерами. [Bitcoin Core — validation.cpp] [Bitcoin Core — консенсус.h (COINBASE_MATURITY)]

Полный узел требует, чтобы база монет находилась в нулевой позиции во время проверки, отклоняет дополнительную базу монет, проверяет длину scriptSig и высоту BIP34, рассчитывает комиссию за другие транзакции и отклоняет вознаграждение сверх новой эмиссии плюс комиссии. Он также проверяет диапазоны значений, вес, обязательства свидетелей и более поздний срок погашения расходов. Отдельная база монет без высоты и контекста блока не принадлежит мемпулу. [Bitcoin Core — транзакция.h (IsCoinBase)] [Bitcoin Core — validation.cpp] [BIP 141 — обязательство по раздельному свидетелю]

В ранних блоках можно было создать одну и ту же базу монет txid, поскольку высота еще не была обязательной. BIP30 предотвращает перезапись неизрасходованных выходных данных старой транзакции, а BIP34 делает современные базы монет обычно уникальной высоты. Genesis является историческим исключением: его база монет находится в сериализованном блоке, но код инициализации никогда не помещает свои выходные данные в одноразовую базу данных UTXO. Поэтому знаменитые 50 BTC невозможно потратить. [BIP 30 — Дублирующиеся транзакции] [BIP 34 — Высота блока в базе монет] [Bitcoin Core — Chainparams.cpp (конструкция генезиса)]

Для полной картины прочитайте эту статью вместе с Блок, Эмиссионная награда за блок, Комиссии за транзакции, Майнинг, Block Template, Bitcoin. На эту статью также ссылаются Эмиссионная награда за блок, Подтверждение, Reorg, Stale Block.

DOC · 001Bitcoin Developer Reference — Coinbase inputДокументация ↗DOC · 002Bitcoin Developer Reference — Block chainДокументация ↗DOC · 003Bitcoin Core — transaction.h (IsCoinBase)Документация ↗DOC · 004Bitcoin Core — validation.cppДокументация ↗DOC · 005Bitcoin Core — consensus.h (COINBASE_MATURITY)Документация ↗DOC · 006Bitcoin Core — miner.cppДокументация ↗DOC · 007BIP 22 — getblocktemplateСпецификация ↗DOC · 008BIP 30 — Duplicate transactionsСпецификация ↗DOC · 009BIP 34 — Block height in coinbaseСпецификация ↗DOC · 010BIP 141 — Segregated Witness commitmentСпецификация ↗DOC · 011Bitcoin Core — chainparams.cpp (genesis construction)Документация ↗DOC · 012Stratum V2 — Mining Protocol specificationСпецификация ↗
Проверено 1 августа 2026 годаСначала источники · Не является инвестиционной рекомендацией