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