227 / 691BTPL

Block Template

Дані для складання кандидата на блок

Block Template описує кандидата на наступний блок, його транзакції та умови змін. Змінивши вміст, недостатньо скопіювати стару винагороду й хеші: усі залежні дані мають відповідати підсумковому блоку.

Block Template — набір даних для складання блоку, для заголовка якого шукають proof of work. Він поєднує попередній блок, транзакції, coinbase й обмеження майнінгу, але не доводить знаходження чи прийняття блоку.

Поля previousblockhash і height визначають місце кандидата в ланцюзі. Також є version, bits і часові дані. Шаблон — основа для складання блоку, а не просто готовий заголовок для сліпого повторення того самого обчислення. [BIP 22 — Block template structure]

У BIP 22 поле depends посилається, починаючи з одиниці, на попередні елементи transactions; coinbase до цього списку не входить. Якщо дочірня транзакція витрачає вихід батьківської в тому самому блоці, батьківська має бути раніше. Відсутність depends означає невідомі залежності, а не їх відсутність. [BIP 22 — Block template structure]

Bitcoin Core v29.0 складає coinbase із субсидії на відповідній висоті та фактичних комісій включених транзакцій. Після вилучення транзакцій не можна автоматично залишати старе coinbasevalue як належну винагороду. Зміна добору потребує перерахунку доступних комісій. [Bitcoin Core v29.0 — Block assembler]

За BIP 141 witness commitment фіксує witness-дані через wtxid. Bitcoin Core 29 надає default_witness_commitment для незміненого шаблону. Після зміни відповідних транзакцій або їх порядку слід перевірити чи перерахувати зобов’язання та врахувати отримані TXID у Merkle root заголовка. [BIP 141 — Witness commitment] [Bitcoin Core 29 — getblocktemplate RPC]

Bitcoin Core v29.0 добирає пакети із залежностями та дотримується ваги й sigops. blockmaxweight і blockmintxfee впливають на складання. Невключення транзакції за цією політикою саме по собі не доводить її консенсусної недійсності, а налаштування майнера не підвищують мережеві ліміти. [Bitcoin Core v29.0 — Block assembler]

BIP 23 описує через mutable дозволені зміни, наприклад часу чи транзакцій. Дозвіл сервера не скасовує консенсус: попередник, час, складність і транзакції мають залишатися правильними. Доступ до шаблону також не гарантує кінцевому пристрою необмеженого добору вмісту. [BIP 23 — Mutations and proposals]

BIP 23 може обмежувати роботу через expires і визначати дозвіл змінювати prevblock. Після зміни вершини ланцюга проста заміна хешу попередника не гарантує чинності решти даних. Висоту, транзакції, винагороду та інші контекстні умови потрібно оцінити знову. [BIP 23 — Mutations and proposals]

Режим proposal у BIP 23 перевіряє кандидата без вимоги чинного proof of work. Позитивний результат не означає знаходження, публікації чи постійного місця блоку в ланцюзі. Завершений блок має пройти належну перевірку під час подання. [BIP 23 — Mutations and proposals]

Для повної картини прочитайте також Mining Pool, Заголовок блока, Extranonce, Дерево Merkle. На цю статтю також посилаються Coinbase-транзакція, ASIC Miner, Mining Pool, Nonce.

DOC · 001BIP 22 — Block template structureСпецифікація ↗DOC · 002BIP 23 — Mutations and proposalsСпецифікація ↗DOC · 003Bitcoin Core 29 — getblocktemplate RPCДокументація ↗DOC · 004Bitcoin Core v29.0 — Block assemblerПервинне джерело ↗DOC · 005BIP 141 — Witness commitmentСпецифікація ↗
Спочатку джерела · Не інвестиційна порада