Как работает блокчейн: пошаговое объяснение
Чтобы понять, как работает блокчейн, нужно проследить путь транзакции от возникновения до окончательного подтверждения. Хотя в основе технологии лежат сложная криптография и инженерия распределенных систем, базовый процесс элегантен в своей простоте: транзакции создаются, транслируются в сеть, проверяются, объединяются в блоки и навсегда записываются в общий реестр.
В этом руководстве мы разберем каждый шаг блокчейн-процесса на примере Bitcoin, отмечая, где другие блокчейны, такие как Ethereum, работают иначе. К концу вы будете точно понимать, что происходит с момента, когда вы нажимаете «Отправить», до момента, когда ваша транзакция становится необратимой частью блокчейна.
Шаг 1: Создание транзакции
Любое взаимодействие с блокчейном начинается с создания транзакции. Когда вы решаете отправить криптовалюту, ваше кошелек-приложение формирует сообщение транзакции, содержащее несколько частей информации.
Входы и выходы транзакции
В Bitcoin используется модель Unspent Transaction Output (UTXO). Представьте UTXO как цифровые купюры в вашем кошельке. Если вы получили 0.5 BTC и 0.3 BTC в двух отдельных транзакциях, у вас есть два UTXO на общую сумму 0.8 BTC. Когда вы хотите отправить 0.6 BTC, ваш кошелек:
- Выбирает UTXO, которые вместе покрывают сумму (0.5 + 0.3 = 0.8 BTC).
- Создает транзакцию, где адрес получателя указан как один выход (0.6 BTC).
- Создает выход сдачи обратно на ваш адрес (0.2 BTC минус комиссия за транзакцию).
- Выбранные UTXO становятся «потраченными», а новые выходы становятся новыми UTXO.
В Ethereum используется другая account-based model, больше похожая на традиционный банковский счет. У каждого адреса есть баланс, и транзакции просто списывают средства у отправителя и зачисляют их получателю.
Цифровая подпись
Прежде чем транзакцию можно будет отправить в сеть, она должна быть подписана private key отправителя. Именно здесь критически важна безопасность вашей seed phrase — ваш private key выводится из seed phrase, и любой, кто им владеет, может подписывать транзакции от вашего имени.
Процесс подписи работает так:
- Данные транзакции хэшируются с помощью SHA-256 (Bitcoin) или Keccak-256 (Ethereum).
- Хэш подписывается private key отправителя через алгоритм ECDSA.
- Полученная цифровая подпись добавляется к транзакции.
- Любой может проверить подпись с помощью public key отправителя, подтверждая, что транзакция авторизована владельцем ключа, без необходимости видеть сам private key.
Это фундаментальный принцип: подпись доказывает владение. Ваш private key никогда не покидает устройство во время этого процесса. В сеть передается только подпись, которую нельзя использовать для восстановления private key.
Шаг 2: Трансляция транзакции
После подписания транзакция транслируется в сеть блокчейна. Ваш кошелек подключается к одному или нескольким nodes (компьютерам с ПО блокчейна) и отправляет данные транзакции.
Распространение в одноранговой сети
Сети блокчейна работают по топологии peer-to-peer (P2P). Центрального сервера нет. Когда node получает вашу транзакцию, он выполняет первичные проверки и, если она валидна, пересылает ее подключенным узлам. Те узлы проверяют и пересылают дальше. За секунды транзакция распространяется по всей сети и обычно достигает большинства узлов за 2–15 секунд.
Mempool
После распространения ваша транзакция попадает в mempool (memory pool) — зону ожидания неподтвержденных транзакций, которую поддерживает каждый node. Mempool не является единым общим пулом; каждый node хранит свою версию, которая может немного отличаться из-за сетевых задержек и локальных политик узла.
Транзакции в mempool ранжируются в первую очередь по fee rate (сатоши за байт в Bitcoin или gas price в Ethereum). Майнеры и валидаторы выбирают сначала транзакции с самой высокой комиссией, поскольку это максимизирует их доход. В периоды высокого спроса mempool может сильно расти, и транзакции с низкой комиссией могут ждать подтверждения часами или даже днями.
Комиссии транзакций
Комиссии выполняют две задачи:
- Стимулируют майнеров/валидаторов включить вашу транзакцию в блок.
- Предотвращают спам, делая массовую отправку бессмысленных транзакций дорогой.
В Bitcoin комиссии рассчитываются по размеру транзакции в байтах (а не по отправляемой сумме). Транзакция на 10 BTC может стоить столько же, сколько транзакция на 0.001 BTC, если их размер в байтах одинаков.
В Ethereum комиссии работают по модели EIP-1559 с base fee (сжигается) и priority tip (выплачивается валидатору). Base fee динамически меняется в зависимости от загруженности сети.
Шаг 3: Валидация транзакции
Прежде чем транзакция может быть включена в блок, узлы независимо проверяют ее на соответствие правилам протокола. Эта валидация критически важна для сохранения целостности блокчейна.
Проверки валидации
Каждый node выполняет несколько проверок для каждой полученной транзакции:
- Синтаксическая валидность: правильно ли сформирована транзакция по спецификации протокола?
- Проверка подписи: соответствует ли цифровая подпись public key отправителя? Это подтверждает, что транзакция авторизована владельцем private key.
- Проверка двойной траты: действительно ли указанные UTXO (Bitcoin) еще не потрачены, или у аккаунта (Ethereum) достаточно баланса?
- Проверка скрипта: корректно ли выполняются блокирующий и разблокирующий скрипты? (В Bitcoin используется язык Script для определения условий траты.)
- Достаточность комиссии: содержит ли транзакция достаточную комиссию для минимального порога ретрансляции этого узла?
- Ограничения размера: укладывается ли транзакция в лимиты размера протокола?
Если транзакция не проходит любую из этих проверок, она отклоняется и не передается другим узлам. Именно эта децентрализованная проверка делает блокчейн устойчивым к мошенническим транзакциям: каждый node независимо проверяет каждую транзакцию по одному и тому же набору правил.
Шаг 4: Формирование блока
Майнеры (в системах proof-of-work) или валидаторы (в системах proof-of-stake) собирают валидные транзакции из mempool и формируют кандидатный блок.
Структура блока
Типичный блок содержит:
Заголовок блока:
- Version: версия протокола.
- Previous block hash: SHA-256 хэш заголовка предыдущего блока. Именно это создает «цепочку» в блокчейне.
- Merkle root: единый хэш, суммирующий все транзакции в блоке.
- Timestamp: приблизительное время создания блока.
- Difficulty target (PoW): порог, ниже которого должен быть хэш блока для валидности.
- Nonce (PoW): счетчик, который майнеры увеличивают при поиске валидного хэша.
Тело блока:
- Transaction count: количество включенных транзакций.
- Transaction list: фактические данные транзакций.
- Coinbase transaction: специальная первая транзакция, которая создает новые монеты как награду за блок и собирает все комиссии транзакций. Это единственная транзакция в блоке без входов — она создает новую валюту «из ничего» согласно графику эмиссии протокола.
Выбор транзакций
Майнеры обычно выбирают транзакции для максимизации дохода, отдавая приоритет самым высоким fee rate. Однако они также обязаны соблюдать лимит размера блока (в Bitcoin — 4 MB веса блока) или лимит газа блока (в Ethereum — около 30 миллионов газа). Это формирует естественный рынок за место в блоке: при высоком спросе пользователи конкурируют, предлагая более высокие комиссии.
Некоторые майнеры могут применять дополнительные политики, например включать определенные типы транзакций независимо от комиссии или исключать транзакции, взаимодействующие с санкционными адресами.
Построение дерева Меркла
Дерево Меркла строится путем повторного хэширования пар хэшей транзакций:
- Каждая транзакция хэшируется отдельно.
- Соседние хэши объединяются в пары и хэшируются вместе.
- Процесс повторяется вверх по дереву, пока не останется один хэш: Merkle root.
Merkle root дает компактное представление всех транзакций. Если изменить хотя бы одну транзакцию, Merkle root изменится, мгновенно выявив подмену. Эта структура также позволяет Simplified Payment Verification (SPV), где легкие клиенты могут подтверждать включение транзакции без загрузки полных блоков.
Шаг 5: Консенсус и выпуск блока
Кандидатный блок должен пройти через consensus mechanism сети, чтобы быть принятым. Именно здесь разные блокчейны существенно расходятся.
Proof of Work (Bitcoin)
В proof-of-work майнеры соревнуются в поиске значения nonce, которое при объединении с данными заголовка блока и хэшировании дает хэш ниже difficulty target сети. По сути, это brute-force поиск:
- Майнер формирует заголовок блока со всеми обязательными полями.
- Майнер хэширует заголовок с помощью SHA-256 (в Bitcoin применяется дважды).
- Если полученный хэш ниже difficulty target, блок валиден.
- Если нет, майнер увеличивает nonce и пробует снова.
- Этот процесс повторяется миллиарды раз в секунду в совокупности по всем майнерам.
Difficulty target корректируется каждые 2,016 блоков (примерно раз в две недели), чтобы сохранять среднее время блока 10 минут независимо от общей вычислительной мощности в сети.
Когда майнер находит валидный хэш, он решает «головоломку» и может транслировать блок в сеть. Первый майнер, нашедший валидное решение, получает block reward (сейчас 3.125 BTC после халвинга в апреле 2024 года) плюс все комиссии транзакций в блоке.
Proof of Stake (Ethereum)
Ethereum использует proof of stake, где валидаторы псевдослучайно выбираются для предложения блоков на основе количества застейканных ETH (заблокированных как обеспечение). Процесс принципиально иной:
- Валидатор псевдослучайно выбирается для предложения блока в каждом 12-секундном слоте.
- Предлагающий формирует блок и транслирует его.
- Комитет валидаторов attests (голосует), что блок валиден.
- Когда набирается достаточно attestations, блок считается justified и в итоге finalized.
Proof of stake устраняет энергозатратные хэш-вычисления proof of work, сохраняя безопасность за счет экономических стимулов: валидаторы рискуют потерять застейканные ETH (slashing), если действуют злонамеренно.
Для более глубокого сравнения см. наше руководство по Consensus Mechanisms.
Шаг 6: Распространение блока
После создания валидного блока его нужно распространить по сети.
Сетевое распространение
Успешный майнер или валидатор транслирует новый блок своим узлам-соседям, которые проверяют блок и пересылают его дальше. Распространение обычно занимает 1–10 секунд до достижения большинства сети, в зависимости от размера блока и состояния сети.
Compact Block Relay (BIP 152)
Bitcoin использует Compact Block Relay для ускорения распространения. Поскольку у большинства узлов транзакции уже есть в mempool, новому блоку достаточно передать компактное представление (короткие ID транзакций), а не полные данные. Узлы могут восстановить полный блок из своего mempool, снижая требования к пропускной способности примерно на 90%.
Orphan Blocks
Иногда два майнера почти одновременно находят валидные блоки, создавая временный форк. Сеть решает это естественным образом: та цепь, которая первой получает следующий блок, становится самой длинной, а другой блок становится orphan (или stale block). Транзакции из orphan-блока возвращаются в mempool и обычно включаются в следующий блок победившей цепи.
Шаг 7: Проверка блока и расширение цепи
Когда node получает новый блок, он независимо валидирует весь блок перед принятием.
Полная валидация
Узлы проверяют:
- Валидность заголовка блока: корректный формат, валидный хэш предыдущего блока, proof of work соответствует difficulty target (или валидная подпись валидатора в PoS).
- Валидность транзакций: каждая транзакция в блоке проходит те же проверки, что описаны в Шаге 3.
- Согласованность Merkle root: вычисленный Merkle root совпадает с тем, что в заголовке блока.
- Размер/вес блока: блок не превышает лимиты протокола.
- Валидность coinbase: награда за блок и сбор комиссий корректны согласно текущим правилам протокола.
- Диапазон timestamp: метка времени блока находится в допустимых пределах.
Если все проверки пройдены, node добавляет блок в свою локальную копию блокчейна и обновляет набор UTXO (или state trie в Ethereum). Затем node пересылает блок своим соседям.
Шаг 8: Подтверждение транзакции
Как только ваша транзакция включена в валидный блок, она получает свое первое подтверждение. Каждый следующий блок поверх блока с вашей транзакцией добавляет еще одно подтверждение.
Почему важны несколько подтверждений
Одно подтверждение означает, что транзакция уже в блокчейне, но теоретически блок может стать orphan, если конкурирующая цепь его обгонит. Каждое дополнительное подтверждение экспоненциально снижает вероятность реорганизации:
| Подтверждения | Время ожидания Bitcoin | Уровень безопасности |
|---|---|---|
| 0 (неподтверждена) | — | Уязвима к двойной трате |
| 1 | ~10 минут | Подходит для небольших сумм |
| 3 | ~30 минут | Разумный уровень безопасности |
| 6 | ~60 минут | Стандарт для значимых сумм |
| 12+ | ~2 часа | Очень высокий уровень безопасности |
Часто упоминаемый стандарт в 6 подтверждений для Bitcoin означает, что вероятность успешной реорганизации цепи (и, следовательно, двойной траты) астрономически мала — для этого атакующему нужно контролировать более 50% хэш-мощности сети и удерживать это больше часа.
Ethereum обеспечивает более быструю финализацию. В нормальных условиях транзакция достигает финальности (ее нельзя отменить без сжигания как минимум одной трети всего застейканного ETH) примерно за 12–15 минут.
Типы финальности
- Вероятностная финальность (Bitcoin): с каждым подтверждением транзакцию все сложнее отменить, но абсолютной точки необратимости нет. Шесть подтверждений — широко принятый практический порог.
- Экономическая финальность (Ethereum PoS): после finalization откат транзакции потребовал бы сжигания ETH на миллиарды долларов, что экономически нерационально для любого атакующего.
- Абсолютная финальность (некоторые BFT-сети): транзакции необратимы сразу после подтверждения блока. Этим свойством обладают, например, сети на базе Tendermint.
Полная картина: путь транзакции
Итоговый жизненный цикл:
- Вы инициируете перевод из своего кошелька.
- Кошелек формирует транзакцию, выбирая входы и выходы (UTXO) или указывая сумму перевода (account model).
- Ваш private key подписывает транзакцию, доказывая, что вы ее авторизовали.
- Подписанная транзакция транслируется в P2P-сеть.
- Узлы валидируют транзакцию и добавляют ее в mempool.
- Майнер/валидатор выбирает вашу транзакцию из mempool и включает ее в кандидатный блок.
- Блок создается через proof of work или proof of stake.
- Новый блок распространяется по сети.
- Узлы валидируют и принимают блок, расширяя цепь.
- Ваша транзакция получает подтверждения по мере добавления новых блоков поверх нее.
Весь этот процесс — от создания до первого подтверждения — занимает примерно 10 минут для Bitcoin и 12 секунд для Ethereum, хотя транзакция может провести дополнительное время в mempool в ожидании выбора.
Безопасность вашей транзакции начинается с ключей. Используйте SafeSeed Seed Phrase Generator для создания криптографически безопасной BIP-39 seed phrase. Каждый этап блокчейн-процесса — от подписи транзакций до доказательства владения — зависит от безопасности ваших private keys, которые выводятся из вашей seed phrase.
Продвинутые концепции
Transaction Malleability
В ранних версиях Bitcoin можно было изменить ID транзакции (txid), не делая ее невалидной — это свойство называлось transaction malleability. Проблема в основном была решена обновлением Segregated Witness (SegWit) в 2017 году, которое отделяет данные подписи от данных транзакции и гарантирует, что txid нельзя изменить после подписи.
Replace-By-Fee (RBF)
Bitcoin поддерживает Replace-By-Fee, позволяя отправителю повторно отправить транзакцию с более высокой комиссией для ускорения подтверждения. Новая транзакция заменяет исходную в mempool. Это полезно при перегруженной сети, когда изначальная комиссия была слишком низкой. Кошельки с поддержкой RBF помечают транзакции как заменяемые, и версия с более высокой комиссией получает приоритет.
Transaction Batching
Биржи и крупные отправители часто batch несколько платежей в одну транзакцию с несколькими выходами. Это более эффективно по пространству, чем отправка отдельных транзакций, и снижает общие комиссии и расход места в блоке.
FAQ
Сколько времени занимает блокчейн-транзакция?
Время транзакции зависит от блокчейна. В Bitcoin в среднем один блок появляется каждые 10 минут, но ваша транзакция может ждать включения в mempool. В Ethereum блоки создаются каждые 12 секунд. Решения Layer 2, такие как Lightning Network, могут проводить платежи за миллисекунды. Общее время от отправки до первого подтверждения зависит от загруженности сети и комиссии, которую вы платите.
Что произойдет, если я отправлю на неправильный адрес?
Транзакции в блокчейне необратимы. Если вы отправили криптовалюту на неправильный адрес, нет центрального органа, который сможет отменить транзакцию. Если адрес кому-то принадлежит, вам нужно связаться с этим человеком напрямую и надеяться, что он вернет средства. Если адрес невалиден или никому не принадлежит, средства фактически потеряны навсегда. Всегда перепроверяйте адреса перед отправкой.
Может ли блокчейн-транзакция завершиться неудачей?
В Bitcoin корректно сформированная и подписанная транзакция в итоге будет подтверждена (хотя при очень низкой комиссии это может занять много времени). В Ethereum транзакции могут завершаться неудачей (revert), если выполнение смарт-контракта сталкивается с ошибкой или заканчивается gas. В обоих случаях комиссия транзакции все равно расходуется. Некоторые кошельки предоставляют симуляцию транзакции, чтобы заранее оценить, пройдет ли она успешно.
Что такое хэш транзакции (txid)?
Хэш транзакции (txid или transaction ID) — это уникальный идентификатор каждой транзакции. Он генерируется хэшированием данных транзакции. Вы можете использовать txid для отслеживания транзакции в block explorer (например, mempool.space для Bitcoin или etherscan.io для Ethereum). txid присваивается сразу при создании транзакции и не меняется после подтверждения.
Почему комиссии транзакций меняются?
Комиссии определяются спросом и предложением на место в блоке. Когда много пользователей отправляют транзакции одновременно, они конкурируют за ограниченное место в блоке, предлагая более высокие комиссии. В спокойные периоды комиссии снижаются. Пространство блока в Bitcoin фиксировано (вес 4 MB на блок каждые 10 минут), поэтому при высоком спросе комиссии могут резко расти. EIP-1559 в Ethereum дает более предсказуемый base fee, который алгоритмически корректируется по загрузке сети.
В чем разница между подтвержденной и неподтвержденной транзакцией?
Неподтвержденная транзакция существует в mempool, но еще не включена в блок. Она находится в ожидании и теоретически может быть заменена или отброшена. Подтвержденная транзакция уже включена в блок и добавлена в блокчейн. С каждым следующим блоком сверху число подтверждений растет, и транзакцию становится все сложнее отменить.
Могут ли майнеры не включать мою транзакцию?
Да. Майнеры и валидаторы могут сами выбирать, какие транзакции включать в свои блоки. Они не обязаны включать конкретную транзакцию. Однако экономические стимулы сильно мотивируют их включать как можно больше транзакций с комиссией. На практике любая валидная транзакция с достаточной комиссией в итоге будет включена каким-то майнером, даже если несколько майнеров ее игнорируют.