xray api vpnbot-audit-users отдавал оба прохода через creflect.MarshalToJson:
рефлексия по каждому аккаунту и JSON с отступами — ~400 байт на пользователя.
27.09.2026 на tinor (15 088 клиентов) это 11,9 МБ и 0,41 с CPU на вызов, а
узловой помощник строит аудит при каждом создании и удалении ключа и в
фоновой проверке раз в ~25 с.
Теперь каждый пользователь пишется как email и точная идентичность аккаунта:
VLESS — {"_TypedMessage_", "id"} (те же значения, что давал рефлективный
кодировщик), любой другой тип аккаунта — в прежнем рефлективном виде.
Контракт vpnbot-live-user-audit-v1 и два прохода не меняются.
Проверено:
- go test на v26.7.28 и v26.9.9 (test-patches.sh, включая сценарии с
настоящим процессом); новые тесты сверяют прямой вывод с рефлективным для
vless/vmess/trojan/shadowsocks, VLESS без id и пользователя без аккаунта.
- Живой Xray с 3002 пользователями: ответ 2,4 → 0,8 МБ; строгий аудит
узлового помощника (_build_live_user_registry_audit) на ответах старого и
нового бинарника дал идентичный результат, 66 → 40 мс.
- Бенчмарк 15 080 пользователей × 2 прохода: кодирование 158 → 16 мс,
13,6 → 4,0 МБ.