Coinbase-транзакція визначає одержувачів винагороди за блок: дозволених нових біткоїнів і комісій решти транзакцій. На відміну від звичайного платежу, вона не витрачає раніше отримані кошти. Вона дійсна лише в дійсному блоці, а винагороду не можна витратити одразу. Назва означає тип транзакції, а не біржу Coinbase.
Уявімо, що Анна готує блок-кандидат для майнінгу. Вона збирає платежі користувачів і перед ними ставить особливу транзакцію, яка визначає одержувачів винагороди. У нашому прикладі правила дозволяють створити 3,125 BTC, а відібрані платежі дають 0,075 BTC комісій. Отже, Анна може взяти щонайбільше 3,2 BTC. Ця перша транзакція — coinbase. Самого запису недостатньо: блок має виконати вимогу майнінгу й усі інші умови, які вузли перевіряють самостійно. Якщо Анна запише собі забагато, вони відхилять увесь блок, хоч скільки енергії пішло на його пошук. Центрального рахунку, що надсилає їй гроші, немає. Нові монети виникають за спільними правилами всередині прийнятого блоку. Із 3,2 BTC у прикладі новими є лише 3,125 BTC; решту заплатили користувачі. Це винагорода, а не прибуток: витрати на майнінг ще не віднято. [6] [4]
Дозволена нова емісія називається Block Subsidy й періодично зменшується вдвічі під час Halving. Сатоші — найменша одиниця біткоїна. Комісії залежать від конкретних платежів, тому різні блоки можуть давати різну винагороду. Межа винагороди складається з дозволеної емісії для цієї висоти, яку Bitcoin Core обчислює через GetBlockSubsidy, та комісій решти дійсних транзакцій блоку. Лише емісія збільшує кількість монет; комісії — це вже наявні сатоші. Майнер може отримати менше, але не забрати різницю пізніше: невикористана емісія не виникне, а неотримані комісії стануть назавжди недоступними для витрачання. Навіть один зайвий сатоші робить увесь блок недійсним. [4] [6]
Винагорода часто надходить пулу, який координує роботу кількох майнерів. Блокувальний скрипт — коротка програма, що визначає умови подальшого витрачання виходу. PPS, FPPS і PPLNS — різні способи розподілу доходу пулу між учасниками. Виходи використовують звичайні блокувальні скрипти. Винагорода може надійти на спільну адресу, розподілитися між одержувачами або включати частку оператора пулу. Вузли перевіряють суми й умови витрачання, а не договори та справжніх власників. PPS, FPPS, PPLNS, пороги виплат і подальші перекази учасникам — правила пулу, а не консенсусу Bitcoin. [6] [7]
Анна бачить винагороду в блоці, але ще не може оплатити нею електроенергію. Її не затримує біржа: чекати змушують правила Bitcoin. Висота — порядковий номер блоку; H тут позначає висоту блоку, в якому виникла винагорода. COINBASE_MATURITY вимагає різниці щонайменше 100 між висотою блоку витрачання й висотою створення виходу. Вихід із висоти H уперше можна витратити в дійсному блоці H+100. Лічильник підтверджень може виглядати інакше, бо блок створення вже рахується першим. Важлива різниця висот, а не оцінка в годинах. Її дотримання не гарантує, що блок ніколи не залишить ланцюг. [5]
Реорганізація означає перехід вузла на іншу дійсну гілку з більшою накопиченою роботою майнінгу. UTXO — невитрачені виходи, тобто окремі доступні суми. Винагорода може зникнути з цього набору разом зі своїм блоком. Реорганізація може вилучити початковий блок з активного дійсного ланцюга з найбільшою накопиченою роботою. Його виходи coinbase тоді зникають з активного набору UTXO. Можуть постраждати й транзакції, що витрачають винагороду. Очікування 100 блоків обмежує наслідки коротких реорганізацій, але не є абсолютною гарантією. Пул має розрізняти винагороду в активному ланцюгу, можливість її витрачання та свої зобов’язання перед майнерами. [4] [5]
Для точного формату потрібні назви: вхід зазвичай указує на кошти, що витрачаються; вихід задає суму й умови її витрачання. Txid ідентифікує транзакцію, версія визначає формат, а locktime може обмежувати час включення. Блок повинен містити щонайменше одну транзакцію; лише перша може бути coinbase. Вона має один вхід із нульовим посиланням на попередній вихід: хеш із 32 нульових байтів та індекс 0xffffffff. Це посилання, outpoint, нічого попереднього не витрачає, тому звичайного підпису на витрачання виходу тут не перевіряють. Однак транзакція має власні txid, версію, locktime та один або кілька виходів. [1] [2] [3]
Висота — порядковий номер блоку. BIP34 позначає пропозицію, правило якої прийняв Bitcoin; scriptSig — поле даних входу, а CScript — спосіб запису скриптових інструкцій і чисел. BIP34 вимагає, щоб scriptSig починався з висоти блоку як мінімально закодованого числа CScript. Усе поле займає 2–100 байтів. Далі можуть бути extra nonce, позначка пулу або дані об’єднаного майнінгу. Неправильна висота чи довжина спричиняє відхилення. Хоча вхід не виконується як звичайний скрипт розблокування, його коди операцій підпису можуть враховуватися в ліміті sigops, тобто обмеженні кількості операцій підпису. [1] [9]
Майнінг багаторазово обчислює хеш, цифровий відбиток короткого опису блоку — заголовка. Nonce є змінюваним числом, а корінь Меркла — спільним відбитком транзакцій. Зміна транзакції відкриває нові спроби. Поле nonce заголовка має 32 біти, і обладнання швидко перебирає всі варіанти. Тому програма змінює також extra nonce у coinbase. Змінюються txid, корінь дерева Меркла й заголовок, відкриваючи новий простір пошуку хешів. Пул розподіляє роботу між пристроями, щоб ті зайвий раз не перевіряли однакові варіанти. Extra nonce не створює додаткових монет. [6] [7] [12]
SegWit відокремлює частину даних перевірки, наприклад підписи, у частину witness. Commitment — прив’язка до даних, яку можна перевірити, а не ще одна виплата. Далі наведено її технічний формат. Якщо блок містить дані witness, BIP141 вимагає виходу coinbase з witness commitment — криптографічною прив’язкою до цих даних. Скрипт починається з 6a24aa21a9ed: OP_RETURN, вставлення 36 байтів і позначка aa21a9ed. Далі йде 32-байтовий подвійний хеш SHA-256 від кореня дерева Меркла witness, з’єднаного із зарезервованим значенням. Witness входу coinbase має містити тільки це одне 32-байтове значення. Якщо підходять кілька виходів, береться найбільший індекс. Це не виплата, яку можна витратити; без даних witness у блоці така прив’язка необов’язкова. [10]
Full Node — комп’ютер, що сам перевіряє правила Bitcoin. Вага блоку вимірює використання дозволеної місткості даних; Mempool локально зберігає звичайні непідтверджені транзакції. Перевірка винагороди є частиною перевірки всього блоку. Full Node вимагає coinbase першою й відхиляє додаткові coinbase у тому самому блоці. Він перевіряє scriptSig, висоту BIP34, діапазони сум, вагу блоку, комісії та потрібний witness commitment. Сума виходів не може перевищувати емісію плюс комісії; пізніше витрачання мусить відповідати правилу зрілості. Майнер не може за правилами протоколу призначити собі довільну суму. Без свого блоку coinbase не потрапляє до mempool. [3] [4] [10]
Genesis Block — початковий блок Bitcoin. Його особливий статус і колишні повторювані ідентифікатори пояснюють, чому сучасні звичайні правила не можна без розбору застосовувати до всіх історичних випадків. До обов’язкового запису висоти різні coinbase могли мати однакові txid. BIP30 захищає старі невитрачені виходи від перезапису; BIP34 додає висоту, яка допомагає розрізняти транзакції у звичайних сучасних блоках. Genesis Block особливий: його coinbase є в записаному блоці, але ініціалізація не зробила її вихід доступним для витрачання. Тому початкові 50 BTC витратити неможливо; це не звичайне очікування 100 блоків. [8] [9] [11]
Для повної картини прочитайте також Block, Block Subsidy, Transaction Fees, Майнінг, Block Template, Bitcoin. На цю статтю також посилаються Block Subsidy, Підтвердження, Reorg, Stale Block.