Почему в очереди TON Highload Wallet v3 пропускают номер 1023
Очередь выплат исправно работает первую тысячу запросов, а затем последовательный номер достигает 1023. В Highload Wallet v3 защита от повторов использует битовую карту, где не каждое значение младших разрядов допустимо.
Отделите порядковый номер от кодировки query ID
Младшие десять бит задают позицию, однако допустимы только позиции от 0 до 1022. После пары (0, 1022) идёт пара (1, 0). Упакованные значения равны 1022 и 1024. При обычном прибавлении единицы к упакованному числу получилась бы недопустимая позиция 1023.
const pack = (shift, bit) => (shift << 10) | bit;
console.log(pack(0, 1022), pack(1, 0));
console.log(1023 & 1023);
Проверьте перезапуск на границе
Сохраняйте связь запроса на выплату с выделенным query ID, чтобы два обработчика не заняли одну позицию для разных выплат. В тесте перезапустите очередь между этими граничными значениями. У верхней границы используйте правила эталонного распределителя, включая зарезервированную аварийную позицию. Для повторного использования старого номера учитывайте тайм-аут кошелька.