Средний Урок 3 4 мин чтения

Таксы, мемпул и RBF: почему ваша транзакция застряла

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

Вы нажали "отправить" четыре часа назад, а деньги так и не пришли. Никто не обрабатывает ваш запрос, нет службы поддержки и, главное, нет очереди. Существует аукцион за место, и ваша транзакция просто не предложила достаточно.

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

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

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

Что оплачивается — это место в телеге, а не стоимость того, что внутри.

Цена этого пространства сильно варьируется. В декабре 2017 года, когда сеть была перегружена, средняя комиссия за транзакцию превысила пятьдесят долларов. В блоке 840.000, добытом 20 апреля 2024 года, майнеры собрали более 37 биткоинов только в виде комиссий — рекорд, вызванный гонкой за запись данных в этот конкретный блок. В спокойные ночи та же транзакция стоит несколько центов. Ваш кошелек проверяет последние блоки и размер mempool, чтобы предложить сумму, и в большинстве случаев он прав.

Когда он ошибается, есть два выхода. Первый — заменить транзакцию на такую же, но с большей комиссией. Этот механизм называется RBF, от replace-by-fee, и работает, потому что неподтвержденная транзакция еще не окончательна: пока она находится только в mempool, новая версия, использующая те же входы и платящая больше, принимается вместо старой.

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

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

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

А если вы ничего не сделаете? Ничего плохого не произойдет. Монеты остаются вашими, потому что неподтвержденная транзакция ничего не переместила — это всего лишь предложение. Через некоторое время, по умолчанию две недели, узлы удаляют предложение из памяти из-за нехватки места, и это как если бы оно никогда не было сделано. Части, которые она должна была потратить, остаются нетронутыми, доступными для новой транзакции.

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

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