Files
SHiNE-server/shine-solana/shine/doc/programs/shine_login_guard.md
T

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:

  • 0CLASS_FREE
  • 1CLASS_PREMIUM
  • 2CLASS_TRADEMARK

Сейчас фактически используются только:

  • CLASS_FREE
  • CLASS_PREMIUM

CLASS_TRADEMARK сохранён для совместимости ABI, но временная логика его не возвращает.

6. Правила нормализации логина

Перед классификацией логин нормализуется:

  • пустой логин запрещён;
  • длина исходного логина не больше 20;
  • символ _ удаляется;
  • остальные символы обязаны быть ASCII alnum;
  • буквы приводятся к нижнему регистру.

Если нормализация не удалась:

  • логин считается CLASS_PREMIUM.

Это означает, что shine_users не пустит такой логин в обычную регистрацию.

7. Временные правила классификации

Текущий временный алгоритм:

  1. Нормализовать логин.
  2. Если нормализованный логин короче 5 символов, вернуть CLASS_PREMIUM.
  3. Иначе вернуть CLASS_FREE.

То есть on-chain программа в этом режиме:

  • пропускает любые валидные логины длиной от 5 символов;
  • не использует premium-словари;
  • не использует trademark-словари;
  • не выполняет словарную сегментацию логина.

8. Граница ответственности

Важно разделять уровни:

  1. shine_login_guard

    • проверяет только базовую валидность и минимальную длину 5.
  2. UI

    • может вводить дополнительные временные ограничения;
    • например, пускать логины длиной 5..7 только по временному коду.
  3. shine_users

    • остаётся финальной on-chain точкой регистрации;
    • дополнительно проверяет общий формат логина в собственной логике.

9. Совместимость

Сохранено:

  • тот же ABI инструкции;
  • тот же формат return_data;
  • те же значения классов 0/1/2;
  • тот же Program ID.

Изменено относительно полной словарной версии:

  • нет словарной классификации;
  • нет разделения на premium/trademark по содержимому логина;
  • короткий порог временно снижен до 5.

При возврате к полной модели нужно будет обновить этот документ снова синхронно с кодом.