solana: защитить economy config в shine_users
This commit is contained in:
parent
b83e8c3979
commit
e5fe925023
@ -444,6 +444,7 @@ fn process_create_user_pda(program_id: &Pubkey, accounts: &[AccountInfo], args:
|
|||||||
require!(args.additional_limit % settings::LIMIT_STEP == 0, ShineUsersError::InvalidLimitIncrement);
|
require!(args.additional_limit % settings::LIMIT_STEP == 0, ShineUsersError::InvalidLimitIncrement);
|
||||||
require_keys_eq!(*login_guard_program.key, Pubkey::from_str(settings::SHINE_LOGIN_GUARD_PROGRAM_ID).map_err(|_| ProgramError::from(ShineUsersError::InvalidLoginGuardResponse))?, ShineUsersError::InvalidLoginGuardResponse);
|
require_keys_eq!(*login_guard_program.key, Pubkey::from_str(settings::SHINE_LOGIN_GUARD_PROGRAM_ID).map_err(|_| ProgramError::from(ShineUsersError::InvalidLoginGuardResponse))?, ShineUsersError::InvalidLoginGuardResponse);
|
||||||
classify_login_or_fail(login_guard_program, &args.login)?;
|
classify_login_or_fail(login_guard_program, &args.login)?;
|
||||||
|
validate_users_economy_config_pda(program_id, users_economy_config_pda)?;
|
||||||
|
|
||||||
let economy = read_users_economy_config(users_economy_config_pda)?;
|
let economy = read_users_economy_config(users_economy_config_pda)?;
|
||||||
let login_seed = login_seed_normalized(&args.login);
|
let login_seed = login_seed_normalized(&args.login);
|
||||||
@ -522,6 +523,7 @@ fn process_update_user_pda(program_id: &Pubkey, accounts: &[AccountInfo], args:
|
|||||||
validate_fields(&args.fields)?;
|
validate_fields(&args.fields)?;
|
||||||
validate_inflow_vault(inflow_vault)?;
|
validate_inflow_vault(inflow_vault)?;
|
||||||
require!(args.additional_limit % settings::LIMIT_STEP == 0, ShineUsersError::InvalidLimitIncrement);
|
require!(args.additional_limit % settings::LIMIT_STEP == 0, ShineUsersError::InvalidLimitIncrement);
|
||||||
|
validate_users_economy_config_pda(program_id, users_economy_config_pda)?;
|
||||||
let economy = read_users_economy_config(users_economy_config_pda)?;
|
let economy = read_users_economy_config(users_economy_config_pda)?;
|
||||||
|
|
||||||
let normalized_login = login_seed_normalized(&args.login);
|
let normalized_login = login_seed_normalized(&args.login);
|
||||||
@ -630,6 +632,13 @@ fn serialize_users_economy_config(state: &UsersEconomyConfigState) -> Vec<u8> {
|
|||||||
out
|
out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn validate_users_economy_config_pda(program_id: &Pubkey, pda: &AccountInfo) -> ProgramResult {
|
||||||
|
let (expected_pda, _) = find_users_economy_config_pda(program_id);
|
||||||
|
require_keys_eq!(expected_pda, *pda.key, ShineUsersError::InvalidPdaAddress);
|
||||||
|
require!(pda.owner == program_id, ShineUsersError::InvalidPdaAddress);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn read_users_economy_config(pda: &AccountInfo) -> Result<UsersEconomyConfigState, ProgramError> {
|
fn read_users_economy_config(pda: &AccountInfo) -> Result<UsersEconomyConfigState, ProgramError> {
|
||||||
let raw = read_pda_all(pda)?;
|
let raw = read_pda_all(pda)?;
|
||||||
require!(!raw.is_empty(), ShineUsersError::EmptyPdaData);
|
require!(!raw.is_empty(), ShineUsersError::EmptyPdaData);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user