From cfda5a3bee91ef8512a5e5fb96ac4ae7ecafde52 Mon Sep 17 00:00:00 2001 From: twwu123 Date: Thu, 16 Jan 2025 15:30:14 +0800 Subject: [PATCH 1/3] return js error for asset name decoding --- packages/sidan-csl-rs/src/core/core_csl.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/sidan-csl-rs/src/core/core_csl.rs b/packages/sidan-csl-rs/src/core/core_csl.rs index 97a4d51..e4c7e0b 100644 --- a/packages/sidan-csl-rs/src/core/core_csl.rs +++ b/packages/sidan-csl-rs/src/core/core_csl.rs @@ -353,7 +353,9 @@ impl MeshCSL { let mint_script = to_csl_script_source(script_source_info)?; mint_builder.add_asset( &csl::MintWitness::new_plutus_script(&mint_script, &mint_redeemer), - &csl::AssetName::new(hex::decode(script_mint.mint.asset_name).unwrap())?, + &csl::AssetName::new(hex::decode(script_mint.mint.asset_name).map_err(|err| { + JsError::from_str(&format!("Invalid asset name found: {}", err)) + })?)?, &csl::Int::from_str(&script_mint.mint.amount.to_string()).unwrap(), )?; Ok(()) @@ -370,7 +372,9 @@ impl MeshCSL { &csl::MintWitness::new_native_script(&csl::NativeScriptSource::new( &csl::NativeScript::from_hex(&script.script_cbor)?, )), - &csl::AssetName::new(hex::decode(native_mint.mint.asset_name).unwrap())?, + &csl::AssetName::new(hex::decode(native_mint.mint.asset_name).map_err(|err| { + JsError::from_str(&format!("Invalid asset name found: {}", err)) + })?)?, &csl::Int::from_str(&native_mint.mint.amount.to_string()).unwrap(), )?, SimpleScriptSource::InlineSimpleScriptSource(script) => mint_builder.add_asset( @@ -382,7 +386,9 @@ impl MeshCSL { ), script.script_size, )), - &csl::AssetName::new(hex::decode(native_mint.mint.asset_name).unwrap())?, + &csl::AssetName::new(hex::decode(native_mint.mint.asset_name).map_err(|err| { + JsError::from_str(&format!("Invalid asset name found: {}", err)) + })?)?, &csl::Int::from_str(&native_mint.mint.amount.to_string()).unwrap(), )?, }; From b490beb539ada81c082dbd1a09903be7d04d69c7 Mon Sep 17 00:00:00 2001 From: twwu123 Date: Fri, 17 Jan 2025 11:51:42 +0800 Subject: [PATCH 2/3] fixes for toValue to return jsError --- packages/sidan-csl-rs/src/core/common/parser.rs | 10 +++++++--- packages/sidan-csl-rs/src/core/core_csl.rs | 12 ++++++------ packages/sidan-csl-rs/src/core/utils/ungroup.rs | 9 +++++---- packages/sidan-csl-rs/src/core/utils/value.rs | 2 +- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/packages/sidan-csl-rs/src/core/common/parser.rs b/packages/sidan-csl-rs/src/core/common/parser.rs index 8c063d5..266e044 100644 --- a/packages/sidan-csl-rs/src/core/common/parser.rs +++ b/packages/sidan-csl-rs/src/core/common/parser.rs @@ -1,3 +1,4 @@ +use cardano_serialization_lib::JsError; use hex; pub fn bytes_to_hex(bytes: &[u8]) -> String { @@ -12,7 +13,10 @@ pub fn string_to_hex(s: &str) -> String { hex::encode(s) } -pub fn hex_to_string(hex: &str) -> Result { - let bytes = hex::decode(hex).unwrap(); - Ok(std::str::from_utf8(&bytes)?.to_string()) +pub fn hex_to_string(hex: &str) -> Result { + let bytes = hex::decode(hex) + .map_err(|err| JsError::from_str(&format!("Invalid hex string found: {}", err)))?; + Ok(std::str::from_utf8(&bytes) + .map_err(|err| JsError::from_str(&format!("Invalid bytes for utf-8 found: {}", err)))? + .to_string()) } diff --git a/packages/sidan-csl-rs/src/core/core_csl.rs b/packages/sidan-csl-rs/src/core/core_csl.rs index e4c7e0b..d663c94 100644 --- a/packages/sidan-csl-rs/src/core/core_csl.rs +++ b/packages/sidan-csl-rs/src/core/core_csl.rs @@ -37,7 +37,7 @@ impl MeshCSL { &csl::TransactionHash::from_hex(&input.tx_in.tx_hash)?, input.tx_in.tx_index, ), - &to_value(&input.tx_in.amount.unwrap()), + &to_value(&input.tx_in.amount.unwrap())?, )?; Ok(()) } @@ -53,7 +53,7 @@ impl MeshCSL { &csl::TransactionHash::from_hex(&input.tx_in.tx_hash)?, input.tx_in.tx_index, ), - &to_value(&input.tx_in.amount.unwrap()), + &to_value(&input.tx_in.amount.unwrap())?, ); Ok(()) } @@ -71,7 +71,7 @@ impl MeshCSL { &csl::TransactionHash::from_hex(&input.tx_in.tx_hash)?, input.tx_in.tx_index, ), - &to_value(&input.tx_in.amount.unwrap()), + &to_value(&input.tx_in.amount.unwrap())?, ); Ok(()) } @@ -122,7 +122,7 @@ impl MeshCSL { &csl::TransactionHash::from_hex(&input.tx_in.tx_hash)?, input.tx_in.tx_index, ), - &to_value(&input.tx_in.amount.unwrap()), + &to_value(&input.tx_in.amount.unwrap())?, ); Ok(()) } @@ -185,7 +185,7 @@ impl MeshCSL { } } - let tx_value = to_value(&output.amount); + let tx_value = to_value(&output.amount)?; let amount_builder = output_builder.next()?; let mut built_output: csl::TransactionOutput = if tx_value.multiasset().is_some() { if tx_value.coin().is_zero() { @@ -238,7 +238,7 @@ impl MeshCSL { &csl::TransactionHash::from_hex(&collateral.tx_in.tx_hash)?, collateral.tx_in.tx_index, ), - &to_value(&collateral.tx_in.amount.unwrap()), + &to_value(&collateral.tx_in.amount.unwrap())?, )?; Ok(()) } diff --git a/packages/sidan-csl-rs/src/core/utils/ungroup.rs b/packages/sidan-csl-rs/src/core/utils/ungroup.rs index 6015e86..b9410ea 100644 --- a/packages/sidan-csl-rs/src/core/utils/ungroup.rs +++ b/packages/sidan-csl-rs/src/core/utils/ungroup.rs @@ -1,4 +1,5 @@ use crate::csl; +use cardano_serialization_lib::JsError; use hex::FromHex; use crate::model::*; @@ -40,7 +41,7 @@ pub fn build_tx_builder(params: Option) -> csl::TransactionBuilder { csl::TransactionBuilder::new(&cfg) } -pub fn to_value(assets: &Vec) -> csl::Value { +pub fn to_value(assets: &Vec) -> Result { let lovelace = assets.iter().find(|asset| asset.unit() == "lovelace"); let mut multi_asset = csl::MultiAsset::new(); @@ -48,8 +49,8 @@ pub fn to_value(assets: &Vec) -> csl::Value { if asset.unit() == "lovelace" { continue; } - let name_bytes = - Vec::::from_hex(&asset.unit()[56..]).expect("Failed to parse hex asset name"); + let name_bytes = Vec::::from_hex(&asset.unit()[56..]) + .map_err(|err| JsError::from_str(&format!("Invalid hex string found: {}", err)))?; multi_asset.set_asset( &csl::ScriptHash::from_hex(&asset.unit()[0..56]).unwrap(), @@ -68,5 +69,5 @@ pub fn to_value(assets: &Vec) -> csl::Value { if assets.len() > 1 || lovelace.is_none() { value.set_multiasset(&multi_asset); } - value + Ok(value) } diff --git a/packages/sidan-csl-rs/src/core/utils/value.rs b/packages/sidan-csl-rs/src/core/utils/value.rs index 7d6499a..161a1d8 100644 --- a/packages/sidan-csl-rs/src/core/utils/value.rs +++ b/packages/sidan-csl-rs/src/core/utils/value.rs @@ -46,7 +46,7 @@ pub fn get_min_utxo_value(output: &Output, coins_per_utxo_size: &u64) -> Result< } } } - let multi_asset = match to_value(&output.amount).multiasset() { + let multi_asset = match to_value(&output.amount)?.multiasset() { Some(multi_asset) => multi_asset, None => csl::MultiAsset::new(), }; From e433f0fe9318e730dee8fe59c98362379543f815 Mon Sep 17 00:00:00 2001 From: twwu123 Date: Fri, 17 Jan 2025 11:52:41 +0800 Subject: [PATCH 3/3] bump ver --- packages/Cargo.lock | 6 +++--- packages/Cargo.toml | 2 +- packages/sidan-csl-rs/Cargo.toml | 2 +- packages/whisky-examples/Cargo.toml | 4 ++-- packages/whisky/Cargo.toml | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/Cargo.lock b/packages/Cargo.lock index 9e8d604..1463a18 100644 --- a/packages/Cargo.lock +++ b/packages/Cargo.lock @@ -2830,7 +2830,7 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "sidan-csl-rs" -version = "0.9.16" +version = "0.9.17" dependencies = [ "cardano-serialization-lib 13.2.0", "cryptoxide", @@ -3460,7 +3460,7 @@ dependencies = [ [[package]] name = "whisky" -version = "0.9.16" +version = "0.9.17" dependencies = [ "async-trait", "cryptoxide", @@ -3485,7 +3485,7 @@ dependencies = [ [[package]] name = "whisky-examples" -version = "0.9.16" +version = "0.9.17" dependencies = [ "actix-cors", "actix-web", diff --git a/packages/Cargo.toml b/packages/Cargo.toml index 182f390..3a9653e 100644 --- a/packages/Cargo.toml +++ b/packages/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -version = "0.9.16" +version = "0.9.17" resolver = "2" members = [ "sidan-csl-rs", diff --git a/packages/sidan-csl-rs/Cargo.toml b/packages/sidan-csl-rs/Cargo.toml index ddf84f7..33074df 100644 --- a/packages/sidan-csl-rs/Cargo.toml +++ b/packages/sidan-csl-rs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sidan-csl-rs" -version = "0.9.16" +version = "0.9.17" edition = "2021" license = "Apache-2.0" description = "Wrapper around the cardano-serialization-lib for easier transaction building, heavily inspired by cardano-cli APIs" diff --git a/packages/whisky-examples/Cargo.toml b/packages/whisky-examples/Cargo.toml index d559515..f6d3427 100644 --- a/packages/whisky-examples/Cargo.toml +++ b/packages/whisky-examples/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "whisky-examples" -version = "0.9.16" +version = "0.9.17" edition = "2021" license = "Apache-2.0" description = "The Cardano Rust SDK, inspired by MeshJS" @@ -13,4 +13,4 @@ path = "src/server.rs" actix-cors = "0.7.0" actix-web = "4.9.0" serde = "1.0.209" -whisky = { version = "=0.9.16", path = "../whisky" } +whisky = { version = "=0.9.17", path = "../whisky" } diff --git a/packages/whisky/Cargo.toml b/packages/whisky/Cargo.toml index 2bd285d..66903bb 100644 --- a/packages/whisky/Cargo.toml +++ b/packages/whisky/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "whisky" -version = "0.9.16" +version = "0.9.17" edition = "2021" license = "Apache-2.0" description = "The Cardano Rust SDK, inspired by MeshJS" @@ -24,7 +24,7 @@ pallas-codec = { version = "0.30.2", features = ["num-bigint"] } pallas-primitives = "0.31.0" pallas-traverse = "0.31.0" maestro-rust-sdk = "1.1.3" -sidan-csl-rs = { version = "=0.9.16", path = "../sidan-csl-rs" } +sidan-csl-rs = { version = "0.9.17", path = "../sidan-csl-rs" } reqwest = "0.12.5" tokio = { version = "1.38.0", features = ["macros", "rt-multi-thread"] }