diff --git a/shine/programs/common/src/deploy_config.rs b/shine/programs/common/src/deploy_config.rs new file mode 100644 index 0000000..2a088af --- /dev/null +++ b/shine/programs/common/src/deploy_config.rs @@ -0,0 +1,33 @@ +//! Единый деплой-конфиг проекта SHINE. +//! Здесь хранятся адреса и параметры, которые зависят от окружения деплоя. + +// ========================= +// DAO / роли управления +// ========================= + +/// `DAO_AUTHORITY` — кошелек DAO/управления, который имеет право менять защищенные настройки. +pub const DAO_AUTHORITY: &str = "FUc28vNixp7F3nnkpGVt6nuJbgvJ4429v4B5wS52Df6P"; + +/// `DAO_TREASURY_WALLET` — кошелек казны DAO для поступления DAO-части выплат в `shine_payments`. +pub const DAO_TREASURY_WALLET: &str = "FUc28vNixp7F3nnkpGVt6nuJbgvJ4429v4B5wS52Df6P"; + +/// `MANAGER_WALLET` — сервисный менеджерский кошелек по умолчанию для `shine_payments`. +pub const MANAGER_WALLET: &str = "4yzHKs2zFXpyqqCETe8KpAs4xhEo4QhJ2ybyTgRZphZv"; + +// ========================= +// Комиссии / получатели +// ========================= + +/// `REGISTRATION_FEE_RECEIVER` — кошелек получателя комиссии за регистрацию в `shine_users`. +pub const REGISTRATION_FEE_RECEIVER: &str = "9vXFoN9ngfN1gpqQ3HT5n3y9Wp2r7HnSQckirgwVwWwb"; + +// ========================= +// Оракул (Pyth SOL/USD) +// ========================= + +/// `PYTH_SOL_USD_FEED_ID` — feed id Pyth для пары SOL/USD (используется для проверки feed внутри аккаунта). +pub const PYTH_SOL_USD_FEED_ID: &str = + "0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d"; + +/// `PYTH_SOL_USD_ACCOUNT` — адрес Solana-аккаунта обновлений цены Pyth для SOL/USD. +pub const PYTH_SOL_USD_ACCOUNT: &str = "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE"; diff --git a/shine/programs/common/src/lib.rs b/shine/programs/common/src/lib.rs index b5614dd..a78c262 100644 --- a/shine/programs/common/src/lib.rs +++ b/shine/programs/common/src/lib.rs @@ -1 +1,2 @@ pub mod utils; +pub mod deploy_config; diff --git a/shine/programs/shine_payments/src/settings.rs b/shine/programs/shine_payments/src/settings.rs index 5079748..4d6582a 100644 --- a/shine/programs/shine_payments/src/settings.rs +++ b/shine/programs/shine_payments/src/settings.rs @@ -1,30 +1,56 @@ -pub const CONFIG_SEED: &[u8] = b"shine_payments_v3_config"; -pub const COEF_LIMIT_SEED: &[u8] = b"shine_payments_v3_coef_limit"; -pub const QUEUES_SEED: &[u8] = b"shine_payments_v3_queues"; -pub const INFLOW_VAULT_SEED: &[u8] = b"shine_payments_v3_inflow_vault"; -pub const Q1_TICKET_SEED: &[u8] = b"shine_payments_v3_q1_ticket"; -pub const Q2_TICKET_SEED: &[u8] = b"shine_payments_v3_q2_ticket"; -pub const MANAGER_ALLOWANCE_SEED: &[u8] = b"shine_p_v3_manager_allow"; +use common::deploy_config; +/// `CONFIG_SEED` — seed PDA основного конфига `shine_payments`. +pub const CONFIG_SEED: &[u8] = b"shine_payments_config"; +/// `COEF_LIMIT_SEED` — seed PDA коэффициента, лимита и награды шага выплат. +pub const COEF_LIMIT_SEED: &[u8] = b"shine_payments_coef_limit"; +/// `QUEUES_SEED` — seed PDA агрегатов очередей выплат. +pub const QUEUES_SEED: &[u8] = b"shine_payments_queues"; +/// `INFLOW_VAULT_SEED` — seed PDA inflow-вольта, откуда исполняются выплаты. +pub const INFLOW_VAULT_SEED: &[u8] = b"shine_payments_inflow_vault"; +/// `Q1_TICKET_SEED` — seed PDA тикетов очереди 1. +pub const Q1_TICKET_SEED: &[u8] = b"shine_payments_q1_ticket"; +/// `Q2_TICKET_SEED` — seed PDA тикетов очереди 2. +pub const Q2_TICKET_SEED: &[u8] = b"shine_payments_q2_ticket"; +/// `MANAGER_ALLOWANCE_SEED` — seed PDA лимитов менеджера. +pub const MANAGER_ALLOWANCE_SEED: &[u8] = b"shine_p_manager_allow"; + +/// `CONFIG_SPACE` — размер (в байтах) PDA `ConfigState`. pub const CONFIG_SPACE: usize = 8 + 160; +/// `COEF_LIMIT_SPACE` — размер (в байтах) PDA `CoefLimitState`. pub const COEF_LIMIT_SPACE: usize = 8 + 96; +/// `QUEUES_SPACE` — размер (в байтах) PDA `QueuesState`. pub const QUEUES_SPACE: usize = 8 + 192; +/// `INFLOW_VAULT_SPACE` — размер (в байтах) PDA `VaultState`. pub const INFLOW_VAULT_SPACE: usize = 8 + 32; +/// `TICKET_SPACE` — размер (в байтах) PDA `TicketState`. pub const TICKET_SPACE: usize = 8 + 160; +/// `MANAGER_ALLOWANCE_SPACE` — размер (в байтах) PDA `ManagerAllowanceState`. pub const MANAGER_ALLOWANCE_SPACE: usize = 8 + 128; +/// `COEF_SCALE_PPM` — масштаб fixed-point для коэффициента (ppm = parts per million). pub const COEF_SCALE_PPM: u64 = 1_000_000; -pub const START_COEF_PPM: u64 = 5_000_000; // 5.0 -pub const START_LIMIT_USD_CENTS: u64 = 10_000 * 100; // 10_000 USD -pub const START_CALL_REWARD_LAMPORTS: u64 = 8_000_000; // 0.008 SOL -pub const MAX_CALL_REWARD_LAMPORTS: u64 = 10_000_000; // 0.01 SOL +/// `START_COEF_PPM` — стартовый коэффициент выплаты при инициализации (`5_000_000` = 5.0x). +pub const START_COEF_PPM: u64 = 5_000_000; +/// `START_LIMIT_USD_CENTS` — стартовый лимит Q1 в USD-центах (10_000 USD). +pub const START_LIMIT_USD_CENTS: u64 = 10_000 * 100; +/// `START_CALL_REWARD_LAMPORTS` — стартовая награда за вызов `step_payout` (0.008 SOL). +pub const START_CALL_REWARD_LAMPORTS: u64 = 8_000_000; +/// `MAX_CALL_REWARD_LAMPORTS` — верхняя граница награды за шаг выплат (0.01 SOL). +pub const MAX_CALL_REWARD_LAMPORTS: u64 = 10_000_000; +/// `USD_CENTS_SCALE` — масштаб USD-центов (1 USD = 100 центов). pub const USD_CENTS_SCALE: u64 = 100; +/// `LAMPORTS_PER_SOL` — количество лампортов в 1 SOL. pub const LAMPORTS_PER_SOL: u64 = 1_000_000_000; +/// `ORACLE_MAX_AGE_SECS` — максимальный возраст oracle-цены (в секундах), допустимый для расчетов. pub const ORACLE_MAX_AGE_SECS: u64 = 120; -pub const PYTH_SOL_USD_FEED_ID: &str = - "0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d"; -pub const PYTH_SOL_USD_ACCOUNT: &str = "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE"; +/// `PYTH_SOL_USD_FEED_ID` — feed id Pyth для пары SOL/USD (берется из общего deploy-конфига). +pub const PYTH_SOL_USD_FEED_ID: &str = deploy_config::PYTH_SOL_USD_FEED_ID; +/// `PYTH_SOL_USD_ACCOUNT` — адрес аккаунта Pyth price update для SOL/USD (берется из общего deploy-конфига). +pub const PYTH_SOL_USD_ACCOUNT: &str = deploy_config::PYTH_SOL_USD_ACCOUNT; -pub const DAO_WALLET: &str = "FUc28vNixp7F3nnkpGVt6nuJbgvJ4429v4B5wS52Df6P"; -pub const MANAGER_WALLET: &str = "4yzHKs2zFXpyqqCETe8KpAs4xhEo4QhJ2ybyTgRZphZv"; +/// `DAO_WALLET` — адрес кошелька DAO-казны для `shine_payments` (берется из общего deploy-конфига). +pub const DAO_WALLET: &str = deploy_config::DAO_TREASURY_WALLET; +/// `MANAGER_WALLET` — адрес менеджерского кошелька по умолчанию (берется из общего deploy-конфига). +pub const MANAGER_WALLET: &str = deploy_config::MANAGER_WALLET; diff --git a/shine/programs/shine_users/src/settings.rs b/shine/programs/shine_users/src/settings.rs index 3b7cb2f..847d1e9 100644 --- a/shine/programs/shine_users/src/settings.rs +++ b/shine/programs/shine_users/src/settings.rs @@ -1,16 +1,26 @@ +use common::deploy_config; + +/// `USER_PDA_SEED_PREFIX` — префикс seed для пользовательского PDA (`login=<...>`). pub const USER_PDA_SEED_PREFIX: &str = "login="; -pub const USERS_ECONOMY_CONFIG_SEED: &[u8] = b"shine_users_v1_economy_config"; -// Увеличили размер PDA, чтобы оставить запас под будущие расширения формата -// (в частности, сценарии ротации root key с дополнительной подписью старого ключа). +/// `USERS_ECONOMY_CONFIG_SEED` — seed PDA с экономическими параметрами программы `shine_users`. +pub const USERS_ECONOMY_CONFIG_SEED: &[u8] = b"shine_users_economy_config"; +/// `USER_PDA_SPACE` — фиксированный размер PDA пользователя, включая запас под расширения формата. pub const USER_PDA_SPACE: usize = 768; +/// `USERS_ECONOMY_CONFIG_SPACE` — размер PDA с экономическими параметрами `shine_users`. pub const USERS_ECONOMY_CONFIG_SPACE: usize = 8 + 96; -pub const DAO_AUTHORITY: &str = "FUc28vNixp7F3nnkpGVt6nuJbgvJ4429v4B5wS52Df6P"; +/// `DAO_AUTHORITY` — адрес DAO-авторити, который имеет право обновлять economy-конфиг. +pub const DAO_AUTHORITY: &str = deploy_config::DAO_AUTHORITY; -pub const REGISTRATION_FEE_RECEIVER: &str = "9vXFoN9ngfN1gpqQ3HT5n3y9Wp2r7HnSQckirgwVwWwb"; -pub const START_REGISTRATION_FEE_LAMPORTS: u64 = 10_000_000; // 0.01 SOL +/// `REGISTRATION_FEE_RECEIVER` — кошелек, который получает комиссию за регистрацию пользователей. +pub const REGISTRATION_FEE_RECEIVER: &str = deploy_config::REGISTRATION_FEE_RECEIVER; +/// `START_REGISTRATION_FEE_LAMPORTS` — стартовая комиссия регистрации (0.01 SOL) для initial economy-конфига. +pub const START_REGISTRATION_FEE_LAMPORTS: u64 = 10_000_000; +/// `LIMIT_STEP` — шаг пополнения лимита; `additional_limit` должен быть кратен этому значению. pub const LIMIT_STEP: u64 = 10_000; -pub const START_LAMPORTS_PER_LIMIT_STEP: u64 = 100_000; // 0.0001 SOL за 10_000 лимита +/// `START_LAMPORTS_PER_LIMIT_STEP` — стартовая цена одного шага лимита (0.0001 SOL за 10_000 лимита). +pub const START_LAMPORTS_PER_LIMIT_STEP: u64 = 100_000; +/// `START_BONUS_LIMIT` — стартовый бонус лимита, выдаваемый пользователю при создании записи. pub const START_BONUS_LIMIT: u64 = 100_000;