Что такое мемпул блокчейна и как это на самом деле работает

Мемпул (от английского memory pool или «пул памяти») — это временное хранилище неподтвержденных транзакций в блокчейне. Мемпул играет ключевую роль в управлении потоком транзакций, напрямую влияя на скорость подтверждения и экономические стимулы участников сети.

Когда пользователь инициирует вывод средств из кошелька, транзакция не сразу добавляется в блокчейн, но сначала распространяется по сети и попадает в мемпул, оставаясь там в ожидании момента, когда майнер или валидатор выберет эту транзакцию, проверит корректность и включит в новый блок. 

Для большей наглядности можно провести аналогию, представив мемпул как зал ожидания вокзала или аэропорта: пассажиры (транзакции) уже прибыли и готовы к отправлению, но поезд или самолет (новый блок) еще не прибыл. Когда транспорт подается, места распределяются не случайно: приоритет получают те, кто готов заплатить за билет больше — то есть транзакции с более высокой комиссией. 

Проще говоря, мемпул играет роль организованной очереди, где решается, кто уедет первым, а кому придется подождать следующего блока.

Основное предназначение мемпула 

Мемпул выполняет несколько ключевых функций.

Во-первых, это фильтрация и приоритизация транзакций. Мемпул действует как очередь, где транзакции сортируются по степени важности. Главный критерий приоритета — комиссия за транзакцию: майнеры и валидаторы, получающие комиссию, заинтересованы включать в блок наиболее выгодные для себя операции.

Во-вторых, оптимизация нагрузки сети. Мемпул обеспечивает равномерное распределение транзакций, предотвращая перегрузку блокчейна. В моменты высокой активности транзакции накапливаются и хранятся в мемпуле до тех пор, пока сеть не справится с повышенной нагрузкой — тогда у майнеров появляется возможность вернуться к транзакциям, не нашедшим места в блоке в момент пиковой нагрузки. Это позволяет блокчейну функционировать стабильно даже при резких колебаниях пользовательской активности.

В-третьих, мемпул отражает состояние блокчейна. Загруженность мемпула в реальном времени свидетельствует о текущей нагрузке на сеть. Переполненный мемпул сигнализирует о высокой нагрузке на блокчейн и повышенных комиссиях, а пустой — о низкой активности в сети. Трейдеры могут использовать эту информацию для выбора оптимального времени отправки транзакций и минимизации издержек от комиссий.

Наконец, с помощью мемпула обеспечивается безопасность. Он помогает предотвращать двойные траты: узлы, увидевшие транзакцию в мемпуле, отклоняют любые другие попытки повторно использовать те же средства. Таким образом, мемпул играет важную роль в защите сети и поддержании ее целостности.

Структура мемпула на примере Биткоина

Мемпул хранится в оперативной памяти (RAM) — самом производительном из доступных видов памяти ноды — что обеспечивает узлу наиболее быстрый доступ к транзакциям. Это ускоряет проверку новых транзакций на конфликты с уже находящимися транзакциями в мемпуле и упрощает выбор транзакций для блоков-кандидатов. Ограничение по размеру мемпула (по умолчанию 300 МБ) как раз связано именно с ограничениями RAM, чтобы этого было достаточно для хранения всех необходимых данных.

Мемпул не имеет строго фиксированной структуры — это динамическое хранилище неподтвержденных транзакций. Тем не менее, каждая транзакция в мемпуле сопровождается дополнительными метаданными, которые помогают сортировать операции для включения в блок. К таким данным относятся: размер транзакции, комиссия, потомки (descendants) и предки (ancestors).

Потомком считается транзакция, которая расходует выходы (UTXO) другой транзакции, находящейся в мемпуле. Родительская транзакция непременно должна быть включена в блок раньше, чем ее потомки, иначе транзакции-потомки будут недействительными. Транзакция может иметь несколько потомков, при этом существуют ограничения по их количеству в мемпуле (максимум по умолчанию — 25).

Предками считаются транзакции, от которых зависит текущая транзакция. Невозможно включить операцию в блок, если ее предки еще не подтверждены. Для оценки выгодности включения транзакции в блок майнеры используют показатель средней комиссии на байт транзакции и всех ее предков. Этот показатель позволяет майнерам сравнивать, насколько выгодно включение конкретной транзакции вместе с ее предками. Из этой логики берет свое начало техника Child Pays For Parent (CPFP) — когда пользователь создает транзакцию-потомка с высоким вознаграждением майнеру, чтобы увеличить среднюю комиссию, повышая шансы на включение предка в блок.

