Майнинг с доказателство за работа
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 | Заключен към адреса на майнъра |
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 трансакция се различава от предишната в три неща.
- Трансакцията има witness. Единственият ѝ вход носи един елемент в стека, 32-байтовата резервирана стойност, която тук е съставена само от нули.
- Има два изхода. Първият изплаща субсидията от 12.5 BTC плюс 6,517 сатоши такси. Вторият не изплаща нищо и носи обвързването.
- Вторият изход е
OP_RETURN, в който е самото обвързване.
Обвързването (witness commitment) е това, което свързва witness данните с блока. Ето как се изчислява.
- Вземете wTXID на всяка трансакция в блока. Coinbase трансакцията се брои като 32 нулеви байта, защото собственият ѝ witness не може да е част от обвързването, което тя създава.
- Построете Меркъл корен от тези wTXID в естествен байтов ред. Това е witness коренът. За блок 538,403 той е
8a8cc0634b8847eb38e7e884970deda26c2dfeefd923c4eba08ca11d110bb6e3. - Изчислете HASH256 от witness корена, последван от 32-байтовата резервирана стойност. За блок 538,403 това дава
faa194df59043645ba0f58aad74bfd5693fa497093174d12a4bb3b0574a878db. - Сложете този хеш във втория изход, след 6-байтовото начало
6a24aa21a9ed.6aеOP_RETURN,24означава, че следват 36 байта, аaa21a9edпоказва, че е обвързване.
Този скрипт на 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 трансакцията се строи последна. После прочетете страницата за наградата за блок, за сумите, които майнърът може да вземе.
В този раздел: Майнинг с доказателство за работа
Целият курс „Биткойн от нулата“
Нещо не изглежда наред? Кажете ни