diff --git a/token/src/lib.rs b/token/src/lib.rs index 21ca4d68..bc39c05a 100644 --- a/token/src/lib.rs +++ b/token/src/lib.rs @@ -14,4 +14,15 @@ pub mod state; // solana-sdk version pub use solana_sdk; +/// Convert the UI representation of a token amount (using the decimals field defined in its mint) +/// to the raw amount +pub fn ui_amount_to_amount(ui_amount: f64, decimals: u8) -> u64 { + (ui_amount * 10_usize.pow(decimals as u32) as f64) as u64 +} + +/// Convert a raw amount to its UI representation (using the decimals field defined in its mint) +pub fn amount_to_ui_amount(amount: u64, decimals: u8) -> f64 { + amount as f64 / 10_usize.pow(decimals as u32) as f64 +} + solana_sdk::declare_id!("TokenSVp5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o"); diff --git a/token/src/native_mint.rs b/token/src/native_mint.rs index f05677c1..6e80b280 100644 --- a/token/src/native_mint.rs +++ b/token/src/native_mint.rs @@ -5,3 +5,21 @@ pub const DECIMALS: u8 = 9; // The Mint for native SOL Token accounts solana_sdk::declare_id!("So11111111111111111111111111111111111111111"); + +#[cfg(test)] +mod tests { + use super::*; + use solana_sdk::native_token::*; + + #[test] + fn test_decimals() { + assert_eq!( + lamports_to_sol(42), + crate::amount_to_ui_amount(42, DECIMALS) + ); + assert_eq!( + sol_to_lamports(42.), + crate::ui_amount_to_amount(42., DECIMALS) + ); + } +}