fix: some function dependency tree path was not being updated in order

fix: revert to old implicit way of casting to data for now
This commit is contained in:
microproofs 2023-07-31 12:57:15 -04:00 committed by Kasey
parent a45ff692a6
commit bfa4cc2efc
11 changed files with 112 additions and 99 deletions

View File

@ -39,9 +39,8 @@ use self::{
air::Air, air::Air,
builder::{ builder::{
cast_validator_args, constants_ir, convert_type_to_data, extract_constant, cast_validator_args, constants_ir, convert_type_to_data, extract_constant,
lookup_data_type_by_tipo, modify_self_calls, rearrange_list_clauses, lookup_data_type_by_tipo, modify_self_calls, rearrange_list_clauses, AssignmentProperties,
remove_tuple_data_casts, AssignmentProperties, ClauseProperties, DataTypeKey, ClauseProperties, DataTypeKey, FunctionAccessKey, UserFunction,
FunctionAccessKey, UserFunction,
}, },
tree::{AirExpression, AirTree, TreePath}, tree::{AirExpression, AirTree, TreePath},
}; };
@ -250,16 +249,7 @@ impl<'a> CodeGenerator<'a> {
tail, tail,
.. ..
} => AirTree::list( } => AirTree::list(
elements elements.iter().map(|elem| self.build(elem)).collect_vec(),
.iter()
.map(|elem| {
if tipo.is_map() {
self.build(elem)
} else {
AirTree::cast_to_data(self.build(elem), elem.tipo())
}
})
.collect_vec(),
tipo.clone(), tipo.clone(),
tail.as_ref().map(|tail| self.build(tail)), tail.as_ref().map(|tail| self.build(tail)),
), ),
@ -300,7 +290,14 @@ impl<'a> CodeGenerator<'a> {
let constr_args = args let constr_args = args
.iter() .iter()
.map(|arg| AirTree::cast_to_data(self.build(&arg.value), arg.value.tipo())) .zip(constr_tipo.arg_types().unwrap())
.map(|(arg, tipo)| {
if tipo.is_data() {
AirTree::cast_to_data(self.build(&arg.value), arg.value.tipo())
} else {
self.build(&arg.value)
}
})
.collect_vec(); .collect_vec();
AirTree::create_constr(constr_index, constr_tipo.clone(), constr_args) AirTree::create_constr(constr_index, constr_tipo.clone(), constr_args)
@ -604,10 +601,7 @@ impl<'a> CodeGenerator<'a> {
}, },
TypedExpr::Tuple { tipo, elems, .. } => AirTree::tuple( TypedExpr::Tuple { tipo, elems, .. } => AirTree::tuple(
elems elems.iter().map(|elem| self.build(elem)).collect_vec(),
.iter()
.map(|elem| AirTree::cast_to_data(self.build(elem), elem.tipo()))
.collect_vec(),
tipo.clone(), tipo.clone(),
), ),
@ -2196,7 +2190,7 @@ impl<'a> CodeGenerator<'a> {
.find(|(defined_index, _nm)| defined_index == index) .find(|(defined_index, _nm)| defined_index == index)
{ {
previous_defined_names.push((*index, prev_name.clone(), name.clone())); previous_defined_names.push((*index, prev_name.clone(), name.clone()));
} else if name != "_" { } else {
assert!(defined_indices.insert((*index, name.clone()))); assert!(defined_indices.insert((*index, name.clone())));
names_to_define.push((*index, name.clone())); names_to_define.push((*index, name.clone()));
} }
@ -2246,6 +2240,7 @@ impl<'a> CodeGenerator<'a> {
names.push(name); names.push(name);
names names
}); });
sequence.insert( sequence.insert(
0, 0,
AirTree::tuple_access( AirTree::tuple_access(
@ -2555,10 +2550,11 @@ impl<'a> CodeGenerator<'a> {
// First we need to sort functions by dependencies // First we need to sort functions by dependencies
// here's also where we deal with mutual recursion // here's also where we deal with mutual recursion
let mut sorted_function_vec = vec![]; let mut sorted_function_vec = vec![];
let mut validator_hoistable_mut = validator_hoistable.clone();
while let Some((generic_func, variant)) = validator_hoistable_mut.pop() { let functions_to_hoist_cloned = functions_to_hoist.clone();
let function_variants = functions_to_hoist
while let Some((generic_func, variant)) = validator_hoistable.pop() {
let function_variants = functions_to_hoist_cloned
.get(&generic_func) .get(&generic_func)
.unwrap_or_else(|| panic!("Missing Function Definition")); .unwrap_or_else(|| panic!("Missing Function Definition"));
@ -2571,7 +2567,7 @@ impl<'a> CodeGenerator<'a> {
if !params.is_empty() { if !params.is_empty() {
for (dep_generic_func, dep_variant) in deps.iter() { for (dep_generic_func, dep_variant) in deps.iter() {
if !(dep_generic_func == &generic_func && dep_variant == &variant) { if !(dep_generic_func == &generic_func && dep_variant == &variant) {
validator_hoistable_mut validator_hoistable
.insert(0, (dep_generic_func.clone(), dep_variant.clone())); .insert(0, (dep_generic_func.clone(), dep_variant.clone()));
let remove_index = let remove_index =
sorted_function_vec sorted_function_vec
@ -2585,6 +2581,24 @@ impl<'a> CodeGenerator<'a> {
} }
} }
} }
// Fix dependencies path to be updated to common ancestor
for (dep_key, dep_variant) in deps {
let (func_tree_path, _) = functions_to_hoist
.get(&generic_func)
.unwrap()
.get(&variant)
.unwrap()
.clone();
let (dep_path, _) = functions_to_hoist
.get_mut(dep_key)
.unwrap()
.get_mut(dep_variant)
.unwrap();
*dep_path = func_tree_path.common_ancestor(dep_path);
}
} else { } else {
todo!("Deal with Link later") todo!("Deal with Link later")
} }
@ -2593,22 +2607,6 @@ impl<'a> CodeGenerator<'a> {
} }
sorted_function_vec.dedup(); sorted_function_vec.dedup();
// Fix dependencies path to be updated to common ancestor
for (_, variant_map) in functions_to_hoist.clone().iter() {
for (_, (path, function)) in variant_map {
if let UserFunction::Function { deps, .. } = function {
for (dep_key, dep_variant) in deps {
let (dep_path, _) = functions_to_hoist
.get_mut(dep_key)
.unwrap()
.get_mut(dep_variant)
.unwrap();
*dep_path = path.common_ancestor(dep_path);
}
}
}
}
// Now we need to hoist the functions to the top of the validator // Now we need to hoist the functions to the top of the validator
for (key, variant) in sorted_function_vec { for (key, variant) in sorted_function_vec {
if hoisted_functions if hoisted_functions
@ -3025,10 +3023,6 @@ impl<'a> CodeGenerator<'a> {
monomorphize(air_tree, &mono_types); monomorphize(air_tree, &mono_types);
}); });
function_air_tree_body.traverse_tree_with(&mut |air_tree, _| {
remove_tuple_data_casts(air_tree);
});
func_variants.insert( func_variants.insert(
variant, variant,
( (
@ -3055,10 +3049,6 @@ impl<'a> CodeGenerator<'a> {
monomorphize(air_tree, &mono_types); monomorphize(air_tree, &mono_types);
}); });
function_air_tree_body.traverse_tree_with(&mut |air_tree, _| {
remove_tuple_data_casts(air_tree);
});
let mut function_variant_path = IndexMap::new(); let mut function_variant_path = IndexMap::new();
function_variant_path.insert( function_variant_path.insert(
@ -3322,8 +3312,16 @@ impl<'a> CodeGenerator<'a> {
Term::empty_list() Term::empty_list()
}; };
// move this down here since the constant list path doesn't need to do this
let list_element_type = tipo.get_inner_types()[0].clone();
for arg in args.into_iter().rev() { for arg in args.into_iter().rev() {
term = Term::mk_cons().apply(arg).apply(term); let list_item = if tipo.is_map() {
arg
} else {
builder::convert_type_to_data(arg, &list_element_type)
};
term = Term::mk_cons().apply(list_item).apply(term);
} }
arg_stack.push(term); arg_stack.push(term);
} }
@ -4125,7 +4123,7 @@ impl<'a> CodeGenerator<'a> {
Air::Constr { Air::Constr {
tag: constr_index, tag: constr_index,
count, count,
.. tipo,
} => { } => {
let mut arg_vec = vec![]; let mut arg_vec = vec![];
@ -4135,8 +4133,13 @@ impl<'a> CodeGenerator<'a> {
let mut term = Term::empty_list(); let mut term = Term::empty_list();
for arg in arg_vec.iter().rev() { for (index, arg) in arg_vec.iter().enumerate().rev() {
term = Term::mk_cons().apply(arg.clone()).apply(term); term = Term::mk_cons()
.apply(builder::convert_type_to_data(
arg.clone(),
&tipo.arg_types().unwrap()[index],
))
.apply(term);
} }
term = Term::constr_data() term = Term::constr_data()
@ -4263,9 +4266,11 @@ impl<'a> CodeGenerator<'a> {
arg_stack.push(term); arg_stack.push(term);
} }
Air::Tuple { count, .. } => { Air::Tuple { count, tipo } => {
let mut args = vec![]; let mut args = vec![];
let tuple_sub_types = tipo.get_inner_types();
for _ in 0..count { for _ in 0..count {
let arg = arg_stack.pop().unwrap(); let arg = arg_stack.pop().unwrap();
args.push(arg); args.push(arg);
@ -4300,14 +4305,22 @@ impl<'a> CodeGenerator<'a> {
} }
} else if count == 2 { } else if count == 2 {
let term = Term::mk_pair_data() let term = Term::mk_pair_data()
.apply(args[0].clone()) .apply(builder::convert_type_to_data(
.apply(args[1].clone()); args[0].clone(),
&tuple_sub_types[0],
))
.apply(builder::convert_type_to_data(
args[1].clone(),
&tuple_sub_types[1],
));
arg_stack.push(term); arg_stack.push(term);
} else { } else {
let mut term = Term::empty_list(); let mut term = Term::empty_list();
for arg in args.into_iter().rev() { for (arg, tipo) in args.into_iter().zip(tuple_sub_types.into_iter()).rev() {
term = Term::mk_cons().apply(arg).apply(term); term = Term::mk_cons()
.apply(builder::convert_type_to_data(arg, &tipo))
.apply(term);
} }
arg_stack.push(term); arg_stack.push(term);
} }
@ -4463,7 +4476,8 @@ impl<'a> CodeGenerator<'a> {
let mut term = arg_stack.pop().unwrap(); let mut term = arg_stack.pop().unwrap();
let list_id = self.id_gen.next(); let list_id = self.id_gen.next();
if names.len() == 2 { if tipo.is_2_tuple() {
assert!(names.len() == 2);
term = term term = term
.lambda(names[1].clone()) .lambda(names[1].clone())
.apply(builder::convert_data_to_type( .apply(builder::convert_data_to_type(
@ -4502,15 +4516,7 @@ impl<'a> CodeGenerator<'a> {
arg_stack.push(term); arg_stack.push(term);
} else if check_last_item { } else if check_last_item {
let trace_term = if self.tracing { unreachable!("HOW DID YOU DO THIS");
Term::Error.trace(Term::string("Expected no items for Tuple"))
} else {
Term::Error
};
term = value.delayed_choose_list(term, trace_term);
arg_stack.push(term);
} else { } else {
arg_stack.push(term); arg_stack.push(term);
} }

View File

@ -607,18 +607,6 @@ pub fn modify_self_calls(air_tree: &mut AirTree, func_key: &FunctionAccessKey, v
} }
} }
pub fn remove_tuple_data_casts(air_tree: &mut AirTree) {
if let AirTree::Expression(AirExpression::List { items, .. }) = air_tree {
for item in items {
if let AirTree::Expression(AirExpression::CastToData { value, tipo }) = item {
if tipo.is_2_tuple() {
*item = (**value).clone();
}
}
}
}
}
pub fn pattern_has_conditions(pattern: &TypedPattern) -> bool { pub fn pattern_has_conditions(pattern: &TypedPattern) -> bool {
match pattern { match pattern {
Pattern::Constructor { Pattern::Constructor {

View File

@ -38,8 +38,8 @@
"$ref": "#/definitions/Data" "$ref": "#/definitions/Data"
} }
}, },
"compiledCode": "5901220100003232323232323232323222253330073233323001001222533300e00214a026464a66601a600600429444ccc01401400400cc04800cc0400080048ccc8c888c8c8c8ccc04000528251533301200114a22940c8c94ccc040cdc3a4004002297adef6c601323756602c002601e00460206ea8004cc010004008dd5998051806001240046002002444a66601e004298103d87a800013232323253330103371e00a002266e95200033014374c00497ae01333007007003005375c60200066eacc040008c04c00cc04400800522105000000000000375866008600c66008600c0029000240082930b19800800a40004444666600c66e1c00400c02c8cccc014014cdc000224004601a002004004460086ea80055cd2ab9d5573caae7d5d02ba15745", "compiledCode": "5901220100003232323232323232323222253330073233323001001222533300e00214a026464a66601a600600429444ccc01401400400cc04800cc0400080048ccc8c888c8c8c8ccc04000528251533301200114a22940c8c94ccc040cdc3a4004002297adef6c601323756602c002601e00460206ea8004cc010004008dd5998051806001240046002002444a66601e004298103d87a800013232323253330103371e00a004266e95200033014374c00297ae01333007007003005375660220066eb8c03c008c04c00cc04400800522105000000000000375866008600c66008600c0029000240082930b19800800a40004444666600c66e1c00400c02c8cccc014014cdc000224004601a002004004460086ea80055cd2ab9d5573caae7d5d02ba15745",
"hash": "99d8662f114a478bb298150ecb317874143f4a40507566aa6b644b61" "hash": "c0e8a63e61227a8158b1ed00b7cd3011a468608e49fa41f856dccfa8"
} }
], ],
"definitions": { "definitions": {

View File

@ -0,0 +1,8 @@
{
"preamble": {
"title": "aiken-lang/acceptance_test_062",
"version": "0.0.0",
"plutusVersion": "v2"
},
"validators": []
}

View File

@ -0,0 +1,8 @@
{
"preamble": {
"title": "aiken-lang/acceptance_test_068",
"version": "0.0.0",
"plutusVersion": "v2"
},
"validators": []
}

View File

@ -19,8 +19,8 @@
"$ref": "#/definitions/spend~1PoolRedeemer" "$ref": "#/definitions/spend~1PoolRedeemer"
} }
}, },
"compiledCode": "59035b0100003232323232323232323232222323232533300b3232323232323253330123370e90000008992513010007153330123370e9001000899191919299980b19b87480080044c8c8c8c8c8c8c9289810800980c99299980e19b8748000c06c004400458cc03405000cc07c004c05cc94ccc068cdc3a4000603200220022c66014024002601091101ff00301c001301400214a0602800266020602401a9001180c0009808003899191919299980b19b87480080044c8c8c8c8c8c8c9289810800980c99299980e19b8748000c06c004400458cc03405000cc07c004c05cc94ccc068cdc3a4000603200220022c660140240026010910101ff00301c001301400214a0602800266020602401a9001180c00098080039808003119ba548000cc054cdd2a40046602a6ea40052f5c06602a98103d87a80004bd7011198021bac3300d300f3300d300f00248001200423375e6601c6020002900000111198019bac3300c300e3300c300e00248001200023375e6601a601e6601a601e0029001240000046002002444a6660240042980103d87a8000132325333011300300213374a90001980a80125eb804ccc01401400400cc05800cc050008cc01cc0240092000149858c8018c94ccc02ccdc3a40000022646464646464a666028602e0042649318048028b1bad30150013015002375a602600260260046022002601200c2c601200a6400864a66601466e1d200000113232533300f3012002132498c94ccc034cdc3a400000226464a666024602a0042930b1bad3013001300b0021533300d3370e9001000899192999809180a80109924c64a66602066e1d20000011323232325333017301a002132498c03000c58dd6980c000980c001180b00098070010b18070008b180980098058010a99980699b87480100044c8c94ccc048c0540084c9263253330103370e9000000899191919299980b980d00109924c60180062c6eb4c060004c060008c058004c03800858c03800458c04c004c02c00858c02c00458c040004c02001058c02000c8c94ccc028cdc3a4000002264646464a66602260280042930b1bae30120013012002375c602000260100042c60100026600200290001111199980399b8700100300c233330050053370000890011807000801001118029baa001230033754002ae6955ceaab9e5573eae815d0aba21", "compiledCode": "5903560100003232323232323232323232222323232533300b3232533300d3370e9000000899251300b0021323232323253330123370e9001003099191919299980b19b87480080044c8c8c8c94ccc068cdc3a400060320022646464a66603a66e1d2000301c001132324a2604600260360022c6601602a008604000260300022c66012024002601691101ff00301c001301400214a0602800266020602401a9001180c0009808003899191919299980b19b87480080044c8c8c8c94ccc068cdc3a400060320022646464a66603a66e1d2000301c001132324a2604600260360022c6601602a008604000260300022c660120240026016910101ff00301c001301400214a0602800266020602401a9001180c000980800391198021bac3300f30113300f301100248001200023375e66020602466020602400290012400000444660066eb0cc038c040cc038c0400092000480108cdd7998079808800a40000046002002444a6660280042980103d87a8000132325333013300300213374a90001980b80125eb804ccc01401400400cc06000cc0580088cdd2a40006602466e95200233012375200297ae0330124c103d87a80004bd701805800998039804802a40002930b19299980599b87480000044c8c94ccc040c04c0084c92632533300e3370e9000000899192999809980b0010a4c2c6eb4c050004c03000854ccc038cdc3a400400226464a666026602c0042649319299980899b87480000044c8c8c8c94ccc060c06c0084c926300d00316375a60320026032004602e002601e0042c601e0022c602800260180042a66601c66e1d20040011323253330133016002132498c94ccc044cdc3a4000002264646464a66603060360042649318068018b1bad301900130190023017001300f00216300f001163014001300c00216300c001163011001300900516300900432533300a3370e900000089919191919192999809980b00109924c601000a2c6eb4c050004c050008dd698090009809001180800098040028b1804002119299980519b87480000044c8c8c8c94ccc044c05000852616375c602400260240046eb8c040004c02000858c020004cc0040052000222233330073370e0020060184666600a00a66e000112002300e001002002230053754002460066ea80055cd2ab9d5573caae7d5d02ba157441",
"hash": "0cacc32c28d8b9724b7ce935bdfade75a3807ab9a7cf4c4e95bbdad8" "hash": "4279e81d1ecd2b9bcf9435bd73c7f09423bb0cd82a23169ca51ebe33"
} }
], ],
"definitions": { "definitions": {

View File

@ -27,8 +27,8 @@
} }
} }
], ],
"compiledCode": "5901c2010000323232323232323232323223222232533300b323232323232323232323232323232533301d30200021323232533301d3370e90000008a99980e9999180080091129998118010a50132325333022300300214a2266600a00a002006604e006604a004016466ebccc068c07000520000171533301d3370e0049001099b8f00301714a02c2c60360246eb4c074008dd7180d8008b180f000999919111919299980f19b874800800452f5bded8c02646eacc090004c070008c070004cc00c008004c0040048894ccc0780085300103d87a8000132323232533301f3371e00a002266e95200033023374c00497ae01333007007003005375c603e0066eacc07c008c08800cc080008004020dd5980e000980e000980d800980d000980c8011bac3017001300f005375c602a002601aa66601e66e1d2000300e0011001163013001301300230110013009002149858c800cc94ccc02ccdc3a40000022a66601c60120062930b0a99980599b874800800454ccc038c02400c52616163009002375c0026600200290001111199980399b8700100300c233330050053370000890011807000801001118029baa001230033754002ae6955ceaab9e5573eae815d0aba21", "compiledCode": "5901bf010000323232323232323232323223222232533300b32323232533300f3370e9000180700089919191919191919191919299980e98100010991919299980e99b874800000454ccc074ccc8c0040048894ccc08c00852809919299981118018010a5113330050050010033027003302500200b23375e660346038002900000b8a99980e99b87002480084cdc780180b8a501616301b014375a603a0046eb8c06c00458c078004ccc8c888c8c94ccc078cdc3a4004002297adef6c601323756604800260380046038002660060040026002002444a66603c0042980103d87a8000132323232533301f3371e00a004266e95200033023374c00297ae01333007007003005375660400066eb8c078008c08800cc080008004020dd5980e000980e000980d800980d000980c8011bac3017001300f005375c602a002601a0022c60260026026004602200260120042930b19299980599b874800000454ccc038c02400c526161533300b3370e90010008a99980718048018a4c2c2c60120046eb8004cc0040052000222233330073370e0020060184666600a00a66e000112002300e001002002230053754002460066ea80055cd2ab9d5573caae7d5d02ba15745",
"hash": "e413cd6136ea78be9b974e540f4acd04ab1274353e63b430018433b7" "hash": "6bc330a4edd7f9542d7e78b883166de880813545737b886a35a9dd2d"
} }
], ],
"definitions": { "definitions": {

View File

@ -19,8 +19,8 @@
"$ref": "#/definitions/RedeemerWrapper$Int" "$ref": "#/definitions/RedeemerWrapper$Int"
} }
}, },
"compiledCode": "587c010000323232323232322253330053370e900018031baa00113253330063370e002902a0a4c2c6eb40084c88c8c94ccc024cdc399b800010024815052616375a00a6eb4008c020c01cdd500099800800a40004444666600a66e1c00400c0208cccc014014cdc0002240046014002004004ae6955ceaab9e5742ae881", "compiledCode": "5881010000323232323232322253330053370e900018031baa00112323253330083370e002902a0a4c2c6eb400cdd680189911919299980499b8733700004002902a0a4c2c6eb400cdd6802180418039baa00133001001480008888cccc014cdc38008018041199980280299b8000448008c0280040080095cd2ab9d5573cae855d101",
"hash": "5d0d7bcb2b33e3918aaf30feaa04a42fb85c64bc0328d03e407c6241" "hash": "b74766a43a503966cbeb3cea0d3365a01f700988d92e8098c7e6a83e"
}, },
{ {
"title": "foo.mint", "title": "foo.mint",
@ -30,8 +30,8 @@
"$ref": "#/definitions/Int" "$ref": "#/definitions/Int"
} }
}, },
"compiledCode": "587c010000323232323232322253330053370e900018031baa00113253330063370e002902a0a4c2c6eb40084c88c8c94ccc024cdc399b800010024815052616375a00a6eb4008c020c01cdd500099800800a40004444666600a66e1c00400c0208cccc014014cdc0002240046014002004004ae6955ceaab9e5742ae881", "compiledCode": "5881010000323232323232322253330053370e900018031baa00112323253330083370e002902a0a4c2c6eb400cdd680189911919299980499b8733700004002902a0a4c2c6eb400cdd6802180418039baa00133001001480008888cccc014cdc38008018041199980280299b8000448008c0280040080095cd2ab9d5573cae855d101",
"hash": "5d0d7bcb2b33e3918aaf30feaa04a42fb85c64bc0328d03e407c6241" "hash": "b74766a43a503966cbeb3cea0d3365a01f700988d92e8098c7e6a83e"
} }
], ],
"definitions": { "definitions": {

View File

@ -1,4 +1,4 @@
name = 'aiken-lang/acceptance_test_062' name = 'aiken-lang/acceptance_test_script_context'
version = '0.0.0' version = '0.0.0'
description = '' description = ''

View File

@ -1,6 +1,6 @@
{ {
"preamble": { "preamble": {
"title": "aiken-lang/acceptance_test_062", "title": "aiken-lang/acceptance_test_script_context",
"version": "0.0.0", "version": "0.0.0",
"plutusVersion": "v2" "plutusVersion": "v2"
}, },
@ -19,8 +19,8 @@
"$ref": "#/definitions/Void" "$ref": "#/definitions/Void"
} }
}, },
"compiledCode": "59041701000032323232323232323232322223232533300a32300200132323232323233014333010323330113375e6601a601e002900b26126d8799f58200000000000000000000000000000000000000000000000000000000000000000ff004a0944cc030c03802520004c0103d87a80004c0103d879800033014333010323253330123370e900100089919299980a19baf33010301200148001300126d8799f58200000000000000000000000000000000000000000000000000000000000000000ff0013370e6eb4cc040c048005200248000528180c00098080010b1808000998061807004a4004980103d87a80004c0103d8798000330143330103232533301500116132533301600113232300c001330183330143375e66020602400290011ba6300548202a35ae41d30103d87a80004c0103d8798000330183330143375e660206024660206024002900024000980122d8799f581c11111111111111111111111111111111111111111111111111111111ff004c0103d87a80004c0103d879800033018333014323253330163370e9000000899250301400214a26028002660206024660206024002900024004980103d87a80004c0103d8798000330183330143375e6602060240029002260103d87980004c0103d87a80004c0103d8798000330183330143375e6602060240029003260103d87a80004c0103d87a80004c0103d87980004bd70180c0010b180c0009bac3300d300f00148010cc030c03802520004c0103d87a80004c0103d879800033014333010323375e6601a601e00290031ba6300248150cc030c03802520004c103d87a80004c0103d87980004bd701191999801a5eb7bdb18122010000100533330054bd6f7b630245000010043001001222225333015004133016337606ea400cdd300125eb7bdb1804c8c8c8c94ccc058cdd799802803800a60103d879800013301a337606ea401cdd30030040a99980b19b8f00700113301a337606ea401cdd300300189980d19bb037520026e98008ccccc02402400c01c018014dd7180b0019bab30160023019005301700422533300e33720004002298103d87980001533300e3371e0040022980103d87a800014c103d87b80003001001222225333012004133013337606ea400cdd400125eb7bdb1804c8c8c8c94ccc04ccdd799802803800a60103d8798000133017337606ea401cdd40030040a99980999b8f007001133017337606ea401cdd400300189980b99bb037520026ea0008ccccc02402400c01c018014dd718098019bad301300230160053014004149858c004004894ccc0340045288991929998060010998020020008a5030110023370e900118059baa300f00133001001480008888cccc01ccdc38008018061199980280299b8000448008c0380040080088c014dd5000918019baa0015734aae7555cf2ab9f5740ae855d101", "compiledCode": "5904930100003232323232323232323232322225333008323232300200132323232323233015333010323330113375e6601a601e002900b26126d8799f58200000000000000000000000000000000000000000000000000000000000000000ff004a0944cc030c03802520004c0103d87a80004c0103d879800033015333010323253330123370e900100089919299980a19baf33010301200148001300126d8799f58200000000000000000000000000000000000000000000000000000000000000000ff0013370e6eb4cc040c048005200248000528180c80098080010a99809a491c73637269707420707572706f73652069736e277420275370656e6427001630100013300c300e00948009300103d87a80004c0103d87980003301533301032325333016001153301349011c756e6578706563746564206e756d626572206f66206f7574707574730016132533301700113232300c001330193330143375e66020602400290011ba6300548202a35ae41d300103d87a80004c0103d8798000330193330143375e660206024660206024002900024000980122d8799f581c11111111111111111111111111111111111111111111111111111111ff004c0103d87a80004c0103d879800033019333014323253330163370e9000000899250301400214a26028002660206024660206024002900024004980103d87a80004c0103d8798000330193330143375e6602060240029002260103d87980004c0103d87a80004c0103d8798000330193330143375e6602060240029003260103d87a80004c0103d87a80004c0103d87980004bd70180c8010a9980a2491c756e6578706563746564206e756d626572206f66206f7574707574730016301900137586601a601e0029002198061807004a4000980103d87a80004c0103d879800033015333010323375e6601a601e00290031ba6300248150cc030c03802520004c103d87a80004c0103d87980004bd701299980819b870014800052f5bded8c0264666600c97adef6c604890000100333330034bd6f7b6302450000100222533301033720004002298103d8798000153330103371e0040022980103d87a800014c103d87b80003001001222225333015004133016337606ea400cdd400125eb7bdb1804c8c8c8c94ccc054cdd799802803801260103d879800013301a337606ea401cdd40030040a99980a99b8f00700213301a337606ea401cdd400300189980d19bb037520046ea0004ccccc02402400c01c018014dd6980b8019bae3015002301900530170043001001222225333013004133014337606ea400cdd300125eb7bdb1804c8c8c8c94ccc04ccdd799802803801260103d8798000133018337606ea401cdd30030040a99980999b8f007002133018337606ea401cdd300300189980c19bb037520046e98004ccccc02402400c01c018014dd5980a8019bae301300230170053015004300100122533300e00114a226464a6660180042660080080022940c048008cdc3a400460186ea8c0400045261633001001480008888cccc01ccdc38008018069199980280299b8000448008c03c0040080088c018dd5000918021baa0015734ae7155ceaab9e5573eae815d0aba201",
"hash": "abc04b93bf71fa38b33af79743dbfbbfd151a8a76b289f90e1f1ad92" "hash": "d364259445292b780104219c2c90d80e5fdd3ea4c61973f6f0b458c0"
}, },
{ {
"title": "deploy.spend", "title": "deploy.spend",
@ -36,8 +36,8 @@
"$ref": "#/definitions/Data" "$ref": "#/definitions/Data"
} }
}, },
"compiledCode": "5903100100003232323232323232323232322223232533300a3230020013300f33300a323375e00c0026601693260103d87980004c0103d87a80004c0103d87980003300f33300a332323232232323253330123375e98106d8799f182aff0000213370e600a00890020a503253330123370e900000089919299980c180d8010a4c2c6eb4c064004c04000858c040004c058004c034c94ccc040cdc3a4000601e00220022c646600a004002646e50004dd9a60106d8799f182aff0030010012253330120011480004c8cdc02400466006006002602a0026002002444a6660220042980103d87a800013232323253330113371e00a002266e952000330160024bd7009998038038018029bae301200330120023015003301300237566600c60106600c6010006900024028980103d87a80004c0103d87980003300f33300a32533300f001161325333010001161323232325333010323008001330153330103375e66018601c004900226126d87a9f5820fcaa61fb85676101d9e3398a484674e71c45c3fd41b492682f3b0054f4cf3273ff004c0103d87a80004c0103d8798000330153330103375e66018601c0049003260122d8799f581ce37db487fbd58c45d059bcbf5cd6b1604d3bec16cf888f1395a4ebc4ff004c0103d87a80004c0103d87980004bd7009918040009980a99980819baf3300c300e3300c300e0014800120024c12ad8799fd8799fd8799f581c66666666666666666666666666666666666666666666666666666666ffffff004c0103d87a80004c0103d879800033015333010323253330123370e900200089925130100021630100013300c300e0014801130103d87a80004c0103d87980004bd700a5030150043014004163013001301200137586600c60106600c601000690002400898103d87a80004c0103d87980004bd700a4c2c600200244a66601c00229444c8c94ccc0300084cc010010004528180900119b8748008c030dd5180800099800800a40004444666600e66e1c00400c0348cccc014014cdc000224004601e0020040044600c6ea80048c010dd5000ab9a5736aae7555cf2ab9f5740ae855d11", "compiledCode": "590430010000323232323232323232323232222533300832323230020013300f33300a3375e00a980103d87980004c0103d87a80004c0103d87980003300f33300a33232323223253330103370e900018078008991919299980999baf4c106d8799f182aff0000213370e600c00a90020a503253330133370e900000089919299980c980e0010a4c2a6602c921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a603400260220042a660289212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630110013017001300e001153301149012a4578706563746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e001632330050020013237280026ecd300106d8799f182aff0030010012253330120011480004c8cdc02400466006006002602a0026002002444a6660220042980103d87a800013232323253330113371e00a004266e952000330160014bd70099980380380180298098019bae30110023015003301300237566600c60106600c6010006900024028980103d87a80004c0103d87980003300f33300a32533300f001153300c4901316578706563746564207472616e73616374696f6e20746f206861766520286174206c65617374292032206f75747075747300161325333010001153300d4901316578706563746564207472616e73616374696f6e20746f206861766520286174206c65617374292032206f757470757473001613232533300e3230060013301333300e3375e660146018004900226126d87a9f5820fcaa61fb85676101d9e3398a484674e71c45c3fd41b492682f3b0054f4cf3273ff004c0103d87a80004c0103d87980003301333300e3375e6601460180049003260122d8799f581ce37db487fbd58c45d059bcbf5cd6b1604d3bec16cf888f1395a4ebc4ff004c0103d87a80004c0103d87980004bd7009918030009980999980719baf3300a300c3300a300c0014800120024c12ad8799fd8799fd8799f581c66666666666666666666666666666666666666666666666666666666ffffff004c0103d87a80004c0103d87980003301333300e323253330103370e9002000899251300e0021533011490115657870656374656420696e6c696e6520646174756d0016300e0013300a300c00148011300103d87a80004c0103d87980004bd700a5030130023012002301200137586600c60106600c6010006900024008980103d87a80004c0103d87980004bd7018008009129998070008a5113232533300c00213300400400114a0602400466e1d2002300c375460200022930b19800800a40004444666600e66e1c00400c0348cccc014014cdc000224004601e0020040044600c6ea80048c010dd5000ab9a5738aae7555cf2ab9f5740ae855d11",
"hash": "7430b07ebb41177b84d49ffed5e102eff7ffee61ad2b81c3f3ab3dbb" "hash": "c4c081d7a44ce7abb8311b45f0b41c84c981e9ed11319d49316fa649"
}, },
{ {
"title": "mint.mint", "title": "mint.mint",
@ -47,8 +47,8 @@
"$ref": "#/definitions/Data" "$ref": "#/definitions/Data"
} }
}, },
"compiledCode": "590363010000323232323232323232323222533300732332300100122533300d00114a226464a6660180042660080080022940c044008cdc3a400460166ea8c03c004004cc02cccc01ccc8c8c8c88c8c94ccc044c0500084c8c8cdc78018009bae3014001300c32533300f3370e9000180700088008b198051806001a40042c6eb8c048004c8c8c010004cc014005221003756660106014660106014002900024010600200244a66601c002297ae013232323301237520026600a00a0046eb8c038008c048008c040004c0040048894ccc03400852f5bded8c0264646464a66601c66e3c014004400c4cc048cdd81ba9001374c00466600e00e00600a6eb8c03800cdd5980700118088019807801000a6103d87a80004c0103d87980003300b333007333232323222323232323253330123370e90010008b0991919b87001483c850dd6980c0009808001180800099803000a44103666f6f003322323253330133370e90010008a5eb7bdb1804c8dd5980c80098088011808800998048010009bab3300b300d00348020004dd718098009805a99980699b8748000c030008400858c0040048894ccc03c0085300103d87a800013232323253330103371e00a002266e95200033014375000497ae01333007007003005375c60200066eb4c040008c04c00cc044008c0040048894ccc034008530103d87a8000132323232533300e3371e00a002266e95200033012374c00497ae01333007007003005375c601c0066eacc038008c04400cc03c008cc00cc01400520023300330050014800130103d87a80004c0103d87980003300b3330073332323232223232533300f3375e006002266e1cc8c018004dd5998059806998059806802240009009240042940c04c004c02cc94ccc038cdc3a4000601a00220022c66446600e0040026eaccc024c02ccc024c02c009200048048cc024c02c0092002300100122533300e0011480004c8cdc0240046600600600260220026002002444a66601a004298103d87a8000132323232533300e3375e00a002266e952000330120024bd7009998038038018029807001980700118088019807801000801260103d87a80004c0103d87980004bd700a4c2c6600200290001111199980399b8700100300c233330050053370000890011807000801001118029baa001230033754002ae6955ceaab9e5573eae815d0aba21", "compiledCode": "59046a01000032323232323232323232323222533300732332300100122533300e00114a226464a6660180042660080080022940c048008cdc3a400460186ea8c040004004c8c8c8c8cc040ccc02ccc8c88c8c94ccc050c05c0084c94ccc044cdc3a400060200022646466e3c010004dd7180c00098078008a998092492a4578706563746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e00163300c300e0034800854cc0452401334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c602a002646464600a0026600e00291010030050013756660146018660146018002900024010600200244a666022002297ae01323232323301637520046600c00c0066eacc04c00cdd71808801180a8011809800802a60103d87a80004c0103d87980003301033300b33323232322253330113370e9000180800109919191919299980b19b874800800454cc05d24010f746f6b656e206e6f7420666f756e640016132323370e00290790a1bad301d0013014002301400133006001488103666f6f003322323253330173370e90010008a5eb7bdb1804c8dd5980f000980a801180a800998048010009918050009bab3300f301100348020004dd7180c00098078010a9980924812a4578706563746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e00163001001222533301400214c103d87a800013232323253330143371e00a004266e95200033019375000297ae01333007007003005375a602c0066eb8c050008c06000cc058008c0040048894ccc048008530103d87a800013232323253330123371e00a004266e95200033017374c00297ae01333007007003005375660280066eb8c048008c05800cc050008cc01cc02401520023300730090054800130103d87a80004c0103d87980003301033300b3332323232223253330123370e9000180880089919299980a19baf00400113370e64600e0026eaccc040c048cc040c048015200048049200214a0603200260200022a660269212a4578706563746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e001633223300700200137566601a601e6601a601e0049000240246601a601e004900118008009129998098008a400026466e0120023300300300130160013001001222533301200214c103d87a800013232323253330123375e00a004266e952000330170014bd700999803803801802980a0019809001180b001980a001002803260103d87a80004c0103d87980004bd70119801000a4410022330030020013001001222533300e00214bd6f7b630099191919299980719b8f0050021003133013337606ea4008dd30009998038038018029bab3010003375c601c004602400660200042930b19800800a40004444666600e66e1c00400c0348cccc014014cdc000224004601e0020040044600c6ea80048c010dd5000ab9a5738aae7555cf2ab9f5740ae855d11",
"hash": "af428f3f11ea2384e5105bc172b778576324039e95050066cb8a006f" "hash": "8571dbfda074eb4da2b6ff731e2cb31cc1395a7d10632e29e943b137"
}, },
{ {
"title": "withdrawals.spend", "title": "withdrawals.spend",
@ -64,8 +64,8 @@
"$ref": "#/definitions/Void" "$ref": "#/definitions/Void"
} }
}, },
"compiledCode": "5902670100003232323232323232323232222533300832332300100122533300e00114a226464a66601a0042660080080022940c048008cdc3a400460186ea8c040004004c8c8c8cc03cccc02cc8c94ccc034cdc3a40040022c2646466e1c0052054375a602600260160046016002660026eaccc01cc024cc01cc024011200048031300126d8799fd8799f581c22222222222222222222222222222222222222222222222222222222ffff004c0103d87a80004c0103d87980003300f33300b3232533300d3370e90010008b0991919b8700148070dd6980980098058011805800998009bab33007300933007300900448001200c4c126d8799fd87a9f581cafddc16c18e7d8de379fb9aad39b3d1b5afd27603e5ebac818432a72ffff004c0103d87a80004c0103d87980003300f33300b3375e6e9ccc8c88c008004c004004894ccc04000452f5c02646464660280026600a00a0046020004602800460240026eaccc01cc024cc01cc024011200048030dd399807a6126d8799fd8799f581c22222222222222222222222222222222222222222222222222222222ffff003300f4c126d8799fd87a9f581cafddc16c18e7d8de379fb9aad39b3d1b5afd27603e5ebac818432a72ffff004bd7026103d87a80004c0103d87980004bd701119801801000980080091129998070010a6103d87a8000132323232533300f3375e00a002266e95200033013375000497ae01333007007003005300f003375a601e004602400660200042930b19800800a40004444666600e66e1c00400c0308cccc014014cdc000224004601c0020040044600a6ea80048c00cdd5000ab9a5573aaae7955cfaba05742ae89", "compiledCode": "5902b5010000323232323232323232323232222533300832332300100122533300f00114a226464a66601a0042660080080022940c04c008cdc3a4004601a6ea8c044004004c8c8c8cc040ccc02cc8c94ccc034cdc3a40040022a6601c92011c616c6963652773207769746864726177616c206e6f7420666f756e640016132323370e002902a1bad3014001300b002300b0013300137566600e60126600e601200890002401898126d8799fd8799f581c22222222222222222222222222222222222222222222222222222222ffff004c0103d87a80004c0103d87980003301033300b3232533300d3370e90010008a998072491a626f622773207769746864726177616c206e6f7420666f756e640016132323370e002900e1bad3014001300b002300b0013300137566600e60126600e601200890002401898126d8799fd87a9f581cafddc16c18e7d8de379fb9aad39b3d1b5afd27603e5ebac818432a72ffff004c0103d87a80004c0103d87980003301033300b3375e6e9ccc8c88c008004c004004894ccc04400452f5c02646464646602c0046600c00c0066eb4c04c00cc044008c054008c04c004dd59980398049980398048022400090061ba7330104c0126d8799fd8799f581c22222222222222222222222222222222222222222222222222222222ffff00330104c126d8799fd87a9f581cafddc16c18e7d8de379fb9aad39b3d1b5afd27603e5ebac818432a72ffff004bd7026103d87a80004c0103d87980004bd701119801801000980080091129998078010a6103d87a8000132323232533300f3375e00a004266e95200033014375000297ae01333007007003005375a6022006601e004602600660220042930b19800800a40004444666600e66e1c00400c0348cccc014014cdc000224004601e0020040044600c6ea80048c010dd5000ab9a5738aae7555cf2ab9f5740ae855d11",
"hash": "5db9f7f98b689165b3ca293c48e3b1d482f90649641f294aa5a9fd7e" "hash": "354397fdd3d68b6beaf20918a0272533b70521b50927d15fd8d4da48"
} }
], ],
"definitions": { "definitions": {

View File

@ -17,8 +17,10 @@ validator {
fn assert_purpose(ctx) { fn assert_purpose(ctx) {
expect [my_policy_id] = expect [my_policy_id] =
ctx.transaction.mint ctx.transaction.mint
|> value.from_minted_value
|> value.without_lovelace |> value.without_lovelace
|> value.policies |> value.policies
expect Mint(policy_id) = ctx.purpose expect Mint(policy_id) = ctx.purpose
my_policy_id == policy_id my_policy_id == policy_id
@ -26,7 +28,8 @@ fn assert_purpose(ctx) {
fn assert_mint(purpose, transaction) { fn assert_mint(purpose, transaction) {
expect Mint(policy_id) = purpose expect Mint(policy_id) = purpose
let tokens = value.tokens(transaction.mint, policy_id) let tokens =
value.tokens(transaction.mint |> value.from_minted_value, policy_id)
when dict.get(tokens, #"666f6f") is { when dict.get(tokens, #"666f6f") is {
None -> fail @"token not found" None -> fail @"token not found"