Files
SHiNE-server/Dev_Docs/Инициализация_Solana_регистрации

Деплой и инициализация Solana-регистрации

Коротко

Для рабочей регистрации пользователя нужны три программы:

  1. shine_users — хранение и обновление user_pda, economy-конфиг, логика регистрации.
  2. shine_login_guard — проверка/классификация логина через CPI из shine_users.
  3. shine_payments — приём платежей за регистрацию и докупку лимита через inflow_vault PDA.

Если shine_users или shine_login_guard не совпадают по адресам с UI/сервером, регистрация неработоспособна.

Актуальные адреса (mainnet)

  • shine_users:
    SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6
  • shine_login_guard:
    SHiGxGsXGioQYCYhchQ5R7KWoxN5UjFAFsucPf6sfnh
  • shine_payments:
    SHiPmXbM9Fs9khzRUW3TGKsS2W84aqaXTxs3ZkajW9v

Временный on-chain admin для shine_users и shine_payments до перевода управления на DAO:

  • aiShm43fZjm3YkMs22sYL1bpXaL3bVxv7SSraPHzVgq

Подтверждение текущего mainnet deploy

  • Сеть: https://api.mainnet-beta.solana.com
  • shine_login_guard:
    • Program ID: SHiGxGsXGioQYCYhchQ5R7KWoxN5UjFAFsucPf6sfnh
    • TX deploy: 5gCxrw5gj7ig5C3HFf4AUrHq2pMW1LxgfLUj4jtmQvTqXnR7xp1iySf7m63S3MaimpeUyYhQR1zpPFJyPi6NTAv7
  • shine_users:
    • Program ID: SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6
    • TX deploy: 5Cwp53EegPv6aV69Ztxj7nXomHt9H9ZaXSgWvDfLPeR5EAaU38ADsQjn9h8xShU34AgttYGwWaVWiicF2vLwJXU9
  • shine_payments:
    • Program ID: SHiPmXbM9Fs9khzRUW3TGKsS2W84aqaXTxs3ZkajW9v
    • TX deploy: 2vzsM85bTwSxdYvzWKZMpAg7Gqxs8R7CC5T5LTm7cRFizhr11QZvgDKqP77b8n2mcmA6DF4RqwrUrPzQ8bsQhvCn

Как адреса связаны между собой

  • shine_users внутри кода вызывает shine_login_guard.
  • shine_users внутри кода знает shine_payments и переводит оплату в inflow_vault PDA этой программы.
  • shine_users и shine_payments пока управляются временным адресом aiShm....
  • Позже эти hardcoded authority-адреса планируется заменить на адреса DAO через upgrade программ.

Куда вписаны адреса в проекте

UI

  • shine-UI/js/solana-programs.js
  • shine-UI/js/pages/wallet-view.js
  • shine-UI/js/services/solana-register-service.js
  • shine-UI/server-ui/*.html

Browser plugin wallet

  • SHiNE-browser-plugin-wallet/js/lib/shine-server-resolver.js

Сервер

  • SHiNE-server/shine-server-config/src/main/java/utils/config/SolanaProgramsConfig.java

Solana / Anchor

  • shine-solana/shine/Anchor.toml
  • shine-solana/shine/programs/shine_users/src/lib.rs
  • shine-solana/shine/programs/shine_users/src/settings.rs
  • shine-solana/shine/programs/shine_login_guard/src/lib.rs
  • shine-solana/shine/programs/shine_payments/src/lib.rs
  • shine-solana/shine/programs/shine_payments/src/settings.rs

Дополнительные потребители

  • shine-solana/shine/programs/shine_payments/web/*.html
  • ESP32/.../shine_homeserver_main.ino
  • ESP32/.../shine_homeserver_ui.ino

Как запустить инициализацию economy PDA

  1. Открыть UI.
  2. Перейти: Профиль -> Настройки -> Настройки разработчика -> Solana: init регистрации.
  3. Подключить mainnet-кошелёк.
  4. Нажать Запустить init_users_economy_config.
  5. Дождаться статуса Успешно.

Страница вычисляет PDA users_economy_config по seed:

  • seed: shine_users_economy_config
  • program: SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6

Кто оплачивает create/update user_pda

  • И обычная регистрация create_user_pda, и последующее update_user_pda оплачиваются с clientKey.
  • В UI это означает, что Solana fee payer всегда берётся из device-ключа пользователя или сервера.
  • rootKey нужен для подписи unsigned PDA-записи, но не оплачивает транзакцию.
  • Для server UI это особенно важно: перед create и update нужно пополнять именно Solana-адрес clientKey.

Важно

  • init_users_economy_config выполняется один раз на программу. Если PDA уже создан, повторный вызов вернёт ошибку already initialized.
  • Серверные приватные ключи для Solana не используются как отдельный backend-wallet: транзакцию оплачивает clientKey, а содержимое записи подписывает rootKey.
  • shine_users внутри create_user_pda требует корректный адрес shine_login_guard для CPI-классификации логина.
  • При новом devnet deploy планируется использовать те же program keypair, чтобы program id на devnet совпадали с mainnet.