Files
SHiNE-server/docs/Solana_Architecture/details/shine_users.md
T

3.0 KiB

shine_users

Кратко

shine_users создаёт и обновляет пользовательскую PDA SHiNE, проверяет authority/signature, логин через shine_login_guard и оплату регистрации/дополнительного лимита через shine_payments.

Текущий формат пользовательской записи — PDA 1.2. Каноническая бинарная спецификация находится в:

  • shine-solana/shine/doc/formats/shine-user-pda-format-v.1.2.md
  • shine-solana/shine/doc/programs/shine_users.md

Эти документы являются источником истины; здесь фиксируется только архитектурное резюме.

PDA 1.2

Основные данные:

  • RootKeyBlock — cold recovery authority;
  • ClientKeyBlock — клиентский/кошелёчный ключ;
  • BlockchainRegistryBlock — append-only список fork: blockchain_key[32] + created_at_ms:u64 + paid_limit_bytes:u32; последний fork активен;
  • необязательный ServerProfileBlock — в 1.2 ровно один адрес сервера;
  • необязательный AccessServersBlock — в 1.2 максимум один access server.

Из нового формата удалены RecoveryKeyBlock, SessionsBlock, TrustedStateBlock, ArchiveHeadBlock, sync_servers и поля вершины пользовательского blockchain. Сами пользовательские блоки и их история живут вне PDA; долговременное хранение/синхронизация выполняется через Arweave.

Обычный update выполняется активным последним blockchain key и не может менять root. Root используется для recovery и может менять root. Внутри PDA сохраняются record_number, prev_record_hash и Ed25519-подпись нового состояния.

Новый обычный fork можно добавить не раньше чем через 72 часа после created_at_ms текущего fork; root-recovery может обойти cooldown. Клиентский timestamp принимается только в окне ±5 минут относительно Solana Clock.

Legacy PDA 1.0 не мигрируются. Для тестовых 1.0 аккаунтов предусмотрена временная инструкция close_legacy_pda, возвращающая lamports вызывающему signer.

Экономика

Параметры экономики хранятся в users_economy_config_pda. paid_limit_bytes каждого fork — u32; старые fork-записи неизменяемы, пополняется только активный fork. Подробные формулы и ограничения описаны в документации программы.