SHA256
35 lines
3.0 KiB
Markdown
35 lines
3.0 KiB
Markdown
# `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. Подробные формулы и ограничения описаны в документации программы.
|