Как работает очередь
Как идёт отбор
Каждый узел держит собственную копию пула ожидающих транзакций. Когда валидатор или майнер собирает следующий блок, он выбирает из этого пула, и выбирает по выгоде.
В биткоине порядок задаёт комиссия за байт: маленькая транзакция со скромной платой обходит крупную с большей суммой платы, потому что место в блоке считается байтами, и число транзакций тут не учитывается. В Ethereum порядок задаёт цена газа, а логика под этим та же.
Место в блоке конечно, а спрос нет, поэтому получается аукцион. Когда желающих попасть больше, чем влезает, цена отсечения растёт, и новый уровень платят все.
Что мемпул говорит о состоянии сети
Пул публичен, и это делает его живым индикатором загрузки.
Для биткоина сайт mempool.space показывает очередь по уровням комиссии и оценивает, сколько каждый уровень ждёт. Заглянуть туда до отправки это и есть способ избежать описанной выше ситуации, а занимает он секунд пять.
Большой пул означает, что комиссии растут и подтверждение идёт медленно. Пустой означает, что любая разумная комиссия проходит в следующий блок или во второй.
Почему перевод зависает
Почти все случаи объясняются одной причиной: приложенная комиссия оказалась ниже той, что рынок платит прямо сейчас.
Кошельки оценивают комиссию по недавним условиям, а условия меняются. Перевод, отправленный непосредственно перед всплеском, несёт комиссию, которая имела смысл две минуты назад и очередь больше не проходит.
Изредка встречаются две другие причины. Транзакция, тратящая выход, который сам ещё не подтверждён, ждёт своего родителя. И транзакция, которую ни один узел не передал дальше, в пул вовсе не попала, и со стороны отправителя выглядит это одинаково при совсем другой проблеме.
Два способа вытолкнуть
Replace-by-fee
Отправитель рассылает ту же транзакцию заново с повышенной комиссией, замещая исходную. Работает это, только если транзакция при создании была помечена заменяемой, и большинство кошельков сегодня ставит эту метку по умолчанию.
Child-pays-for-parent
Получатель тратит входящий выход, приложив высокую комиссию. Майнерам, которым нужен дочерний перевод, придётся включить и родительский, поэтому подтвердятся оба сразу. Полезно ровно тогда, когда отправитель перестал отвечать.
Если не сделать ни того, ни другого
Если не сделать ни того, ни другого, транзакция со временем выпадет из пула. Узлы отбрасывают ожидающие транзакции по истечении срока, в биткоине это обычно около двух недель, и средства всё это время не покидали кошелёк отправителя.
Что нужно знать мерчанту
Две вещи, и обе про обработку заказов.
Платёж, лежащий в мемпуле, платежом ещё не стал. Зачислять заказ при нуле подтверждений означает зачислять то, что ещё может сорваться, и пороги существуют именно поэтому.
И самый частый разговор с поддержкой в криптоплатежах разрешается здесь же. Клиент говорит, что оплатил, мерчант просит хэш, а обозреватель показывает ожидание с низкой комиссией. Никто ничего не сделал неправильно, и ответ состоит в том, чтобы подождать либо поднять комиссию. Отслеживание платёжный шлюз берёт на себя, и об этом в руководстве по приёму.