Перейти к содержимому
buybitcoinsmart

Глоссарий / Протокол и обновления

Кластерный пул памяти

Что такое Кластерный пул памяти?
Cluster mempool представляет собой переработку «комнаты ожидания» Bitcoin Core, которая постоянно держит в упорядоченном виде каждую группу связанных неподтвержденных транзакций, так что узел всегда знает, какие из них действительно выбрал бы майнер.

Неподтвержденные транзакции, которые расходуют выходы друг друга, образуют граф зависимостей, и долгие годы программа могла рассуждать о нем только через грубые ограничения на число предков и потомков, допустимых для каждой записи. Версия 31.0 заменила их одним правилом: никакая связанная группа не может быть больше 64 транзакций или 101 кБ виртуального размера. В результате и повышение комиссии, и замена транзакции стали предсказуемее.

Как это работает

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

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

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

Ограничения составляют 64 транзакции и 101 кБ виртуального размера на кластер, и они полностью заменили подсчет предков и потомков. Исключение CPFP carveout, которое прежде позволяло одному дополнительному потомку проскочить мимо лимита на потомков, было удалено вместе с ними, потому что ничто не может обойти ограничение на число транзакций в кластере.

Выигрыш проявляется при замене. Прежние правила replace-by-fee были набором прикрученных друг к другу условий, и их можно было обойти, прицепляя дешевый мусор к общей транзакции, пока замена не становилась до абсурда дорогой. Сравнение диаграмм ставок комиссии дает вместо этого одну проверку: замена принимается, когда она нигде не делает диаграмму хуже и где-то делает ее лучше. Два новых RPC открывают доступ к механизму: getmempoolcluster для содержимого и порядка кластера и getmempoolfeeratediagram для самой диаграммы.

Где это видно

Cluster mempool проявляется как сообщение об ошибке, когда вы связываете слишком много неподтвержденных расходов подряд, и как повышение комиссии, которое срабатывает там, где вы ожидали проблем.

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

Менее заметная выгода в том, что child-pays-for-parent теперь делает то, что обещает. Повысьте комиссию застрявшей транзакции, израсходовав ее выход по высокой ставке, и узел сразу увидит, превосходит ли эта пара то, что уже стоит в очереди, так что вы получаете прямой ответ за один шаг вместо приближения.

Cluster mempool vs пул памяти

Пул памяти представляет собой набор транзакций, которые держит узел; cluster mempool означает, как одна программа организует этот набор внутри себя. Ни одно правило консенсуса не изменилось, никакого форка не произошло, и узел, который по-прежнему работает на старой версии, держит те же транзакции с худшим учетом. Различие важно, потому что об изменении иногда сообщают так, будто биткоин получил новое правило для всей сети о цепочках транзакций. Это не так. Это политика, выбираемая каждым узлом отдельно, и любой оператор может изменить лимиты на своей машине аргументом командной строки.

Не путать с

Часто задаваемые вопросы

Меняет ли cluster mempool какое-либо правило консенсуса биткоина?

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

Почему мой кошелек сообщил, что транзакция превышает лимит кластера?

Вы построили цепочку неподтвержденных расходов, связанная группа которых достигла потолка в 64 транзакции или 101 кБ виртуального размера. Повышение комиссии не поможет. Дождитесь подтверждения одной из более ранних транзакций, что разобьет группу.

Связанные термины

Еще в разделе «Протокол и обновления»

Читать эту страницу на английском