Skip to content

feat: generate random transactions for the eval endpoint#340

Merged
ginnun merged 4 commits intofeat/tx-evaluationfrom
feat/tx-testgen
Jul 14, 2025
Merged

feat: generate random transactions for the eval endpoint#340
ginnun merged 4 commits intofeat/tx-evaluationfrom
feat/tx-testgen

Conversation

@michalrus
Copy link
Copy Markdown
Member

@michalrus michalrus commented Jul 3, 2025

Resolves #320.

On top of:

Context

This is a proposal of how to connect the new Conway transaction (and evaluation) generator to the Rust property tests.

The stage I stopped at is below – this is also why the tests are failing:

     // TODO: okay, so now we have `tx_cbor`, `AdditionalUtxoSet`, and the `expected` JSON. 
     // TODO: it’s time to call `crate::cbor::evaluate_tx()`, but it needs a `cardano-node` 👀 

check_generated_cases(case_type, num_cases, generator_size, 5, seed, |case| {
let tx_cbor = case.cbor.clone();
let json: TestCaseJson = serde_json::from_value(case.json).unwrap();
let expected = json.execution_units;
let utxo_cbor = json.utxo_set_cbor;
let utxo: AdditionalUtxoSet =
utxo_decoder::decode_utxo(&hex::decode(&utxo_cbor).unwrap()).unwrap();
// TODO: okay, so now we have `tx_cbor`, `AdditionalUtxoSet`, and the `expected` JSON.
// TODO: it’s time to call `crate::cbor::evaluate_tx()`, but it needs a `cardano-node` 👀
Err(format!(
"Unimplemented:\n Transaction: {tx_cbor}\n Expected: {}\n UTxO: {utxo:?}",
serde_json::to_string_pretty(&expected)
.unwrap()
.replace("\n", "\n ")
))
})

Sample test run

