Блокчейн/Уровень III · Сеть/3.1 Ноды/Урок 7
Правила консенсуса и верификация
Список правил, превращающих блок в деньги
МатериалыПубличный обозреватель блоковСпецификация BIP141Необязательно: нода Bitcoin Core
Любопытство
- Что мешает майнеру с наибольшей мощностью напечатать бесконечное количество монет?
- Почему транзакция, которую ваша нода отказывается ретранслировать, всё равно может попасть в действительный блок?
- Если код консенсуса меняется, должны ли все обновиться в одну и ту же секунду?
Исследование
- Правила консенсуса — это строгие критерии, по которым каждая полная нода проверяет блоки. Они определяют, что технически возможно: график эмиссии, лимит веса блока в 4 000 000 единиц, сложность доказательства работы и действительность подписей. Блок, нарушивший хотя бы одно правило, отклоняется каждой честной нодой, сколько бы вычислительной мощности ни ушло на его создание. Майнеры предлагают блоки; ноды решают, засчитываются ли они. Такое разделение гарантирует, что ни одна сторона не может в одностороннем порядке изменить состояние реестра.
- Правила политики (policy) определяют, что нода ретранслирует своим пирам до майнинга. К ним относятся пороги для «пыли» (dust), минимальные комиссии за ретрансляцию и стандартные типы скриптов. Транзакция, нарушающая политику, отбрасывается большинством нод, но остаётся действительной, если майнер включит её в блок. Это различие важно: полагаться в вопросах безопасности на отклонение по политике рискованно, поскольку настойчивый участник может обойти фильтры пиров и отправить транзакцию напрямую майнерам, вынудив сеть принять нестандартные транзакции, если они удовлетворяют правилам консенсуса.
- Код и есть спецификация. Правила — это то, что фактически применяет широко используемое ПО нод, включая пограничные случаи; поэтому код консенсуса меняется медленно и проходит более строгое ревью, чем что-либо ещё в Bitcoin Core. Ошибки консенсуса устраняются в аварийном режиме: ошибка переполнения значения 2010 года и ошибка инфляции 2018 года были исправлены в срочном порядке скоординированными релизами.
- Изменение этих правил требует скоординированного принятия. Софтфорки ужесточают правила, поэтому необновлённые ноды по-прежнему принимают новые блоки; хардфорки ослабляют или меняют их, поэтому каждая нода должна обновиться или отколоться. Подробно оба типа разобраны в одном из следующих уроков. SegWit (август 2017) был софтфорком; Bitcoin Cash (август 2017) появился в результате хардфорка после спора о лимите размера блока.
- Создать блок дорого, проверить — дёшево. Майнер, создавший недействительный блок, теряет награду и потраченную энергию, поскольку каждая валидирующая нода его отбросит, — это превращает нарушение правил в дорогостоящую авантюру. Эти издержки подкрепляют строгость проверки: безопасность сети опирается на тысячи независимых нод, проверяющих каждый заголовок и каждую транзакцию, так что никакая единая точка отказа не может испортить общее состояние.
- Откройте обозреватель блоков, например mempool.space или blockchain.com. Выберите любой недавний блок и посмотрите на его поле 'weight' (вес). Сравните это число с лимитом в 4 000 000 единиц веса, определённым в BIP141. Обратите внимание, насколько близко современные блоки подходят к этому потолку: майнеры максимизируют доход на байт, оставаясь в рамках ограничений консенсуса, которые применяет каждая нода.
Ключевые факты
- Правила консенсуса определяют действительность блока; правила политики — ретрансляцию транзакций.
- Максимальный вес блока при использовании SegWit (BIP141) составляет 4 000 000 единиц.
- Выходы coinbase-транзакции можно потратить только после 100 подтверждений.
- SegWit был активирован в августе 2017 года в качестве мягкого форка на блоке 481,824.
- Код консенсуса проверяется гораздо осторожнее, чем остальной код, поскольку любое расхождение может расколоть цепочку.
- Нестандартные транзакции могут быть действительными, если попали в блок, хотя ретранслирующие ноды их отбрасывают.
Упражнение девять, шесть, три, один
9СобратьПеречислите 9 конкретных проверок, которые Bitcoin Core выполняет для нового заголовка блока или транзакции.
6СгруппироватьРазделите 9 проверок на 6 категорий: структурная целостность, экономические ограничения, криптографическая действительность, временные ограничения, переходы состояний и параметры сети.
3Выделить главноеСократите 6 категорий до 3 видов вреда, которые предотвращаются правилами консенсуса.
1КристаллизоватьНапишите одно предложение о том, почему отказ ноды принять блок окончателен независимо от намерений майнера.
Проверка фактов
Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.