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

wip #118

Merged
merged 3 commits into from
Feb 5, 2025
Merged

wip #118

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
6 changes: 3 additions & 3 deletions packages/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 packages/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[workspace]
version = "0.9.18"
version = "0.9.19"
resolver = "2"
members = [
"sidan-csl-rs",
Expand Down
2 changes: 1 addition & 1 deletion packages/sidan-csl-rs/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "sidan-csl-rs"
version = "0.9.18"
version = "0.9.19"
edition = "2021"
license = "Apache-2.0"
description = "Wrapper around the cardano-serialization-lib for easier transaction building, heavily inspired by cardano-cli APIs"
Expand Down
19 changes: 11 additions & 8 deletions packages/sidan-csl-rs/src/core/tx_parser/mod.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
use crate::core::utils::blake2b256;
use cardano_serialization_lib::JsError;
use csl::Vkeywitnesses;
use serde::{Deserialize, Serialize};
use std::collections::HashSet;

use crate::csl;
use crate::model::{
Asset, Datum, LanguageVersion, TxBuilderBody, Output, OutputScriptSource,
ProvidedScriptSource, UTxO, UtxoInput, UtxoOutput, ValidityRange,
Asset, Datum, LanguageVersion, Output, OutputScriptSource, ProvidedScriptSource, TxBuilderBody,
UTxO, UtxoInput, UtxoOutput, ValidityRange,
};

use super::utils::calculate_tx_hash;

pub struct MeshTxParser {
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TxParser {
pub tx_hash: String,
pub tx_hex: String,
pub tx_fee_lovelace: u64,
Expand All @@ -20,9 +23,9 @@ pub struct MeshTxParser {
pub csl_witness_set: csl::TransactionWitnessSet,
}

impl MeshTxParser {
impl TxParser {
// Constructor method
pub fn new(s: &str) -> Result<MeshTxParser, JsError> {
pub fn new(s: &str) -> Result<TxParser, JsError> {
// TODO: Deserialized into the tx_body
let mut tx_body = TxBuilderBody {
inputs: vec![],
Expand Down Expand Up @@ -59,7 +62,7 @@ impl MeshTxParser {
let signer = required_signers_key_hashes.get(i);
tx_body.required_signatures.push(signer.to_hex())
}
let tx_parser = MeshTxParser {
let tx_parser = TxParser {
tx_hash: calculate_tx_hash(s)?,
tx_hex: s.to_string(),
tx_fee_lovelace: csl_tx.body().fee().to_str().parse::<u64>().unwrap(),
Expand Down Expand Up @@ -213,13 +216,13 @@ fn csl_output_to_mesh_output(output: csl::TransactionOutput) -> Output {
fn test_getting_output_cbor() {
let tx_hex = "84a800848258202c255d39a6d448b408bdb1734c99dfc8c487ac23fd7ee5e8b431a99bc514980a0882582040e1afc8b735a9daf665926554b0e11902e3ed7e4a31a23b917483d4de42c05e04825820ffb4e04fd430ffd1bdf014990c6d63a5303c1745ff228b70823fc757a04b1c6402825820ffb4e04fd430ffd1bdf014990c6d63a5303c1745ff228b70823fc757a04b1c64030182a3005839104477981671d60af19c524824cacc0a9822ba2a7f32586e57c18156215ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cb01821a0016e360a1581c5066154a102ee037390c5236f78db23239b49c5748d3d349f3ccf04ba144555344581a0243d580028201d81843d87980a300583910634a34d9c1ec5dd0cae61e4c86a4e85214bafdc80c57214fc80745b55ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cb01821a0075b8d4a1581c5066154a102ee037390c5236f78db23239b49c5748d3d349f3ccf04ba144555344581a1298be00028201d81858b1d8799fd8799fd87a9f581c57f7ddf8c822daad03fd80823153a61d913e5c9147bd478e3ccd70b3ffd8799fd8799fd8799f581c5ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cbffffffffd8799fd87a9f581c4477981671d60af19c524824cacc0a9822ba2a7f32586e57c1815621ffd8799fd8799fd8799f581c5ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cbffffffffd87a801a000985801a1dcd6500ff021a0004592c09a00b5820a68f004e69dfc4ed4ff789ceb9be63e9f2412e8d3d7fa0b0cb19e509c927a03c0d818258203fbdf2b0b4213855dd9b87f7c94a50cf352ba6edfdded85ecb22cf9ceb75f814070e82581cd161d64eef0eeb59f9124f520f8c8f3b717ed04198d54c8b17e604ae581c5ca51b304b1f79d92eada8c58c513e969458dcd27ce4f5bc47823ffa1286825820ac7744adce4f25027f1ca009f5cab1d0858753e62c6081a3a3676cfd5333bb03008258202c255d39a6d448b408bdb1734c99dfc8c487ac23fd7ee5e8b431a99bc514980a0882582040e1afc8b735a9daf665926554b0e11902e3ed7e4a31a23b917483d4de42c05e04825820ffb4e04fd430ffd1bdf014990c6d63a5303c1745ff228b70823fc757a04b1c6402825820ffb4e04fd430ffd1bdf014990c6d63a5303c1745ff228b70823fc757a04b1c6403825820efe6fbbdd6b993d96883b96c572bfcaa0a4a138c83bd948dec1751d1bfda09b300a30082825820aa8ce9e908f525c3b700a65669430ec68ca19615e7309e25bb6fa883964cfa9f5840a023ea4e2a266fca669cfdffe3718718c2b2c6e3fbc90da58785079583d94be98f20d2b87327edb940984a739c1fdb25e20e6b04374db299b4de66369208de038258207f4747ca0c20a1e5c28716c4a10fffbcbe8fe6253cb427ae2f0e24d231a9808458402aa02a8a0f2129d727e44cd21f4699b1b1deb43c974ebc6f484b3809e0b5a417e864c43c9be5327fba31fa8146c744c487b00748cb63daf3dc60114850321d0d03800584840000d87980821a000382f61a04d45a03840001d87980821a000382f61a04d45a03840002d87980821a000382f61a04d45a03840003d87980821a000382f61a04d45a03f5f6";
// let tx_hex = "84a800848258202c255d39a6d448b408bdb1734c99dfc8c487ac23fd7ee5e8b431a99bc514980a098258205150964d0bc32df047f1eb99c35f14e351f21b1303795ffe2b58ebf7de58f67b0082582085aa98980be06b0f5d926bee007301ba7a96d448dfa9dced091fb73b0bcd07bb03825820879f68fef00fa676abcfba0396916299eddbf29e1103442aee031b383ee0f3ad060182a3005839104477981671d60af19c524824cacc0a9822ba2a7f32586e57c18156215ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cb01821a0016e360a1581c5066154a102ee037390c5236f78db23239b49c5748d3d349f3ccf04ba144555344581a0243d580028201d81843d87980a300583910634a34d9c1ec5dd0cae61e4c86a4e85214bafdc80c57214fc80745b55ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cb01821a00756f63a1581c5066154a102ee037390c5236f78db23239b49c5748d3d349f3ccf04ba144555344581a1298be00028201d81858b1d8799fd8799fd87a9f581c57f7ddf8c822daad03fd80823153a61d913e5c9147bd478e3ccd70b3ffd8799fd8799fd8799f581c5ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cbffffffffd8799fd87a9f581c4477981671d60af19c524824cacc0a9822ba2a7f32586e57c1815621ffd8799fd8799fd8799f581c5ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cbffffffffd87a801a000985801a1dcd6500ff021a0004a29d09a00b58205eb15f7d48931475604b5491a294f5d914ecf03c41a520d80087e2938910d9e70d818258203fbdf2b0b4213855dd9b87f7c94a50cf352ba6edfdded85ecb22cf9ceb75f814070e82581cd161d64eef0eeb59f9124f520f8c8f3b717ed04198d54c8b17e604ae581c5ca51b304b1f79d92eada8c58c513e969458dcd27ce4f5bc47823ffa128682582085aa98980be06b0f5d926bee007301ba7a96d448dfa9dced091fb73b0bcd07bb038258202c255d39a6d448b408bdb1734c99dfc8c487ac23fd7ee5e8b431a99bc514980a09825820efe6fbbdd6b993d96883b96c572bfcaa0a4a138c83bd948dec1751d1bfda09b3008258205150964d0bc32df047f1eb99c35f14e351f21b1303795ffe2b58ebf7de58f67b00825820879f68fef00fa676abcfba0396916299eddbf29e1103442aee031b383ee0f3ad06825820ac7744adce4f25027f1ca009f5cab1d0858753e62c6081a3a3676cfd5333bb0300a30082825820aa8ce9e908f525c3b700a65669430ec68ca19615e7309e25bb6fa883964cfa9f5840904f798c3cbda08e499945f9e00e6b1a968166de063ad3ecb16139a0c5dc10541cc7a33304c60ed7fb350938d2b11fcacb56baf84330473b8544b669640229028258207f4747ca0c20a1e5c28716c4a10fffbcbe8fe6253cb427ae2f0e24d231a98084584016b15d782922177e29e1eae8f7f173db80508692292b6ff3e63c7d33ed1cc231bac0acbb963503e75b96b7c541189508e050fb64034ea4d47a13115f7483ce0d03800584840000d87980821a00045e1e1a0609fd16840001d87980821a00045e1e1a0609fd16840002d87980821a00045e1e1a0609fd16840003d87980821a00045e1e1a0609fd16f5f6";
let tx_parser = MeshTxParser::new(tx_hex).unwrap();
let tx_parser = TxParser::new(tx_hex).unwrap();
let tx_outs_cbor = tx_parser.get_tx_outs_cbor();
println!("{:?}", tx_outs_cbor);
}

#[test]
fn test_check_required_signers() {
let parser = MeshTxParser::new("84a80082825820604943e070ffbf81cc09bb2942029f5f5361108a3c0b96a7309e6aa70370ad9800825820604943e070ffbf81cc09bb2942029f5f5361108a3c0b96a7309e6aa70370ad98010d81825820604943e070ffbf81cc09bb2942029f5f5361108a3c0b96a7309e6aa70370ad9801128182582004b9070a30bd63abaaf59a3c48a1575c4127bb0edb00ecd5141fd18a85c721aa000181a200581d601fd5bab167338971d92b4d8f0bdf57d889903e6e934e7ea38c7dadf1011b00000002529898c810a200581d601fd5bab167338971d92b4d8f0bdf57d889903e6e934e7ea38c7dadf1011b0000000252882db4111a000412f1021a0002b74b0b5820775d0cf3c95993f6210e4410e92f72ebc3942ce9c1433694749aa239e5d13387a200818258201557f444f3ae6e61dfed593ae15ec8dbd57b8138972bf16fde5b4c559f41549b5840729f1f14ef05b7cf9b0d7583e6777674f80ae64a35bbd6820cc3c82ddf0412ca1d751b7d886eece3c6e219e1c5cc9ef3d387a8d2078f47125d54b474fbdfbd0105818400000182190b111a000b5e35f5f6").unwrap();
let parser = TxParser::new("84a80082825820604943e070ffbf81cc09bb2942029f5f5361108a3c0b96a7309e6aa70370ad9800825820604943e070ffbf81cc09bb2942029f5f5361108a3c0b96a7309e6aa70370ad98010d81825820604943e070ffbf81cc09bb2942029f5f5361108a3c0b96a7309e6aa70370ad9801128182582004b9070a30bd63abaaf59a3c48a1575c4127bb0edb00ecd5141fd18a85c721aa000181a200581d601fd5bab167338971d92b4d8f0bdf57d889903e6e934e7ea38c7dadf1011b00000002529898c810a200581d601fd5bab167338971d92b4d8f0bdf57d889903e6e934e7ea38c7dadf1011b0000000252882db4111a000412f1021a0002b74b0b5820775d0cf3c95993f6210e4410e92f72ebc3942ce9c1433694749aa239e5d13387a200818258201557f444f3ae6e61dfed593ae15ec8dbd57b8138972bf16fde5b4c559f41549b5840729f1f14ef05b7cf9b0d7583e6777674f80ae64a35bbd6820cc3c82ddf0412ca1d751b7d886eece3c6e219e1c5cc9ef3d387a8d2078f47125d54b474fbdfbd0105818400000182190b111a000b5e35f5f6").unwrap();
assert!(parser.check_all_required_signers());
}
4 changes: 2 additions & 2 deletions packages/sidan-csl-rs/src/core/utils/evaluator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use std::collections::HashMap;
use uplc::tx::SlotConfig;

use crate::core::constants::get_cost_models_from_network;
use crate::core::tx_parser::MeshTxParser;
use crate::core::tx_parser::TxParser;
use crate::core::utils::phase_two::{eval_phase_two, PhaseTwoEvalResult};
use crate::csl::{Address, JsError};
use crate::model::{
Expand Down Expand Up @@ -112,7 +112,7 @@ pub fn evaluate_tx_scripts(
let tx_outs: Vec<UTxO> = additional_txs
.iter()
.flat_map(|tx| {
let parsed_tx = MeshTxParser::new(tx).unwrap();
let parsed_tx = TxParser::new(tx).unwrap();
println!(
"txout: {:?}",
&parsed_tx.get_tx_outs_utxo().unwrap().clone()
Expand Down
2 changes: 2 additions & 0 deletions packages/sidan-csl-rs/src/wasm/mod.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
use crate::*;
mod transaction;
mod txbuilder;
mod txparser;
use cardano_serialization_lib::JsError;
pub use transaction::*;
pub use txbuilder::*;
pub use txparser::*;

#[wasm_bindgen]
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
Expand Down
13 changes: 13 additions & 0 deletions packages/sidan-csl-rs/src/wasm/txparser.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
use serde_json::json;
use wasm::WasmResult;

use crate::{core::tx_parser::TxParser, *};

#[wasm_bindgen]
pub fn js_parse_tx_body(tx_hex: &str) -> WasmResult {
let tx_parser = TxParser::new(tx_hex);
match tx_parser {
Err(e) => WasmResult::new_error("failure".to_string(), format!("{:?}", e)),
Ok(parser) => WasmResult::new("success".to_string(), (json!(parser)).to_string()),
}
}
4 changes: 2 additions & 2 deletions packages/whisky-examples/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "whisky-examples"
version = "0.9.18"
version = "0.9.19"
edition = "2021"
license = "Apache-2.0"
description = "The Cardano Rust SDK, inspired by MeshJS"
Expand All @@ -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.18", path = "../whisky" }
whisky = { version = "=0.9.19", path = "../whisky" }
4 changes: 2 additions & 2 deletions packages/whisky/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "whisky"
version = "0.9.18"
version = "0.9.19"
edition = "2021"
license = "Apache-2.0"
description = "The Cardano Rust SDK, inspired by MeshJS"
Expand All @@ -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.18", path = "../sidan-csl-rs" }
sidan-csl-rs = { version = "0.9.19", path = "../sidan-csl-rs" }
reqwest = "0.12.5"
tokio = { version = "1.38.0", features = ["macros", "rt-multi-thread"] }

Expand Down
6 changes: 3 additions & 3 deletions packages/whisky/src/provider/maestro.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ use maestro_rust_sdk::models::transactions::RedeemerEvaluation;
use sidan_csl_rs::csl::JsError;
use sidan_csl_rs::model::{Network, UTxO};
use sidan_csl_rs::{
core::{tx_parser::MeshTxParser, utils::calculate_tx_hash},
core::{tx_parser::TxParser, utils::calculate_tx_hash},
model::{Action, Budget, RedeemerTag},
};
use uplc::tx::SlotConfig;
use std::error::Error;
use uplc::tx::SlotConfig;

use crate::service::Evaluator;

Expand Down Expand Up @@ -140,7 +140,7 @@ impl Evaluator for MaestroProvider {
let tx_out_cbors: Vec<AdditionalUtxo> = additional_txs
.iter()
.flat_map(|tx| {
let parsed_tx = MeshTxParser::new(tx);
let parsed_tx = TxParser::new(tx);
parsed_tx
.unwrap() //TODO: add error handling
.get_tx_outs_cbor()
Expand Down
Loading