aiken-lang / aiken

A modern smart contract platform for Cardano
https://aiken-lang.org
Apache License 2.0
474 stars 92 forks source link

uplc tx eval fails for `Transaction` destructuring for else fallback / catch all #1015

Closed HinsonSIDAN closed 1 month ago

HinsonSIDAN commented 1 month ago

What Git revision are you using?

git version 2.39.3 (Apple Git-146)

What operating system are you using, and which version?

Describe what the problem is?

uplc tx eval fails for Transaction destructuring for else fallback / catch all

validator account_user_unlock(oracle_nft: PolicyId, owner: ByteArray) {
  withdraw(_redeemer: Data, _credential: Credential, tx: Transaction) {
    let Transaction { reference_inputs, extra_signatories, .. } = tx
    expect AccountOracleDatum { operation_key, .. }: AccountOracleDatum =
      only_input_datum_with(reference_inputs, oracle_nft, "")
    all_key_signed(extra_signatories, [owner, operation_key])
  }

  publish(redeemer: Data, credential: Credential, tx: Transaction) {
    account_user_unlock.withdraw(oracle_nft, owner, redeemer, credential, tx)
  }

  else(_) {
    fail
  }

  // Below doesnt work
  // else(ctx: ScriptContext) {
  //   let Transaction { reference_inputs, extra_signatories, .. } =
  //     ctx.transaction
  //   expect AccountOracleDatum { operation_key, .. }: AccountOracleDatum =
  //     only_input_datum_with(reference_inputs, oracle_nft, "")
  //   all_key_signed(extra_signatories, [owner, operation_key])
  // }
}

The wild card implementation hit below's uplc error:

image

