Блокчейн/Уровень II · Механика/2.3 Блоки и цепочка/Урок 4
Доказательство работы (PoW) и целевое значение
Лотерейный билет, который покупают за энергию, а проверяют одним хешем
МатериалыИнтерфейс эксплорера блоковHex-калькулятор или среда программирования с поддержкой SHA-256Документация Bitcoin Developer Reference
Любопытство
- Почему чем меньше числовое целевое значение, тем труднее найти подходящий хеш?
- Как четырёхбайтовое значение может кодировать число, достаточно большое, чтобы ограничить пространство из 2^256 вариантов?
- Что происходит с ожидаемым временем блока, если хешрейт удваивается, а целевое значение остаётся прежним?
Исследование
- Блок принимается только в том случае, если он решает вычислительную задачу. Майнер должен найти 80-байтовый заголовок, двойной хеш SHA-256 которого численно меньше или равен определённому порогу — целевому значению (target). Это ограничение превращает создание блока в поиск редкого числа в огромном пространстве из 2^256 возможных хешей. Валидность любого блока-кандидата целиком зависит от этого единственного математического неравенства.
- Само целевое значение не хранится в полной 32-байтовой форме, поскольку это заняло бы слишком много места в заголовке. Вместо этого оно сжимается до четырёх байт, называемых «nBits», с помощью кодирования мантиссой и экспонентой. Это формат с потерями: сохраняется только трёхбайтовая мантисса, поэтому целевое значение слегка округляется, что на практике ничего не стоит. Декодирование этих четырёх байт восстанавливает огромное 256-битное число, задающее верхнюю границу допустимых значений хеша.
- Чтобы найти подходящий хеш, майнеры перебирают варианты полей заголовка. Основная переменная — 32-битный nonce, который даёт примерно 4,3 миллиарда различных значений за один цикл перебора. Поскольку оборудование исчерпывает эти комбинации мгновенно, майнеры меняют extra-nonce в coinbase-транзакции или корректируют временную метку, получая новые корни Меркла и новые варианты заголовка. Каждое изменение даёт совершенно другой хеш — по сути, новый лотерейный билет.
- Ожидаемый объём работы растёт прямо пропорционально сложности, а целевое значение меняется в обратную сторону: когда после роста хешрейта сеть пересчитывает цель, целевое значение снижается, и для валидного решения требуется больше ведущих нулей в двоичном представлении. Ожидаемое число хешей для нахождения одного блока примерно равно сложности, умноженной на 2^32. Благодаря такому масштабированию средний интервал между блоками остаётся стабильным — около десяти минут, — независимо от того, ведётся ли майнинг на ноутбуках или на промышленных фермах.
- Проверка асимметрична созданию. Чтобы найти подходящий хеш, могут потребоваться миллиарды попыток, а для проверки достаточно одного вычисления double-SHA-256 заголовка и сравнения с целевым значением. Поэтому проверка доказательства работы выполняется мгновенно, хотя полная валидация блока всё равно означает проверку каждой транзакции в нём. На этой асимметрии и строится модель безопасности: создать работу дорого, а довериться ей дёшево.
- Генезис-блок был добыт при сложности 1 — самой низкой, которую допускают правила; даже тогда для подходящего хеша требовалось около 32 ведущих нулевых битов, то есть примерно один успех на 4,3 миллиарда попыток. Современным блокам нужно гораздо больше ведущих нулей, поскольку глобальный хешрейт вырос на много порядков. Если сравнить шестнадцатеричную запись хеша блока 1 с хешем текущего блока, видно, насколько резко пространство поиска сузилось — от открытого поля до жёстко ограниченной области.
Ключевые факты
- Хеш заголовка валидного блока Bitcoin должен быть численно меньше или равен его целевому значению сложности.
- Целевое значение хранится компактно, в четырёх байтах поля «nBits», с помощью кодирования мантиссой и экспонентой.
- Майнеры меняют 32-битный nonce, extra-nonce в coinbase-транзакции и временную метку, чтобы получать новых кандидатов хеша.
- Сложность определяется как максимально возможное целевое значение, делённое на текущее целевое значение.
- Проверка доказательства работы блока требует одного вычисления double-SHA-256 для заголовка и сравнения результата.
- Генезис-блок был добыт при сложности 1.
Упражнение девять, шесть, три, один
9СобратьПеречислите 9 отдельных компонентов или переменных, участвующих в вычислении доказательства работы (PoW) для заголовка блока Bitcoin.
6СгруппироватьСгруппируйте эти 9 элементов в 6 категорий в зависимости от того, являются ли они фиксированными, переменными для каждой попытки, переменными для каждого цикла, закодированными компактно, полученными из транзакций или используемыми для верификации.
3Выделить главноеСведите 6 групп к 3 основным принципам, определяющим, как сложность масштабируется вслед за хешрейтом сети.
1КристаллизоватьНапишите одно предложение о том, почему доказательство работы трудно создать, но легко проверить.
Проверка фактов
Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.