Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add decimal to parameters #16

Merged
merged 3 commits into from
Oct 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading