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