use litesvm::LiteSVM;
use solana_sdk::{account::Account, pubkey, pubkey::Pubkey};
pub const PYTH_PROGRAM_ID: Pubkey = pubkey!("Pyth111111111111111111111111111111111111111");
pub fn create_pyth_price_account(svm: &mut LiteSVM, price: f64) -> Pubkey {
let key = Pubkey::new_unique();
let disc = {
use sha2::{Digest, Sha256};
let mut h = Sha256::new();
h.update(b"account:PriceUpdateV2");
let hash = h.finalize();
let mut d = [0u8; 8];
d.copy_from_slice(&hash[..8]);
d
};
let price_i64 = (price * 1e8) as i64;
let mut data = Vec::with_capacity(256);
data.extend_from_slice(&disc);
data.extend_from_slice(Pubkey::new_unique().as_ref());
data.push(1u8);
data.extend_from_slice(&[13u8; 32]);
data.extend_from_slice(&price_i64.to_le_bytes());
data.extend_from_slice(&0u64.to_le_bytes());
data.extend_from_slice(&(-8i32).to_le_bytes());
data.extend_from_slice(&i64::MAX.to_le_bytes());
data.extend_from_slice(&i64::MAX.to_le_bytes());
data.extend_from_slice(&price_i64.to_le_bytes());
data.extend_from_slice(&0u64.to_le_bytes());
data.extend_from_slice(&0u64.to_le_bytes());
let account = Account {
lamports: u32::MAX as u64,
data,
owner: PYTH_PROGRAM_ID,
executable: false,
rent_epoch: 0,
};
svm.set_account(key, account).unwrap();
key
}