Что на самом деле происходит, когда вы отправляете транзакцию Ethereum
--> Проблема
Вы нажимаете "Отправить" в вашем кошельке. Интерфейс подтверждает транзакцию.
Но потом... ничего не происходит.
Иногда это подтверждается за секунды.
Иногда это зависает на минуты — или полностью не проходит.
Почему?
Большинство объяснений заканчиваются на "это попадает в блокчейн".
Это не полезно, если вы строите системы на .
Давайте разберем, что на самом деле происходит под капотом.
Ментальная модель (Быстрая ориентация)
Транзакция не исполняется мгновенно.
Это проходит через три разных фазы:
Распространение (мемпул)
Включение (предложение блока)
Исполнение (переход состояния)
Каждая фаза вводит задержки, риски и режимы неудачи.
Шаг 1: Создание транзакции
Когда вы нажимаете «отправить»:
Ваш кошелек создает транзакцию:
на
значение
gasLimit
maxFeePerGas
данные (если взаимодействие с контрактом)
Он подписывает транзакцию с использованием вашего приватного ключа
На этом этапе:
👉 Транзакция валидна, но еще не известна сети
Шаг 2: Трансляция в сеть
Ваш кошелек отправляет транзакцию узлу.
Этот узел:
Проверяет подпись
Проверяет nonce
Обеспечивает базовую валидность
Если валидно → попадает в мемпул
Шаг 3: Мемпул (где все становится интересным)
Мемпул это:
Временная зона ожидания
Не глобально согласованная
Разная между узлами
Это означает:
👉 Ваша транзакция может существовать в некоторых узлах — но не в других
Ключевое поведение:
Узлы приоритизируют транзакции по комиссии
Высокая maxFeePerGas = высокий приоритет
📊 Диаграмма 1: Поток распространения транзакций
Диаграмма должна показывать:
Кошелек пользователя → Узел A → Узел B → Узел C
У каждого узла свой мемпул
Стрелки, показывающие распространение сплетен
Подчеркните: «Не все мемпулы одинаковы»
Шаг 4: Предложение блока
Валидаторы выбирают транзакции из своего мемпула.
Они выбирают:
Транзакции с самой высокой комиссией в первую очередь
Транзакции, которые укладываются в лимиты газа
Важно:
👉 Ваша транзакция конкурирует с другими
Шаг 5: Исполнение (уровень EVM)
Как только включена в блок
Транзакция выполняется внутри EVM
Изменения состояния происходят:
Обновления баланса
Изменения в хранении смарт-контрактов
Если исполнение не удается:
Газ все равно расходуется
Изменения состояния откатываются
📊 Диаграмма 2: Поток исполнения
Диаграмма должна показывать:
Блок → EVM → Переход состояния
Входные данные:
Транзакция
Текущее состояние
Выходные данные:
Новое состояние
Включите «потребление газа» на каждом этапе
Краевые случаи и режимы неудачи
Здесь большинство статей терпят неудачу. Давайте углубимся.
❌ 1. Транзакция застряла в мемпуле
Комиссия слишком низкая
Никогда не выбрана валидаторами
❌ 2. Упавшая транзакция
Узел удаляет это из-за:
Низкая комиссия
Переполнение мемпула
❌ 3. Замененная транзакция
Один и тот же nonce + более высокая комиссия → заменяет оригинал
❌ 4. Исполнение без газа
Исполнение останавливается на полпути
Состояние откатывается
Газ потерян
❌ 5. Реорганизация цепи (Reorg)
Блок заменяется
Транзакция может временно исчезнуть
Реальные последствия
Для разработчиков:
Вы не можете предполагать мгновенную финализацию
Необходимо обрабатывать ожидающие состояния
Для UX:
Пользователи видят «ожидание» → путаница
Оценка комиссии становится критически важной
Для проектирования систем
Логика повторных попыток необходима
Мониторинг транзакций обязателен
Ключевые выводы
Транзакция — это многоступенчатый процесс, а не одно событие
Мемпул недетерминированный и фрагментированный
Комиссии напрямую влияют на вероятность исполнения
Неудача может произойти на нескольких уровнях
Системы должны быть спроектированы длянеопределенности и задержек
Если вы строите на Ethereum, понимание этого процесса не опционально — это основа$ETH