227 / 736BTPL

Block Template

Проект блока до начала майнинга

Прежде чем устройство начнёт искать успешный результат, оно должно знать, для какого блока считает. Программа готовит данные: на какой блок опираться, какие транзакции включить и какую награду можно начислить. Этот проект называется Block Template. Он похож на готовую к публикации рукопись: содержание уже есть, но ещё не пройден шаг, который сделает его частью общей истории. Сам шаблон не подтверждает транзакций.

Block Template — набор данных для сборки кандидата на новый блок в сети Bitcoin. Лишь затем майнер ищет действительное доказательство работы для его заголовка, краткого описания данных блока. Шаблон связывает выбранные транзакции, награду и правила сборки. Его получение не означает, что блок найден или принят сетью.

Каждый новый блок опирается на определённого предшественника. В шаблоне его обозначает previousblockhash, уникальный отпечаток, а height указывает позицию предлагаемого блока в цепочке. Другие поля включают version, версию заголовка, bits, компактную запись целевого значения для результата майнинга, и сведения о времени. Это основа для сборки конкретного блока, а не независимый список платежей. Те же транзакции после другого предшественника уже образуют другое задание. [1]

Анна получает биткоин, а затем платит им. Если оба перевода должны попасть в один блок, сначала должна стоять транзакция, передавшая ей средства, а затем та, которая их тратит. BIP 22 — технический документ о формате шаблона — определяет для таких связей поле depends: поле ссылается на предыдущие позиции списка transactions, нумеруемые с единицы. Список не включает coinbase, особую первую транзакцию, начисляющую награду майнеру. Отсутствующее depends означает неизвестные зависимости, а не подтверждённое их отсутствие. Программа не должна считать нехватку сведений пустым списком. [1]

Награда включает новые биткоины по правилам соответствующей высоты и комиссии фактически включённых транзакций. Так её рассчитывает и приведённый Bitcoin Core v29.0. Эта программа проверяет блоки и транзакции и может готовить шаблоны для майнинга. В нашем примере транзакции дают 10000 sats; удаление независимой транзакции с комиссией 3000 sats оставляет 7000 sats комиссий. Sats — мелкие единицы биткоина. Поле coinbasevalue указывает максимальную награду, которую майнер может начислить себе при исходном наборе транзакций. Если набор меняется, эту сумму нужно пересчитать. Расчёт должен исходить из реальных комиссий, а не суммы для старого содержимого. [4] [1]

Блок также содержит криптографические отпечатки для проверки данных. BIP 141 описывает witness commitment — криптографическую привязку к данным witness, среди которых есть, например, подписи, доказывающие право потратить средства. Она вычисляется из идентификаторов wtxid, включающих эти данные. Bitcoin Core 29 предоставляет default_witness_commitment для неизменённого шаблона. После изменения соответствующих транзакций или их порядка привязку нужно проверить либо пересчитать. Merkle root — общий отпечаток транзакций в заголовке — тоже нужно вычислить из окончательных идентификаторов TXID, включая идентификатор изменённой coinbase. Старая печать не подходит к изменённому содержимому. [5] [3]

Место в блоке ограничено, и майнер выбирает его содержимое. Bitcoin Core v29.0 оценивает пакеты связанных транзакций, их вес как меру нагрузки данными и sigops — операции проверки подписей, учитываемые в лимите блока. Настройки blockmaxweight и blockmintxfee влияют на размер собираемого блока и требуемую ставку комиссии. Это политика отбора. Платёж, пропущенный по этой причине, не обязательно нарушает правила сети. Собственные настройки майнера также не увеличивают сетевые лимиты, проверяемые другими узлами. [4] [3]

В BIP 23 поле mutable перечисляет изменения, которые разрешает сервер, например корректировку времени или добавление транзакций. Это договорённость о работе с конкретным шаблоном. Разрешение не отменяет консенсус — правила действительности, которые другие участники проверяют независимо. Предшественник, время, сложность и транзакции всё равно должны быть правильными. Доступ к шаблону также не означает, что каждое подключённое устройство может произвольно менять содержимое: это зависит от устройства системы и полученного задания. [2]

Во время вычислений другой майнер может продлить цепочку. Чтобы строить следующий блок после последнего принятого, недостаточно заменить отпечаток предшественника в старом шаблоне. Некоторые транзакции уже могут быть подтверждены, меняются высота и другие условия. BIP 23 описывает expires как срок действия работы, а prevblock — как разрешение использовать её с другим предшественником. Даже такое разрешение не заменяет проверку: нужно заново оценить транзакции, награду и весь новый контекст. [2]

Ошибку в собственном проекте лучше обнаружить до долгого поиска. Режим proposal по BIP 23 позволяет представить его на проверку без действительного Proof of Work, то есть без уже найденного результата, доказывающего необходимую вычислительную работу. Положительная оценка не означает, что блок найден или разослан, и не гарантирует постоянного места в цепочке. Она говорит о прохождении соответствующей предварительной проверки. Готовый блок при отправке ещё должен пройти надлежащую валидацию, включая проверку доказательства работы. [2]

Для полной картины прочитайте эту статью вместе с Mining Pool, Block Header, Extranonce, Merkle Tree, Bitcoin, Bitcoin Core. На эту статью также ссылаются 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Спецификация
Обновлено: Сначала источники · Не является инвестиционной рекомендацией