Блокчейн/Уровень II · Механика/2.2 Транзакции/Урок 7
Жизненный цикл транзакции
От подписи до финальности: как транзакция проходит через сеть
МатериалыВеб-сайт mempool.spaceОбозреватель блоков для отслеживания глубины подтверждения
Любопытство
- Почему нода должна проверить транзакцию ещё до того, как узнает, попадёт ли она в блок?
- Что делает один блок более «реальным», чем другой, когда они появляются одновременно?
- Почему шесть подтверждений стали общепринятой нормой и когда это слишком много или слишком мало?
Исследование
- Путь начинается в программе-кошельке. Пользователь выбирает конкретные непотраченные выходы транзакций (UTXO), чтобы покрыть платёж и комиссию. Кошелёк формирует новый объект транзакции, задавая входы, которые ссылаются на предыдущие выходы через идентификатор транзакции и индекс, и выходы, которые направляют средства на адреса получателей или адреса сдачи. Каждый вход подписывается приватным ключом, соответствующим его скрипту блокировки; так создаются цифровые подписи, доказывающие владение без раскрытия самого ключа.
- Полностью подписанная транзакция сериализуется в двоичный формат и рассылается подключённым пирам по одноранговой (peer-to-peer) сети. Получив её, каждая нода самостоятельно проверяет её на соответствие правилам консенсуса: что входы покрывают выходы, что криптографические подписи верны, что нет двойной траты существующих UTXO и что логика скриптов корректна. Если транзакция допустима согласно политике, нода добавляет её в свой локальный мемпул и сообщает о ней пирам сообщениями 'inv' (inventory); пиры, у которых её нет, запрашивают полную транзакцию с помощью 'getdata'.
- Майнеры постоянно отслеживают свои мемпулы в поиске выгодных транзакций. Они отбирают набор транзакций с высокой ставкой комиссии для включения в шаблон блока-кандидата, который также содержит coinbase-транзакцию, начисляющую текущую субсидию за блок и собранные комиссии. Затем майнер выполняет доказательство работы (PoW), раз за разом хешируя заголовок блока, пока не найдёт хеш, удовлетворяющий текущей цели сложности сети. Эта работа делает блок дорогим в производстве и дешёвым в проверке; найденный блок рассылается по всей сети.
- Ноды, получившие новый блок, проверяют его доказательство работы и валидность транзакций, прежде чем добавить его в свою локальную копию цепочки. Транзакции этого блока теперь считаются подтверждёнными с глубиной один. Их входы помечаются в наборе UTXO как потраченные, а их выходы становятся доступными для дальнейшей траты после истечения необходимых временных блокировок или периодов созревания. Если на той же высоте появляется конкурирующий блок, ноды следуют той ветке, в которой накоплено больше всего работы; если короткая реорганизация заменяет блок, его транзакции возвращаются в мемпул, если только новая ветка уже их не содержит.
- Безопасность растёт с каждым следующим блоком, добавленным поверх подтверждающего. Таблицы из whitepaper показывают, что у атакующего с 10% хешрейта вероятность догнать цепочку, отставая на пять блоков, меньше 0,1%. Шесть подтверждений — около часа — стали общепринятой нормой на основе такого анализа, хотя реальный риск зависит от доли атакующего и суммы на кону. Некоторые продавцы принимают платежи без подтверждений на небольшие суммы, но при более крупных переводах обычно ждут нескольких подтверждений, чтобы снизить риск атаки двойной траты через реорганизацию цепочки.
- Coinbase-транзакции, которые создают новые биткоины из вознаграждения за майнинг и комиссий, имеют особое ограничение: их выходы нельзя потратить, пока они не наберут 100 подтверждений. Это правило существует потому, что coinbase-выход исчезает, если его блок заменяется в ходе реорганизации; задержка не даёт таким монетам распространиться в последующие транзакции, которые тогда стали бы недействительными. Для обычных переводов между пользователями такой задержки нет; после подтверждения выходы технически можно тратить, хотя ожидание дополнительных подтверждений — это решение по управлению рисками, зависящее от суммы на кону и допущений о доверии.
Ключевые факты
- Ноды проверяют транзакции на соответствие правилам консенсуса, прежде чем добавить их в свои мемпулы.
- Валидность блока зависит от того, соответствует ли его доказательство работы текущей цели сложности.
- Шесть подтверждений (около часа) — общепринятая норма, а не правило протокола.
- Coinbase-выходы требуют созревания в 100 блоков, прежде чем их можно потратить.
- При реорганизации обычные транзакции из заменённого блока возвращаются в мемпул, если они не конфликтуют с новой веткой; его coinbase-транзакция исчезает.
- Ноды объявляют о новых транзакциях сообщениями 'inv' и отправляют их по запросу ('getdata').
Упражнение девять, шесть, три, один
9СобратьПеречислите 9 отдельных этапов или событий в жизненном цикле транзакции — от создания до финальности.
6СгруппироватьРаспределите эти 9 этапов по 6 фазам: построение, проверка, распространение, майнинг, подтверждение и состояния после подтверждения.
3Выделить главноеСведите 6 фаз к 3 критическим контрольным точкам, в которых сеть обеспечивает безопасность или консенсус.
1КристаллизоватьНапишите 1 предложение о том, почему следование цепочке с наибольшим объёмом работы разрешает конфликты между конкурирующими блоками.
Проверка фактов
Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.