diff --git a/Cargo.lock b/Cargo.lock index dcb4855..1a9a983 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -133,7 +133,7 @@ dependencies = [ [[package]] name = "anychain-solana" -version = "0.1.7" +version = "0.1.8" dependencies = [ "anychain-core", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index 1cce2ec..40262c5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "anychain-solana" description = "A Rust library for Solana-focused cryptocurrency wallets, enabling seamless transactions on the Solana blockchain" -version = "0.1.7" +version = "0.1.8" keywords = ["solana", "blockchain", "cryptocurrency", "wallet", "transactions"] authors = ["Shawndslee", "cregis.com"] edition = "2021" diff --git a/src/transaction.rs b/src/transaction.rs index 92ace3c..db409d1 100644 --- a/src/transaction.rs +++ b/src/transaction.rs @@ -21,6 +21,7 @@ use std::{fmt, str::FromStr}; pub struct SolanaTransactionParameters { pub token: Option, pub has_token_account: Option, + pub decimals: Option, pub from: SolanaAddress, pub to: SolanaAddress, pub amount: u64, @@ -90,19 +91,43 @@ impl Transaction for SolanaTransaction { let token = Pubkey::from_str(&token.0).unwrap(); let src = get_associated_token_address(&from, &token); let dest = get_associated_token_address(&to, &token); + let decimals = match self.params.decimals { + Some(d) => d, + None => { + return Err(TransactionError::Message( + "'decimal' is not provided".to_string(), + )) + } + }; let ixs = match self.params.has_token_account { Some(true) => { - let ix_transfer = - token_transfer(&id(), &src, &token, &dest, &from, &[], amount, 6) - .unwrap(); + let ix_transfer = token_transfer( + &id(), + &src, + &token, + &dest, + &from, + &[], + amount, + decimals, + ) + .unwrap(); vec![ix_transfer] } Some(false) => { let ix_create_account = create_associated_token_account(&from, &to, &token, &id()); - let ix_transfer = - token_transfer(&id(), &src, &token, &dest, &from, &[], amount, 6) - .unwrap(); + let ix_transfer = token_transfer( + &id(), + &src, + &token, + &dest, + &from, + &[], + amount, + decimals, + ) + .unwrap(); vec![ix_create_account, ix_transfer] } None => { @@ -166,6 +191,7 @@ impl Transaction for SolanaTransaction { let params = SolanaTransactionParameters { token: None, has_token_account: None, + decimals: None, from: SolanaAddress(from.to_string()), to: SolanaAddress(to.to_string()), amount: lamports, @@ -190,10 +216,11 @@ impl Transaction for SolanaTransaction { .map_err(|e| TransactionError::Message(format!("{}", e)))?; match ix { - TokenInstruction::TransferChecked { amount, .. } => { + TokenInstruction::TransferChecked { amount, decimals } => { let params = SolanaTransactionParameters { token: Some(SolanaAddress(token.to_string())), has_token_account: Some(true), + decimals: Some(decimals), from: SolanaAddress(from.to_string()), to: SolanaAddress(dest.to_string()), amount, @@ -247,10 +274,11 @@ impl Transaction for SolanaTransaction { .map_err(|e| TransactionError::Message(format!("{}", e)))?; match ix { - TokenInstruction::TransferChecked { amount, .. } => { + TokenInstruction::TransferChecked { amount, decimals } => { let params = SolanaTransactionParameters { token: Some(SolanaAddress(token_address.to_string())), has_token_account: Some(false), + decimals: Some(decimals), from: SolanaAddress(funding_address.to_string()), to: SolanaAddress(funded_address.to_string()), amount,