Skip to content

Commit

Permalink
Merge pull request #16 from 0xcregis/15-add-decimal-of-spl-token-to-s…
Browse files Browse the repository at this point in the history
…olana-parameters

feat: add decimal to parameters
  • Loading branch information
loki-cmu authored Oct 22, 2024
2 parents 47a0b87 + 88b1e2d commit 04a5a89
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 10 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
44 changes: 36 additions & 8 deletions src/transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ use std::{fmt, str::FromStr};
pub struct SolanaTransactionParameters {
pub token: Option<SolanaAddress>,
pub has_token_account: Option<bool>,
pub decimals: Option<u8>,
pub from: SolanaAddress,
pub to: SolanaAddress,
pub amount: u64,
Expand Down Expand Up @@ -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 => {
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit 04a5a89

Please sign in to comment.