Skip to content

Commit

Permalink
chore: error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
pedrxlz committed Sep 3, 2024
1 parent bda5a0d commit fc279d1
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 42 deletions.
22 changes: 19 additions & 3 deletions packages/kos-sdk/src/chains/tron/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -407,20 +407,22 @@ impl TRX {
}

pub fn tx_from_raw(data: &str) -> Result<Transaction, Error> {
let raw_data_bytes = hex::decode(data).unwrap().clone();
let raw_data_bytes = hex::decode(data)?;
let raw_data: kos_proto::tron::transaction::Raw =
kos_proto::from_bytes(raw_data_bytes).unwrap();

let parameter: kos_proto::tron::TransferContract =
kos_proto::unpack_from_option_any(&raw_data.contract[0].parameter).unwrap();
kos_proto::unpack_from_option_any(&raw_data.contract[0].parameter).ok_or(
Error::InvalidTransaction("Failed to unpack transfer contract".to_string()),
)?;

let tx = kos_proto::tron::Transaction {
raw_data: Some(raw_data),
signature: Vec::new(),
ret: Vec::new(),
};

let hash = Hash::from_vec(TRX::hash_transaction(&tx).unwrap()).unwrap();
let hash = Hash::from_vec(TRX::hash_transaction(&tx)?)?;

let sender = address::Address::from_bytes(parameter.owner_address.as_slice()).to_string();

Expand Down Expand Up @@ -656,4 +658,18 @@ mod tests {
let result = TRX::serialize_raw_data_into_hex_string(invalid_tx);
assert!(result.is_err());
}

#[test]
fn test_tx_from_raw() {
let tx = "0a02d8372208e9c73b516bcd78844088c6e8ad9a325a67080112630a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412320a1541e825d52582eec346c839b4875376117904a76cbc12154120ab1300cf70c048e4cf5d5b1b33f59653ed662618c0843d70fdfee4ad9a32";
let result = TRX::tx_from_raw(tx);
assert!(result.is_ok());
let t = result.unwrap();
assert_eq!(t.chain, chain::Chain::TRX);
assert_eq!(t.sender, "TX8h6Df74VpJsXF6sTDz1QJsq3Ec8dABc3");
assert_eq!(
t.hash.to_string(),
"3e6c463b2e88d78e912dee3aa31a14aa71c0e56bbdfbdbba012c8af4e45b8834"
);
}
}
40 changes: 1 addition & 39 deletions packages/kos-sdk/src/models.rs
Original file line number Diff line number Diff line change
Expand Up @@ -203,9 +203,7 @@ impl Transaction {
Chain::ETH => ETH::tx_from_json(data).unwrap(),
Chain::MATIC => todo!(),
Chain::BTC => todo!(),
Chain::NONE => {
panic!("Invalid Chain")
}
Chain::NONE => Err(Error::InvalidTransaction("Invalid chain".to_string())).unwrap(),
}
}
}
Expand Down Expand Up @@ -265,39 +263,3 @@ impl AddressOptions {
self.check_summed
}
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_transaction_from_raw() {
let klv_tx_str = r#"{"RawData":{"Nonce":312,"Sender":"nxNUcG11rraE8m196h+9oX4mTHWVzB7d7AuJaMG+hSQ=","Contract":[{"Parameter":{"type_url":"type.googleapis.com/proto.TransferContract","value":"CiCthZSJePbX7pPJ64gh6PZ+HBo1YPZddPMYyYs/+aLSMxIDS0xWGMCEPQ=="}}],"Data":[""],"KAppFee":1000000,"BandwidthFee":2000000,"Version":1,"ChainID":"MTA4"}}"#;

let klv_tx = Transaction::from_raw(Chain::KLV, klv_tx_str);

assert_eq!(
klv_tx.sender,
"klv1nuf4gurdwkhtdp8jd47758aa59lzvnr4jhxpah0vpwyk3sd7s5jqy6mut7"
);

let tron_tx_str = "0a02d8372208e9c73b516bcd78844088c6e8ad9a325a67080112630a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412320a1541e825d52582eec346c839b4875376117904a76cbc12154120ab1300cf70c048e4cf5d5b1b33f59653ed662618c0843d70fdfee4ad9a32";

let tron_tx = Transaction::from_raw(Chain::TRX, tron_tx_str);

assert_eq!(tron_tx.sender, "TX8h6Df74VpJsXF6sTDz1QJsq3Ec8dABc3");

let eth_tx_str = r#"{
"from":"0x4cbeee256240c92a9ad920ea6f4d7df6466d2cdc",
"maxPriorityFeePerGas":null,"maxFeePerGas":null,
"gas": "0x00",
"value": "0x00",
"data":"0xa9059cbb000000000000000000000000ac4145fef6c828e8ae017207ad944c988ccb2cf700000000000000000000000000000000000000000000000000000000000f4240",
"to":"0xdac17f958d2ee523a2206206994597c13d831ec7",
"nonce":"0x00"}"#;

let eth_tx = Transaction::from_raw(Chain::ETH, eth_tx_str);

assert_eq!(eth_tx.sender, "0x4cBeee256240c92A9ad920ea6f4d7Df6466D2Cdc");
}
}

0 comments on commit fc279d1

Please sign in to comment.