Мемпул эксплорер

Мемпул эксплорер (mempool explorer) — это инструмент, позволяющий визуализировать и анализировать текущее состояние мемпула в блокчейне. Он показывает неподтвержденные транзакции, комиссии, размеры и приоритеты, а также общее количество операций, ожидающих включения в блок.

22092501.png

Источник: mempool.space

Основное назначение мемпул-эксплорера — дать пользователям и исследователям сети прозрачную информацию о нагрузке и динамике транзакций. С его помощью можно оценить:

  • Общую загруженность сети. Большой объем транзакций в мемпуле указывает на высокую активность пользователей, что может приводить к увеличению комиссий.

  • Приоритет транзакций. Эксплорер показывает комиссии, позволяя понять, какие транзакции с наибольшей вероятностью попадут в следующий блок.

  • Время ожидания транзакции. Пользователи могут оценить, как долго их транзакция может оставаться в мемпуле до включения в блок, и при необходимости скорректировать комиссию.

Популярные мемпул-эксплореры для основных блокчейнов включают:

То есть мемпул-эксплорер служит инструментом мониторинга и планирования: пользователи могут выбирать оптимальное время и размер комиссии для транзакций, а аналитики и разработчики — изучать поведение сети и экономические стимулы участников блокчейна.

Путь транзакции в мемпуле на примере Биткоина

Когда транзакция в сети Биткоина отправляется из кошелька, нода проверяет ее корректность: достаточно ли средств на счете отправителя, не является ли транзакция попыткой атаки двойной траты и соответствует ли правилам протокола. Если проверка пройдена успешно, транзакция помещается в мемпул-ноды, где остается до включения в блок или удаления.

Каждая нода имеет собственный мемпул, который может слегка отличаться от других, так как не все транзакции сразу доходят до каждого узла. Мемпул позволяет майнерам видеть, какие транзакции ожидают подтверждения, и выбирать их для включения в блоки. Приоритет транзакций определяется комиссией за единицу объема данных (sat/vB – «сатоши за виртуальный байт»): чем выше плата за виртуальный байт, тем больше вероятность, что транзакция попадет в ближайший блок.

Транзакции покидают мемпул различными способами

Первый и основной способ — включение в блок. Когда блок добавляется в блокчейн и подтверждается узлами сети, все содержащиеся в нем транзакции получают статус подтвержденных и удаляются из мемпулов.

Второй способ — конфликт с подтвержденной транзакцией. Если в блок включена транзакция, расходующая те же биткоины, что и какая-либо транзакция в мемпуле, конфликтующая транзакция удаляется. Одновременно удаляются все ее потомки, то есть зависимые от нее транзакции. Таким образом, мемпул выполняет функцию сортировки и предотвращения двойных трат.

Третий способ — замена транзакции на такую же, но с более высокой комиссией. Транзакции с включенной опцией Replace-By-Fee (RBF) могут быть заменены новой транзакцией, расходующей те же биткоины, но с более высокой комиссией. Узел удаляет старую транзакцию, оставляя в мемпуле более привлекательную для майнеров версию, позволяя пользователям добиться подтверждения своей транзакции и повышая общую экономическую эффективность сети.

Четвертый способ — истечение времени. Узлы устанавливают предел времени (time limit), в течение которого транзакция может находиться в мемпуле. По умолчанию это две недели. Если транзакция не включена в блок до окончания срока, узел удаляет ее, предполагая, что она вряд ли будет подтверждена. Пользователь при этом может повторно транслировать свою транзакцию, чтобы она снова попала в мемпулы нод.

Пятый способ — превышение размера мемпула. Объем мемпула узла по умолчанию составляет 300 МБ и возможна ситуация, когда он окажется полностью заполнен. В этом случае узел начинает удалять транзакции с наименьшей комиссией (поскольку вероятность включения в блок минимальна), освобождая место для более конкурентных предложений. При этом мемпул хранит не только сами транзакции, но и дополнительную информацию о них, например зависимости и метаданные, что, с одной стороны обеспечивает эффективное управление очередью транзакций, но, с другой стороны, может приводить к более быстрому переполнению мемпула.

Вывод

Мемпул представляет собой динамическую структуру, служащую промежуточным пунктом для транзакций — между моментом отправки пользователем и подтверждением в блокчейне. Мемпул представляет собой не только временное хранилище неподтвержденных транзакций, но также выполняет функции по их сортировке, определению приоритетов и фильтрации, отражая состояние сети и влияя на экономические стимулы участников.


Калькулятор майнинга
BitsMedia YouTube