Към съдържанието
ДаретеEN

Майнинг с доказателство за работа

Coinbase трансакция

Coinbase трансакция в биткойн е първата трансакция във всеки блок. Тя взима наградата, записва височината и обвързва SegWit данните.

От Dimitar Zurnov · Обновено на 4 ноември 2026
Адаптирано от Learn Me a Bitcoin на Greg Walker.

Всеки блок в биткойн започва с coinbase трансакция (coinbase transaction). Майнърът я слага там, за да получи наградата за блок, която е субсидията плюс таксите от останалите трансакции. Това е единствената трансакция, която може да създаде нови биткойни, и тя няма истински вход, който да харчи. Изходът ѝ е това, което създава новите монети. Това е техническо понятие, а не борсата Coinbase.

Тя има същата основна форма като всяка трансакция, но няколко правила важат само за нея. Тази страница описва тези правила, два реални примера и обвързването с witness данните, което добави SegWit. За кратката дефиниция вижте страницата за coinbase.

Какви правила спазва coinbase трансакцията?

Coinbase трансакцията трябва да изпълнява тези изисквания. Всяко от тях идва от консенсусно правило или от софтфорк.

  • Тя е първата трансакция в блока.
  • Има точно един вход. Нейният txid е 32 нулеви байта, а vout е ffffffff, максималната стойност. Нищо не се харчи, затова няма какво да се отключва.
  • Нейният scriptSig започва с височината на блока по BIP 34. Блоковете от версия 2 са започнали от блок 227,836, а правилото за височината важи от блок 227,931. Целият scriptSig трябва да е между 2 и 100 байта.
  • Ако блокът има SegWit трансакции, witness стойността на входа трябва да съдържа 32-байтова резервирана стойност, а един от изходите трябва да носи обвързването (witness commitment). И двете идват от BIP 141.
  • Може да има няколко изхода, а общата сума, която изплащат, не може да надвишава субсидията плюс таксите.

Останалото е на майнъра. След височината в scriptSig има място за произволни данни, затова майнърите слагат етикет на пул или допълнителен nonce.

Как изглежда реална coinbase трансакция?

Блок 400,021 е добър пример за формата отпреди SegWit. Неговата coinbase трансакция има един празен вход и един изход:

Поле Стойност Значение
Вход txid 32 нулеви байта Няма предишна трансакция
Вход vout ffffffff Максималната стойност, както се изисква
ScriptSig 27 байта Височината и някои свободни данни
Изход 0 2,501,166,059 сатоши 25 BTC субсидия плюс 0.01166059 BTC такси
Скрипт на изхода P2PKH Заключен към адреса на майнъра
Coinbase трансакцията на блок 400,021 има един празен вход и един изход от 25.01166059 BTC. Блок 400,021: coinbase вход txid: всички нули 0000000000000000…0000000000000000 вход vout: ffffffff (максимумът) scriptSig: 27 байта, свободно 03 951a06 височина (BIP 34) 04 f15ccf56 допълнителен nonce 09 013803062b9b5a0100 допълнителен nonce 07 2f425443432f20 етикет /BTCC/ + интервал изход 0: 2,501,166,059 сатоши 25 BTC субсидия + 0.01166059 BTC такси заключен с P2PKH скрипт към майнъра
Субсидията тук е 25 BTC. Останалите 1,166,059 сатоши са таксите от останалата част на блока.

Scriptsig се разпада на четири части. Първата е височината и е единствената, която консенсусните правила изискват:

03 951a06                    3 байта: 951a06, little-endian, = 400,021
04 f15ccf56                  4 байта: допълнителен nonce
09 013803062b9b5a0100        9 байта: допълнителен nonce
07 2f425443432f20            7 байта: ASCII етикетът на пула "/BTCC/" и интервал

Височината е записана в little-endian, така че 951a06 се чете като 061a95 в big-endian, а това е 400,021 в десетичен вид. Задължителна е само първата част. Всичко след нея е избор на майнъра.

Защо височината е в coinbase?

Преди BIP 34 нищо в coinbase трансакцията не я е свързвало с нейния блок. Две coinbase трансакции са могли да излязат еднакви и да имат един и същи txid. Като сложим височината в първата част, всеки блок получава собствена coinbase трансакция. Всяка височина се появява само веднъж, така че всеки coinbase txid е различен.

Как се различава SegWit coinbase трансакцията?

Блок 538,403 е пример за SegWit. Неговата coinbase трансакция се различава от предишната в три неща.

  1. Трансакцията има witness. Единственият ѝ вход носи един елемент в стека, 32-байтовата резервирана стойност, която тук е съставена само от нули.
  2. Има два изхода. Първият изплаща субсидията от 12.5 BTC плюс 6,517 сатоши такси. Вторият не изплаща нищо и носи обвързването.
  3. Вторият изход е OP_RETURN, в който е самото обвързване.

