SHA256
59 lines
3.2 KiB
Markdown
59 lines
3.2 KiB
Markdown
# `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`.
|