diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 686fa84..65f6513 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -665,9 +665,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "pallas-addresses" -version = "0.33.0" +version = "0.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18f5f4dd205316335bf8eef77227e01a8a00b1fd60503d807520e93dd0362d0e" +checksum = "b562be9b1f713ac8935bd61197c2d5f7b054574bb45081545866df99428d8176" dependencies = [ "base58", "bech32 0.9.1", @@ -681,9 +681,9 @@ dependencies = [ [[package]] name = "pallas-codec" -version = "0.33.0" +version = "0.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2737b05f0dbb6d197feeb26ef15d2567e54833184bd469f5655a0537da89fa" +checksum = "afff0c114bc5ff0e5bf95b6b151a664da57c259ab266bcff6587faad91a064d2" dependencies = [ "hex", "minicbor", @@ -694,9 +694,9 @@ dependencies = [ [[package]] name = "pallas-crypto" -version = "0.33.0" +version = "0.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0368945cd093e550febe36aef085431b1611c2e9196297cd70f4b21a4add054c" +checksum = "89e25299b6992b179144464e410680cf096919f43cf97f9a6fea2f7be5e1cadd" dependencies = [ "cryptoxide", "hex", @@ -709,9 +709,9 @@ dependencies = [ [[package]] name = "pallas-primitives" -version = "0.33.0" +version = "0.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb2acde8875c43446194d387c60fe2d6a127e4f8384bef3dcabd5a04e9422429" +checksum = "857f6908501bcb6f794f2c81674eb0f69414e66399739bbd808aa178c17c2001" dependencies = [ "base58", "bech32 0.9.1", @@ -725,9 +725,9 @@ dependencies = [ [[package]] name = "pallas-traverse" -version = "0.33.0" +version = "0.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab64895a0d94fed1ef2d99dd37e480ed0483e91eb98dcd2f94cc614fb9575173" +checksum = "88753e28c456fe38c6a4d84ff8847a25bf564753c255a1d6d211d9fd6a42380e" dependencies = [ "hex", "itertools 0.13.0", @@ -806,9 +806,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -1016,12 +1016,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - [[package]] name = "schemars" version = "0.8.21" @@ -1080,10 +1074,11 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.210" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ + "serde_core", "serde_derive", ] @@ -1098,15 +1093,24 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + [[package]] name = "serde_derive" -version = "1.0.210" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 3.0.3", ] [[package]] @@ -1122,14 +1126,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", - "ryu", "serde", + "serde_core", + "zmij", ] [[package]] @@ -1232,6 +1237,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "tap" version = "1.0.1" @@ -1299,8 +1315,8 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "uplc" -version = "1.1.19" -source = "git+https://github.com/aiken-lang/aiken.git?rev=e525483dd81e10861911a4ec320f05b30e586324#e525483dd81e10861911a4ec320f05b30e586324" +version = "1.1.23" +source = "git+https://github.com/aiken-lang/aiken.git?rev=8949565a9969278846ffefe30bc3b892029dd318#8949565a9969278846ffefe30bc3b892029dd318" dependencies = [ "bitvec", "blst", @@ -1472,3 +1488,9 @@ dependencies = [ "quote", "syn 2.0.77", ] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 39ebbe5..1c7902b 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -35,7 +35,10 @@ itertools = "0.10.1" rand = "0.8.4" schemars = "0.8.8" serde = { version = "1.0", features = ["derive"] } -uplc = { git = "https://github.com/aiken-lang/aiken.git", rev = "e525483dd81e10861911a4ec320f05b30e586324", default-features = false } +# Only `apply_params_to_script` is used here — script evaluation lives in +# @minswap/wasm-helpers so a single uplc build decides ex-units. Keep this +# revision in step with that package. +uplc = { git = "https://github.com/aiken-lang/aiken.git", rev = "8949565a9969278846ffefe30bc3b892029dd318", default-features = false } # non-wasm [target.'cfg(not(all(target_arch = "wasm32", not(target_os = "emscripten"))))'.dependencies] diff --git a/rust/src/tx_builder.rs b/rust/src/tx_builder.rs index 895b0b7..018adee 100644 --- a/rust/src/tx_builder.rs +++ b/rust/src/tx_builder.rs @@ -10,7 +10,6 @@ use crate::tx_builder::tx_inputs_builder::{get_bootstraps, TxInputsBuilder}; use linked_hash_map::LinkedHashMap; use std::collections::{BTreeMap, BTreeSet, HashSet}; use tx_inputs_builder::{PlutusWitness, PlutusWitnesses}; -use uplc::tx::eval_phase_two_raw; #[wasm_bindgen] pub fn apply_params_to_plutus_script( @@ -23,58 +22,6 @@ pub fn apply_params_to_plutus_script( } } -#[wasm_bindgen] -pub fn get_ex_units( - tx: &Transaction, - utxos: &TransactionUnspentOutputs, - cost_mdls: &Costmdls, - max_ex_units: &ExUnits, - zero_time: BigNum, - zero_slot: BigNum, - slot_length: u32, -) -> Result { - let tx_bytes = tx.to_bytes(); - - let utxos_bytes: Vec<(Vec, Vec)> = utxos - .0 - .iter() - .map(|utxo| (utxo.input.to_bytes(), utxo.output.to_bytes())) - .collect(); - - let cost_mdls_bytes = cost_mdls.to_bytes(); - - let initial_budget = ( - from_bignum(&max_ex_units.steps()), - from_bignum(&max_ex_units.mem()), - ); - - let sc = ( - from_bignum(&zero_time), - from_bignum(&zero_slot), - slot_length, - ); - - let result = eval_phase_two_raw( - &tx_bytes, - &utxos_bytes, - Some(&cost_mdls_bytes), - initial_budget, - sc, - false, - |_| (), - ); - - match result { - Ok(redeemers_bytes) => Ok(Redeemers( - redeemers_bytes - .iter() - .map(|(r, _)| Redeemer::from_bytes(r.clone()).unwrap()) - .collect(), - )), - Err(err) => Err(JsError::from_str(&err.to_string())), - } -} - // comes from witsVKeyNeeded in the Ledger spec fn witness_keys_for_cert(cert_enum: &Certificate) -> RequiredSigners { let mut set = RequiredSigners::new(); @@ -6128,38 +6075,6 @@ mod tests { assert_eq!(hex::encode(r2), "a107814e4d01000033222220051200120011"); } - #[test] - fn test_get_ex_unit_hello_world() { - let transaction = Transaction::from_hex("84aa00838258202d53b05adccb4db639c1c826acca02ec9a4bbdcacbb88bc3f5eab652e9e71d76008258202d53b05adccb4db639c1c826acca02ec9a4bbdcacbb88bc3f5eab652e9e71d7601825820b81e90c259bca3d7252f3c529115e4a37a10d320525ea4285c16c0379a2da99000018282581d60f1edcccaa9054e89134b2850b3e4ea8d9ea28748f42f57809af4491d1a002dc6c082581d60f1edcccaa9054e89134b2850b3e4ea8d9ea28748f42f57809af4491d1a00c5b799021a000791ad031a01da0e410b582089249510f9a597a83513f27a8344edd06cc3490cbdb0103963dc7eb20ceb3dfe0d81825820b81e90c259bca3d7252f3c529115e4a37a10d320525ea4285c16c0379a2da990000e81581cf1edcccaa9054e89134b2850b3e4ea8d9ea28748f42f57809af4491d1082581d60f1edcccaa9054e89134b2850b3e4ea8d9ea28748f42f57809af4491d1a004c4b40111a004c4b4012818258200f6e76c45462e1696b1b5db05de5c7717a2d79020cef05c9fea5e315984f7d6b00a10581840000d8799f4d48656c6c6f2c20576f726c6421ff821a002dc6c01a77359400f5f6").unwrap(); - let costModel = Costmdls::from_hex("a10198af1a0003236119032c01011903e819023b00011903e8195e7104011903e818201a0001ca761928eb041959d818641959d818641959d818641959d818641959d818641959d81864186418641959d81864194c5118201a0002acfa182019b551041a000363151901ff00011a00015c3518201a000797751936f404021a0002ff941a0006ea7818dc0001011903e8196ff604021a0003bd081a00034ec5183e011a00102e0f19312a011a00032e801901a5011a0002da781903e819cf06011a00013a34182019a8f118201903e818201a00013aac0119e143041903e80a1a00030219189c011a00030219189c011a0003207c1901d9011a000330001901ff0119ccf3182019fd40182019ffd5182019581e18201940b318201a00012adf18201a0002ff941a0006ea7818dc0001011a00010f92192da7000119eabb18201a0002ff941a0006ea7818dc0001011a0002ff941a0006ea7818dc0001011a0011b22c1a0005fdde00021a000c504e197712041a001d6af61a0001425b041a00040c660004001a00014fab18201a0003236119032c010119a0de18201a00033d7618201979f41820197fb8182019a95d1820197df718201995aa18201a0223accc0a1a0374f693194a1f0a1a02515e841980b30a").unwrap(); - let mut utxos = TransactionUnspentOutputs::new(); - utxos.add( - &TransactionUnspentOutput::from_hex("828258202d53b05adccb4db639c1c826acca02ec9a4bbdcacbb88bc3f5eab652e9e71d760182581d60f1edcccaa9054e89134b2850b3e4ea8d9ea28748f42f57809af4491d1a0034b2c6").unwrap() - ); - utxos.add( - &TransactionUnspentOutput::from_hex("82825820b81e90c259bca3d7252f3c529115e4a37a10d320525ea4285c16c0379a2da9900082581d60f1edcccaa9054e89134b2850b3e4ea8d9ea28748f42f57809af4491d1a00989680").unwrap() - ); - utxos.add( - &TransactionUnspentOutput::from_hex("828258202d53b05adccb4db639c1c826acca02ec9a4bbdcacbb88bc3f5eab652e9e71d7600a300581d7040c46ca36d4e8a415d689208735a24f2651e640b46aed5f51cf7199b011a002dc6c0028201d8185822d8799f581cf1edcccaa9054e89134b2850b3e4ea8d9ea28748f42f57809af4491dff").unwrap() - ); - utxos.add( - &TransactionUnspentOutput::from_hex("828258200f6e76c45462e1696b1b5db05de5c7717a2d79020cef05c9fea5e315984f7d6b00a300583900016ad31ade77490b9967a9ae358b0a035021d50eb38a7c130ef65b3df9e9edfb460fae49f9754b2126513f4b0dacdc86ba8c90b562764fd3011a0030aa9803d8185901fb82025901f65901f30100003232323232323232323232322223232533300a3232533300c002100114a066646002002444a66602600429404c8c94ccc040cdc78010018a5113330050050010033016003375c60280046eb0cc01cc024cc01cc024011200048040dd71980398048012400066e3cdd7198031804001240009110d48656c6c6f2c20576f726c642100149858cc028c94ccc028cdc3a400000226464a66602260260042930a99807249334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c6022002601000a2a660189212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e7400163008004004330093253330093370e900000089919299980818090010a4c2a6601a9201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c6020002600e0062a660169212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300700200233001001480008888cccc01ccdc38008018069199980280299b8000448008c03c0040080088c01cdd5000918029baa0015734ae6d5ce2ab9d5573caae7d5d0aba201").unwrap() - ); - let maxExUnits = ExUnits::from_hex("821a00d59f801b00000002540be400").unwrap(); - let redeemer = get_ex_units( - &transaction, - &utxos, - &costModel, - &maxExUnits, - BigNum::from_str("1666656000000").unwrap(), - BigNum::from_str("0").unwrap(), - 1000 - ).unwrap(); - assert_eq!(redeemer.len(), 1); - let redeemer = redeemer.get(0); - println!("redeemer: {}", redeemer.to_json().unwrap()); - } - #[test] fn test_adding_plutus_script_witnesses() { let mut tx_builder = create_reallistic_tx_builder();