Use a better algorithm for inlining single occurrences
This commit is contained in:
parent
49bd4ba33d
commit
598ec5eaef
|
@ -201,7 +201,10 @@ impl<'a> CodeGenerator<'a> {
|
||||||
term,
|
term,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// println!("Program: {}", program.to_pretty());
|
||||||
|
|
||||||
program = aiken_optimize_and_intern(program);
|
program = aiken_optimize_and_intern(program);
|
||||||
|
// println!("Program After: {}", program.to_pretty());
|
||||||
|
|
||||||
// This is very important to call here.
|
// This is very important to call here.
|
||||||
// If this isn't done, re-using the same instance
|
// If this isn't done, re-using the same instance
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use std::rc::Rc;
|
use std::{rc::Rc, vec};
|
||||||
|
|
||||||
use indexmap::IndexMap;
|
use indexmap::IndexMap;
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
@ -15,10 +15,31 @@ pub struct Occurrence {
|
||||||
lambda_count: usize,
|
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<Name> {
|
impl Program<Name> {
|
||||||
pub fn lambda_reducer(self) -> Program<Name> {
|
pub fn lambda_reducer(self) -> Program<Name> {
|
||||||
let mut term = self.term;
|
let mut term = self.term;
|
||||||
lambda_reducer(&mut term);
|
lambda_reducer(&mut term, &mut vec![], &mut vec![], &mut IdGen::new());
|
||||||
Program {
|
Program {
|
||||||
version: self.version,
|
version: self.version,
|
||||||
term,
|
term,
|
||||||
|
@ -50,7 +71,7 @@ impl Program<Name> {
|
||||||
|
|
||||||
pub fn inline_reducer(self) -> Program<Name> {
|
pub fn inline_reducer(self) -> Program<Name> {
|
||||||
let mut term = self.term;
|
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_direct_reducer(&mut term);
|
||||||
inline_identity_reducer(&mut term);
|
inline_identity_reducer(&mut term);
|
||||||
|
|
||||||
|
@ -168,42 +189,63 @@ fn force_delay_reducer(term: &mut Term<Name>) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn lambda_reducer(term: &mut Term<Name>) {
|
fn lambda_reducer(
|
||||||
|
term: &mut Term<Name>,
|
||||||
|
reduce_stack: &mut Vec<Option<(Term<Name>, u64)>>,
|
||||||
|
lambda_applied_ids: &mut Vec<u64>,
|
||||||
|
id_gen: &mut IdGen,
|
||||||
|
) {
|
||||||
match term {
|
match term {
|
||||||
// TODO: change this to handle any amount of consecutive applies and lambdas
|
// TODO: change this to handle any amount of consecutive applies and lambdas
|
||||||
Term::Apply { function, argument } => {
|
Term::Apply { function, argument } => {
|
||||||
let func = Rc::make_mut(function);
|
|
||||||
lambda_reducer(func);
|
|
||||||
|
|
||||||
let arg = Rc::make_mut(argument);
|
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 {
|
let next_id = id_gen.next_id();
|
||||||
parameter_name,
|
|
||||||
body,
|
let arg_applied = match arg {
|
||||||
} = func
|
Term::Constant(c) if matches!(c.as_ref(), Constant::String(_)) => None,
|
||||||
{
|
Term::Constant(_) | Term::Var(_) | Term::Builtin(_) => Some((arg.clone(), next_id)),
|
||||||
match arg {
|
_ => None,
|
||||||
Term::Constant(c) if matches!(c.as_ref(), Constant::String(_)) => (),
|
};
|
||||||
Term::Constant(_) | Term::Var(_) | Term::Builtin(_) => {
|
|
||||||
let body = Rc::make_mut(body);
|
reduce_stack.push(arg_applied);
|
||||||
*term = substitute_term(body, parameter_name.clone(), arg);
|
|
||||||
}
|
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) => {
|
Term::Delay(d) => {
|
||||||
let d = Rc::make_mut(d);
|
let d = Rc::make_mut(d);
|
||||||
lambda_reducer(d);
|
lambda_reducer(d, reduce_stack, lambda_applied_ids, id_gen);
|
||||||
}
|
}
|
||||||
Term::Lambda { 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);
|
let body = Rc::make_mut(body);
|
||||||
lambda_reducer(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) => {
|
Term::Force(f) => {
|
||||||
let f = Rc::make_mut(f);
|
let f = Rc::make_mut(f);
|
||||||
lambda_reducer(f);
|
lambda_reducer(f, reduce_stack, lambda_applied_ids, id_gen);
|
||||||
}
|
}
|
||||||
Term::Case { .. } => todo!(),
|
Term::Case { .. } => todo!(),
|
||||||
Term::Constr { .. } => todo!(),
|
Term::Constr { .. } => todo!(),
|
||||||
|
@ -312,43 +354,71 @@ fn inline_identity_reducer(term: &mut Term<Name>) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn inline_single_occurrence_reducer(term: &mut Term<Name>) {
|
fn inline_single_occurrence_reducer(
|
||||||
|
term: &mut Term<Name>,
|
||||||
|
reduce_stack: &mut Vec<(Term<Name>, u64)>,
|
||||||
|
lambda_applied_ids: &mut Vec<u64>,
|
||||||
|
id_gen: &mut IdGen,
|
||||||
|
) {
|
||||||
match term {
|
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
|
// TODO: change this to handle any amount of consecutive applies and lambdas
|
||||||
Term::Apply { function, argument } => {
|
Term::Apply { function, argument } => {
|
||||||
let func = Rc::make_mut(function);
|
|
||||||
let arg = Rc::make_mut(argument);
|
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);
|
let next_id = id_gen.next_id();
|
||||||
inline_single_occurrence_reducer(arg);
|
|
||||||
|
|
||||||
if let Term::Lambda {
|
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,
|
parameter_name,
|
||||||
body,
|
body,
|
||||||
} = func
|
} => {
|
||||||
{
|
// 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 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 occurrences == 1 {
|
||||||
if delays == 0 {
|
if !is_recursive_call
|
||||||
*term = substitute_term(body.as_ref(), parameter_name.clone(), arg);
|
&& (delays == 0
|
||||||
} else if let Term::Var(_)
|
|| matches!(
|
||||||
|
&arg_term,
|
||||||
|
Term::Var(_)
|
||||||
| Term::Constant(_)
|
| Term::Constant(_)
|
||||||
| Term::Error
|
|
||||||
| Term::Delay(_)
|
| Term::Delay(_)
|
||||||
| Term::Lambda { .. }
|
| Term::Lambda { .. }
|
||||||
| Term::Builtin(_) = arg
|
| 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
|
// This will strip out unused terms that can't throw an error by themselves
|
||||||
} else if occurrences == 0 {
|
} else if occurrences == 0 {
|
||||||
|
@ -356,16 +426,20 @@ fn inline_single_occurrence_reducer(term: &mut Term<Name>) {
|
||||||
| Term::Constant(_)
|
| Term::Constant(_)
|
||||||
| Term::Delay(_)
|
| Term::Delay(_)
|
||||||
| Term::Lambda { .. }
|
| 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) => {
|
Term::Force(f) => {
|
||||||
let f = Rc::make_mut(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::Case { .. } => todo!(),
|
||||||
Term::Constr { .. } => todo!(),
|
Term::Constr { .. } => todo!(),
|
||||||
|
@ -373,6 +447,27 @@ fn inline_single_occurrence_reducer(term: &mut Term<Name>) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn contains_recursive_call(body: &Term<Name>) -> 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<Name>) {
|
fn cast_data_reducer(term: &mut Term<Name>) {
|
||||||
match term {
|
match term {
|
||||||
Term::Delay(d) => {
|
Term::Delay(d) => {
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"plutusVersion": "v2",
|
"plutusVersion": "v2",
|
||||||
"compiler": {
|
"compiler": {
|
||||||
"name": "Aiken",
|
"name": "Aiken",
|
||||||
"version": "v1.0.19-alpha+fba89a9"
|
"version": "v1.0.20-alpha+49bd4ba"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"validators": [
|
"validators": [
|
||||||
|
@ -25,8 +25,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"compiledCode": "589101000032323232323232322225333005323253330073370e90000008a5114a0600e6ea8004c8cc88c8cc00400400c894ccc0340045300103d87a800013232533300c300500213374a90001980800125eb804cc010010004c044008c03c004dd61800980298009802801119baf300230060010052300b00114984d9588c010dd5000ab9a5573aaae7955cfaba05742ae881",
|
"compiledCode": "588c01000032323232323232322225333005323253330073370e90000008a5114a0600e6ea8004c8c8c8cc004004008894ccc0300045300103d87a800013232533300b3375e600c6014004012266e9520003300f0024bd70099802002000980800118070009bac30013005300130050022300b00114984d9588c010dd5000ab9a5573aaae7955cfaba05742ae881",
|
||||||
"hash": "3b827f248a63f0205f83d56e749e9ead2271bf220b53fc7615a5f9d3"
|
"hash": "38ee17fb5d1ca9bdb5284f9913eebdbc395331bbb1f0dc0ca7673777"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "spend.spend",
|
"title": "spend.spend",
|
||||||
|
@ -42,8 +42,8 @@
|
||||||
"$ref": "#/definitions/Data"
|
"$ref": "#/definitions/Data"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"compiledCode": "58e80100003232323232323232222533300532323300100100222533300b00114a026464a66601466601464a66601c00229445281991199119299980799b874800800440084dd5980a180700198079baa002323300100100322533301100114c0103d87a800013232323253330123371e00e004266e95200033016374c00297ae0133006006003375660260066eb8c044008c054008c04c0052f5bded8c06eacc03cc040c024009221050000000000004a0944528899802002000980780118068009bac300a300b300b3004300a300400114984d9588c010dd5000ab9a5573aaae7955cfaba05742ae89",
|
"compiledCode": "58ef010000323232323232323222253330053232323300100100322533300c00114a026464a666016600a00429444cc010010004c040008c0380048c8ccc020c94ccc0300045288a50323232533300b3370e90010008a5eb7bdb1804dd59808180500118059baa00133002001489050000000000003756601a601c600e004941289119198008008019129998070008a60103d87a8000132323232533300f3371e00e004266e95200033013374c00297ae0133006006003375660200066eb8c038008c048008c040004dd61805180598059802180518020008a4c26cac460086ea80055cd2ab9d5573caae7d5d02ba15745",
|
||||||
"hash": "17aaea8892c949437d908569b1426f5e290789e16ba56627b0d393e5"
|
"hash": "9443522a4b0f3aadcaad00154d7d05fa299da8dea69ae24a97b10f70"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"definitions": {
|
"definitions": {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"plutusVersion": "v2",
|
"plutusVersion": "v2",
|
||||||
"compiler": {
|
"compiler": {
|
||||||
"name": "Aiken",
|
"name": "Aiken",
|
||||||
"version": "v1.0.19-alpha+fba89a9"
|
"version": "v1.0.20-alpha+49bd4ba"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"validators": [
|
"validators": [
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"plutusVersion": "v2",
|
"plutusVersion": "v2",
|
||||||
"compiler": {
|
"compiler": {
|
||||||
"name": "Aiken",
|
"name": "Aiken",
|
||||||
"version": "v1.0.19-alpha+fba89a9"
|
"version": "v1.0.20-alpha+49bd4ba"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"validators": [
|
"validators": [
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"plutusVersion": "v2",
|
"plutusVersion": "v2",
|
||||||
"compiler": {
|
"compiler": {
|
||||||
"name": "Aiken",
|
"name": "Aiken",
|
||||||
"version": "v1.0.19-alpha+fba89a9"
|
"version": "v1.0.20-alpha+49bd4ba"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"validators": [
|
"validators": [
|
||||||
|
@ -31,8 +31,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"compiledCode": "5901cb01000032323232323232323223222232533300932323232533300d3370e9000180600089919191919191919191919299980d980f0010991919299980d99b874800000454ccc06cc8cc004004030894ccc08000452809919299980f99baf3024301d00201a14a2266008008002604800460440022a66603666e1c009200213371e00602e29405858c064050dd6980d8011bae301900116301c00132332232533301a3370e9001000880109bab301f30180033018002323300100100222533301c00114c0103d87a8000132323232533301d3371e01e004266e95200033021374c00297ae01330060060033756603c0066eb8c070008c080008c0780052f5bded8c0646600200200444a666036002297adef6c60132323232533301c3371e911000021003133020337606ea4008dd3000998030030019bab301d003375c6036004603e004603a0026eacc068004c068004c064004c060004c05c008dd6180a80098068029bae3013001300b0011630110013011002300f001300700214984d958c94ccc024cdc3a40000022a666018600e0062930b0a99980499b874800800454ccc030c01c00c52616163007002375c0024600a6ea80048c00cdd5000ab9a5573aaae7955cfaba05742ae89",
|
"compiledCode": "5901d801000032323232323232323223222232533300932323232533300d3370e9000180600089919191919191919191919299980d980f0010991919299980d99b874800000454ccc06cc8cc004004030894ccc08000452809919299980f99baf3024301d00201a14a2266008008002604800460440022a66603666e1c009200213371e00602e29405858c064050dd6980d8011bae301900116301c00132323232533301a3370e90010008a5eb7bdb1804dd5980f980c001180c0009980080100511191980080080191299980f0008a60103d87a8000132323232533301f3371e00e004266e95200033023374c00297ae0133006006003375660400066eb8c078008c088008c080004c8cc00400922010022323300100100322533301d00114bd6f7b630099191919299980f19b8f0070021003133022337606ea4008dd3000998030030019bab301f003375c603a0046042004603e0026eacc068004c068004c064004c060004c05c008dd6180a80098068029bae3013001300b0011630110013011002300f001300700214984d958c94ccc024cdc3a40000022a666018600e0062930b0a99980499b874800800454ccc030c01c00c52616163007002375c0024600a6ea80048c00cdd5000ab9a5573aaae7955cfaba05742ae89",
|
||||||
"hash": "74ea61c630a70bf38419c2e025e82a014d90897dc668de7314da8f3b"
|
"hash": "6d2b4c88ef6a86a3b87e78ef19e679ea4143e8f04b942295938f911b"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"definitions": {
|
"definitions": {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"plutusVersion": "v2",
|
"plutusVersion": "v2",
|
||||||
"compiler": {
|
"compiler": {
|
||||||
"name": "Aiken",
|
"name": "Aiken",
|
||||||
"version": "v1.0.19-alpha+fba89a9"
|
"version": "v1.0.20-alpha+49bd4ba"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"validators": [
|
"validators": [
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"plutusVersion": "v2",
|
"plutusVersion": "v2",
|
||||||
"compiler": {
|
"compiler": {
|
||||||
"name": "Aiken",
|
"name": "Aiken",
|
||||||
"version": "v1.0.19-alpha+fba89a9"
|
"version": "v1.0.20-alpha+49bd4ba"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"validators": [
|
"validators": [
|
||||||
|
@ -23,8 +23,8 @@
|
||||||
"$ref": "#/definitions/Data"
|
"$ref": "#/definitions/Data"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"compiledCode": "5901d40100003232323232323232222533300632323232533300a3370e90000008a5114a0600e0026018002600c008664464a66601266e1d200000113232533300e3010002132498c94ccc030cdc3a400000226464a66602260260042649319299980799b87480000044c8c94ccc050c0580084c9263253330123370e9000000899191919299980c980d8010991924c64a66603066e1d200000113232533301d301f002132498c94ccc06ccdc3a400000226464a666040604400426493180b8008b1810000980d0010a99980d99b87480080044c8c8c8c8c8c94ccc090c09800852616375a604800260480046eb4c088004c088008dd69810000980d0010b180c0008b180e800980b8018a99980c19b874800800454ccc06cc05c00c52616163015002301000316301900130190023017001301100216300f001163014001300e00216300c001163011001300b0021533300c3370e90010008a99980798058010a4c2c2c60120022c601c00260100042c600c002464a66601066e1d200000113232533300d300f002149858dd7180680098038010a99980419b87480080044c8c94ccc034c03c00852616375c601a002600e0042c600a00200629309b2b118021baa001230043754002ae6955ceaab9e5573eae855d101",
|
"compiledCode": "5901d10100003232323232323232222533300632323232533300a3370e90000008a5114a0600e0026018002600c0086464a66601066e1d200000113232533300d300f002132498c94ccc02ccdc3a400000226464a66602060240042649319299980719b87480000044c8c94ccc04cc0540084c9263253330113370e9000000899191919299980c180d0010991924c64a66602e66e1d200000113232533301c301e002132498c94ccc068cdc3a400000226464a66603e604200426493180b0008b180f800980c8010a99980d19b87480080044c8c8c8c8c8c94ccc08cc09400852616375a604600260460046eb4c084004c084008dd6980f800980c8010b180b8008b180e000980b0018a99980b99b874800800454ccc068c05800c52616163014002300f00316301800130180023016001301000216300e001163013001300d00216300b001163010001300a0021533300b3370e90010008a99980718050010a4c2c2c60100022c601a002600e00a2c600a008464a66601066e1d200000113232533300d300f002149858dd7180680098038010a99980419b87480080044c8c94ccc034c03c00852616375c601a002600e0042c600a00229309b2b118021baa001230043754002ae6955ceaab9e5573eae855d11",
|
||||||
"hash": "976408e30dc4c59008e5e44bc23771f926b55e9b4de505fb3b5ede43"
|
"hash": "2c0c9ae697fdda3aed4aa647b854b6ef9e2fdae23df1ae516d9f4984"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"definitions": {
|
"definitions": {
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
|
@ -13,4 +13,4 @@ requirements = []
|
||||||
source = "github"
|
source = "github"
|
||||||
|
|
||||||
[etags]
|
[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"]
|
||||||
|
|
Loading…
Reference in New Issue