Сократить promo-аргументы регистрации в Solana

This commit is contained in:
AidarKC
2026-06-30 18:40:33 +04:00
parent 0a416a2f5c
commit 63f13a4c29
4 changed files with 75 additions and 125 deletions
@@ -267,7 +267,7 @@ On-chain инвариант только один:
### 7.3. Promo-обход login guard
При создании пользователя допускается опциональный `promo_code`.
При создании пользователя off-chain клиент может использовать опциональный `promo_code`.
Формат строки:
@@ -285,6 +285,8 @@ On-chain инвариант только один:
shine_promo_v1:<login_из_запроса_create_user_pda>
```
В сам `create_user_pda` при этом передаётся только `seller_login`, а подпись проверяется по отдельной Ed25519-инструкции в транзакции.
Если promo-код валиден, то:
- premium/trademark-проверка через `shine_login_guard` не выполняется;
@@ -385,7 +387,7 @@ shine_promo_v1:<login_из_запроса_create_user_pda>
- `additional_limit`
- mutable fields записи
- `root` signature по unsigned части
- опционально `promo_code`
- опционально `promo_seller_login`
### Бинарный ABI
@@ -398,15 +400,14 @@ shine_promo_v1:<login_из_запроса_create_user_pda>
- additional_limit: u64 LE
- fields: UserMutableFieldsV1
- root_signature: [u8; 64]
- optional trailing promo_code: string_u8
- optional trailing promo_seller_login: string_u8
```
### Обязательные проверки
1. Логин валиден по синтаксису.
2. Если promo-код не передан, логин разрешён `shine_login_guard`.
3. Если promo-код передан, он должен:
- иметь формат `1<seller_login>-<signature_base58>`;
3. Если promo-регистрация включена, программа получает `promo_seller_login`, а связанная Ed25519-инструкция должна:
- ссылаться на существующий `promo_seller_pda`;
- проходить Ed25519-проверку через `signer_pubkey` продавца;
- иметь `remaining_sales > 0`;