Мемпул: устройство и роль в блокчейне¶
Мемпул (от англ. memory pool — «пул памяти») — это совокупность неподтверждённых транзакций в сети криптовалюты, которые узлы (ноды) получили, проверили и готовы включить в следующий блок, но которые ещё не были записаны в блокчейн. Мемпул является временным хранилищем данных, обеспечивающим буферизацию потока транзакций между моментом их создания отправителем и моментом включения в блок майнером или валидатором.
¶Принцип работы
В децентрализованных платёжных системах на основе технологии блокчейн, таких как Биткоин, транзакция считается завершённой только после того, как она попадает в блок и проходит необходимое число подтверждений. Процесс прохождения транзакции включает несколько этапов.
Когда пользователь создаёт транзакцию, она подписывается закрытым ключом и отправляется в сеть. Узлы, получившие транзакцию, проверяют её корректность: наличие достаточного баланса у отправителя, действительность криптографической подписи, отсутствие конфликтов с другими транзакциями (например, попытка повторно потратить те же монеты). Если проверка пройдена успешно, транзакция помещается в локальный мемпул узла и ретранслируется соседним узлам. Транзакции, не прошедшие проверку, отбрасываются и не распространяются дальше.
Каждый полный узел сети поддерживает собственный мемпул, однако из-за задержек распространения данных и различий в настройках содержимое мемпулов разных узлов может незначительно отличаться. Мемпул не является единым централизованным хранилищем — это распределённая совокупность локальных очередей, которые в норме стремятся к консенсусу.
¶Параметры и ограничения
Ёмкость мемпула не бесконечна. В протоколе Биткоина существует ограничение на общий размер мемпула узла, задаваемое параметром mempoolmaxsize (по умолчанию — 300 МБ). При превышении лимита узел начинает отклонять новые входящие транзакции с наименьшей комиссией, а также может удалять из мемпула старые транзакции с низким приоритетом. Это защищает узлы от переполнения памяти при резких всплесках сетевой активности.
Каждая транзакция в мемпуле имеет срок жизни. Если транзакция долгое время не попадает в блок, узел удаляет её из мемпула. В Биткоине этот период по умолчанию составляет 336 часов (14 суток). После удаления транзакция не передаётся далее, однако отправитель может повторно объявить её в сети, если она всё ещё не была включена в блок.
Важным параметром транзакции является комиссия (fee), которую отправитель платит за обработку. Размер комиссии измеряется в сатоши за байт данных транзакции. Майнеры, формирующие новый блок, экономически заинтересованы включать в него транзакции с максимальной суммарной комиссией, поэтому они сортируют содержимое мемпула по убыванию удельной комиссии. Транзакции с низкой комиссией могут ожидать включения в блок длительное время, особенно в периоды перегрузки сети.
¶Роль в формировании блоков
Мемпул напрямую связан с процессом майнинга. Когда майнер находит решение задачи Proof-of-Work и получает право создать новый блок, он выбирает транзакции из собственного мемпула. В блок включается ограниченное число транзакций, поскольку размер блока в Биткоине лимитирован (в настоящее время — 4 МБ). Отобранные транзакции удаляются из мемпула, а остальные продолжают ожидать следующих блоков.
В сетях с алгоритмом консенсуса Proof-of-Stake (например, в Ethereum) аналогичную функцию выполняет пул неподтверждённых транзакций, который используют валидаторы при построении блоков. Принципы работы с очередью транзакций остаются схожими, хотя параметры и правила приоритизации могут отличаться.
¶Размер мемпула как индикатор
Объём мемпула — важный показатель состояния сети. Он отражает разницу между скоростью поступления новых транзакций и пропускной способностью блокчейна. Если размер мемпула растёт, это означает, что спрос на проведение транзакций превышает возможности сети по их обработке. В таких ситуациях увеличивается время ожидания подтверждения, а майнеры начинают отдавать предпочтение транзакциям с более высокой комиссией. Пользователи, желающие провести транзакцию быстрее, вынуждены повышать комиссию, что приводит к росту среднего размера комиссионного вознаграждения в сети.
Падение размера мемпула, напротив, свидетельствует о снижении нагрузки и позволяет проводить транзакции с минимальными комиссиями. Наблюдение за мемпулом используется аналитиками и трейдерами для оценки активности в сети и прогнозирования динамики комиссий.
¶Управление перегрузкой
Разработчики криптовалют применяют различные механизмы для борьбы с переполнением мемпула. В Биткоине для этого используется протокол Replace-By-Fee (RBF), позволяющий отправителю заменить неподтверждённую транзакцию в мемпуле на новую версию с более высокой комиссией. Механизм Child-Pays-For-Parent (CPFP) позволяет ускорить подтверждение «застрявшей» транзакции путём создания дочерней транзакции с высокой комиссией, которая тратит выходы родительской.
В сети Ethereum для борьбы с перегрузкой применяется механизм аукциона комиссий (gas auction), а также протокол EIP-1559, который вводит базовую комиссию, сжигаемую при каждой транзакции. В ряде проектов, например в Bitcoin Cash, размер блока был увеличен для повышения пропускной способности и уменьшения вероятности образования очередей.
¶Значение для пользователей
Для рядового пользователя мемпул проявляется в виде времени ожидания подтверждения транзакции. При отправке средств в Биткоине рекомендуется устанавливать комиссию, соответствующую текущей загрузке сети. Слишком низкая комиссия в период перегрузки приведёт к тому, что транзакция будет находиться в мемпуле неопределённо долго, пока не будет удалена по истечении срока жизни.
Существуют специализированные сервисы (например, mempool.space), которые визуализируют состояние мемпула, показывая количество ожидающих транзакций, распределение комиссий и рекомендуемые размеры комиссионных отчислений. Эти данные помогают отправителям выбирать оптимальную комиссию для достижения желаемой скорости подтверждения.
¶Критика и ограничения
Мемпул как механизм имеет ряд недостатков. Во-первых, он создаёт неравенство между пользователями: те, кто может позволить себе высокие комиссии, получают приоритет в обработке, в то время как транзакции с низкой комиссией могут ожидать часами или даже сутками. Во-вторых, содержимое мемпула потенциально может быть использовано для анализа потоков средств и деанонимизации пользователей, поскольку неподтверждённые транзакции видны всем узлам сети. В-третьих, злоумышленники могут искусственно засорять мемпул множеством транзакций с низкой комиссией, создавая видимость перегрузки и провоцируя рост комиссий.
Несмотря на эти недостатки, мемпул остаётся неотъемлемой частью архитектуры большинства криптовалютных сетей, обеспечивая упорядоченную и проверяемую передачу транзакций от отправителей к создателям блоков.
¶Источники
- Antonopoulos A. M. Mastering Bitcoin: Programming the Open Blockchain. — O'Reilly Media, 2017.
- Bitcoin Developer Documentation: Mempool.
- Narayanan A., Bonneau J., Felten E., Miller A., Goldfeder S. Bitcoin and Cryptocurrency Technologies. — Princeton University Press, 2016.
- Документация протокола Bitcoin Core (файлы
mempool.cpp,validation.cpp).