diff --git a/crates/aiken-lang/src/gen_uplc.rs b/crates/aiken-lang/src/gen_uplc.rs index 8e6e81ef..c92dc54d 100644 --- a/crates/aiken-lang/src/gen_uplc.rs +++ b/crates/aiken-lang/src/gen_uplc.rs @@ -201,7 +201,10 @@ impl<'a> CodeGenerator<'a> { term, }; + // println!("Program: {}", program.to_pretty()); + program = aiken_optimize_and_intern(program); + // println!("Program After: {}", program.to_pretty()); // This is very important to call here. // If this isn't done, re-using the same instance diff --git a/crates/uplc/src/optimize/shrinker.rs b/crates/uplc/src/optimize/shrinker.rs index cbb55527..fcaeabca 100644 --- a/crates/uplc/src/optimize/shrinker.rs +++ b/crates/uplc/src/optimize/shrinker.rs @@ -1,4 +1,4 @@ -use std::rc::Rc; +use std::{rc::Rc, vec}; use indexmap::IndexMap; use itertools::Itertools; @@ -15,10 +15,31 @@ pub struct Occurrence { lambda_count: usize, } +pub struct IdGen { + id: u64, +} + +impl IdGen { + pub fn new() -> Self { + Self { id: 0 } + } + + pub fn next_id(&mut self) -> u64 { + self.id += 1; + self.id + } +} + +impl Default for IdGen { + fn default() -> Self { + Self::new() + } +} + impl Program { pub fn lambda_reducer(self) -> Program { let mut term = self.term; - lambda_reducer(&mut term); + lambda_reducer(&mut term, &mut vec![], &mut vec![], &mut IdGen::new()); Program { version: self.version, term, @@ -50,7 +71,7 @@ impl Program { pub fn inline_reducer(self) -> Program { let mut term = self.term; - inline_single_occurrence_reducer(&mut term); + inline_single_occurrence_reducer(&mut term, &mut vec![], &mut vec![], &mut IdGen::new()); inline_direct_reducer(&mut term); inline_identity_reducer(&mut term); @@ -168,42 +189,63 @@ fn force_delay_reducer(term: &mut Term) { } } -fn lambda_reducer(term: &mut Term) { +fn lambda_reducer( + term: &mut Term, + reduce_stack: &mut Vec, u64)>>, + lambda_applied_ids: &mut Vec, + id_gen: &mut IdGen, +) { match term { // TODO: change this to handle any amount of consecutive applies and lambdas Term::Apply { function, argument } => { - let func = Rc::make_mut(function); - lambda_reducer(func); - let arg = Rc::make_mut(argument); - lambda_reducer(arg); + // SO args can't have existing stack args applied to them anyway, so we pass in empty list + let mut arg_stack = vec![]; + lambda_reducer(arg, &mut arg_stack, lambda_applied_ids, id_gen); - if let Term::Lambda { - parameter_name, - body, - } = func - { - match arg { - Term::Constant(c) if matches!(c.as_ref(), Constant::String(_)) => (), - Term::Constant(_) | Term::Var(_) | Term::Builtin(_) => { - let body = Rc::make_mut(body); - *term = substitute_term(body, parameter_name.clone(), arg); - } - _ => (), - } + let next_id = id_gen.next_id(); + + let arg_applied = match arg { + Term::Constant(c) if matches!(c.as_ref(), Constant::String(_)) => None, + Term::Constant(_) | Term::Var(_) | Term::Builtin(_) => Some((arg.clone(), next_id)), + _ => None, + }; + + reduce_stack.push(arg_applied); + + let func = Rc::make_mut(function); + lambda_reducer(func, reduce_stack, lambda_applied_ids, id_gen); + // The reason we don't need to pop is because the Lambda case and will pop for us + // It is guaranteed to pop otherwise the script is not valid anyways + if lambda_applied_ids.contains(&next_id) { + // we inlined the arg so now remove the apply and arg from the program + *term = func.clone(); } } Term::Delay(d) => { let d = Rc::make_mut(d); - lambda_reducer(d); + lambda_reducer(d, reduce_stack, lambda_applied_ids, id_gen); } - Term::Lambda { body, .. } => { - let body = Rc::make_mut(body); - lambda_reducer(body); + Term::Lambda { + parameter_name, + body, + } => { + // pops stack here no matter what + // match on only Some(Some(arg)) because we don't want to inline None + if let Some(Some((arg_term, arg_id))) = reduce_stack.pop() { + let body = Rc::make_mut(body); + *body = substitute_term(body, parameter_name.clone(), &arg_term); + lambda_reducer(body, reduce_stack, lambda_applied_ids, id_gen); + lambda_applied_ids.push(arg_id); + *term = body.clone(); + } else { + let body = Rc::make_mut(body); + lambda_reducer(body, reduce_stack, lambda_applied_ids, id_gen); + } } Term::Force(f) => { let f = Rc::make_mut(f); - lambda_reducer(f); + lambda_reducer(f, reduce_stack, lambda_applied_ids, id_gen); } Term::Case { .. } => todo!(), Term::Constr { .. } => todo!(), @@ -312,43 +354,71 @@ fn inline_identity_reducer(term: &mut Term) { } } -fn inline_single_occurrence_reducer(term: &mut Term) { +fn inline_single_occurrence_reducer( + term: &mut Term, + reduce_stack: &mut Vec<(Term, u64)>, + lambda_applied_ids: &mut Vec, + id_gen: &mut IdGen, +) { match term { - Term::Delay(d) => { - let d = Rc::make_mut(d); - inline_single_occurrence_reducer(d); - } - Term::Lambda { body, .. } => { - let body = Rc::make_mut(body); - inline_single_occurrence_reducer(body); - } // TODO: change this to handle any amount of consecutive applies and lambdas Term::Apply { function, argument } => { - let func = Rc::make_mut(function); let arg = Rc::make_mut(argument); + // SO args can't have existing stack args applied to them anyway, so we pass in empty list + let mut arg_stack = vec![]; + inline_single_occurrence_reducer(arg, &mut arg_stack, lambda_applied_ids, id_gen); - inline_single_occurrence_reducer(func); - inline_single_occurrence_reducer(arg); + let next_id = id_gen.next_id(); - if let Term::Lambda { - parameter_name, - body, - } = func - { + let arg_applied = (arg.clone(), next_id); + + reduce_stack.push(arg_applied); + + let func = Rc::make_mut(function); + inline_single_occurrence_reducer(func, reduce_stack, lambda_applied_ids, id_gen); + // The reason we don't need to pop is because the Lambda case and will pop for us + // It is guaranteed to pop otherwise the script is not valid anyways + if lambda_applied_ids.contains(&next_id) { + // we inlined the arg so now remove the apply and arg from the program + *term = func.clone(); + } + } + Term::Delay(d) => { + let d = Rc::make_mut(d); + inline_single_occurrence_reducer(d, reduce_stack, lambda_applied_ids, id_gen); + } + Term::Lambda { + parameter_name, + body, + } => { + // pops stack here no matter what + // match on only Some(Some(arg)) because we don't want to inline None + + if let Some((arg_term, arg_id)) = reduce_stack.pop() { + let body = Rc::make_mut(body); + inline_single_occurrence_reducer(body, reduce_stack, lambda_applied_ids, id_gen); let occurrences = var_occurrences(body, parameter_name.clone()); - let delays = delayed_execution(body.as_ref()); + let delays = delayed_execution(body); + + let is_recursive_call = false; + if occurrences == 1 { - if delays == 0 { - *term = substitute_term(body.as_ref(), parameter_name.clone(), arg); - } else if let Term::Var(_) - | Term::Constant(_) - | Term::Error - | Term::Delay(_) - | Term::Lambda { .. } - | Term::Builtin(_) = arg + if !is_recursive_call + && (delays == 0 + || matches!( + &arg_term, + Term::Var(_) + | Term::Constant(_) + | Term::Delay(_) + | Term::Lambda { .. } + | Term::Builtin(_), + )) { - *term = substitute_term(body.as_ref(), parameter_name.clone(), arg); + *body = substitute_term(body, parameter_name.clone(), &arg_term); + + lambda_applied_ids.push(arg_id); + *term = body.clone(); } // This will strip out unused terms that can't throw an error by themselves } else if occurrences == 0 { @@ -356,16 +426,20 @@ fn inline_single_occurrence_reducer(term: &mut Term) { | Term::Constant(_) | Term::Delay(_) | Term::Lambda { .. } - | Term::Builtin(_) = arg + | Term::Builtin(_) = &arg_term { - *term = body.as_ref().clone(); + lambda_applied_ids.push(arg_id); + *term = body.clone(); } } + } else { + let body = Rc::make_mut(body); + inline_single_occurrence_reducer(body, reduce_stack, lambda_applied_ids, id_gen); } } Term::Force(f) => { let f = Rc::make_mut(f); - inline_single_occurrence_reducer(f); + inline_single_occurrence_reducer(f, reduce_stack, lambda_applied_ids, id_gen); } Term::Case { .. } => todo!(), Term::Constr { .. } => todo!(), @@ -373,6 +447,27 @@ fn inline_single_occurrence_reducer(term: &mut Term) { } } +fn contains_recursive_call(body: &Term) -> bool { + match body { + Term::Delay(d) => contains_recursive_call(d.as_ref()), + Term::Lambda { body, .. } => contains_recursive_call(body.as_ref()), + Term::Apply { function, argument } => { + contains_recursive_call(function.as_ref()) + || contains_recursive_call(argument.as_ref()) + || { + let func = function.as_ref(); + let arg = argument.as_ref(); + + matches!(func, Term::Var(_)) && *func == *arg + } + } + Term::Force(f) => contains_recursive_call(f.as_ref()), + Term::Case { .. } => todo!(), + Term::Constr { .. } => todo!(), + _ => false, + } +} + fn cast_data_reducer(term: &mut Term) { match term { Term::Delay(d) => { diff --git a/examples/acceptance_tests/036/aiken.lock b/examples/acceptance_tests/036/aiken.lock index 899bc846..dfd1c14b 100644 --- a/examples/acceptance_tests/036/aiken.lock +++ b/examples/acceptance_tests/036/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706816, nanos_since_epoch = 863972000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716845, nanos_since_epoch = 204842000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/036/plutus.json b/examples/acceptance_tests/036/plutus.json index 7d4b0188..470d1892 100644 --- a/examples/acceptance_tests/036/plutus.json +++ b/examples/acceptance_tests/036/plutus.json @@ -5,7 +5,7 @@ "plutusVersion": "v2", "compiler": { "name": "Aiken", - "version": "v1.0.19-alpha+fba89a9" + "version": "v1.0.20-alpha+49bd4ba" } }, "validators": [ @@ -25,8 +25,8 @@ } } ], - "compiledCode": "589101000032323232323232322225333005323253330073370e90000008a5114a0600e6ea8004c8cc88c8cc00400400c894ccc0340045300103d87a800013232533300c300500213374a90001980800125eb804cc010010004c044008c03c004dd61800980298009802801119baf300230060010052300b00114984d9588c010dd5000ab9a5573aaae7955cfaba05742ae881", - "hash": "3b827f248a63f0205f83d56e749e9ead2271bf220b53fc7615a5f9d3" + "compiledCode": "588c01000032323232323232322225333005323253330073370e90000008a5114a0600e6ea8004c8c8c8cc004004008894ccc0300045300103d87a800013232533300b3375e600c6014004012266e9520003300f0024bd70099802002000980800118070009bac30013005300130050022300b00114984d9588c010dd5000ab9a5573aaae7955cfaba05742ae881", + "hash": "38ee17fb5d1ca9bdb5284f9913eebdbc395331bbb1f0dc0ca7673777" }, { "title": "spend.spend", @@ -42,8 +42,8 @@ "$ref": "#/definitions/Data" } }, - "compiledCode": "58e80100003232323232323232222533300532323300100100222533300b00114a026464a66601466601464a66601c00229445281991199119299980799b874800800440084dd5980a180700198079baa002323300100100322533301100114c0103d87a800013232323253330123371e00e004266e95200033016374c00297ae0133006006003375660260066eb8c044008c054008c04c0052f5bded8c06eacc03cc040c024009221050000000000004a0944528899802002000980780118068009bac300a300b300b3004300a300400114984d9588c010dd5000ab9a5573aaae7955cfaba05742ae89", - "hash": "17aaea8892c949437d908569b1426f5e290789e16ba56627b0d393e5" + "compiledCode": "58ef010000323232323232323222253330053232323300100100322533300c00114a026464a666016600a00429444cc010010004c040008c0380048c8ccc020c94ccc0300045288a50323232533300b3370e90010008a5eb7bdb1804dd59808180500118059baa00133002001489050000000000003756601a601c600e004941289119198008008019129998070008a60103d87a8000132323232533300f3371e00e004266e95200033013374c00297ae0133006006003375660200066eb8c038008c048008c040004dd61805180598059802180518020008a4c26cac460086ea80055cd2ab9d5573caae7d5d02ba15745", + "hash": "9443522a4b0f3aadcaad00154d7d05fa299da8dea69ae24a97b10f70" } ], "definitions": { diff --git a/examples/acceptance_tests/047/plutus.json b/examples/acceptance_tests/047/plutus.json index aa2ed10f..926196fe 100644 --- a/examples/acceptance_tests/047/plutus.json +++ b/examples/acceptance_tests/047/plutus.json @@ -5,7 +5,7 @@ "plutusVersion": "v2", "compiler": { "name": "Aiken", - "version": "v1.0.19-alpha+fba89a9" + "version": "v1.0.20-alpha+49bd4ba" } }, "validators": [ diff --git a/examples/acceptance_tests/054/aiken.lock b/examples/acceptance_tests/054/aiken.lock index 17b75408..e720ecc1 100644 --- a/examples/acceptance_tests/054/aiken.lock +++ b/examples/acceptance_tests/054/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706808, nanos_since_epoch = 625676000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716843, nanos_since_epoch = 556908000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/055/aiken.lock b/examples/acceptance_tests/055/aiken.lock index 456710b8..3a331e02 100644 --- a/examples/acceptance_tests/055/aiken.lock +++ b/examples/acceptance_tests/055/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706829, nanos_since_epoch = 84658000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716846, nanos_since_epoch = 459057000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/061/aiken.lock b/examples/acceptance_tests/061/aiken.lock index 3de08198..aced8135 100644 --- a/examples/acceptance_tests/061/aiken.lock +++ b/examples/acceptance_tests/061/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706898, nanos_since_epoch = 359504000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716857, nanos_since_epoch = 45623000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/063/aiken.lock b/examples/acceptance_tests/063/aiken.lock index e70000be..84bd37c9 100644 --- a/examples/acceptance_tests/063/aiken.lock +++ b/examples/acceptance_tests/063/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706834, nanos_since_epoch = 974459000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716847, nanos_since_epoch = 25388000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/067/aiken.lock b/examples/acceptance_tests/067/aiken.lock index 87a57a0b..f1da1df7 100644 --- a/examples/acceptance_tests/067/aiken.lock +++ b/examples/acceptance_tests/067/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706916, nanos_since_epoch = 111453000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716859, nanos_since_epoch = 117810000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/068/aiken.lock b/examples/acceptance_tests/068/aiken.lock index 7da6ef7e..5fab9352 100644 --- a/examples/acceptance_tests/068/aiken.lock +++ b/examples/acceptance_tests/068/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706906, nanos_since_epoch = 630999000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716857, nanos_since_epoch = 470985000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/071/aiken.lock b/examples/acceptance_tests/071/aiken.lock index f393a528..47c1fa43 100644 --- a/examples/acceptance_tests/071/aiken.lock +++ b/examples/acceptance_tests/071/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706780, nanos_since_epoch = 710429000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716808, nanos_since_epoch = 234542000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/071/plutus.json b/examples/acceptance_tests/071/plutus.json index d5eccfb5..cde69571 100644 --- a/examples/acceptance_tests/071/plutus.json +++ b/examples/acceptance_tests/071/plutus.json @@ -5,7 +5,7 @@ "plutusVersion": "v2", "compiler": { "name": "Aiken", - "version": "v1.0.19-alpha+fba89a9" + "version": "v1.0.20-alpha+49bd4ba" } }, "validators": [ diff --git a/examples/acceptance_tests/072/aiken.lock b/examples/acceptance_tests/072/aiken.lock index f225f193..27425181 100644 --- a/examples/acceptance_tests/072/aiken.lock +++ b/examples/acceptance_tests/072/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706868, nanos_since_epoch = 407664000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716853, nanos_since_epoch = 236259000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/074/aiken.lock b/examples/acceptance_tests/074/aiken.lock index f04d9fdc..1b17aa71 100644 --- a/examples/acceptance_tests/074/aiken.lock +++ b/examples/acceptance_tests/074/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706857, nanos_since_epoch = 777183000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716850, nanos_since_epoch = 270215000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/077/aiken.lock b/examples/acceptance_tests/077/aiken.lock index b2f93323..0ee3881c 100644 --- a/examples/acceptance_tests/077/aiken.lock +++ b/examples/acceptance_tests/077/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706755, nanos_since_epoch = 497541000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716807, nanos_since_epoch = 474081000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/077/plutus.json b/examples/acceptance_tests/077/plutus.json index b77be437..ba6f24d6 100644 --- a/examples/acceptance_tests/077/plutus.json +++ b/examples/acceptance_tests/077/plutus.json @@ -5,7 +5,7 @@ "plutusVersion": "v2", "compiler": { "name": "Aiken", - "version": "v1.0.19-alpha+fba89a9" + "version": "v1.0.20-alpha+49bd4ba" } }, "validators": [ @@ -31,8 +31,8 @@ } } ], - "compiledCode": "5901cb01000032323232323232323223222232533300932323232533300d3370e9000180600089919191919191919191919299980d980f0010991919299980d99b874800000454ccc06cc8cc004004030894ccc08000452809919299980f99baf3024301d00201a14a2266008008002604800460440022a66603666e1c009200213371e00602e29405858c064050dd6980d8011bae301900116301c00132332232533301a3370e9001000880109bab301f30180033018002323300100100222533301c00114c0103d87a8000132323232533301d3371e01e004266e95200033021374c00297ae01330060060033756603c0066eb8c070008c080008c0780052f5bded8c0646600200200444a666036002297adef6c60132323232533301c3371e911000021003133020337606ea4008dd3000998030030019bab301d003375c6036004603e004603a0026eacc068004c068004c064004c060004c05c008dd6180a80098068029bae3013001300b0011630110013011002300f001300700214984d958c94ccc024cdc3a40000022a666018600e0062930b0a99980499b874800800454ccc030c01c00c52616163007002375c0024600a6ea80048c00cdd5000ab9a5573aaae7955cfaba05742ae89", - "hash": "74ea61c630a70bf38419c2e025e82a014d90897dc668de7314da8f3b" + "compiledCode": "5901d801000032323232323232323223222232533300932323232533300d3370e9000180600089919191919191919191919299980d980f0010991919299980d99b874800000454ccc06cc8cc004004030894ccc08000452809919299980f99baf3024301d00201a14a2266008008002604800460440022a66603666e1c009200213371e00602e29405858c064050dd6980d8011bae301900116301c00132323232533301a3370e90010008a5eb7bdb1804dd5980f980c001180c0009980080100511191980080080191299980f0008a60103d87a8000132323232533301f3371e00e004266e95200033023374c00297ae0133006006003375660400066eb8c078008c088008c080004c8cc00400922010022323300100100322533301d00114bd6f7b630099191919299980f19b8f0070021003133022337606ea4008dd3000998030030019bab301f003375c603a0046042004603e0026eacc068004c068004c064004c060004c05c008dd6180a80098068029bae3013001300b0011630110013011002300f001300700214984d958c94ccc024cdc3a40000022a666018600e0062930b0a99980499b874800800454ccc030c01c00c52616163007002375c0024600a6ea80048c00cdd5000ab9a5573aaae7955cfaba05742ae89", + "hash": "6d2b4c88ef6a86a3b87e78ef19e679ea4143e8f04b942295938f911b" } ], "definitions": { diff --git a/examples/acceptance_tests/079/plutus.json b/examples/acceptance_tests/079/plutus.json index 1bfe9efc..440918f6 100644 --- a/examples/acceptance_tests/079/plutus.json +++ b/examples/acceptance_tests/079/plutus.json @@ -5,7 +5,7 @@ "plutusVersion": "v2", "compiler": { "name": "Aiken", - "version": "v1.0.19-alpha+fba89a9" + "version": "v1.0.20-alpha+49bd4ba" } }, "validators": [ diff --git a/examples/acceptance_tests/082/aiken.lock b/examples/acceptance_tests/082/aiken.lock index 98d352e7..0c27676a 100644 --- a/examples/acceptance_tests/082/aiken.lock +++ b/examples/acceptance_tests/082/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706798, nanos_since_epoch = 379573000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716809, nanos_since_epoch = 524620000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/083/aiken.lock b/examples/acceptance_tests/083/aiken.lock index 9f84751b..003439c9 100644 --- a/examples/acceptance_tests/083/aiken.lock +++ b/examples/acceptance_tests/083/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706766, nanos_since_epoch = 666302000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716807, nanos_since_epoch = 480618000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/084/aiken.lock b/examples/acceptance_tests/084/aiken.lock index 93833428..097825a7 100644 --- a/examples/acceptance_tests/084/aiken.lock +++ b/examples/acceptance_tests/084/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706772, nanos_since_epoch = 628073000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716807, nanos_since_epoch = 474125000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/085/aiken.lock b/examples/acceptance_tests/085/aiken.lock index df90a3d4..acd05d83 100644 --- a/examples/acceptance_tests/085/aiken.lock +++ b/examples/acceptance_tests/085/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706791, nanos_since_epoch = 935736000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716808, nanos_since_epoch = 236108000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/086/aiken.lock b/examples/acceptance_tests/086/aiken.lock index 3dcf9415..1cbbdf91 100644 --- a/examples/acceptance_tests/086/aiken.lock +++ b/examples/acceptance_tests/086/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706874, nanos_since_epoch = 289174000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716853, nanos_since_epoch = 191816000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/086/plutus.json b/examples/acceptance_tests/086/plutus.json index 4bf707e9..4349cfd9 100644 --- a/examples/acceptance_tests/086/plutus.json +++ b/examples/acceptance_tests/086/plutus.json @@ -5,7 +5,7 @@ "plutusVersion": "v2", "compiler": { "name": "Aiken", - "version": "v1.0.19-alpha+fba89a9" + "version": "v1.0.20-alpha+49bd4ba" } }, "validators": [ @@ -23,8 +23,8 @@ "$ref": "#/definitions/Data" } }, - "compiledCode": "5901d40100003232323232323232222533300632323232533300a3370e90000008a5114a0600e0026018002600c008664464a66601266e1d200000113232533300e3010002132498c94ccc030cdc3a400000226464a66602260260042649319299980799b87480000044c8c94ccc050c0580084c9263253330123370e9000000899191919299980c980d8010991924c64a66603066e1d200000113232533301d301f002132498c94ccc06ccdc3a400000226464a666040604400426493180b8008b1810000980d0010a99980d99b87480080044c8c8c8c8c8c94ccc090c09800852616375a604800260480046eb4c088004c088008dd69810000980d0010b180c0008b180e800980b8018a99980c19b874800800454ccc06cc05c00c52616163015002301000316301900130190023017001301100216300f001163014001300e00216300c001163011001300b0021533300c3370e90010008a99980798058010a4c2c2c60120022c601c00260100042c600c002464a66601066e1d200000113232533300d300f002149858dd7180680098038010a99980419b87480080044c8c94ccc034c03c00852616375c601a002600e0042c600a00200629309b2b118021baa001230043754002ae6955ceaab9e5573eae855d101", - "hash": "976408e30dc4c59008e5e44bc23771f926b55e9b4de505fb3b5ede43" + "compiledCode": "5901d10100003232323232323232222533300632323232533300a3370e90000008a5114a0600e0026018002600c0086464a66601066e1d200000113232533300d300f002132498c94ccc02ccdc3a400000226464a66602060240042649319299980719b87480000044c8c94ccc04cc0540084c9263253330113370e9000000899191919299980c180d0010991924c64a66602e66e1d200000113232533301c301e002132498c94ccc068cdc3a400000226464a66603e604200426493180b0008b180f800980c8010a99980d19b87480080044c8c8c8c8c8c94ccc08cc09400852616375a604600260460046eb4c084004c084008dd6980f800980c8010b180b8008b180e000980b0018a99980b99b874800800454ccc068c05800c52616163014002300f00316301800130180023016001301000216300e001163013001300d00216300b001163010001300a0021533300b3370e90010008a99980718050010a4c2c2c60100022c601a002600e00a2c600a008464a66601066e1d200000113232533300d300f002149858dd7180680098038010a99980419b87480080044c8c94ccc034c03c00852616375c601a002600e0042c600a00229309b2b118021baa001230043754002ae6955ceaab9e5573eae855d11", + "hash": "2c0c9ae697fdda3aed4aa647b854b6ef9e2fdae23df1ae516d9f4984" } ], "definitions": { diff --git a/examples/acceptance_tests/087/aiken.lock b/examples/acceptance_tests/087/aiken.lock index 46eed5bb..9d2cb7fd 100644 --- a/examples/acceptance_tests/087/aiken.lock +++ b/examples/acceptance_tests/087/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706851, nanos_since_epoch = 929421000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716850, nanos_since_epoch = 207153000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/088/aiken.lock b/examples/acceptance_tests/088/aiken.lock index b7f5a632..0c490dde 100644 --- a/examples/acceptance_tests/088/aiken.lock +++ b/examples/acceptance_tests/088/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706886, nanos_since_epoch = 86575000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716853, nanos_since_epoch = 778242000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] diff --git a/examples/acceptance_tests/089/aiken.lock b/examples/acceptance_tests/089/aiken.lock index 6dfd562c..6f97dad6 100644 --- a/examples/acceptance_tests/089/aiken.lock +++ b/examples/acceptance_tests/089/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1696706844, nanos_since_epoch = 775723000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"] +"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1698716849, nanos_since_epoch = 96268000 }, "a721cf2738274f806efefb5a33c6ff9ae049476f0d45a42049b71793949f4d1d"]