strategy-vaults 0.0.1

Farm Vaults
Documentation
//! Timing functions

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(())
    }
}