Particularly the transaction destructuring causing the issue (when commenting this line out, it works

     let Transaction { reference_inputs, extra_signatories, .. } =
       ctx.transaction
KtorZ commented 1 month ago

publish(redeemer: Data, credential: Credential, tx: Transaction) {

Your problem is likely here. You're trying to publish a credential, but publish receives a Certificate as argument.

HinsonSIDAN commented 1 month ago

I didnt really test on publish action yet, but for the else way of implementation, it didnt pass uplc evaluation.

HinsonSIDAN commented 1 month ago

Additional information: Trying with my dapp's other tx, we have reproduce the same evaluation error with this tx:

{
"cbor": "84a8008282582007977715b2125fc01d30e27039e1ccb8d6b0771e36f886fcddf49fcd9f1b5e62048258205357731ff8aaacadb4834c87ab5048d1205ede5c9dbd6e24ebd1023713d54a28181d0181a30058391098c101e2c0f27d6741bb778515a1de67d32528f22abd3b1b319c01005ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cb011a0f7ba221028201d8185862d8799fd8799fd87a9f581c5207832ffe4cf59a6ce7a80af45d932077349a3ebd0df034dba1971dffd8799fd8799fd8799f581c5ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cbffffffffd879801a00061a801a0ee6b28000ff021a0003a6df05a1581df0df913bb334ecc2f3755d6c69385e9ae7ed690dbf9c4305e209253be8000b5820533cf58a9634df46511a7e1d8e190a4ce86346ffe408437966c86ce7e7bb40370d818258203fbdf2b0b4213855dd9b87f7c94a50cf352ba6edfdded85ecb22cf9ceb75f814070e82581c04845038ee499ee8bc0afe56f688f27b2dd76f230d3698a9afcc1b66581c5ca51b304b1f79d92eada8c58c513e969458dcd27ce4f5bc47823ffa12838258205ef04e53fca06446bda16dd6eb5b1ca01f179cf25e46e206d06e22d71c4d09140082582007977715b2125fc01d30e27039e1ccb8d6b0771e36f886fcddf49fcd9f1b5e620082582007977715b2125fc01d30e27039e1ccb8d6b0771e36f886fcddf49fcd9f1b5e6201a2008282582089f4b576f05f5aad99bce0bdd51afe48529772f7561bb2ac9d84a4afbda1ecd65840c901a2a63c5af13a0e12dbc0a0147c6dd39e381d783f3702b0f352bea049b0774868a1577a987959f67a553f662bdaaa0ee34ee1557dec650db1bdcce4d6b90d8258207f4747ca0c20a1e5c28716c4a10fffbcbe8fe6253cb427ae2f0e24d231a980845840f601ab9ee42ba341130706c956024379209c06aa2f35eefffa7743dfdb5932e69236511ca86273759777e26ceb25a224096e92dcf013bbbb398b706bbbbde70a0583840000d879808219836b1a00a18165840001d879808219836b1a00a18165840300d87980821a00028f801a02faeb3ff5f6",
"additional_txs": ["84a8008282582007977715b2125fc01d30e27039e1ccb8d6b0771e36f886fcddf49fcd9f1b5e62048258205357731ff8aaacadb4834c87ab5048d1205ede5c9dbd6e24ebd1023713d54a28181d0181a30058391098c101e2c0f27d6741bb778515a1de67d32528f22abd3b1b319c01005ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cb011a0f7ba221028201d8185862d8799fd8799fd87a9f581c5207832ffe4cf59a6ce7a80af45d932077349a3ebd0df034dba1971dffd8799fd8799fd8799f581c5ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cbffffffffd879801a00061a801a0ee6b28000ff021a0003a6df05a1581df0df913bb334ecc2f3755d6c69385e9ae7ed690dbf9c4305e209253be8000b5820533cf58a9634df46511a7e1d8e190a4ce86346ffe408437966c86ce7e7bb40370d818258203fbdf2b0b4213855dd9b87f7c94a50cf352ba6edfdded85ecb22cf9ceb75f814070e82581c04845038ee499ee8bc0afe56f688f27b2dd76f230d3698a9afcc1b66581c5ca51b304b1f79d92eada8c58c513e969458dcd27ce4f5bc47823ffa12838258205ef04e53fca06446bda16dd6eb5b1ca01f179cf25e46e206d06e22d71c4d09140082582007977715b2125fc01d30e27039e1ccb8d6b0771e36f886fcddf49fcd9f1b5e620082582007977715b2125fc01d30e27039e1ccb8d6b0771e36f886fcddf49fcd9f1b5e6201a2008282582089f4b576f05f5aad99bce0bdd51afe48529772f7561bb2ac9d84a4afbda1ecd65840c901a2a63c5af13a0e12dbc0a0147c6dd39e381d783f3702b0f352bea049b0774868a1577a987959f67a553f662bdaaa0ee34ee1557dec650db1bdcce4d6b90d8258207f4747ca0c20a1e5c28716c4a10fffbcbe8fe6253cb427ae2f0e24d231a980845840f601ab9ee42ba341130706c956024379209c06aa2f35eefffa7743dfdb5932e69236511ca86273759777e26ceb25a224096e92dcf013bbbb398b706bbbbde70a0583840000d879808219836b1a00a18165840001d879808219836b1a00a18165840300d87980821a00028f801a02faeb3ff5f6", "84a8008282582007977715b2125fc01d30e27039e1ccb8d6b0771e36f886fcddf49fcd9f1b5e62058258205357731ff8aaacadb4834c87ab5048d1205ede5c9dbd6e24ebd1023713d54a28181e0181a30058391098c101e2c0f27d6741bb778515a1de67d32528f22abd3b1b319c01005ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cb011a0f7ba221028201d8185862d8799fd8799fd87a9f581c5207832ffe4cf59a6ce7a80af45d932077349a3ebd0df034dba1971dffd8799fd8799fd8799f581c5ca749261aa3b17aa2cd4b026bc6566c4b14421d6083edce64ffe5cbffffffffd879801a00061a801a0ee6b28000ff021a0003a6df05a1581df0df913bb334ecc2f3755d6c69385e9ae7ed690dbf9c4305e209253be8000b5820533cf58a9634df46511a7e1d8e190a4ce86346ffe408437966c86ce7e7bb40370d818258203fbdf2b0b4213855dd9b87f7c94a50cf352ba6edfdded85ecb22cf9ceb75f814070e82581c04845038ee499ee8bc0afe56f688f27b2dd76f230d3698a9afcc1b66581c5ca51b304b1f79d92eada8c58c513e969458dcd27ce4f5bc47823ffa12838258205ef04e53fca06446bda16dd6eb5b1ca01f179cf25e46e206d06e22d71c4d09140082582007977715b2125fc01d30e27039e1ccb8d6b0771e36f886fcddf49fcd9f1b5e620182582007977715b2125fc01d30e27039e1ccb8d6b0771e36f886fcddf49fcd9f1b5e6200a2008282582089f4b576f05f5aad99bce0bdd51afe48529772f7561bb2ac9d84a4afbda1ecd6584004bdc4ded83e256a9343461949b5224b36d776495efc8a42d32ed68fdfc68e0c570604bfd05b60199bec0fa2c5720ce21ed863dfd5a2ce045f2f3ec7f1d1f50e8258207f4747ca0c20a1e5c28716c4a10fffbcbe8fe6253cb427ae2f0e24d231a9808458407fff107d66ba6733ec7e2767b3215994700bd5b43c4027d3509199fd4ee3160daca53df29b58d9fbe9f948273c952259347b93f5a33141c8e535165bfda16a030583840000d879808219836b1a00a18165840001d879808219836b1a00a18165840300d87980821a00028f801a02faeb3ff5f6"]
}

It works with maestro's evaluation function (https://preprod.gomaestro-api.org/v1/transactions/evaluate) but the uplc returns same error as above. Maybe they both come with the same origin

image