use primitive_types::U256;
pub const NANO_AVAX: u64 = 1;
pub const MICRO_AVAX: u64 = 1000 * NANO_AVAX;
pub const MILLI_AVAX: u64 = 1000 * MICRO_AVAX;
pub const AVAX: u64 = 1000 * MILLI_AVAX;
pub const KILO_AVAX: u64 = 1000 * AVAX;
pub const MEGA_AVAX: u64 = 1000 * KILO_AVAX;
pub const AVAX_EVM_CHAIN: u64 = 1000 * MEGA_AVAX;
pub fn convert_navax_for_x_and_p(n: u64) -> u64 {
n / AVAX
}
pub fn convert_navax_for_evm(n: u64) -> u64 {
n / AVAX_EVM_CHAIN
}
pub fn cast_navax_to_avax_i64(navax: U256) -> i64 {
let avax_unit = U256::from(10).checked_pow(U256::from(18)).unwrap();
let avaxs = navax.checked_div(avax_unit).unwrap();
if avaxs >= U256::from(u64::MAX) {
i64::MAX
} else {
let converted = avaxs.as_u64();
if converted >= i64::MAX as u64 {
i64::MAX
} else {
converted as i64
}
}
}
#[test]
fn test_cast_navax_to_avax_i64() {
assert_eq!(cast_navax_to_avax_i64(U256::max_value()), i64::MAX);
assert_eq!(cast_navax_to_avax_i64(U256::from(i64::MAX)), 9);
assert_eq!(cast_navax_to_avax_i64(U256::from(100)), 0);
}