# `shine_login_guard` ## Кратко `shine_login_guard` — первая программа Solana-модуля SHiNE. Она проверяет логин перед регистрацией пользователя и возвращает класс логина. Папка программы: `shine-solana/shine/programs/shine_login_guard/`. ## Текущая функция 1. `classify_login(login: String)` - Нормализует логин. - Проверяет длину и допустимые символы. - Сравнивает части логина со словарями premium/trademark. - Возвращает результат через `set_return_data`. Классы результата: - `0` — обычный логин, регистрацию можно продолжать. - `1` — premium-логин. - `2` — trademark-логин, нужна отдельная проверка/разрешение. ## Правила нормализации и классификации Текущая логика из `programs/shine_login_guard/src/lib.rs`: - пустой логин или логин длиннее 20 символов получает класс `premium`; - `_` при нормализации удаляется; - допустимы только ASCII-буквы и цифры, остальные символы дают класс `premium`; - после удаления `_` результат приводится к нижнему регистру; - логины длиной 7 символов или меньше считаются `premium`; - логин разбивается максимум на 3 словарных фрагмента; - если среди найденных фрагментов есть trademark-слово, результат `trademark`; - если найдены только premium-слова, результат `premium`; - если разбиение по словарям не найдено, результат `free`. Словари собираются на этапе build из файлов: - `programs/shine_login_guard/src/dictionaries/premium/*.txt` - `programs/shine_login_guard/src/dictionaries/trademarks/*.txt` ## Роль в общей схеме `shine_users::create_user_pda` вызывает `shine_login_guard` через CPI и продолжает регистрацию только если логин получил класс `0`. ## Ключи и управление На старте удобно считать, что у программы есть отдельный управляющий ключ `key_1`. Текущая рекомендация: - пока оставить `shine_login_guard` под отдельным ключом; - не передавать ее DAO до стабилизации правил premium/trademark; - позже можно передать upgrade-authority DAO, чтобы изменения словарей и правил проходили через голосование. ## Счета Собственных постоянных PDA-счетов у программы сейчас нет. Для проверки нужен только подписант транзакции в `ClassifyLogin`.