Обвързването (witness commitment) е това, което свързва witness данните с блока. Ето как се изчислява.

  1. Вземете wTXID на всяка трансакция в блока. Coinbase трансакцията се брои като 32 нулеви байта, защото собственият ѝ witness не може да е част от обвързването, което тя създава.
  2. Построете Меркъл корен от тези wTXID в естествен байтов ред. Това е witness коренът. За блок 538,403 той е 8a8cc0634b8847eb38e7e884970deda26c2dfeefd923c4eba08ca11d110bb6e3.
  3. Изчислете HASH256 от witness корена, последван от 32-байтовата резервирана стойност. За блок 538,403 това дава faa194df59043645ba0f58aad74bfd5693fa497093174d12a4bb3b0574a878db.
  4. Сложете този хеш във втория изход, след 6-байтовото начало 6a24aa21a9ed. 6a е OP_RETURN, 24 означава, че следват 36 байта, а aa21a9ed показва, че е обвързване.
Обвързването е хеш на witness root и резервираната стойност, записан във втория изход на coinbase трансакцията. 4 wtxid, по един на трансакция Coinbase се брои като 32 нулеви байта. Останалите три са реалните им wtxid. Меркъл корен Witness root 8a8cc0634b8847eb38e7e884970deda2 6c2dfeefd923c4eba08ca11d110bb6e3 естествен байтов ред, не като в експлорър HASH256 + 32 нулеви байта wTXID commitment faa194df59043645ba0f58aad74bfd56 93fa497093174d12a4bb3b0574a878db резервирана стойност: 32 нулеви байта Изход 1: scriptPubKey 6a 24 aa21a9ed + обвързването по-горе OP_RETURN, монетите не се харчат
Обвързването е хеш на Меркъл корена от wTXID, плюс 32 нулеви байта.

Този скрипт на Python прави същото изчисление. Ползва wTXID в естествен байтов ред, обратния на формата, който показва експлорърът. Изпълнен върху четирите wTXID на блок 538,403, той връща горното обвързване.

import hashlib

def hash256(data: bytes) -> bytes:
    return hashlib.sha256(hashlib.sha256(data).digest()).digest()

def witness_commitment(wtxids: list[bytes]) -> bytes:
    """wtxid в естествен байтов ред; записът на coinbase е 32 нулеви байта."""
    level = list(wtxids)
    while len(level) > 1:
        if len(level) % 2:                       # нечетно ниво повтаря последния си елемент
            level.append(level[-1])
        level = [hash256(level[i] + level[i + 1]) for i in range(0, len(level), 2)]
    return hash256(level[0] + b"\x00" * 32)      # резервираната стойност е 32 нулеви байта

Ако блокът няма SegWit трансакции, coinbase трансакцията не се нуждае нито от резервираната стойност, нито от обвързване. Затова блоковете, намерени преди активирането на SegWit при блок 481,824, нямат обвързване.

Кога може да се харчи coinbase?

Изходите на coinbase трансакция не могат да се харчат, докато блокът не е на 100 блока дълбочина във веригата. Това е правилото за зрелост на coinbase, записано в консенсусния код.

Причината е пренареждането. Кратко пренареждане, от един или два блока, е обичайна. Ако coinbase се похарчеше веднага и блокът ѝ отпаднеше, всяка трансакция, която я е похарчила, би станала невалидна. Coinbase също не може просто да се върне. Височината ѝ е част от txid-а, така че блок на друга височина би имал различна coinbase. Чакането на 100 блока прави този риск почти нулев.

Зрелостта на coinbase пази от обичайните пренареждания. Дълбока атака, като атаката от 51%, може да пренапише повече от това, затова правилото не е гаранция срещу нея. То е практически запас за сигурност.

Може ли майнърът да вземе по-малко от наградата?

Да, и някои са го правили. Coinbase трансакцията може да изплати по-малко от субсидията плюс таксите, а разликата се губи завинаги, защото никой не може да харчи монети, които никой изход не съдържа. Блок 526,591 е такъв случай. Субсидията му е 12.5 BTC, а coinbase изплаща само 6.25 BTC. Майнърът няма причина да го направи нарочно, затова обикновено е грешка в софтуера за майнинг.

Правилото поставя само горна граница. Coinbase, която иска повече от субсидията плюс таксите, прави блока невалиден, така че всеки нод го отхвърля.

В какъв ред да прочетете този раздел?

Прочетете тази страница след блока кандидат, който обяснява защо coinbase трансакцията се строи последна. После прочетете страницата за наградата за блок, за сумите, които майнърът може да вземе.

В този раздел: Майнинг с доказателство за работа

Целият курс „Биткойн от нулата“

Нещо не изглежда наред? Кажете ни