. Награда ему
.
В каком порядке и какие транзакции включаются в блок?Грубо говоря, включается топ мемпула по убыванию комиссии. Но есть несколько исключений и дополнений:
- Если у нескольких транзакции в мемпуле абсолютно одинаковая комиссия, то они сортируются по времени (не уверен, но вроде бы получения транзакции первый раз нужной нодой). Со временем всё сложно - напрямую мы его не контролируем, но можем слегка использовать в своих целях (см стратегии 3,4).
- Если в блоке помещается 2000 первых транзакций, а 2001ая не помещается, то может быть взята 2002ая, 2003я и т д. Таким образом, чем меньше транзакция - тем выше её шансы стать последней. Одной этой идеи мало. См стратегию 5.
- Работа механизма CPFP - тогда дети и родители стоят рядом, сначала родители. Стоят в месте, соответствующем их средней (с учетом их размеров) комиссии. Как использовать в этом конкурсе - у меня не получилось придумать.
- И наконец - ручное изменение приоритета на пуле.
Какие бывают блоки?Для нас важно - заполнен ли блок полностью или же в нём ещё есть место. Если пустое место есть - значит, мемпул пуст. Можно пытаться попадать в полные блоки (стратегии 1, 2, 5), а можно - в неполные (стратегии 3,4).
Стратегия 1. Самая простая стратегия - слать транзакции как попало. Вероятность стать последней - около 0.05% - очень мало.
Стратегия 2. При созданиии транзакции выбрать комиссию так, чтобы попасть ровно в нужное место сортированного мемпула. Вроде неплохо, но через секунду появится какая-нибудь чужая транзакция и мы окажемся чуть ниже. Конечно, можно в таком случае отправить вторую, третью, ...потом можно будет сделать replace-by-fee у первой..., второй и так далее. На глаз - тут нужно около сотни транзакций и написать много кода. Комиссию придётся ставить не очень маленькую, а подтвердятся в итоге все эти транзакции. Выходит дорого, но (это моё ощущение) можно добиться очень большой вероятности (50-90%) попадания именно в любой нужный блок. Если бы призовой фонд был в сто раз больше - стоило бы делать так.
Стратегия 3. Слать транзакции с минимальной возможной комиссией 1 сат/байт с тем, чтобы встать в самом конце мемпула и войти последним в неполный блок. Стратегия очень простая и доступна новичкам - можно делать вручную. В то же время уже приемлимые шансы на попадание одной транзакцией - где-то 2-5%. Тут важно не пытаться увеличить шансы одновременной отправкой нескольких транзаций - см пункт про сортировку по времени. Если хочется увеличить шансы отправкой нескольких транзакций - это надо делать через некоторое время - или (и это ещё лучше) после того, как транзакцию с такой же комиссией отправит кто-то другой. Победитель одно время слал просто раз в 5-10 секунд.
Стратегия 4. Можно развить эту идею дальше: в момент появления неполного блока мемпул обнуляется и быть там последним [в пустом мемпуле] очень легко: комиссия 1 сат/байт. Будем отправлять транзакцию в этот момент. Пока в мемпуле нет больше транзакций с 1 сат/байт - мы в очень хорошем положении - если появится блок - мы победим. Пока их там мало - шансы тоже очень хорошие. Дальше можно либо ждать следующего такого момента, либо переходить к стратегии 3. Шансы (оценка на глаз) - около 10% с одной транзакции.
Стратегия 5. Периодически кто-то выгружает в мемпул много транзакций разом. Допустим, что все они имеют размер хотя бы в 220 vbyte, одинаковую комиссию и их объём на блок или больше. Тогда мы можем послать свою транзакцию размером в 110 vbyte (практически минимальный размер) с комиссией чуть меньше или ровно такой же, с тем, чтобы использовать в свою пользу пункт 2. Когда какой-то блок набьют доверху этими транзакциями, есть шанс около 50%, что в блоке останется ешё 110-220 vbyte места. Все оставшиеся транзакции этой серии будут пропущены, а наша - войдёт последней. Если не войдёт - она ещё останется в мемпуле вместе с остатками той пачки - и у неё будет ещё и вторая такая попытка. Шансы очень большие - на глаз 60-90% у одной транзакции. Конечно, тут всё зависит от параметров пачки - а их реальные параметры я не изучал.
Когда проверял решаемость задачи сам - использовал вручную гибрид стратегий 3 и 4 - попал где-то с десятой попытки, времени ушло 2-3 часа при околопустом мемпуле.
Конкурс это или лотерея?На мой взгляд, конкурс. Но можно его воспринимать и как лотерею и использовать соответствующие стратегии. А можно - как конкурс и использовать что-то вроде стратегии 5 (теоретические шансы больше половины с одной попытки). К сожалению, что-то подобное никто не сделал. Решение, которое я проверял сам - даёт шансы 5-10% с одной попытки.
AFAIK в этом месте сортируются не все транзакции, а лишь внутри package - т е зависящие друг от друга (предки и потомки при CPFP).
.