Мемпул простыми словами: как транзакции ожидают подтверждения в блокчейне

Каждая транзакция проходит несколько этапов, прежде чем она будет записана в блокчейн без возможности изменения:
- Инициация отправителем актива;
- Подписание и трансляция в сеть;
- Ожидание подтверждения в мемпуле;
- Независимая проверка майнерами и, в конечном счете, включение в блок.
Именно на этапе ожидания — до момента подтверждения — транзакция оказывается в специальном локальном хранилище — мемпуле.
Что такое mempool?
Мемпул — это очередь транзакций, которые уже отправлены в сеть, но еще не подтверждены и не включены в блок. По сути, мемпул - это локальный хаб таких транзакций, который поддерживает каждый участник сети (майнер), формирующий блоки. Mempool служит промежуточным буфером, через который должна пройти каждая транзакция перед тем, как попасть в блокчейн.
Термин "мемпул" — это сочетание двух английских слов "memory" (память) и "pool" (хранилище). Дословно "mempool" означает "пул памяти", что достаточно хорошо отражает суть механизма обработки транзакций.
Мемпул играет ключевую роль в производительности блокчейн-сети: перегрузка мемпула является одной из причин длительных задержек транзакций, а также роста комиссий сети.
Mempool является неотъемлемым компонентом блокчейн-протоколов, работающих на основе механизма консенсуса Proof-of-Work (PoW), таких как Bitcoin, Dogecoin, Litecoin, Bitcoin Cash и других.
Как работает mempool?
После отправки пользователем транзакция не записывается в блокчейн мгновенно по соображениям безопасности.
Сначала транзакция помещается в мемпул, где ожидает проверки от майнеров в порядке очереди, установленном правилами конкретной сети.
При этом само по себе попадание транзакции в мемпул вовсе не гарантирует, что она будет подтверждена майнерами и, как следствие, записана в блокчейн. Транзакция может задержаться в мемпуле по двум причинам:
- Приоритет получают те транзакции, за которые уплатили большую комиссию. Майнеры отбирают транзакции из мемпула с учетом размера комиссии: транзакции с более высокой комиссией, как правило, включаются в блок раньше;
- Блок имеет ограниченную вместимость, но мемпул может содержать больше транзакций, чем помещается в один блок.
Например, средний размер блока Bitcoin сейчас составляет около 1,6 МБ. При этом его вместимость ограничивается не непосредственно размером в байтах, а так называемым весом блока — до 4 млн единиц веса (WU). Количество транзакций, которые помещаются в один блок, зависит от их структуры и размера. В среднем блок Bitcoin сейчас содержит около 4–5 тыс. транзакций.
Например, если в мемпуле до формирования блока находится 10 000 транзакций, в него будет включено не более 50% из этого количества. Остальные попадут только в следующий блок при условии, если их не опередят новые транзакции, которые транслируются в сеть регулярно.
Далеко не обязательно, что транзакции попадут из мемпула в блокчейн именно в том порядке, в котором они отправлялись. Ведь пользователи конкурируют между собой в том, чьи транзакции будут записаны в блокчейн раньше остальных.
Например, если Алиса отправила транзакцию раньше Боба, но при этом уплатила меньшую комиссию за нее, то ее транзакция будет дольше пребывать в мемпуле. Причем чем больше участников, которые уплатили более высокую комиссию, тем дольше будет ожидать подтверждения транзакция Алисы.
После того как транзакция попала из мемпула на независимую проверку майнерам, она должна достигнуть определенного числа подтверждений. Например, в сети Bitcoin транзакция получает первое подтверждение после включения в блок. Последующие блоки увеличивают количество подтверждений и снижают вероятность отмены транзакции. Шесть подтверждений традиционно считаются высоким уровнем надежности, однако необходимое их количество определяется конкретным сервисом или получателем.
Примечание: некоторые обменники могут требовать большее количество подтверждений для завершения сделки — вплоть до 12. Обменники таким образом страхуют себя от мошенничества, поскольку неподтвержденные транзакции могут быть отменены отправителем.
На этапе подтверждения майнеры проверяют:
- Валидность подписи отправителя;
- Наличие необходимой суммы на балансе;
- Отсутствие признаков двойной траты;
- Соответствие комиссии текущему состоянию сети;
Если первоначальная проверка пройдена, то транзакция перемещается в локальный mempool и распространяется дальше по одноранговой сети для последующих подтверждений.
Только после необходимого числа проверок транзакция покидает мемпул и попадает в новый блок и затем уже записывается в блокчейн.
Что делать, если транзакция надолго "застряла" в мемпуле?
При повышенной нагрузке на сеть транзакции могут находиться в мемпуле без подтверждения несколько часов, а в некоторых случаях — даже несколько дней. При этом транзакция может быть вовсе отклонена, если размер уплаченной комиссии слишком мал.
Однако существуют способы, при помощи которых можно ускорить "зависшую" транзакцию, пока она не покинула мемпул.
Замена транзакции
Транзакцию, которая долгое время находится в мемпуле, можно ускорить — это можно сделать при помощи специальных встроенных функций самих кошельков, таких как Replace-By-Fee (RBF).
Кошельки с поддержкой функции RBF позволяют в пару кликов ускорить транзакцию путем увеличения комиссии. По сути кошелек просто заменяет текущую транзакцию на новую, но с более высокой комиссией.
Однако следует учесть, что в некоторых кошельках может потребоваться предварительное включение функции RBF, иначе ускорение транзакции в мемпуле не будет доступно.
Этот же способ применяют и для отмены транзакций, однако следует учитывать, что при этом будет списана комиссия сети.
Отправка "дочерней" транзакции
В продвинутых биткоин-кошельках можно воспользоваться методом Child Pays For Parent (CPFP), чтобы транзакция побыстрее покинула мемпул.
Если пользователь контролирует выход зависшей транзакции, то он может создать еще одну с более высокой комиссией, которая будет называться "дочерней".
Тогда "дочерняя" транзакция будет объединена с исходной, а майнер получит комиссию с обеих транзакций. Точнее, две транзакции остаются отдельными, но майнеру выгодно включить их в блок вместе: дочернюю нельзя подтвердить раньше родительской. Поэтому достаточно высокая комиссия дочерней транзакции компенсирует низкую комиссию исходной.
