5.1 KiB
Программа shine_login_guard
Документ описывает текущее временное поведение программы классификации логинов SHiNE.
Задача программы:
- по логину определить класс регистрации;
- вернуть результат в
return_data; - не хранить PDA и не вести собственное состояние.
1. Назначение
shine_login_guard — маленькая служебная программа, которую вызывает shine_users через CPI до регистрации пользователя.
В текущем временном режиме она отвечает только на вопрос:
- является ли логин допустимым для автоматической регистрации;
- нужно ли отклонить слишком короткий или некорректный логин.
UI может накладывать дополнительные временные ограничения поверх этой логики, но сама программа про них не знает.
2. Program ID
Текущий program id:
SHiGxGsXGioQYCYhchQ5R7KWoxN5UjFAFsucPf6sfnh
3. Состояние
У программы нет PDA-состояний и persistent storage.
Программа полностью stateless и не опирается на словари при классификации.
4. Единственная инструкция
Инструкция:
classify_login(login: String)
Бинарный ABI инструкции:
- tag: u8 = 1
- login_len: u32 LE
- login_bytes[login_len]: UTF-8
Аккаунты:
- аккаунты не требуются
Если вызов идёт через CPI из shine_users, программа shine_login_guard не требует signer-аккаунтов.
5. Выходные классы
Программа возвращает u32 через set_return_data:
0—CLASS_FREE1—CLASS_PREMIUM2—CLASS_TRADEMARK
Сейчас фактически используются только:
CLASS_FREECLASS_PREMIUM
CLASS_TRADEMARK сохранён для совместимости ABI, но временная логика его не возвращает.
6. Правила нормализации логина
Перед классификацией логин нормализуется:
- пустой логин запрещён;
- длина исходного логина не больше
20; - символ
_удаляется; - остальные символы обязаны быть ASCII alnum;
- буквы приводятся к нижнему регистру.
Если нормализация не удалась:
- логин считается
CLASS_PREMIUM.
Это означает, что shine_users не пустит такой логин в обычную регистрацию.
7. Временные правила классификации
Текущий временный алгоритм:
- Нормализовать логин.
- Если нормализованный логин короче
5символов, вернутьCLASS_PREMIUM. - Иначе вернуть
CLASS_FREE.
То есть on-chain программа в этом режиме:
- пропускает любые валидные логины длиной от
5символов; - не использует premium-словари;
- не использует trademark-словари;
- не выполняет словарную сегментацию логина.
8. Граница ответственности
Важно разделять уровни:
-
shine_login_guard- проверяет только базовую валидность и минимальную длину
5.
- проверяет только базовую валидность и минимальную длину
-
UI
- может вводить дополнительные временные ограничения;
- например, пускать логины длиной
5..7только по временному коду.
-
shine_users- остаётся финальной on-chain точкой регистрации;
- дополнительно проверяет общий формат логина в собственной логике.
9. Совместимость
Сохранено:
- тот же ABI инструкции;
- тот же формат
return_data; - те же значения классов
0/1/2; - тот же
Program ID.
Изменено относительно полной словарной версии:
- нет словарной классификации;
- нет разделения на premium/trademark по содержимому логина;
- короткий порог временно снижен до
5.
При возврате к полной модели нужно будет обновить этот документ снова синхронно с кодом.