From 8a1c824dd7393765087c6c9d8fc562e3a010fff1 Mon Sep 17 00:00:00 2001 From: microproofs Date: Wed, 4 Oct 2023 11:08:22 -0400 Subject: [PATCH] chore: add specific error for when the validator returns false --- CHANGELOG.md | 4 ++ crates/aiken-lang/src/gen_uplc.rs | 25 +++++++----- crates/aiken-lang/src/gen_uplc/air.rs | 1 + crates/aiken-lang/src/gen_uplc/builder.rs | 12 +++++- crates/aiken-lang/src/gen_uplc/tree.rs | 16 ++++---- .../aiken-project/src/blueprint/validator.rs | 40 +++++++++---------- crates/aiken-project/src/tests/gen_uplc.rs | 31 +++++++++----- 7 files changed, 80 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 786388d5..3b2f1f8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## v1.0.20-alpha - unreleased +### Changed + +- **aiken-lang**: Added validator specific error when validator returns false + ### Fixed - **aiken-lang**: improved error messages for `a |> b(x)` diff --git a/crates/aiken-lang/src/gen_uplc.rs b/crates/aiken-lang/src/gen_uplc.rs index 6fa92e52..343c7419 100644 --- a/crates/aiken-lang/src/gen_uplc.rs +++ b/crates/aiken-lang/src/gen_uplc.rs @@ -120,7 +120,7 @@ impl<'a> CodeGenerator<'a> { ) -> Program { let mut air_tree_fun = self.build(&fun.body); - air_tree_fun = wrap_validator_condition(air_tree_fun); + air_tree_fun = wrap_validator_condition(air_tree_fun, self.tracing); let mut validator_args_tree = self.check_validator_args(&fun.arguments, true, air_tree_fun); @@ -139,7 +139,7 @@ impl<'a> CodeGenerator<'a> { let mut air_tree_fun_other = self.build(&other.body); - air_tree_fun_other = wrap_validator_condition(air_tree_fun_other); + air_tree_fun_other = wrap_validator_condition(air_tree_fun_other, self.tracing); let mut validator_args_tree_other = self.check_validator_args(&other.arguments, true, air_tree_fun_other); @@ -684,7 +684,7 @@ impl<'a> CodeGenerator<'a> { } } - TypedExpr::ErrorTerm { tipo, .. } => AirTree::error(tipo.clone()), + TypedExpr::ErrorTerm { tipo, .. } => AirTree::error(tipo.clone(), false), TypedExpr::RecordUpdate { tipo, spread, args, .. @@ -1468,12 +1468,12 @@ impl<'a> CodeGenerator<'a> { let error_term = if self.tracing { AirTree::trace( - AirTree::string("Constr index did not match any type variant"), + AirTree::string("Constr index didn't match a type variant"), tipo.clone(), - AirTree::error(tipo.clone()), + AirTree::error(tipo.clone(), false), ) } else { - AirTree::error(tipo.clone()) + AirTree::error(tipo.clone(), false) }; if function.is_none() && defined_data_types.get(&data_type_name).is_none() { @@ -4327,7 +4327,7 @@ impl<'a> CodeGenerator<'a> { let mut term = arg_stack.pop().unwrap(); let trace_term = if self.tracing { - Term::Error.trace(Term::string("Expected on incorrect constructor variant.")) + Term::Error.trace(Term::string("Expected on incorrect Constr variant")) } else { Term::Error }; @@ -4344,7 +4344,7 @@ impl<'a> CodeGenerator<'a> { let mut term = arg_stack.pop().unwrap(); let trace_term = if self.tracing { - Term::Error.trace(Term::string("Expected on incorrect boolean variant")) + Term::Error.trace(Term::string("Expected on incorrect bool variant")) } else { Term::Error }; @@ -5045,7 +5045,14 @@ impl<'a> CodeGenerator<'a> { arg_stack.push(term); } - Air::ErrorTerm { .. } => arg_stack.push(Term::Error), + Air::ErrorTerm { validator, .. } => { + if validator { + arg_stack.push(Term::Error.apply(Term::Error.force())) + } else { + arg_stack.push(Term::Error); + } + } + Air::NoOp => {} } } diff --git a/crates/aiken-lang/src/gen_uplc/air.rs b/crates/aiken-lang/src/gen_uplc/air.rs index bda81734..224c6ac0 100644 --- a/crates/aiken-lang/src/gen_uplc/air.rs +++ b/crates/aiken-lang/src/gen_uplc/air.rs @@ -172,6 +172,7 @@ pub enum Air { // Misc. ErrorTerm { tipo: Rc, + validator: bool, }, Trace { tipo: Rc, diff --git a/crates/aiken-lang/src/gen_uplc/builder.rs b/crates/aiken-lang/src/gen_uplc/builder.rs index 124412c0..79051b56 100644 --- a/crates/aiken-lang/src/gen_uplc/builder.rs +++ b/crates/aiken-lang/src/gen_uplc/builder.rs @@ -1671,9 +1671,17 @@ pub fn cast_validator_args(term: Term, arguments: &[TypedArg]) -> Term AirTree { +pub fn wrap_validator_condition(air_tree: AirTree, trace: bool) -> AirTree { let success_branch = vec![(air_tree, AirTree::void())]; - let otherwise = AirTree::error(void()); + let otherwise = if trace { + AirTree::trace( + AirTree::string("Validator returned false"), + void(), + AirTree::error(void(), true), + ) + } else { + AirTree::error(void(), true) + }; AirTree::if_branches(success_branch, void(), otherwise) } diff --git a/crates/aiken-lang/src/gen_uplc/tree.rs b/crates/aiken-lang/src/gen_uplc/tree.rs index e39fcc49..bd738ae6 100644 --- a/crates/aiken-lang/src/gen_uplc/tree.rs +++ b/crates/aiken-lang/src/gen_uplc/tree.rs @@ -318,6 +318,7 @@ pub enum AirExpression { // Misc. ErrorTerm { tipo: Rc, + validator: bool, }, Trace { tipo: Rc, @@ -777,8 +778,8 @@ impl AirTree { tipo.clone(), ) } - pub fn error(tipo: Rc) -> AirTree { - AirTree::Expression(AirExpression::ErrorTerm { tipo }) + pub fn error(tipo: Rc, validator: bool) -> AirTree { + AirTree::Expression(AirExpression::ErrorTerm { tipo, validator }) } pub fn trace(msg: AirTree, tipo: Rc, then: AirTree) -> AirTree { AirTree::Expression(AirExpression::Trace { @@ -1257,9 +1258,10 @@ impl AirTree { arg.create_air_vec(air_vec); } } - AirExpression::ErrorTerm { tipo } => { - air_vec.push(Air::ErrorTerm { tipo: tipo.clone() }) - } + AirExpression::ErrorTerm { tipo, validator } => air_vec.push(Air::ErrorTerm { + tipo: tipo.clone(), + validator: *validator, + }), AirExpression::Trace { tipo, msg, then } => { air_vec.push(Air::Trace { tipo: tipo.clone() }); msg.create_air_vec(air_vec); @@ -1294,7 +1296,7 @@ impl AirTree { | AirExpression::If { tipo, .. } | AirExpression::Constr { tipo, .. } | AirExpression::RecordUpdate { tipo, .. } - | AirExpression::ErrorTerm { tipo } + | AirExpression::ErrorTerm { tipo, .. } | AirExpression::Trace { tipo, .. } => tipo.clone(), AirExpression::Void => void(), AirExpression::Var { constructor, .. } => constructor.tipo.clone(), @@ -1344,7 +1346,7 @@ impl AirTree { | AirExpression::CastToData { tipo, .. } | AirExpression::If { tipo, .. } | AirExpression::Constr { tipo, .. } - | AirExpression::ErrorTerm { tipo } + | AirExpression::ErrorTerm { tipo, .. } | AirExpression::Trace { tipo, .. } => vec![tipo], AirExpression::Var { constructor, .. } => { vec![constructor.tipo.borrow_mut()] diff --git a/crates/aiken-project/src/blueprint/validator.rs b/crates/aiken-project/src/blueprint/validator.rs index 3fb53079..6a3bce86 100644 --- a/crates/aiken-project/src/blueprint/validator.rs +++ b/crates/aiken-project/src/blueprint/validator.rs @@ -348,8 +348,8 @@ mod tests { "$ref": "#/definitions/Data" } }, - "compiledCode": "4f010000322253330034a22930b2b9a1", - "hash": "69eb6e27b7098c51cef74d8929553456e0ff6748c50a08c0daae7986", + "compiledCode": "583301000032322253330034a22930a9980224811856616c696461746f722072657475726e65642066616c736500136565734ae701", + "hash": "9fc33a6ffaa8d1f600c161aa383739d5af37807ed83347cc133521c9", "definitions": { "Data": { "title": "Data", @@ -386,8 +386,8 @@ mod tests { } } ], - "compiledCode": "54010000322322253330054a22930b1bad00157341", - "hash": "0e31a2048fe4751926c4a1e5fd93c9c2ecc8035777884c15db157d11", + "compiledCode": "583701000032322322253330054a22930a998032491856616c696461746f722072657475726e65642066616c73650013656375a002ae695ce1", + "hash": "2837caccfd96d636a07e0da584ebbef94069bd7bfa4447096ecd9b80", "definitions": { "Data": { "title": "Data", @@ -455,8 +455,8 @@ mod tests { "$ref": "#/definitions/test_module~1Input" } }, - "compiledCode": "590267010000323232323232323232222323253330084a22930b19299980419b874800000454ccc030c01801052615330094911d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153330083370e90010008a99980618030020a4c2a6601292011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153330083370e90020008a99980618030020a4c2a6601292011d4578706563746564206e6f206669656c647320666f7220436f6e737472001615330094912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630060033253330073370e90000008991919191919299980898098010991924c646600200200a44a66602800229309919801801980b8011bae301500132533300e3370e900000089919299980a180b0010a4c2a66022921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a6028002601800c2a6601e9212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300c005153300e4901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c602200260220046eb0c03c004c03c008c034004c01401054cc0212412b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e7400163005003230063754002460086ea80055cd2b9c5573aaae7955cfaba15745", - "hash": "2494f3ebfebdc55bc5958fbeb77fba0c886446dae24a8858919357ec", + "compiledCode": "59027f010000323232323232323232222323253330084a22930a99804a491856616c696461746f722072657475726e65642066616c736500136563253330083370e90000008a99980618030020a4c2a6601292011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153330083370e90010008a99980618030020a4c2a6601292011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153330083370e90020008a99980618030020a4c2a6601292011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300949128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e74001630060033253330073370e90000008991919191919299980898098010991924c646600200200a44a66602800229309919801801980b8011bae301500132533300e3370e900000089919299980a180b0010a4c2a66022921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a6028002601800c2a6601e92128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e740016300c005153300e4901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c602200260220046eb0c03c004c03c008c034004c01401054cc02124128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e7400163005003230063754002460086ea80055cd2b9c5573aaae7955cfaba15745", + "hash": "ff5b503bbcd7ed5fca26e803d69c09413bef905e72575443557f5a91", "definitions": { "ByteArray": { "dataType": "bytes" @@ -567,8 +567,8 @@ mod tests { "$ref": "#/definitions/Tuple$Int_Int_Int" } }, - "compiledCode": "58a5010000323232323232322223232323253330084a22930b1919191919299980818090010a4c2a6601a921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a602000260200046eb4c038004c038008dd698060009bac00432375c60120046eb4c01c004c8cdd81805000980518058009bac0035734ae7155ceaab9e5573eae855d11", - "hash": "d1994e466707dcb482fc9d303af1220cfffee94bcbc0fd8cc7ad194c", + "compiledCode": "58c6010000323232323232322223232323253330084a22930a99804a491856616c696461746f722072657475726e65642066616c73650013656323232323253330103012002149854cc0352401334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a602000260200046eb4c038004c038008dd698060009bac00432375c60120046eb4c01c004c8cdd81805000980518058009bac0035734ae7155ceaab9e5573eae855d11", + "hash": "4b4cf15504b916aff5ce2cad8cd93a57dd9d124fbdaa88837d255ed4", "definitions": { "ByteArray": { "dataType": "bytes" @@ -636,8 +636,8 @@ mod tests { "$ref": "#/definitions/test_module~1Either$ByteArray_test_module~1Interval$Int" } }, - "compiledCode": "5901e3010000323232323232323232223253330064a22930b19299980319b87480000044c8c94ccc030c03800852615330094901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c601800260080062a66600c66e1d200200113232533300c300e002132498c94ccc024cdc3a400000226464a66601e60220042930a99806249334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a601e002600e0042a66601266e1d20020011533300d3007002149854cc02924011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300a4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300700115330094901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300c001300400315330074912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e7400163004002230063754002460086ea80055cd2b9c5573aaae7955cfaba15745", - "hash": "b32c4cd46fa64739cddbd05cc35fef9bfc702b4c8ad8ac332a4e699c", + "compiledCode": "5901fe010000323232323232323232223253330064a22930a99803a4811856616c696461746f722072657475726e65642066616c736500136563253330063370e900000089919299980618070010a4c2a660129201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c601800260080062a66600c66e1d200200113232533300c300e002132498c94ccc024cdc3a400000226464a66601e60220042930a99806249334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a601e002600e0042a66601266e1d20020011533300d3007002149854cc02924011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300a49128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e740016300700115330094901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300c0013004003153300749128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e7400163004002230063754002460086ea80055cd2b9c5573aaae7955cfaba15745", + "hash": "f45ef7cb07467b7bd4cbad2e5feecfd30ed5194b50026aba04a6692a", "definitions": { "ByteArray": { "dataType": "bytes" @@ -720,8 +720,8 @@ mod tests { "$ref": "#/definitions/test_module~1Dict$test_module~1UUID_Int" } }, - "compiledCode": "58e001000032323232323232223253330044a22930b19299980219b87480000044c8c94ccc028c0300084c926323300100100222533300c00114984c8cc00c00cc03c008c8c8dd698068011bae300b001300d0011533007491334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001637566014002600e6ea800c54cc0152412b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630053754004ae695ce2ab9d5573caae7d5d0aba201", - "hash": "1caa2519f38c63dfc5e3a457d1a06e57848628f5a2495b04afb64cba", + "compiledCode": "58fe01000032323232323232223253330044a22930a99802a4811856616c696461746f722072657475726e65642066616c736500136563253330043370e9000000899192999805180600109924c646600200200444a66601800229309919801801980780119191bad300d002375c6016002601a0022a6600e921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001637566014002600e6ea800c54cc01524128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e74001630053754004ae695ce2ab9d5573caae7d5d0aba201", + "hash": "216d9334e8daaa401663667302f26cfb53c63d88fe4b14cd8e2a9c1e", "definitions": { "ByteArray": { "dataType": "bytes" @@ -783,8 +783,8 @@ mod tests { "$ref": "#/definitions/test_module~1Dict$test_module~1UUID_Int" } }, - "compiledCode": "584c01000032323232323222323253330054a22930b19198008008011129998048008a4c26466006006601800464646eb4c028008dd7180400098050009bab0025734aae7555cf2ab9f5742ae881", - "hash": "6ab85c61be6a417c860621155f9c9c91cbaff382efbe7d532173b7ea", + "compiledCode": "58700100003232323232323222323253330054a22930a9980324811856616c696461746f722072657475726e65642066616c73650013656323300100100222533300a00114984c8cc00c00cc034008c8c8dd698058011bae3009001300b0013756004ae695ce2ab9d5573caae7d5d0aba201", + "hash": "8a89baa6035d083e7d59575b8fa1e8bd3fe485df94d0af356557b224", "definitions": { "ByteArray": { "dataType": "bytes" @@ -835,8 +835,8 @@ mod tests { "$ref": "#/definitions/Int" } }, - "compiledCode": "58bb01000032323232323232222323253330064a22930b1bad0033253330053370e900000089919299980598068010a4c2a660109201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300b001300837540082a6600c9212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630063754006ae695ce2ab9d5573caae7d5d0aba201", - "hash": "05403d61b79f0933dc3608c4ed3385f44c37cd2088b513265a2ce306", + "compiledCode": "58d801000032323232323232222323253330064a22930a99803a491856616c696461746f722072657475726e65642066616c73650013656375a00664a66600a66e1d200000113232533300b300d002149854cc021241334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300b001300837540082a6600c92128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e74001630063754006ae695ce2ab9d5573caae7d5d0aba201", + "hash": "d61d9c4c310ef538d7c4e49b44836251d0c9ac61dad25692ac9bb69a", "definitions": { "Data": { "title": "Data", @@ -890,8 +890,8 @@ mod tests { "$ref": "#/definitions/test_module~1Expr" } }, - "compiledCode": "5901a00100003232323232323232223253330054a22930b19918008009119299980399b87480000044c8c94ccc034c03c008526153300a4901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a601a002600c0042a66600e66e1d2002001132323232533300f301100213232498cc020020008cc01c01c00c54cc0312401334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300f001300f002300d0013006002153330073370e9002000899191919299980798088010991924c660100100046600e00e0062a660189201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300f001300f002300d001300600215330084912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300837540020044600a6ea80055cd2b9c5573aaae7955cfaba157441", - "hash": "1a61e3a68ae6223fc9a78ce530942f29bfe6421a160edaa59ded5589", + "compiledCode": "5901be0100003232323232323232223253330054a22930a9980324811856616c696461746f722072657475726e65642066616c736500136563323001001223253330073370e900000089919299980698078010a4c2a660149201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a601a002600c0042a66600e66e1d2002001132323232533300f301100213232498cc020020008cc01c01c00c54cc0312401334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300f001300f002300d0013006002153330073370e9002000899191919299980798088010991924c660100100046600e00e0062a660189201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300f001300f002300d0013006002153300849128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e740016300837540020044600a6ea80055cd2b9c5573aaae7955cfaba157441", + "hash": "dafa047eb117e2b4df02e3c3d500faf6164ffc10c6ef9405cfd77bbb", "definitions": { "Int": { "dataType": "integer" @@ -981,8 +981,8 @@ mod tests { "$ref": "#/definitions/test_module~1LinkedList$Int" } }, - "compiledCode": "59032b01000032323232323232323222232323232533300a4a22930b180100299919119299980619b87480000044c8c94ccc048c0500084c9263005001153300f491334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163012001300a0021533300c3370e9001000899191919299980a180b00109924c6464646600200200444a66603000229309919801801980d8011806980c8009bac3014002375c60240022a66022921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163233760602a002602a602c0026eb0c050004c050008dd6980900098050010a99806a492b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300a00130010012232533300b3370e90000008991919192999809980a80109924c6600e00e0022a660209201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016301300130130023370e900118071baa301100130090021533300b3370e90010008a99980798048010a4c2a660189211d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300c4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630090010053001001223253330093370e90000008991919192999808980980109924c6600e00e0022a6601c921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001630110013011002375a601e002600e0042a66601266e1d20020011533300d3007002149854cc02924011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300a4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e7400163007001230063754002460086ea80055cd2b9c5573aaae7955cfaba15745", - "hash": "fb020634803fa5aa701cdbb35de727314ef9f5fff8243f3f35efafb0", + "compiledCode": "59034301000032323232323232323222232323232533300a4a22930a99805a491856616c696461746f722072657475726e65642066616c73650013656300200533232232533300c3370e9000000899192999809180a00109924c600a0022a6601e9201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163012001300a0021533300c3370e9001000899191919299980a180b00109924c6464646600200200444a66603000229309919801801980d8011806980c8009bac3014002375c60240022a66022921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163233760602a002602a602c0026eb0c050004c050008dd6980900098050010a99806a4928436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e740016300a00130010012232533300b3370e90000008991919192999809980a80109924c6600e00e0022a660209201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016301300130130023370e900118071baa301100130090021533300b3370e90010008a99980798048010a4c2a660189211d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300c49128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e74001630090010053001001223253330093370e90000008991919192999808980980109924c6600e00e0022a6601c921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001630110013011002375a601e002600e0042a66601266e1d20020011533300d3007002149854cc02924011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300a49128436f6e73747220696e646578206469646e2774206d61746368206120747970652076617269616e7400163007001230063754002460086ea80055cd2b9c5573aaae7955cfaba15745", + "hash": "be815f61a39a2cb454eb24986ee22a14e5802d08ab83ea8cd4382651", "definitions": { "Bool": { "title": "Bool", diff --git a/crates/aiken-project/src/tests/gen_uplc.rs b/crates/aiken-project/src/tests/gen_uplc.rs index f51e5a9e..b8096a5d 100644 --- a/crates/aiken-project/src/tests/gen_uplc.rs +++ b/crates/aiken-project/src/tests/gen_uplc.rs @@ -2827,7 +2827,12 @@ fn when_tuple_deconstruction() { .apply(Term::var("dat")) .apply(Term::var("red")), ) - .delayed_if_else(Term::unit(), Term::Error) + .delayed_if_else( + Term::unit(), + Term::Error + .apply(Term::Error.force()) + .trace(Term::string("Validator returned false")), + ) .lambda("_") .apply( Term::var("expect_RedSpend") @@ -2866,7 +2871,7 @@ fn when_tuple_deconstruction() { )), ), Term::Error.trace(Term::string( - "Constr index did not match any type variant", + "Constr index didn't match a type variant", )), ), ) @@ -2916,7 +2921,7 @@ fn when_tuple_deconstruction() { )), ), Term::Error.trace(Term::string( - "Constr index did not match any type variant", + "Constr index didn't match a type variant", )), ), ) @@ -2948,7 +2953,7 @@ fn when_tuple_deconstruction() { .apply(Term::var("field_1")), ), Term::Error.trace(Term::string( - "Constr index did not match any type variant", + "Constr index didn't match a type variant", )), ) .lambda("subject") @@ -3111,7 +3116,7 @@ fn generic_validator_type_test() { ) .lambda("subject") .apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("r"))) - .delayed_if_else(Term::unit(), Term::Error) + .delayed_if_else(Term::unit(), Term::Error.apply(Term::Error.force()).trace(Term::string("Validator returned false"))) .lambda("_").apply( Term::var("__expect_A") .lambda("__expect_A") @@ -3169,7 +3174,7 @@ fn generic_validator_type_test() { .apply(Term::var("r")), ), Term::Error.trace(Term::string( - "Constr index did not match any type variant", + "Constr index didn't match a type variant", )), ), ) @@ -3209,7 +3214,7 @@ fn generic_validator_type_test() { .apply(Term::var("field_B")), ), Term::Error.trace(Term::string( - "Constr index did not match any type variant", + "Constr index didn't match a type variant", )), ) .lambda("subject") @@ -4971,7 +4976,12 @@ fn opaque_value_in_datum() { .apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat"))), ), ) - .delayed_if_else(Term::unit(), Term::Error) + .delayed_if_else( + Term::unit(), + Term::Error + .apply(Term::Error.force()) + .trace(Term::string("Validator returned false")), + ) .lambda("_") .apply( Term::equals_integer() @@ -5025,8 +5035,7 @@ fn opaque_value_in_datum() { ) .lambda("dat_fields") .apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("param_0"))), - Term::Error - .trace(Term::string("Constr index did not match any type variant")), + Term::Error.trace(Term::string("Constr index didn't match a type variant")), ) .lambda("subject") .apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("param_0"))) @@ -5184,7 +5193,7 @@ fn expect_none() { .apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("x"))) .delayed_if_else( Term::bool(true), - Term::Error.trace(Term::string("Expected on incorrect constructor variant.")), + Term::Error.trace(Term::string("Expected on incorrect Constr variant")), ) .lambda("x") .apply(Term::Constant(