- Unimplemented:
  Transaction: 84ac00d90102838258200cc43104aa4d1836139e01b29385a899947fd61a4b3f872e3706b4ab2ed6f4591837825820a3c7b691e7ddb11fbb0a068feeb8dc4db6aaf166d2ad78c647b1361b23ab8f531850825820fca46c26e8b0f4a048f0382ce4bf757c782caf3d167d33a8a88099e935543a94183a0dd90102828258203647c115ddb17912d25f998621a6241b211f605316611a85cebbd211d73552e3197a13825820849eba4071e71cb385014cbafc209720e9809663b1ab9c9bfa9645eaf31154b8191c3012d901028382582011a5fcc3b187044e9a4bc2e9d79f24d2d635d7e0876dec1010e54ff1712d41a6183382582041f0a1fbb12fa52def9f17e8c3b16f985509f8bad92acafe7c71f6f61a818fb61881825820be2812fdd3ee06b8145ea74cbaa239b9216713b11a1d03957a9f1e5cef12c2c1185d01828258392038b112b33ca4f9c906ad4576b7a24f19d39a2b2c2af606842a018a903c3b41b6bbd2d9e2aaf12e7bea35f75489c777faa57f44dbf3992782128258390032dc8edfe2943a61d2a652c70c064af9604d03203e37b586bde61be777c2eb798b030764f87e52513fe54957506c8d258e10edd5ddd9ee7e0510a400583910195156f87f299562300852de1f1699d574e501b4ba886eab3ad6cf93617e673f3d1e1452f3c389e0ea93be841a00ca4ec5f3cdb68d55e4550101028201d818412003d818584a82008202838204190bde8200581cd0b796d29a999e2c41e730219cbbed91324f0f2662396383118f9e598200581c2f7708d1f91198658653c4368979fd888ecb64b526bcb98b2d498127111a058203ed021a0017780e031923d304d90102848a03581c3c71713039dd0619fe7488b71bf7fed1f797506d4570fac4162657ee5820d6432793bf69d9b5df481bd5dd4bb85a172bdbaeb3162bd0ef7cc106409dafe00807d81e82190cbf192710581df0bc6b4a3e125deb1c17c3fd0a5856e4902a08dea49fab5fbb3fb45437d901028080f682008200581cc05bcd9efae7450c333789e9b089eddad3cd79da6a7e0c6577bfd01482008201581c20b4c7f51f75059ad61ddd11efcbb7fcbe3195e6a199ed0ab0ed606883028201581c20b4c7f51f75059ad61ddd11efcbb7fcbe3195e6a199ed0ab0ed6068581c047de2e7f7eccead977b6595eda02d5603ad8180f2acafa629131f5708191ec10b582075115c07c5d279e4b97268e06f5a7b0a66b421ddae42a582365e0f342d37b1ef0f00a400d9010288825820c80cd3d5dbccb2a834b2cf5df94e8a900ff9c895154e889a3f8e814435523c685840b88a35b0efef7ca942568d42ca97a8eb245859acaba2602046aba53dca91deeb814ccc374b4ec5822dcac9f319d18cbb948815edfa1ce1cdbe4360de244d3700825820d43e81e121b1c89dbe308f355cafb6a923fd5d52e496f2d73fc3b63793d0a6f25840f6f0140778ec4822dd539c8b5572e9b2077b54b1058d4cb955242480005553402e307d7c1b1de28538cf0560128090d89138b9179627d48891e139545ddf8305825820ce6fde01205589ebd1afbb16021e9b59d14e1b0e9ee750e543640aca9fce86725840a750eb5bbfc791d7e92a36eded437c4220e249a2796d226e9df1d8d5d29c61319ad46d66d2d2cd12f8f9444e4f3b3cc8aee7cda88b29c3464704fdb6ffa14c0b82582096929cd06cbb290dde6613aa121aa34458a69e527af9b840e7b69820f90991245840484292242ff41312c63161bf9696245ecd1784a4d8e6bccef6d6eb964904b3468779863f9d42ed661573dbac9dc75bdcdb9e5386567aa41bfec137ce3245e8028258205630cafacb8473b7305e4079549a89afa8ff6cfb142dbaa1a8c76a80e7f4e1cd5840a9cd555fa97a3006afb2da6f67e91c18820345c3e2c00182d4621eb16b4c4df30448d2c03cc68b4b0bc330b52e0b9a97fb273d34e51dbd0e190b66a7692e9d0a825820f2a68c424f1cc3a3cd268ce2ee0f947b5b2d5b20df3efba0086690de176e27905840f90bda6f7fb07957641629c110803628a926b97fbc70879163747ae90f287e2685adf53d85cde26d674ec3385dcf33129a0610c0136296125a63e2dab15a8b038258206d720c431cab37fe04dc50b9daa77d38b89b6182eb820a481c3a0ee057c7aad3584044b579440061fae191dfa9e68c99b5fb6bc1b2c8472ab8c056aee0ab3c375593c636915627d4a3f6b5b807ca5ada6833e330dd4094ba013b901f07d613165a0d8258205c478e100651339d028193fcbc4038c6c4d0493fd7a907d6c5b5f673f6dcf7805840b0267ceabd31f4929ebc9a7fc35bcc3bec1aea6f9e61f589f8a4f0507477361fe3111f262c95b1e57354f9fa474d7934ff9b9a7952929593bdf9909c21e2150b01d901028282041907558200581c95797f099eb62ffec95935b876e58f76dcdfb4ee6ca85bb66878de1e06d901028148470100002220010105a18200018280821b2297ac5d7e5a47341b01b4a01b3bbfefc3f5f6
  Expected: [
    {
      "budget": {
        "cpu": 160100,
        "memory": 1100
      },
      "validator": "spend:1"
    }
  ]
  UTxO: [(TxIn { tx_id: "0cc43104aa4d1836139e01b29385a899947fd61a4b3f872e3706b4ab2ed6f459", index: 55 }, TxOut { address: "addr_test1zq8crypfgq804t34k749wnl6xzps0c0lrfquz5cejphzm0nhct4hnzcrqaj0sljj2yl72j2h2pkg6fvwzrkathweaelq5nn8sw", value: Value { coins: 1538080, assets: None }, datum_hash: None, datum: None, script: None }), (TxIn { tx_id: "11a5fcc3b187044e9a4bc2e9d79f24d2d635d7e0876dec1010e54ff1712d41a6", index: 51 }, TxOut { address: "addr1qr37eejr55z6pvshd7msfx9zpygvgnvmr06xwfkmt7v4gsgmndawpl0fqkwzz02hjx3yr0ce64wys3l626kg59n7n5wq49k3c3", value: Value { coins: 9, assets: None }, datum_hash: None, datum: None, script: None }), (TxIn { tx_id: "3647c115ddb17912d25f998621a6241b211f605316611a85cebbd211d73552e3", index: 31251 }, TxOut { address: "addr1qruw9c6v5eefhudgq82k9u7qa5wlwf67jx5de5nh6zkfjll4jd407jzfuuc3aj07q0ewfjd3whst3lfyhrkt2886dzls43f9mq", value: Value { coins: 92406758, assets: None }, datum_hash: None, datum: None, script: None }), (TxIn { tx_id: "41f0a1fbb12fa52def9f17e8c3b16f985509f8bad92acafe7c71f6f61a818fb6", index: 129 }, TxOut { address: "addr_test1xzfyh9wdq7pjg3tglr9h59pflj3hp20ekxyl26d8egcq5quh30pdmycznyh62h009p60gfhg8j2rs0xa43t3qedtljysp80xpj", value: Value { coins: 6, assets: None }, datum_hash: None, datum: None, script: None }), (TxIn { tx_id: "849eba4071e71cb385014cbafc209720e9809663b1ab9c9bfa9645eaf31154b8", index: 7216 }, TxOut { address: "addr1qrag0x3cyg05yy95a900u9rf6qvz079zsf0dn875ykda5jkcn9q5uzd9lhca7knjqmgky8acdxv2d7z0kjq50u9wwj0qht8kha", value: Value { coins: 8, assets: None }, datum_hash: None, datum: None, script: None }), (TxIn { tx_id: "a3c7b691e7ddb11fbb0a068feeb8dc4db6aaf166d2ad78c647b1361b23ab8f53", index: 80 }, TxOut { address: "addr_test1xqv4z4hc0u5e2c3sppfdu8ckn82hfegpkjagsm4t8ttvlyafl96p7l6kg4l4g4q25wgnql3mup0mjwv34rw9wklnfu7s88uepk", value: Value { coins: 5, assets: None }, datum_hash: None, datum: Some("8201d8184180"), script: Some(PlutusV2("49480100002222200101")) }), (TxIn { tx_id: "be2812fdd3ee06b8145ea74cbaa239b9216713b11a1d03957a9f1e5cef12c2c1", index: 93 }, TxOut { address: "addr1yplq0pm0je5s0a2smnsjn3m87pfdtussc4g0ey2dmvevyk9fl96p7l6kg4l4g4q25wgnql3mup0mjwv34rw9wklnfu7s2jnahe", value: Value { coins: 3, assets: None }, datum_hash: None, datum: None, script: None }), (TxIn { tx_id: "fca46c26e8b0f4a048f0382ce4bf757c782caf3d167d33a8a88099e935543a94", index: 58 }, TxOut { address: "addr1qqederklu22r5cwj5efvwrqxftukqngryqlr0dvxhhnphemhct4hnzcrqaj0sljj2yl72j2h2pkg6fvwzrkathweaelqk7y8jy", value: Value { coins: 9, assets: None }, datum_hash: None, datum: None, script: None })]

@michalrus michalrus self-assigned this Jul 3, 2025
@michalrus michalrus added the enhancement New feature or request label Jul 3, 2025
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages bot commented Jul 3, 2025

Deploying blockfrost-platform with  Cloudflare Pages  Cloudflare Pages

Latest commit: c8e5fb0
Status: ✅  Deploy successful!
Preview URL: https://b287774b.blockfrost-platform.pages.dev
Branch Preview URL: https://feat-tx-testgen.blockfrost-platform.pages.dev

View logs

@michalrus michalrus requested review from ginnun and vladimirvolek July 7, 2025 16:16
@michalrus michalrus marked this pull request as ready for review July 7, 2025 16:16
@ginnun
Copy link
Copy Markdown
Collaborator

ginnun commented Jul 14, 2025

Is it fine if I merge this @michalrus ?

@michalrus
Copy link
Copy Markdown
Member Author

Yeah, it's yours 😃

@ginnun ginnun merged commit d14978d into feat/tx-evaluation Jul 14, 2025
9 of 17 checks passed
@michalrus michalrus deleted the feat/tx-testgen branch July 14, 2025 10:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Property test generator for POST /utils/txs/evaluate impl.

2 participants