use std::cmp;
use crate::Vault;
use {
solana_farm_sdk::math,
solana_program::{
clock::UnixTimestamp, entrypoint::ProgramResult, msg, program_error::ProgramError, sysvar,
sysvar::Sysvar,
},
};
pub fn get_time() -> Result<UnixTimestamp, ProgramError> {
Ok(sysvar::clock::Clock::get()?.unix_timestamp)
}
pub fn get_time_as_u64() -> Result<u64, ProgramError> {
math::checked_as_u64(sysvar::clock::Clock::get()?.unix_timestamp)
}
pub fn check_min_crank_interval(vault: &Vault) -> ProgramResult {
let min_crank_interval = vault.min_crank_interval;
if min_crank_interval == 0 {
return Ok(());
}
let last_crank_time = vault.crank_time;
let cur_time = cmp::max(get_time_as_u64()?, last_crank_time);
if cur_time < last_crank_time.wrapping_add(min_crank_interval) {
msg!(
"Error: Too early, please wait for the additional {} sec",
last_crank_time
.wrapping_add(min_crank_interval)
.wrapping_sub(cur_time)
);
Err(ProgramError::Custom(309))
} else {
Ok(())
}
}