Блокчейн/Уровень II · Механика/2.2 Транзакции/Урок 5
Мемпул
Локальная зона ожидания, которой каждая нода управляет независимо
МатериалыОбозреватель блоков с отображением мемпула (например, mempool.space)Необязательно: нода Bitcoin Core ('getmempoolinfo')
Любопытство
- Почему транзакцию, валидную для одной полной ноды, отклоняет соседняя?
- Что происходит с транзакциями с самой низкой комиссией, когда нода достигает лимита памяти?
- Как майнеры решают, какие неподтвержденные транзакции заслуживают места в их следующем блоке?
Исследование
- Мемпул — это не центральная база данных, а локальный список в оперативной памяти, который каждая полная нода ведёт независимо. Bitcoin Core удаляет неподтверждённые транзакции, которые висят слишком долго: через 72 часа, когда срок истечения был введён в версии 0.12, и через две недели (336 часов) начиная с версии 0.14. Две ноды, получившие транзакции в разном порядке или работающие с разными настройками, хранят немного различающиеся мемпулы.
- Каждая нода применяет правила консенсуса (например, корректность скриптов и отсутствие двойной траты) вместе с локальными правилами политики, такими как минимальная ставка комиссии и настройки RBF. Если транзакция не достигает минимального порога ставки комиссии конкретной ноды, эта нода отклонит её или вытеснит, если она уже в мемпуле, даже если другие ноды её принимают.
- По умолчанию Bitcoin Core ограничивает размер мемпула 300 МБ с помощью параметра 'maxmempool' в файле bitcoin.conf. При достижении этого лимита нода динамически повышает минимальный порог комиссии, чтобы освободить место для более выгодных транзакций, и вытесняет в первую очередь наименее ценные. Выполните 'getmempoolinfo' и посмотрите, как 'mempoolminfee' поднимается выше статического 'minrelaytxfee' по мере заполнения мемпула.
- Майнеры отбирают транзакции для блоков из собственных мемпулов, отдавая приоритет самой высокой комиссии за виртуальный байт с учётом всех неподтверждённых родительских транзакций. Когда приходит валидный блок, каждая нода удаляет из своего мемпула подтверждённые транзакции, а также все конфликтующие с ними.
- Политика — это не консенсус. Транзакция, которую большинство нод отказывается ретранслировать, потому что её комиссия ниже их минимума или она имеет нестандартную форму, всё равно может быть валидной в блоке, и некоторые майнеры принимают такие транзакции напрямую. Поэтому мемпул каждой ноды — лишь оценка того, что попадёт в следующий блок, и в пограничных случаях разные ноды могут расходиться.
- При выключении Bitcoin Core сохраняет мемпул в файл mempool.dat и загружает его при запуске, отбрасывая всё, что больше не валидно, поэтому перезапущенная нода не начинает с пустого мемпула. Чтобы понаблюдать за работой мемпула, откройте mempool.space: прогнозируемые блоки показывают, что майнеры, скорее всего, включат следующим, а каждый новый блок забирает верхний слой.
Ключевые факты
- Мемпул — это локальный пул в памяти каждой ноды, а не единый универсальный сервис.
- По умолчанию Bitcoin Core ограничивает размер мемпула 300 МБ через параметр 'maxmempool'.
- По умолчанию Bitcoin Core удаляет неподтвержденные транзакции через две недели (336 часов, начиная с версии 0.14).
- Ноды применяют как правила консенсуса, так и локальные правила политики, включая минимальные ставки комиссии.
- Когда мемпул заполнен, ноды динамически повышают пороги комиссии, чтобы вытеснить менее выгодные транзакции.
- Bitcoin Core при выключении сохраняет мемпул в файл 'mempool.dat', чтобы он пережил перезапуск.
Упражнение девять, шесть, три, один
9СобратьПеречислите 9 разных неподтверждённых транзакций из раздела мемпула в обозревателе блоков. Укажите их текущие ставки комиссии, размер в виртуальных байтах и количество подтверждений (у всех — ноль).
6СгруппироватьРаспределите эти 9 транзакций по 6 категориям в зависимости от того, почему они могли застрять: низкая ставка комиссии, большой размер, сигнализация RBF, неподтверждённые входы, статус сироты (orphan) или другие причины, связанные с политикой нод.
3Выделить главноеСведите 6 групп к 3 основным причинам, по которым нода может отклонить транзакцию или вытеснить её из своего мемпула, хотя она валидна по правилам консенсуса.
1КристаллизоватьНапишите 1 предложение о том, как различия в локальной политике нод приводят к фрагментированной, неединой картине ожидающих транзакций в сети.
Проверка фактов
Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.
- Bitcoin Core documentation: -maxmempool and -mempoolexpiry configuration parameters
- A. M. Antonopoulos & D. A. Harding, Mastering Bitcoin, 3rd ed. (2023)
- mempool.space documentation on real-time mempool visualization