use const_crypto::ed25519;
use solana_program::{pubkey, pubkey::Pubkey};
pub const ADMIN_ADDRESS: Pubkey = pubkey!("HBUh9g46wk2X89CvaNN15UmsznP59rh6od1h8JwYAopk");
pub const MINT: &[u8] = b"mint";
pub const STABLE: &[u8] = b"stable";
pub const VAULT: &[u8] = b"vault";
pub const PROTOCOL: &[u8] = b"protocol";
pub const POSITION: &[u8] = b"position";
pub const VAULT_ADDRESS: Pubkey = pubkey!("9znvhq6ae8nTsSW2VU49pQnq1or3Ne12q7ehRYXf8YTw");
pub const USDC_ADDRESS: Pubkey = pubkey!("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
pub const TOKEN_DECIMALS: u8 = 6;
pub const DEFAULT_PLATFORM_FEE_BPS: u16 = 1000;
pub const DENOMINATOR_BPS: u64 = 10_000;
pub const SHARES_PER_USDC: u64 = 1000;
pub const EXCHANGE_RATE_PRECISION: u64 = 1_000_000_000;
pub const PROTOCOL_KAMINO: u8 = 0;
pub const PROTOCOL_PERENA: u8 = 1;
pub const LENDING_MARKET_ADDRESS: Pubkey = pubkey!("DxXdAyU3kCjnyggvHmY5nAwg5cRbbmdyX3npfDMjjMek");
pub const LENDING_MARKET_AUTHORITY_ADDRESS: Pubkey =
pubkey!("B9spsrMK6pJicYtukaZzDyzsUQLgc3jbx5gHVwdDxb6y");
pub const RESERVE_ADDRESS: Pubkey = pubkey!("Ga4rZytCpq1unD4DbEJ5bkHeUz9g3oh9AAFEi6vSauXp");
pub const RESERVE_LIQUIDITY_SUPPLY_ADDRESS: Pubkey =
pubkey!("GENey8es3EgGiNTM8H8gzA3vf98haQF8LHiYFyErjgrv");
pub const RESERVE_CTOKEN_ADDRESS: Pubkey = pubkey!("6WnymZBTAekuHf9DgsaDKJ397oEZ3qMApNMHg9qjqhgm");
pub const RESERVE_FARM_STATE_ADDRESS: Pubkey =
pubkey!("EGDhupegCXLtonYDSY67c4dzw86S9eMxsntQ1yxWSoHv");
pub const SCOPE_PRICES_ADDRESS: Pubkey = pubkey!("3t4JZcueEzTbVP6kLxXrL3VpWx45jDer4eqysweBchNH");
pub const CTOKEN_ADDRESS: Pubkey = pubkey!("32XLsweyeQwWgLKRVAzS72nxHGU1JmmNQQZ3C3q6fBjJ");
pub const KLEND_PROGRAM_ID: Pubkey = pubkey!("KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD");
pub const KFARMS_PROGRAM_ID: Pubkey = pubkey!("FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr");
pub const OBLIGATION_ADDRESS: Pubkey = Pubkey::new_from_array(
ed25519::derive_program_address(
&[
&2u8.to_le_bytes(),
&0u8.to_le_bytes(),
unsafe { &*(&VAULT_ADDRESS as *const Pubkey as *const [u8; 32]) },
unsafe { &*(&LENDING_MARKET_ADDRESS as *const Pubkey as *const [u8; 32]) },
unsafe { &*(&USDC_ADDRESS as *const Pubkey as *const [u8; 32]) },
unsafe { &*(&USDC_ADDRESS as *const Pubkey as *const [u8; 32]) },
],
unsafe { &*(&KLEND_PROGRAM_ID as *const Pubkey as *const [u8; 32]) },
)
.0,
);
pub const RESERVE_FARM_USER_STATE_ADDRESS: Pubkey = Pubkey::new_from_array(
ed25519::derive_program_address(
&[
b"user",
unsafe { &*(&RESERVE_FARM_STATE_ADDRESS as *const Pubkey as *const [u8; 32]) },
unsafe { &*(&OBLIGATION_ADDRESS as *const Pubkey as *const [u8; 32]) },
],
unsafe { &*(&KFARMS_PROGRAM_ID as *const Pubkey as *const [u8; 32]) },
)
.0,
);
pub const PERENA_PROGRAM_ID: Pubkey = pubkey!("save8RQVPMWNTzU18t3GBvBkN9hT7jsGjiCQ28FpD9H");
pub const USD_STAR_MINT: Pubkey = pubkey!("star9agSpjiFe3M49B3RniVU4CMBBEK3Qnaqn3RGiFM");
pub const PERENA_BANK_STATE: Pubkey = pubkey!("sM6P4mh53CnG4faN4Fo3seY7wMSAiHdy8o6gKjwQF7A");
pub const PERENA_VAULT_STATE: Pubkey = pubkey!("3bZ1qY6wfzyDH7QMPiRKLr6k8p1asdtyjvJyJsJBdv23");
pub const PERENA_ORACLE_STATE: Pubkey = pubkey!("CmKFP4YJg5QpAryUm9xk5QD611bccYMzZvpvQDJkMwt6");
pub const PERENA_TEAM_STATE: Pubkey = pubkey!("6tqLkhbqJSx4KG616VhNCvsaFqcDPok7wdbzU2DmEAub");
pub const PERENA_YIELDING_VAULT: Pubkey = pubkey!("HvG7HSrNHVAcjzgwt3UVtnY9srkrY7qnMG4zS1SnPQT2");
pub const PERENA_FEE_TEAM_ATA: Pubkey = pubkey!("3msJbxNbSeosztbNEB1eFPitMFnP8ogCszegPUswipdL");
pub const LUT_ADDRESS: Pubkey = pubkey!("4JhHm4zoyoUZdyVqx2ogA2VstnebQVjWDNfNS7uXzd8Y");