From e068033073810905ec4445b70f2a66d1126860fb Mon Sep 17 00:00:00 2001 From: aya015757881 <2581015450@qq.com> Date: Tue, 22 Oct 2024 15:22:44 +0800 Subject: [PATCH 1/3] feat: add decimal to parameters --- src/transaction.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/transaction.rs b/src/transaction.rs index 92ace3c..bff1b00 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,10 +91,16 @@ 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) + token_transfer(&id(), &src, &token, &dest, &from, &[], amount, decimals) .unwrap(); vec![ix_transfer] } @@ -101,7 +108,7 @@ impl Transaction for SolanaTransaction { let ix_create_account = create_associated_token_account(&from, &to, &token, &id()); let ix_transfer = - token_transfer(&id(), &src, &token, &dest, &from, &[], amount, 6) + token_transfer(&id(), &src, &token, &dest, &from, &[], amount, decimals) .unwrap(); vec![ix_create_account, ix_transfer] } @@ -166,6 +173,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 +198,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 +256,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, From 742b46668f8f367e0cebef7e18373cd73f048088 Mon Sep 17 00:00:00 2001 From: aya015757881 <2581015450@qq.com> Date: Tue, 22 Oct 2024 15:25:03 +0800 Subject: [PATCH 2/3] refactor: version update --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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" From 88b1e2d878a40e2b93f307a45306bdf8eb283004 Mon Sep 17 00:00:00 2001 From: aya015757881 <2581015450@qq.com> Date: Tue, 22 Oct 2024 15:26:34 +0800 Subject: [PATCH 3/3] style: cargo fmt --- src/transaction.rs | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/src/transaction.rs b/src/transaction.rs index bff1b00..db409d1 100644 --- a/src/transaction.rs +++ b/src/transaction.rs @@ -93,23 +93,41 @@ impl Transaction for SolanaTransaction { 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(), - )), + 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, decimals) - .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, decimals) - .unwrap(); + let ix_transfer = token_transfer( + &id(), + &src, + &token, + &dest, + &from, + &[], + amount, + decimals, + ) + .unwrap(); vec![ix_create_account, ix_transfer] } None => {