diff --git a/Cargo.toml b/Cargo.toml index bd02f861..b068b5df 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,21 @@ members = ["crates/*"] resolver = "2" +[workspace.package] +description = "Cardano smart contract language and toolchain" +documentation = "https://aiken-lang.org" +version = "1.1.15" +edition = "2024" +repository = "https://github.com/aiken-lang/aiken" +homepage = "https://github.com/aiken-lang/aiken" +license = "Apache-2.0" +authors = [ + "Lucas Rosa ", + "Kasey White ", + "KtorZ ", +] +rust-version = "1.85.0" + [workspace.metadata.release] shared-version = true tag-name = "v{{version}}" @@ -17,7 +32,12 @@ installers = ["shell", "powershell", "npm", "homebrew"] # A GitHub repo to push Homebrew formulas to tap = "aiken-lang/homebrew-tap" # Target platforms to build apps for (Rust target-triple syntax) -targets = ["aarch64-apple-darwin", "x86_64-apple-darwin", "x86_64-unknown-linux-musl", "x86_64-pc-windows-msvc"] +targets = [ + "aarch64-apple-darwin", + "x86_64-apple-darwin", + "x86_64-unknown-linux-musl", + "x86_64-pc-windows-msvc", +] # The archive format to use for windows builds (defaults .zip) windows-archive = ".tar.gz" # The archive format to use for non-windows builds (defaults .tar.xz) diff --git a/crates/aiken-lang/Cargo.toml b/crates/aiken-lang/Cargo.toml index ee456565..971848ef 100644 --- a/crates/aiken-lang/Cargo.toml +++ b/crates/aiken-lang/Cargo.toml @@ -1,17 +1,15 @@ [package] name = "aiken-lang" -description = "The Aiken compiler" -version = "1.1.15" -edition = "2021" -repository = "https://github.com/aiken-lang/aiken" -homepage = "https://github.com/aiken-lang/aiken" -license = "Apache-2.0" -authors = [ - "Lucas Rosa ", - "Kasey White ", - "KtorZ ", -] -rust-version = "1.80.0" +version.workspace = true +edition.workspace = true +description.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true +homepage.workspace = true +documentation.workspace = true +rust-version.workspace = true + build = "build.rs" [dependencies] diff --git a/crates/aiken-lang/src/ast.rs b/crates/aiken-lang/src/ast.rs index d3882d51..853ce13d 100644 --- a/crates/aiken-lang/src/ast.rs +++ b/crates/aiken-lang/src/ast.rs @@ -17,7 +17,7 @@ use std::{ rc::Rc, }; use uplc::machine::runtime::Compressable; -use vec1::{vec1, Vec1}; +use vec1::{Vec1, vec1}; pub const BACKPASS_VARIABLE: &str = "_backpass"; pub const CAPTURE_VARIABLE: &str = "_capture"; @@ -956,7 +956,7 @@ pub struct CallArg { impl CallArg { pub fn is_capture_hole(&self) -> bool { match &self.value { - UntypedExpr::Var { ref name, .. } => name.contains(CAPTURE_VARIABLE), + UntypedExpr::Var { name, .. } => name.contains(CAPTURE_VARIABLE), _ => false, } } diff --git a/crates/aiken-lang/src/builtins.rs b/crates/aiken-lang/src/builtins.rs index 774081e8..edd41927 100644 --- a/crates/aiken-lang/src/builtins.rs +++ b/crates/aiken-lang/src/builtins.rs @@ -1,16 +1,15 @@ use crate::{ - aiken_fn, + IdGenerator, aiken_fn, ast::{ - well_known, Annotation, ArgName, CallArg, DataType, DataTypeKey, Function, - FunctionAccessKey, ModuleKind, OnTestFailure, RecordConstructor, RecordConstructorArg, - Span, TypedArg, TypedDataType, TypedFunction, UnOp, + Annotation, ArgName, CallArg, DataType, DataTypeKey, Function, FunctionAccessKey, + ModuleKind, OnTestFailure, RecordConstructor, RecordConstructorArg, Span, TypedArg, + TypedDataType, TypedFunction, UnOp, well_known, }, expr::TypedExpr, tipo::{ - fields::FieldMap, Type, TypeConstructor, TypeInfo, ValueConstructor, - ValueConstructorVariant, + Type, TypeConstructor, TypeInfo, ValueConstructor, ValueConstructorVariant, + fields::FieldMap, }, - IdGenerator, }; use std::{collections::BTreeSet, sync::LazyLock}; diff --git a/crates/aiken-lang/src/expr.rs b/crates/aiken-lang/src/expr.rs index 788fd2bb..35d9ba83 100644 --- a/crates/aiken-lang/src/expr.rs +++ b/crates/aiken-lang/src/expr.rs @@ -9,17 +9,17 @@ pub(crate) use crate::{ }, parser::token::Base, tipo::{ - check_replaceable_opaque_type, convert_opaque_type, lookup_data_type_by_tipo, ModuleValueConstructor, Type, TypeVar, ValueConstructor, ValueConstructorVariant, + check_replaceable_opaque_type, convert_opaque_type, lookup_data_type_by_tipo, }, }; use indexmap::IndexMap; use pallas_primitives::alonzo::{Constr, PlutusData}; use std::{fmt::Debug, rc::Rc}; use uplc::{ + KeyValuePairs, ast::Data, machine::{runtime::convert_tag_to_constr, value::from_pallas_bigint}, - KeyValuePairs, }; use vec1::Vec1; @@ -1219,31 +1219,23 @@ impl UntypedExpr { name: constructor.name.to_string(), }) } else { - let arguments = - fields - .to_vec() - .into_iter() - .zip(constructor.arguments.iter()) - .map( - |( - field, - RecordConstructorArg { - ref label, - ref tipo, - .. - }, - )| { - UntypedExpr::do_reify_data( - generics, data_types, field, tipo, - ) - .map(|value| CallArg { - label: label.clone(), - location: Span::empty(), - value, - }) - }, + let arguments = fields + .to_vec() + .into_iter() + .zip(constructor.arguments.iter()) + .map(|(field, RecordConstructorArg { label, tipo, .. })| { + UntypedExpr::do_reify_data( + generics, data_types, field, tipo, ) - .collect::, _>>()?; + .map(|value| { + CallArg { + label: label.clone(), + location: Span::empty(), + value, + } + }) + }) + .collect::, _>>()?; Ok(UntypedExpr::Call { location: Span::empty(), diff --git a/crates/aiken-lang/src/format.rs b/crates/aiken-lang/src/format.rs index 09b184a8..eddb252a 100644 --- a/crates/aiken-lang/src/format.rs +++ b/crates/aiken-lang/src/format.rs @@ -1,20 +1,20 @@ use crate::{ ast::{ Annotation, ArgBy, ArgName, ArgVia, AssignmentKind, AssignmentPattern, BinOp, - ByteArrayFormatPreference, CallArg, CurveType, DataType, Definition, Function, - LogicalOpChainKind, ModuleConstant, Namespace, OnTestFailure, Pattern, RecordConstructor, - RecordConstructorArg, RecordUpdateSpread, Span, TraceKind, TypeAlias, TypedArg, - TypedValidator, UnOp, UnqualifiedImport, UntypedArg, UntypedArgVia, UntypedAssignmentKind, - UntypedClause, UntypedDefinition, UntypedFunction, UntypedIfBranch, UntypedModule, - UntypedPattern, UntypedRecordUpdateArg, Use, Validator, CAPTURE_VARIABLE, + ByteArrayFormatPreference, CAPTURE_VARIABLE, CallArg, CurveType, DataType, Definition, + Function, LogicalOpChainKind, ModuleConstant, Namespace, OnTestFailure, Pattern, + RecordConstructor, RecordConstructorArg, RecordUpdateSpread, Span, TraceKind, TypeAlias, + TypedArg, TypedValidator, UnOp, UnqualifiedImport, UntypedArg, UntypedArgVia, + UntypedAssignmentKind, UntypedClause, UntypedDefinition, UntypedFunction, UntypedIfBranch, + UntypedModule, UntypedPattern, UntypedRecordUpdateArg, Use, Validator, }, docvec, - expr::{FnStyle, TypedExpr, UntypedExpr, DEFAULT_ERROR_STR, DEFAULT_TODO_STR}, + expr::{DEFAULT_ERROR_STR, DEFAULT_TODO_STR, FnStyle, TypedExpr, UntypedExpr}, parser::{ extra::{Comment, ModuleExtra}, token::Base, }, - pretty::{break_, concat, flex_break, join, line, lines, nil, Document, Documentable}, + pretty::{Document, Documentable, break_, concat, flex_break, join, line, lines, nil}, tipo::{self, Type}, }; use itertools::Itertools; @@ -84,7 +84,10 @@ impl<'comments> Formatter<'comments> { // Pop comments that occur before a byte-index in the source, consuming // and retaining any empty lines contained within. - fn pop_comments(&mut self, limit: usize) -> impl Iterator> { + fn pop_comments( + &mut self, + limit: usize, + ) -> impl Iterator> + use<'comments> { let (popped, rest, empty_lines) = comments_before(self.comments, self.empty_lines, limit, true); @@ -2130,11 +2133,7 @@ impl<'a> Documentable<'a> for &'a ArgName { } fn pub_(public: bool) -> Document<'static> { - if public { - "pub ".to_doc() - } else { - nil() - } + if public { "pub ".to_doc() } else { nil() } } impl<'a> Documentable<'a> for &'a UnqualifiedImport { diff --git a/crates/aiken-lang/src/gen_uplc.rs b/crates/aiken-lang/src/gen_uplc.rs index 160ea970..d7d7734a 100644 --- a/crates/aiken-lang/src/gen_uplc.rs +++ b/crates/aiken-lang/src/gen_uplc.rs @@ -8,13 +8,14 @@ pub mod tree; use self::{ air::Air, builder::{ + AssignmentProperties, CodeGenSpecialFuncs, CycleFunctionNames, HoistableFunction, Variant, cast_validator_args, convert_type_to_data, extract_constant, modify_cyclic_calls, - modify_self_calls, AssignmentProperties, CodeGenSpecialFuncs, CycleFunctionNames, - HoistableFunction, Variant, + modify_self_calls, }, tree::{AirTree, TreePath}, }; use crate::{ + IdGenerator, ast::{ AssignmentKind, BinOp, Bls12_381Point, Curve, DataTypeKey, FunctionAccessKey, Pattern, Span, TraceLevel, Tracing, TypedArg, TypedDataType, TypedFunction, TypedPattern, @@ -25,30 +26,29 @@ use crate::{ gen_uplc::{ air::ExpectLevel, builder::{ - erase_opaque_type_operations, get_generic_variant_name, get_line_columns_by_span, - get_src_code_by_span, known_data_to_type, monomorphize, wrap_validator_condition, - CodeGenFunction, + CodeGenFunction, erase_opaque_type_operations, get_generic_variant_name, + get_line_columns_by_span, get_src_code_by_span, known_data_to_type, monomorphize, + wrap_validator_condition, }, }, line_numbers::LineNumbers, plutus_version::PlutusVersion, tipo::{ - check_replaceable_opaque_type, convert_opaque_type, find_and_replace_generics, - get_arg_type_name, get_generic_id_and_type, lookup_data_type_by_tipo, ModuleValueConstructor, PatternConstructor, Type, TypeInfo, ValueConstructor, - ValueConstructorVariant, + ValueConstructorVariant, check_replaceable_opaque_type, convert_opaque_type, + find_and_replace_generics, get_arg_type_name, get_generic_id_and_type, + lookup_data_type_by_tipo, }, - IdGenerator, }; use builder::{ - introduce_name, introduce_pattern, pop_pattern, softcast_data_to_type_otherwise, - unknown_data_to_type, DISCARDED, + DISCARDED, introduce_name, introduce_pattern, pop_pattern, softcast_data_to_type_otherwise, + unknown_data_to_type, }; -use decision_tree::{get_tipo_by_path, Assigned, CaseTest, DecisionTree, TreeGen}; +use decision_tree::{Assigned, CaseTest, DecisionTree, TreeGen, get_tipo_by_path}; use indexmap::IndexMap; use interner::AirInterner; use itertools::Itertools; -use petgraph::{algo, Graph}; +use petgraph::{Graph, algo}; use std::{collections::HashMap, rc::Rc}; use stick_break_set::{Builtins, TreeSet}; use tree::Fields; @@ -2451,7 +2451,7 @@ impl<'a> CodeGenerator<'a> { let last_clause = if data_type .as_ref() - .map_or(true, |d| d.constructors.len() != cases.len()) + .is_none_or(|d| d.constructors.len() != cases.len()) { *default.unwrap() } else { diff --git a/crates/aiken-lang/src/gen_uplc/builder.rs b/crates/aiken-lang/src/gen_uplc/builder.rs index 43df0668..f161801a 100644 --- a/crates/aiken-lang/src/gen_uplc/builder.rs +++ b/crates/aiken-lang/src/gen_uplc/builder.rs @@ -10,19 +10,19 @@ use crate::{ }, line_numbers::{LineColumn, LineNumbers}, tipo::{ - check_replaceable_opaque_type, convert_opaque_type, find_and_replace_generics, Type, - ValueConstructor, ValueConstructorVariant, + Type, ValueConstructor, ValueConstructorVariant, check_replaceable_opaque_type, + convert_opaque_type, find_and_replace_generics, }, }; use indexmap::IndexMap; use itertools::{Itertools, Position}; use std::{ops::Deref, rc::Rc}; use uplc::{ + KeyValuePairs, PlutusData, ast::{Constant as UplcConstant, Data, Name, Term, Type as UplcType}, builder::{CONSTR_FIELDS_EXPOSER, CONSTR_INDEX_EXPOSER}, builtins::DefaultFunction, machine::{runtime::Compressable, value::to_pallas_bigint}, - KeyValuePairs, PlutusData, }; pub type Variant = String; diff --git a/crates/aiken-lang/src/gen_uplc/decision_tree.rs b/crates/aiken-lang/src/gen_uplc/decision_tree.rs index ec885e61..a560b7e0 100644 --- a/crates/aiken-lang/src/gen_uplc/decision_tree.rs +++ b/crates/aiken-lang/src/gen_uplc/decision_tree.rs @@ -7,7 +7,7 @@ use itertools::{Either, Itertools, Position}; use crate::{ ast::{DataTypeKey, Pattern, TypedClause, TypedDataType, TypedPattern}, - expr::{lookup_data_type_by_tipo, Type, TypeVar, TypedExpr}, + expr::{Type, TypeVar, TypedExpr, lookup_data_type_by_tipo}, }; use super::{interner::AirInterner, tree::AirTree}; @@ -726,10 +726,12 @@ impl<'a, 'b> TreeGen<'a, 'b> { // First step make sure all rows have same number of columns // or something went wrong - assert!(matrix - .rows - .iter() - .all(|row| { row.columns.len() == column_length })); + assert!( + matrix + .rows + .iter() + .all(|row| { row.columns.len() == column_length }) + ); // Find which column has the most important pattern let occurrence_col = highest_occurrence(&matrix, column_length); @@ -1367,6 +1369,7 @@ mod tester { use indexmap::IndexMap; use crate::{ + IdGenerator, ast::{ Definition, ModuleKind, Span, TraceLevel, Tracing, TypedModule, TypedPattern, UntypedModule, @@ -1376,7 +1379,7 @@ mod tester { gen_uplc::{decision_tree::TreeGen, interner::AirInterner}, parser, tipo::error::{Error, Warning}, - utils, IdGenerator, + utils, }; fn parse(source_code: &str) -> UntypedModule { diff --git a/crates/aiken-lang/src/gen_uplc/interner.rs b/crates/aiken-lang/src/gen_uplc/interner.rs index 166bafb2..4fd4769f 100644 --- a/crates/aiken-lang/src/gen_uplc/interner.rs +++ b/crates/aiken-lang/src/gen_uplc/interner.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -use vec1::{vec1, Vec1}; +use vec1::{Vec1, vec1}; #[derive(Clone)] pub struct AirInterner { diff --git a/crates/aiken-lang/src/gen_uplc/stick_break_set.rs b/crates/aiken-lang/src/gen_uplc/stick_break_set.rs index 61e06bb5..ba2ae619 100644 --- a/crates/aiken-lang/src/gen_uplc/stick_break_set.rs +++ b/crates/aiken-lang/src/gen_uplc/stick_break_set.rs @@ -6,7 +6,7 @@ use uplc::{builder::CONSTR_FIELDS_EXPOSER, builtins::DefaultFunction}; use crate::expr::Type; use super::{ - decision_tree::{get_tipo_by_path, CaseTest, Path}, + decision_tree::{CaseTest, Path, get_tipo_by_path}, tree::AirTree, }; diff --git a/crates/aiken-lang/src/lib.rs b/crates/aiken-lang/src/lib.rs index 9eabbd89..b8a363e8 100644 --- a/crates/aiken-lang/src/lib.rs +++ b/crates/aiken-lang/src/lib.rs @@ -1,6 +1,6 @@ use std::sync::{ - atomic::{AtomicU64, Ordering}, Arc, + atomic::{AtomicU64, Ordering}, }; pub mod ast; diff --git a/crates/aiken-lang/src/parser/chain/call.rs b/crates/aiken-lang/src/parser/chain/call.rs index d264b4b4..ebdc3d27 100644 --- a/crates/aiken-lang/src/parser/chain/call.rs +++ b/crates/aiken-lang/src/parser/chain/call.rs @@ -2,7 +2,7 @@ use super::Chain; use crate::{ ast::CallArg, expr::UntypedExpr, - parser::{token::Token, ParseError}, + parser::{ParseError, token::Token}, }; use chumsky::prelude::*; diff --git a/crates/aiken-lang/src/parser/chain/field_access.rs b/crates/aiken-lang/src/parser/chain/field_access.rs index 05c0708a..e69c0c50 100644 --- a/crates/aiken-lang/src/parser/chain/field_access.rs +++ b/crates/aiken-lang/src/parser/chain/field_access.rs @@ -1,7 +1,7 @@ use super::Chain; use crate::{ ast::well_known, - parser::{token::Token, ParseError}, + parser::{ParseError, token::Token}, }; use chumsky::prelude::*; diff --git a/crates/aiken-lang/src/parser/chain/tuple_index.rs b/crates/aiken-lang/src/parser/chain/tuple_index.rs index e3ce7f24..d2a2a4e4 100644 --- a/crates/aiken-lang/src/parser/chain/tuple_index.rs +++ b/crates/aiken-lang/src/parser/chain/tuple_index.rs @@ -1,7 +1,7 @@ use chumsky::prelude::*; use super::Chain; -use crate::parser::{token::Token, ParseError}; +use crate::parser::{ParseError, token::Token}; pub(crate) fn parser() -> impl Parser { just(Token::Dot) diff --git a/crates/aiken-lang/src/parser/definition/data_type.rs b/crates/aiken-lang/src/parser/definition/data_type.rs index 2785ddce..2ff67190 100644 --- a/crates/aiken-lang/src/parser/definition/data_type.rs +++ b/crates/aiken-lang/src/parser/definition/data_type.rs @@ -84,8 +84,8 @@ pub fn parser() -> impl Parser impl Parser>, Error = ParseError> { +fn labeled_constructor_type_args() +-> impl Parser>, Error = ParseError> { select! {Token::Name {name} => name} .then_ignore(just(Token::Colon)) .then(annotation()) diff --git a/crates/aiken-lang/src/parser/definition/test_like.rs b/crates/aiken-lang/src/parser/definition/test_like.rs index 457bd7ce..f1aa944f 100644 --- a/crates/aiken-lang/src/parser/definition/test_like.rs +++ b/crates/aiken-lang/src/parser/definition/test_like.rs @@ -4,7 +4,7 @@ use crate::{ expr::UntypedExpr, parser::{ annotation, - chain::{call::parser as call, field_access, tuple_index::parser as tuple_index, Chain}, + chain::{Chain, call::parser as call, field_access, tuple_index::parser as tuple_index}, error::ParseError, expr::{self, bytearray, int as uint, list, string, tuple, var}, pattern, diff --git a/crates/aiken-lang/src/parser/expr/chained.rs b/crates/aiken-lang/src/parser/expr/chained.rs index 2ac3ee32..e1e57cb0 100644 --- a/crates/aiken-lang/src/parser/expr/chained.rs +++ b/crates/aiken-lang/src/parser/expr/chained.rs @@ -9,7 +9,7 @@ use super::{ use crate::{ expr::UntypedExpr, parser::{ - chain::{call::parser as call, field_access, tuple_index::parser as tuple_index, Chain}, + chain::{Chain, call::parser as call, field_access, tuple_index::parser as tuple_index}, error::ParseError, token::Token, }, diff --git a/crates/aiken-lang/src/parser/expr/fail_todo_trace.rs b/crates/aiken-lang/src/parser/expr/fail_todo_trace.rs index 2a1180a6..43176247 100644 --- a/crates/aiken-lang/src/parser/expr/fail_todo_trace.rs +++ b/crates/aiken-lang/src/parser/expr/fail_todo_trace.rs @@ -1,5 +1,5 @@ use crate::{ - ast::{well_known, TraceKind}, + ast::{TraceKind, well_known}, expr::UntypedExpr, parser::{ error::{ParseError, Pattern}, diff --git a/crates/aiken-lang/src/parser/literal/bytearray.rs b/crates/aiken-lang/src/parser/literal/bytearray.rs index 67349b07..84bfe188 100644 --- a/crates/aiken-lang/src/parser/literal/bytearray.rs +++ b/crates/aiken-lang/src/parser/literal/bytearray.rs @@ -158,8 +158,8 @@ pub fn hex_string() -> impl Parser< }) } -pub fn utf8_string( -) -> impl Parser), Error = ParseError> { +pub fn utf8_string() +-> impl Parser), Error = ParseError> { select! {Token::ByteString {value} => value.into_bytes() } .map(|token| (ast::ByteArrayFormatPreference::Utf8String, token)) } diff --git a/crates/aiken-lang/src/parser/pattern/pair.rs b/crates/aiken-lang/src/parser/pattern/pair.rs index d304d6d4..7db46b0e 100644 --- a/crates/aiken-lang/src/parser/pattern/pair.rs +++ b/crates/aiken-lang/src/parser/pattern/pair.rs @@ -1,5 +1,5 @@ use crate::{ - ast::{well_known, UntypedPattern}, + ast::{UntypedPattern, well_known}, parser::{error::ParseError, token::Token}, }; use chumsky::prelude::*; diff --git a/crates/aiken-lang/src/test_framework.rs b/crates/aiken-lang/src/test_framework.rs index 295dee81..9303274e 100644 --- a/crates/aiken-lang/src/test_framework.rs +++ b/crates/aiken-lang/src/test_framework.rs @@ -4,7 +4,7 @@ use crate::{ format::Formatter, gen_uplc::CodeGenerator, plutus_version::PlutusVersion, - tipo::{convert_opaque_type, Type}, + tipo::{Type, convert_opaque_type}, }; use cryptoxide::{blake2b::Blake2b, digest::Digest}; use indexmap::IndexMap; @@ -26,7 +26,7 @@ use uplc::{ ast::{Constant, Data, Name, NamedDeBruijn, Program, Term}, machine::{cost_model::ExBudget, eval_result::EvalResult}, }; -use vec1::{vec1, Vec1}; +use vec1::{Vec1, vec1}; #[derive(Debug, Clone, Copy)] pub enum RunnableKind { @@ -531,7 +531,9 @@ impl Benchmark { match prng.sample(&fuzzer) { Ok(None) => { - panic!("A seeded PRNG returned 'None' which indicates a sampler is ill-formed and implemented wrongly; please contact library's authors."); + panic!( + "A seeded PRNG returned 'None' which indicates a sampler is ill-formed and implemented wrongly; please contact library's authors." + ); } Ok(Some((new_prng, value))) => { @@ -689,8 +691,10 @@ impl Prng { fn as_prng(cst: &PlutusData) -> Prng { if let PlutusData::Constr(Constr { tag, fields, .. }) = cst { if *tag == 121 + Prng::SEEDED { - if let [PlutusData::BoundedBytes(bytes), PlutusData::BoundedBytes(choices)] = - &fields[..] + if let [ + PlutusData::BoundedBytes(bytes), + PlutusData::BoundedBytes(choices), + ] = &fields[..] { return Prng::Seeded { choices: choices.to_vec(), @@ -1124,21 +1128,17 @@ impl TestResult { pub fn module(&self) -> &str { match self { - TestResult::UnitTestResult(UnitTestResult { ref test, .. }) => test.module.as_str(), - TestResult::PropertyTestResult(PropertyTestResult { ref test, .. }) => { - test.module.as_str() - } - TestResult::BenchmarkResult(BenchmarkResult { ref bench, .. }) => bench.module.as_str(), + TestResult::UnitTestResult(UnitTestResult { test, .. }) => test.module.as_str(), + TestResult::PropertyTestResult(PropertyTestResult { test, .. }) => test.module.as_str(), + TestResult::BenchmarkResult(BenchmarkResult { bench, .. }) => bench.module.as_str(), } } pub fn title(&self) -> &str { match self { - TestResult::UnitTestResult(UnitTestResult { ref test, .. }) => test.name.as_str(), - TestResult::PropertyTestResult(PropertyTestResult { ref test, .. }) => { - test.name.as_str() - } - TestResult::BenchmarkResult(BenchmarkResult { ref bench, .. }) => bench.name.as_str(), + TestResult::UnitTestResult(UnitTestResult { test, .. }) => test.name.as_str(), + TestResult::PropertyTestResult(PropertyTestResult { test, .. }) => test.name.as_str(), + TestResult::BenchmarkResult(BenchmarkResult { bench, .. }) => bench.name.as_str(), } } @@ -1279,9 +1279,11 @@ impl TryFrom for Assertion { final_else, .. } => { - if let [IfBranch { - condition, body, .. - }] = &branches[..] + if let [ + IfBranch { + condition, body, .. + }, + ] = &branches[..] { let then_is_true = match body { TypedExpr::Var { diff --git a/crates/aiken-lang/src/tests/check.rs b/crates/aiken-lang/src/tests/check.rs index 08aec14e..0462a3fa 100644 --- a/crates/aiken-lang/src/tests/check.rs +++ b/crates/aiken-lang/src/tests/check.rs @@ -1,4 +1,5 @@ use crate::{ + IdGenerator, ast::{ Definition, ModuleKind, Pattern, TraceLevel, Tracing, TypedModule, UntypedModule, UntypedPattern, @@ -7,7 +8,6 @@ use crate::{ expr::{CallArg, Span, TypedExpr}, parser, tipo::error::{Error, UnifyErrorSituation, Warning}, - IdGenerator, }; use std::collections::HashMap; @@ -43,7 +43,9 @@ fn check_module( let mut warnings = vec![]; if module.name == DEFAULT_MODULE_NAME { - panic!("passed extra modules with default name! Use 'parse_as' to define tests instead of 'parse'."); + panic!( + "passed extra modules with default name! Use 'parse_as' to define tests instead of 'parse'." + ); } let typed_module = module @@ -2976,7 +2978,7 @@ fn correct_span_for_backpassing_args() { let (warnings, _ast) = check(parse(source_code)).unwrap(); assert!( - matches!(&warnings[0], Warning::UnusedVariable { ref name, location } if name == "b" && location.start == 245 && location.end == 246) + matches!(&warnings[0], Warning::UnusedVariable { name, location } if name == "b" && location.start == 245 && location.end == 246) ); } @@ -3407,7 +3409,7 @@ fn side_effects() { assert!(warnings.is_empty(), "no warnings: {warnings:#?}"); - if let Some(Definition::Fn(ref foo)) = ast.definitions().last() { + if let Some(Definition::Fn(foo)) = ast.definitions().last() { if let TypedExpr::Sequence { ref expressions, .. } = foo.body diff --git a/crates/aiken-lang/src/tipo.rs b/crates/aiken-lang/src/tipo.rs index 3952d84b..9d3c23cf 100644 --- a/crates/aiken-lang/src/tipo.rs +++ b/crates/aiken-lang/src/tipo.rs @@ -1,8 +1,8 @@ use self::{environment::Environment, pretty::Printer}; use crate::{ ast::{ - well_known, Annotation, DataType, DataTypeKey, DefinitionLocation, ModuleKind, Span, - TypedDataType, + Annotation, DataType, DataTypeKey, DefinitionLocation, ModuleKind, Span, TypedDataType, + well_known, }, tipo::fields::FieldMap, }; @@ -212,8 +212,8 @@ impl Type { match self { Type::App { module, name, .. } => Some((module.to_string(), name.to_string())), Type::Fn { .. } => None, - Type::Var { ref tipo, .. } => match &*tipo.borrow() { - TypeVar::Link { ref tipo } => tipo.qualifier(), + Type::Var { tipo, .. } => match &*tipo.borrow() { + TypeVar::Link { tipo } => tipo.qualifier(), _ => None, }, Type::Tuple { .. } => Some((String::new(), "Tuple".to_string())), @@ -1109,11 +1109,13 @@ impl TypeVar { Self::Link { tipo } => tipo.get_inner_types(), Self::Unbound { .. } => vec![], var => { - vec![Type::Var { - tipo: RefCell::new(var.clone()).into(), - alias: None, - } - .into()] + vec![ + Type::Var { + tipo: RefCell::new(var.clone()).into(), + alias: None, + } + .into(), + ] } } } diff --git a/crates/aiken-lang/src/tipo/environment.rs b/crates/aiken-lang/src/tipo/environment.rs index 224bb5e1..d30f26d4 100644 --- a/crates/aiken-lang/src/tipo/environment.rs +++ b/crates/aiken-lang/src/tipo/environment.rs @@ -1,19 +1,19 @@ use super::{ - error::{Error, Warning}, - exhaustive::{simplify, Matrix, PatternStack}, - hydrator::Hydrator, AccessorsMap, RecordAccessor, Type, TypeConstructor, TypeInfo, TypeVar, ValueConstructor, ValueConstructorVariant, + error::{Error, Warning}, + exhaustive::{Matrix, PatternStack, simplify}, + hydrator::Hydrator, }; use crate::{ + IdGenerator, ast::{ self, Annotation, CallArg, DataType, Definition, Function, ModuleConstant, ModuleKind, - Namespace, RecordConstructor, RecordConstructorArg, Span, TypeAlias, TypedDefinition, - TypedFunction, TypedPattern, TypedValidator, UnqualifiedImport, UntypedArg, - UntypedDefinition, UntypedFunction, Use, Validator, PIPE_VARIABLE, + Namespace, PIPE_VARIABLE, RecordConstructor, RecordConstructorArg, Span, TypeAlias, + TypedDefinition, TypedFunction, TypedPattern, TypedValidator, UnqualifiedImport, + UntypedArg, UntypedDefinition, UntypedFunction, Use, Validator, }, - tipo::{fields::FieldMap, TypeAliasAnnotation}, - IdGenerator, + tipo::{TypeAliasAnnotation, fields::FieldMap}, }; use std::{ collections::{HashMap, HashSet}, @@ -1157,7 +1157,7 @@ impl<'a> Environment<'a> { let first_error = unknowns.first().cloned(); unknowns.retain(|err| { - if let Error::UnknownType { ref name, .. } = err { + if let Error::UnknownType { name, .. } = err { !type_definitions.contains(&Some(name)) } else { false diff --git a/crates/aiken-lang/src/tipo/error.rs b/crates/aiken-lang/src/tipo/error.rs index c5bbbbad..315afa15 100644 --- a/crates/aiken-lang/src/tipo/error.rs +++ b/crates/aiken-lang/src/tipo/error.rs @@ -1662,9 +1662,7 @@ pub enum Warning { "I discovered an unused constructor: {}", name.if_supports_color(Stderr, |s| s.default_color()) )] - #[diagnostic(help( - "No big deal, but you might want to remove it to get rid of that warning." - ))] + #[diagnostic(help("No big deal, but you might want to remove it to get rid of that warning."))] #[diagnostic(code("unused::constructor"))] UnusedConstructor { #[label("unused constructor")] @@ -1676,9 +1674,7 @@ pub enum Warning { "I discovered an unused imported module: {}", name.if_supports_color(Stderr, |s| s.default_color()), )] - #[diagnostic(help( - "No big deal, but you might want to remove it to get rid of that warning." - ))] + #[diagnostic(help("No big deal, but you might want to remove it to get rid of that warning."))] #[diagnostic(code("unused::import::module"))] UnusedImportedModule { #[label("unused module")] @@ -1690,9 +1686,7 @@ pub enum Warning { "I discovered an unused imported value: {}", name.if_supports_color(Stderr, |s| s.default_color()), )] - #[diagnostic(help( - "No big deal, but you might want to remove it to get rid of that warning." - ))] + #[diagnostic(help("No big deal, but you might want to remove it to get rid of that warning."))] #[diagnostic(code("unused:import::value"))] UnusedImportedValueOrType { #[label("unused import")] @@ -1867,7 +1861,9 @@ pub enum Warning { }, #[error("I noticed a (compact) dynamic trace label which is not a string")] - #[diagnostic(help("Compiling with a compact trace-level, you are probably expecting compact traces although here, the entire label will need to be serialise *at runtime* which will add a significant overhead.\n\nAs a reminder, trace arguments are fully ignored in compact tracing. Hence, you probably want to put a cute little label here and move the current trace as argument!"))] + #[diagnostic(help( + "Compiling with a compact trace-level, you are probably expecting compact traces although here, the entire label will need to be serialise *at runtime* which will add a significant overhead.\n\nAs a reminder, trace arguments are fully ignored in compact tracing. Hence, you probably want to put a cute little label here and move the current trace as argument!" + ))] #[diagnostic(code("trace::label_is_not_string"))] #[diagnostic(url("https://aiken-lang.org/language-tour/troubleshooting#traces"))] CompactTraceLabelIsNotstring { diff --git a/crates/aiken-lang/src/tipo/exhaustive.rs b/crates/aiken-lang/src/tipo/exhaustive.rs index 02ff32eb..5843eb44 100644 --- a/crates/aiken-lang/src/tipo/exhaustive.rs +++ b/crates/aiken-lang/src/tipo/exhaustive.rs @@ -1,6 +1,6 @@ use crate::{ ast, - tipo::{self, environment::Environment, error::Error, Type}, + tipo::{self, Type, environment::Environment, error::Error}, }; use itertools::Itertools; use std::{collections::BTreeMap, iter, ops::Deref}; @@ -407,11 +407,7 @@ impl Pattern { .filter_map(|(index, p)| { if index == 1 { let tail = pretty_tail(p); - if tail == "[]" { - None - } else { - Some(tail) - } + if tail == "[]" { None } else { Some(tail) } } else { Some(p.pretty()) } diff --git a/crates/aiken-lang/src/tipo/expr.rs b/crates/aiken-lang/src/tipo/expr.rs index a3c2e6d0..6ba7557f 100644 --- a/crates/aiken-lang/src/tipo/expr.rs +++ b/crates/aiken-lang/src/tipo/expr.rs @@ -1,14 +1,15 @@ use super::{ + RecordAccessor, Type, ValueConstructor, ValueConstructorVariant, environment::{ - assert_no_labeled_arguments, collapse_links, generalise, EntityKind, Environment, + EntityKind, Environment, assert_no_labeled_arguments, collapse_links, generalise, }, error::{Error, Warning}, hydrator::Hydrator, pattern::PatternTyper, pipe::PipeTyper, - RecordAccessor, Type, ValueConstructor, ValueConstructorVariant, }; use crate::{ + IdGenerator, ast::{ self, Annotation, ArgName, AssignmentKind, AssignmentPattern, BinOp, Bls12_381Point, ByteArrayFormatPreference, CallArg, Curve, Function, IfBranch, LogicalOpChainKind, @@ -17,14 +18,13 @@ use crate::{ TypedValidator, UnOp, UntypedArg, UntypedAssignmentKind, UntypedClause, UntypedFunction, UntypedIfBranch, UntypedPattern, UntypedRecordUpdateArg, }, - builtins::{from_default_function, BUILTIN}, + builtins::{BUILTIN, from_default_function}, expr::{FnStyle, TypedExpr, UntypedExpr}, format, parser::token::Base, tipo::{ - fields::FieldMap, DefaultFunction, ModuleKind, PatternConstructor, TypeConstructor, TypeVar, + DefaultFunction, ModuleKind, PatternConstructor, TypeConstructor, TypeVar, fields::FieldMap, }, - IdGenerator, }; use std::{ cmp::Ordering, @@ -970,7 +970,7 @@ impl<'a, 'b> ExprTyper<'a, 'b> { location, } => { if let UntypedExpr::Var { - name: ref module, + name: module, location: module_location, } = container.as_ref() { @@ -1091,7 +1091,7 @@ impl<'a, 'b> ExprTyper<'a, 'b> { container: ref type_container, } if TypeConstructor::might_be(type_name) => { if let UntypedExpr::Var { - name: ref module_name, + name: module_name, location: module_location, } = type_container.as_ref() { diff --git a/crates/aiken-lang/src/tipo/hydrator.rs b/crates/aiken-lang/src/tipo/hydrator.rs index fb1643bd..40b6ab9c 100644 --- a/crates/aiken-lang/src/tipo/hydrator.rs +++ b/crates/aiken-lang/src/tipo/hydrator.rs @@ -1,7 +1,7 @@ use super::{ + Type, TypeConstructor, environment::Environment, error::{Error, Warning}, - Type, TypeConstructor, }; use crate::{ast::Annotation, tipo::Span}; use std::{collections::HashMap, rc::Rc}; diff --git a/crates/aiken-lang/src/tipo/infer.rs b/crates/aiken-lang/src/tipo/infer.rs index a148a6a9..e7561040 100644 --- a/crates/aiken-lang/src/tipo/infer.rs +++ b/crates/aiken-lang/src/tipo/infer.rs @@ -1,11 +1,12 @@ use super::{ + TypeInfo, ValueConstructor, ValueConstructorVariant, environment::{EntityKind, Environment}, error::{Error, UnifyErrorSituation, Warning}, expr::ExprTyper, hydrator::Hydrator, - TypeInfo, ValueConstructor, ValueConstructorVariant, }; use crate::{ + IdGenerator, ast::{ Annotation, ArgBy, ArgName, ArgVia, DataType, Definition, Function, ModuleConstant, ModuleKind, RecordConstructor, RecordConstructorArg, Tracing, TypeAlias, TypedArg, @@ -14,8 +15,7 @@ use crate::{ }, expr::{TypedExpr, UntypedAssignmentKind, UntypedExpr}, parser::token::Token, - tipo::{expr::infer_function, Span, Type, TypeVar}, - IdGenerator, + tipo::{Span, Type, TypeVar, expr::infer_function}, }; use std::{ borrow::Borrow, @@ -758,8 +758,8 @@ where .get_mut(&f.name) .expect("Could not find preregistered type for test"); if let Type::Fn { - ref ret, - ref alias, + ret, + alias, args: _, } = scope.tipo.as_ref() { diff --git a/crates/aiken-lang/src/tipo/pattern.rs b/crates/aiken-lang/src/tipo/pattern.rs index 6678d4a7..0062f2d5 100644 --- a/crates/aiken-lang/src/tipo/pattern.rs +++ b/crates/aiken-lang/src/tipo/pattern.rs @@ -1,10 +1,10 @@ //! Type inference and checking of patterns used in case expressions //! and variables bindings. use super::{ - environment::{assert_no_labeled_arguments, collapse_links, EntityKind, Environment}, + PatternConstructor, Type, ValueConstructorVariant, + environment::{EntityKind, Environment, assert_no_labeled_arguments, collapse_links}, error::{Error, Warning}, hydrator::Hydrator, - PatternConstructor, Type, ValueConstructorVariant, }; use crate::ast::{CallArg, Namespace, Pattern, Span, TypedPattern, UntypedPattern}; use itertools::Itertools; diff --git a/crates/aiken-lang/src/tipo/pipe.rs b/crates/aiken-lang/src/tipo/pipe.rs index 7fca1436..84eef4d4 100644 --- a/crates/aiken-lang/src/tipo/pipe.rs +++ b/crates/aiken-lang/src/tipo/pipe.rs @@ -1,10 +1,10 @@ use super::{ + Type, ValueConstructor, ValueConstructorVariant, error::{Error, UnifyErrorSituation}, expr::ExprTyper, - Type, ValueConstructor, ValueConstructorVariant, }; use crate::{ - ast::{AssignmentKind, CallArg, Pattern, Span, PIPE_VARIABLE}, + ast::{AssignmentKind, CallArg, PIPE_VARIABLE, Pattern, Span}, expr::{TypedExpr, UntypedExpr}, }; use std::{ops::Deref, rc::Rc}; diff --git a/crates/aiken-lang/src/tipo/pretty.rs b/crates/aiken-lang/src/tipo/pretty.rs index 7a6f9b19..0d49a120 100644 --- a/crates/aiken-lang/src/tipo/pretty.rs +++ b/crates/aiken-lang/src/tipo/pretty.rs @@ -136,7 +136,7 @@ impl Printer { fn type_var_doc<'a>(&mut self, typ: &TypeVar) -> Document<'a> { match typ { - TypeVar::Link { tipo: ref typ, .. } => self.print(typ), + TypeVar::Link { tipo: typ, .. } => self.print(typ), TypeVar::Generic { id, .. } => self.generic_type_var(*id), TypeVar::Unbound { .. } => "?".to_doc(), } diff --git a/crates/aiken-lsp/Cargo.toml b/crates/aiken-lsp/Cargo.toml index a74a4f92..5119ca82 100644 --- a/crates/aiken-lsp/Cargo.toml +++ b/crates/aiken-lsp/Cargo.toml @@ -1,13 +1,14 @@ [package] name = "aiken-lsp" -version = "1.1.15" -edition = "2021" -description = "Cardano smart contract language and toolchain" -repository = "https://github.com/aiken-lang/aiken" -homepage = "https://github.com/aiken-lang/aiken" -license = "Apache-2.0" -authors = ["Lucas Rosa "] -rust-version = "1.70.0" +version.workspace = true +edition.workspace = true +description.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true +homepage.workspace = true +documentation.workspace = true +rust-version.workspace = true [dependencies] crossbeam-channel = "0.5.7" diff --git a/crates/aiken-lsp/src/quickfix.rs b/crates/aiken-lsp/src/quickfix.rs index 1347e0bf..f5f527d9 100644 --- a/crates/aiken-lsp/src/quickfix.rs +++ b/crates/aiken-lsp/src/quickfix.rs @@ -238,7 +238,7 @@ fn unknown_identifier( ) -> Vec { let mut edits = Vec::new(); - if let Some(serde_json::Value::String(ref var_name)) = data { + if let Some(serde_json::Value::String(var_name)) = data { for module in compiler.project.modules() { if module.ast.has_definition(var_name) { if let Some(edit) = parsed_document.import(&module, Some(var_name)) { @@ -263,7 +263,7 @@ fn unknown_constructor( ) -> Vec { let mut edits = Vec::new(); - if let Some(serde_json::Value::String(ref constructor_name)) = data { + if let Some(serde_json::Value::String(constructor_name)) = data { for module in compiler.project.modules() { if module.ast.has_constructor(constructor_name) { if let Some(edit) = parsed_document.import(&module, Some(constructor_name)) { @@ -316,7 +316,7 @@ fn unknown_module( ) -> Vec { let mut edits = Vec::new(); - if let Some(serde_json::Value::String(ref module_name)) = data { + if let Some(serde_json::Value::String(module_name)) = data { for module in compiler.project.modules() { if module.name.ends_with(module_name) { if let Some(edit) = parsed_document.import(&module, None) { @@ -336,7 +336,7 @@ fn unused_imports( let mut edits = Vec::new(); for data in datas.iter().rev().flatten() { - if let serde_json::Value::String(ref args) = data { + if let serde_json::Value::String(args) = data { let args = args.split(',').collect::>(); match args.as_slice() { &[is_qualified, start] => { @@ -362,7 +362,7 @@ fn unused_imports( fn utf8_byte_array_is_hex_string(diagnostic: &lsp_types::Diagnostic) -> Vec { let mut edits = Vec::new(); - if let Some(serde_json::Value::String(ref value)) = diagnostic.data.as_ref() { + if let Some(serde_json::Value::String(value)) = diagnostic.data.as_ref() { edits.push(AnnotatedEdit::SimpleEdit( "Prefix with #".to_string(), lsp_types::TextEdit { diff --git a/crates/aiken-lsp/src/server.rs b/crates/aiken-lsp/src/server.rs index 9d387093..1529f21e 100644 --- a/crates/aiken-lsp/src/server.rs +++ b/crates/aiken-lsp/src/server.rs @@ -5,8 +5,8 @@ use crate::{ quickfix, quickfix::Quickfix, utils::{ - path_to_uri, span_to_lsp_range, text_edit_replace, uri_to_module_name, - COMPILING_PROGRESS_TOKEN, CREATE_COMPILING_PROGRESS_TOKEN, + COMPILING_PROGRESS_TOKEN, CREATE_COMPILING_PROGRESS_TOKEN, path_to_uri, span_to_lsp_range, + text_edit_replace, uri_to_module_name, }, }; use aiken_lang::{ @@ -25,6 +25,7 @@ use indoc::formatdoc; use itertools::Itertools; use lsp_server::{Connection, Message}; use lsp_types::{ + DocumentFormattingParams, InitializeParams, TextEdit, notification::{ DidChangeTextDocument, DidChangeWatchedFiles, DidCloseTextDocument, DidSaveTextDocument, Notification, Progress, PublishDiagnostics, ShowMessage, @@ -33,7 +34,6 @@ use lsp_types::{ CodeActionRequest, Completion, Formatting, GotoDefinition, HoverRequest, Request, WorkDoneProgressCreate, }, - DocumentFormattingParams, InitializeParams, TextEdit, }; use miette::Diagnostic; use std::{ diff --git a/crates/aiken-lsp/src/server/lsp_project.rs b/crates/aiken-lsp/src/server/lsp_project.rs index cc695018..ed212a3e 100644 --- a/crates/aiken-lsp/src/server/lsp_project.rs +++ b/crates/aiken-lsp/src/server/lsp_project.rs @@ -1,5 +1,7 @@ use aiken_lang::{ast::Tracing, line_numbers::LineNumbers, test_framework::PropertyTest}; -use aiken_project::{config::ProjectConfig, error::Error as ProjectError, module::CheckedModule, Project}; +use aiken_project::{ + Project, config::ProjectConfig, error::Error as ProjectError, module::CheckedModule, +}; use std::{collections::HashMap, path::PathBuf}; #[derive(Debug)] diff --git a/crates/aiken-lsp/src/utils.rs b/crates/aiken-lsp/src/utils.rs index 8849c750..5b01a13b 100644 --- a/crates/aiken-lsp/src/utils.rs +++ b/crates/aiken-lsp/src/utils.rs @@ -1,7 +1,7 @@ use crate::error::Error; use aiken_lang::{ast::Span, line_numbers::LineNumbers}; use itertools::Itertools; -use lsp_types::{notification::Notification, TextEdit}; +use lsp_types::{TextEdit, notification::Notification}; use std::path::{Path, PathBuf}; use urlencoding::decode; diff --git a/crates/aiken-project/Cargo.toml b/crates/aiken-project/Cargo.toml index eae2a93d..abd2e3aa 100644 --- a/crates/aiken-project/Cargo.toml +++ b/crates/aiken-project/Cargo.toml @@ -1,17 +1,15 @@ [package] name = "aiken-project" -description = "Aiken project utilities" -version = "1.1.15" -edition = "2021" -repository = "https://github.com/aiken-lang/aiken" -homepage = "https://github.com/aiken-lang/aiken" -license = "Apache-2.0" -authors = [ - "Lucas Rosa ", - "Kasey White ", - "KtorZ ", -] -rust-version = "1.80.0" +version.workspace = true +edition.workspace = true +description.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true +homepage.workspace = true +documentation.workspace = true +rust-version.workspace = true + build = "build.rs" [dependencies] diff --git a/crates/aiken-project/src/blueprint/definitions.rs b/crates/aiken-project/src/blueprint/definitions.rs index 6a59046e..d7f072fe 100644 --- a/crates/aiken-project/src/blueprint/definitions.rs +++ b/crates/aiken-project/src/blueprint/definitions.rs @@ -1,11 +1,11 @@ use crate::{ + Annotated, Schema, blueprint::{ parameter::Parameter, schema::{Data, Declaration, Items}, }, - Annotated, Schema, }; -use aiken_lang::tipo::{pretty::resolve_alias, Type, TypeAliasAnnotation, TypeVar}; +use aiken_lang::tipo::{Type, TypeAliasAnnotation, TypeVar, pretty::resolve_alias}; use itertools::Itertools; use serde::{ self, @@ -176,7 +176,7 @@ impl Definitions> { dependencies.insert(src); } } - Declaration::Inline(ref schema) => traverse(src, schema, usage), + Declaration::Inline(schema) => traverse(src, schema, usage), } } @@ -260,16 +260,16 @@ impl Definitions> { fn schema_to_data(schema: &mut Schema) { let items = match schema { Schema::Data(_) => None, - Schema::Pair(ref mut left, ref mut right) => { + Schema::Pair(left, right) => { let left = swap_declaration(left); let right = swap_declaration(right); Some(Items::Many(vec![left, right])) } - Schema::List(Items::One(ref mut item)) => { + Schema::List(Items::One(item)) => { let item = swap_declaration(item); Some(Items::One(item)) } - Schema::List(Items::Many(ref mut items)) => Some(Items::Many( + Schema::List(Items::Many(items)) => Some(Items::Many( items.iter_mut().map(swap_declaration).collect(), )), Schema::Integer => { @@ -300,7 +300,7 @@ impl Definitions> { } for (_, entry) in self.inner.iter_mut() { - if let Some(ref mut annotated) = entry { + if let Some(annotated) = entry { schema_to_data(&mut annotated.annotated); } } diff --git a/crates/aiken-project/src/blueprint/mod.rs b/crates/aiken-project/src/blueprint/mod.rs index 8ee873e9..7a37e2a5 100644 --- a/crates/aiken-project/src/blueprint/mod.rs +++ b/crates/aiken-project/src/blueprint/mod.rs @@ -6,7 +6,7 @@ pub mod schema; pub mod validator; use crate::{ - config::{self, ProjectConfig, PlutusVersion}, + config::{self, PlutusVersion, ProjectConfig}, module::CheckedModules, }; use aiken_lang::gen_uplc::CodeGenerator; diff --git a/crates/aiken-project/src/blueprint/parameter.rs b/crates/aiken-project/src/blueprint/parameter.rs index 340eea96..ce9ef229 100644 --- a/crates/aiken-project/src/blueprint/parameter.rs +++ b/crates/aiken-project/src/blueprint/parameter.rs @@ -5,8 +5,8 @@ use super::{ }; use std::{iter, ops::Deref}; use uplc::{ - ast::{Constant, Data as UplcData}, PlutusData, + ast::{Constant, Data as UplcData}, }; #[derive(Debug, PartialEq, Eq, Clone, serde::Serialize, serde::Deserialize)] @@ -34,7 +34,7 @@ impl Parameter { ) -> Result<(), Error> { let schema = match &self.schema { Declaration::Inline(schema) => schema, - Declaration::Referenced(ref link) => { + Declaration::Referenced(link) => { &definitions .lookup(link) .map(Ok) @@ -353,11 +353,13 @@ fn expect_data_constr(term: &Constant, index: usize) -> Result, Er Err(mismatch( term, - Schema::Data(Data::AnyOf(vec![Constructor { - index, - fields: vec![], - } - .into()])), + Schema::Data(Data::AnyOf(vec![ + Constructor { + index, + fields: vec![], + } + .into(), + ])), )) } diff --git a/crates/aiken-project/src/blueprint/schema.rs b/crates/aiken-project/src/blueprint/schema.rs index ea9f7471..afbf666a 100644 --- a/crates/aiken-project/src/blueprint/schema.rs +++ b/crates/aiken-project/src/blueprint/schema.rs @@ -1,10 +1,10 @@ use crate::{ - blueprint::definitions::{Definitions, Reference}, CheckedModule, + blueprint::definitions::{Definitions, Reference}, }; use aiken_lang::{ ast::{Definition, TypedDataType, TypedDefinition}, - tipo::{pretty, Type, TypeVar}, + tipo::{Type, TypeVar, pretty}, }; use owo_colors::{OwoColorize, Stream::Stdout}; use serde::{ @@ -1117,7 +1117,7 @@ Here's the types I followed and that led me to this problem: pub mod tests { use super::*; use proptest::prelude::*; - use serde_json::{self, json, Value}; + use serde_json::{self, Value, json}; pub fn assert_json(schema: &impl Serialize, expected: Value) { assert_eq!(serde_json::to_value(schema).unwrap(), expected); @@ -1198,11 +1198,13 @@ pub mod tests { #[test] fn serialize_data_constr_1() { - let schema = Schema::Data(Data::AnyOf(vec![Constructor { - index: 0, - fields: vec![], - } - .into()])); + let schema = Schema::Data(Data::AnyOf(vec![ + Constructor { + index: 0, + fields: vec![], + } + .into(), + ])); assert_json( &schema, json!({ @@ -1363,14 +1365,16 @@ pub mod tests { #[test] fn deserialize_any_of() { assert_eq!( - Data::AnyOf(vec![Constructor { - index: 0, - fields: vec![ - Declaration::Referenced(Reference::new("foo")).into(), - Declaration::Referenced(Reference::new("bar")).into() - ], - } - .into()]), + Data::AnyOf(vec![ + Constructor { + index: 0, + fields: vec![ + Declaration::Referenced(Reference::new("foo")).into(), + Declaration::Referenced(Reference::new("bar")).into() + ], + } + .into() + ]), serde_json::from_value(json!({ "anyOf": [{ "index": 0, @@ -1391,14 +1395,16 @@ pub mod tests { #[test] fn deserialize_one_of() { assert_eq!( - Data::AnyOf(vec![Constructor { - index: 0, - fields: vec![ - Declaration::Referenced(Reference::new("foo")).into(), - Declaration::Referenced(Reference::new("bar")).into() - ], - } - .into()]), + Data::AnyOf(vec![ + Constructor { + index: 0, + fields: vec![ + Declaration::Referenced(Reference::new("foo")).into(), + Declaration::Referenced(Reference::new("bar")).into() + ], + } + .into() + ]), serde_json::from_value(json!({ "oneOf": [{ "index": 0, diff --git a/crates/aiken-project/src/blueprint/validator.rs b/crates/aiken-project/src/blueprint/validator.rs index 6a9a22d1..287443dc 100644 --- a/crates/aiken-project/src/blueprint/validator.rs +++ b/crates/aiken-project/src/blueprint/validator.rs @@ -7,17 +7,17 @@ use super::{ }; use crate::module::{CheckedModule, CheckedModules}; use aiken_lang::{ - ast::{well_known, Annotation, TypedArg, TypedFunction, TypedValidator}, + ast::{Annotation, TypedArg, TypedFunction, TypedValidator, well_known}, gen_uplc::CodeGenerator, plutus_version::PlutusVersion, - tipo::{collapse_links, Type}, + tipo::{Type, collapse_links}, }; use miette::NamedSource; use serde; use std::borrow::Borrow; use uplc::{ - ast::{Constant, SerializableProgram}, PlutusData, + ast::{Constant, SerializableProgram}, }; #[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize)] @@ -245,8 +245,8 @@ impl Validator { pub fn tipo_or_annotation<'a>(module: &'a CheckedModule, arg: &'a TypedArg) -> &'a Type { match collapse_links(arg.tipo.clone()).borrow() { Type::App { - module: ref module_name, - name: ref type_name, + module: module_name, + name: type_name, .. } if module_name.is_empty() && &type_name[..] == "Data" => match arg.annotation { Some(Annotation::Constructor { ref arguments, .. }) if !arguments.is_empty() => module @@ -301,7 +301,7 @@ impl Validator { description: None, annotated: schema.as_ref().clone(), }, - Declaration::Referenced(ref link) => definitions + Declaration::Referenced(link) => definitions .lookup(link) .map(|s| { Ok(Annotated { @@ -1032,11 +1032,13 @@ mod tests { let mut definitions = fixture_definitions(); definitions.insert( &schema, - Schema::Data(Data::AnyOf(vec![Constructor { - index: 0, - fields: vec![Declaration::Referenced(Reference::new("Bool")).into()], - } - .into()])) + Schema::Data(Data::AnyOf(vec![ + Constructor { + index: 0, + fields: vec![Declaration::Referenced(Reference::new("Bool")).into()], + } + .into(), + ])) .into(), ); diff --git a/crates/aiken-project/src/config.rs b/crates/aiken-project/src/config.rs index c890fb81..9c93da78 100644 --- a/crates/aiken-project/src/config.rs +++ b/crates/aiken-project/src/config.rs @@ -1,5 +1,5 @@ use crate::{ - error::TomlLoadingContext, github::repo::LatestRelease, package_name::PackageName, paths, Error, + Error, error::TomlLoadingContext, github::repo::LatestRelease, package_name::PackageName, paths, }; use aiken_lang::{ ast::{Annotation, ByteArrayFormatPreference, ModuleConstant, Span, UntypedDefinition}, @@ -11,9 +11,8 @@ use glob::glob; use miette::NamedSource; use semver::Version; use serde::{ - de, + Deserialize, Serialize, de, ser::{self, SerializeSeq, SerializeStruct}, - Deserialize, Serialize, }; use std::{ collections::BTreeMap, diff --git a/crates/aiken-project/src/deps.rs b/crates/aiken-project/src/deps.rs index 04723577..bd23234c 100644 --- a/crates/aiken-project/src/deps.rs +++ b/crates/aiken-project/src/deps.rs @@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize}; use tokio::time::Instant; use crate::{ - config::{ProjectConfig, Dependency}, + config::{Dependency, ProjectConfig}, error::{Error, TomlLoadingContext}, package_name::PackageName, paths, @@ -133,7 +133,11 @@ impl From<&Manifest> for LocalPackages { } } -pub fn download(event_listener: &T, root_path: &Path, config: &ProjectConfig) -> Result +pub fn download( + event_listener: &T, + root_path: &Path, + config: &ProjectConfig, +) -> Result where T: EventListener, { diff --git a/crates/aiken-project/src/deps/manifest.rs b/crates/aiken-project/src/deps/manifest.rs index b9e9602f..97c1d4b2 100644 --- a/crates/aiken-project/src/deps/manifest.rs +++ b/crates/aiken-project/src/deps/manifest.rs @@ -9,7 +9,7 @@ use std::{ }; use crate::{ - config::{ProjectConfig, Dependency, Platform}, + config::{Dependency, Platform, ProjectConfig}, error::{Error, TomlLoadingContext}, package_name::PackageName, paths, diff --git a/crates/aiken-project/src/docs.rs b/crates/aiken-project/src/docs.rs index b5cb2000..5c1c7d1f 100644 --- a/crates/aiken-project/src/docs.rs +++ b/crates/aiken-project/src/docs.rs @@ -104,7 +104,11 @@ impl DocLink { /// The documentation is built using template files located at the root of this crate. /// With the documentation, we also build a client-side search index to ease navigation /// across multiple modules. -pub fn generate_all(root: &Path, config: &ProjectConfig, modules: Vec<&CheckedModule>) -> Vec { +pub fn generate_all( + root: &Path, + config: &ProjectConfig, + modules: Vec<&CheckedModule>, +) -> Vec { let timestamp = new_timestamp(); let modules_links = generate_modules_links(&modules); diff --git a/crates/aiken-project/src/docs/link_tree.rs b/crates/aiken-project/src/docs/link_tree.rs index cc88d038..470238b1 100644 --- a/crates/aiken-project/src/docs/link_tree.rs +++ b/crates/aiken-project/src/docs/link_tree.rs @@ -78,10 +78,7 @@ impl LinkTree { } } - LinkTree::Leaf { - value: ref mut leaf, - .. - } => { + LinkTree::Leaf { value: leaf, .. } => { // In case we try to insert a module that already exists, there's nothing to do. if module == leaf { return; @@ -138,9 +135,7 @@ impl LinkTree { } LinkTree::Node { - ref mut prefix, - ref mut children, - .. + prefix, children, .. } => { // When `module.starts_with(prefix)` is true, it means that the module being // inserted belong to our sub-tree. We do not know *where* exactly though, so we @@ -274,8 +269,8 @@ impl LinkTree { fn path(&self) -> &str { match self { LinkTree::Empty => "", - LinkTree::Leaf { ref value, .. } => value.as_str(), - LinkTree::Node { ref prefix, .. } => prefix.as_str(), + LinkTree::Leaf { value, .. } => value.as_str(), + LinkTree::Node { prefix, .. } => prefix.as_str(), } } } diff --git a/crates/aiken-project/src/docs/source_links.rs b/crates/aiken-project/src/docs/source_links.rs index 889c93d9..46bbce8f 100644 --- a/crates/aiken-project/src/docs/source_links.rs +++ b/crates/aiken-project/src/docs/source_links.rs @@ -1,6 +1,6 @@ use crate::{ - config::{ProjectConfig, Platform}, CheckedModule, + config::{Platform, ProjectConfig}, }; use aiken_lang::{ast::Span, line_numbers::LineNumbers}; use camino::{Utf8Component, Utf8Path}; diff --git a/crates/aiken-project/src/error.rs b/crates/aiken-project/src/error.rs index 32e3e180..04c27b65 100644 --- a/crates/aiken-project/src/error.rs +++ b/crates/aiken-project/src/error.rs @@ -432,12 +432,14 @@ impl Diagnostic for Error { ))), Error::NoValidatorNotFound { known_validators } => Some(Box::new(hint_validators( known_validators, - "Here's a list of all validators I've found in your project.\nPlease double-check this list against the options that you've provided." - ))), - Error::MoreThanOneValidatorFound { known_validators } => Some(Box::new(hint_validators( - known_validators, - "Here's a list of matching validators I've found in your project.\nPlease narrow the selection using additional options.", + "Here's a list of all validators I've found in your project.\nPlease double-check this list against the options that you've provided.", ))), + Error::MoreThanOneValidatorFound { known_validators } => { + Some(Box::new(hint_validators( + known_validators, + "Here's a list of matching validators I've found in your project.\nPlease narrow the selection using additional options.", + ))) + } Error::Module(e) => e.help(), } } @@ -697,12 +699,10 @@ impl Diagnostic for Warning { Warning::NoConfigurationForEnv { .. } => Some(Box::new( "When configuration keys are missing for a target environment, no 'config' module will be created. This may lead to issues down the line.", )), - Warning::SuspiciousTestMatch { test } => Some(Box::new( - format!( - "Did you mean to match all tests within a specific module? Like so:\n\n╰─▶ {}", - format!("-m \"{test}.{{..}}\"").if_supports_color(Stderr, |s| s.bold()), - ) - )), + Warning::SuspiciousTestMatch { test } => Some(Box::new(format!( + "Did you mean to match all tests within a specific module? Like so:\n\n╰─▶ {}", + format!("-m \"{test}.{{..}}\"").if_supports_color(Stderr, |s| s.bold()), + ))), } } } @@ -826,12 +826,8 @@ fn hint_validators(known_validators: &BTreeSet<(String, String, bool)>, hint: &s { known_validators .iter() - .map(|(module, validator, has_params)| { - let title = format!( - "{:>pad_module$} . {:pad_module$} . {: usize { pub fn len_longest_line(zero: usize, s: &str) -> usize { s.lines().fold(zero, |max, l| { let n = ansi_len(l); - if n > max { - n - } else { - max - } + if n > max { n } else { max } }) } @@ -154,11 +150,7 @@ pub fn pad_right(mut text: String, n: usize, delimiter: &str) -> String { } pub fn style_if(styled: bool, s: String, apply_style: fn(String) -> String) -> String { - if styled { - apply_style(s) - } else { - s - } + if styled { apply_style(s) } else { s } } pub fn multiline(max_len: usize, s: String) -> Vec { diff --git a/crates/aiken-project/src/telemetry.rs b/crates/aiken-project/src/telemetry.rs index b056f708..470d9951 100644 --- a/crates/aiken-project/src/telemetry.rs +++ b/crates/aiken-project/src/telemetry.rs @@ -2,7 +2,7 @@ use aiken_lang::{ expr::UntypedExpr, test_framework::{BenchmarkResult, PropertyTestResult, TestResult, UnitTestResult}, }; -pub use json::{json_schema, Json}; +pub use json::{Json, json_schema}; use std::{ collections::BTreeMap, fmt::Display, diff --git a/crates/aiken-project/src/telemetry/json.rs b/crates/aiken-project/src/telemetry/json.rs index 8a892b0b..39f56174 100644 --- a/crates/aiken-project/src/telemetry/json.rs +++ b/crates/aiken-project/src/telemetry/json.rs @@ -1,4 +1,4 @@ -use super::{group_by_module, Event, EventListener}; +use super::{Event, EventListener, group_by_module}; use aiken_lang::{ ast::OnTestFailure, expr::UntypedExpr, @@ -76,10 +76,8 @@ impl EventListener for Json { fn fmt_test_json(result: &TestResult) -> serde_json::Value { let on_test_failure = match result { - TestResult::UnitTestResult(UnitTestResult { ref test, .. }) => &test.on_test_failure, - TestResult::PropertyTestResult(PropertyTestResult { ref test, .. }) => { - &test.on_test_failure - } + TestResult::UnitTestResult(UnitTestResult { test, .. }) => &test.on_test_failure, + TestResult::PropertyTestResult(PropertyTestResult { test, .. }) => &test.on_test_failure, TestResult::BenchmarkResult(_) => unreachable!("benchmark returned in JSON output"), }; diff --git a/crates/aiken-project/src/telemetry/terminal.rs b/crates/aiken-project/src/telemetry/terminal.rs index 83015d93..7020ffba 100644 --- a/crates/aiken-project/src/telemetry/terminal.rs +++ b/crates/aiken-project/src/telemetry/terminal.rs @@ -1,4 +1,4 @@ -use super::{find_max_execution_units, group_by_module, DownloadSource, Event, EventListener}; +use super::{DownloadSource, Event, EventListener, find_max_execution_units, group_by_module}; use crate::pretty; use aiken_lang::{ ast::OnTestFailure, diff --git a/crates/aiken-project/src/test_framework.rs b/crates/aiken-project/src/test_framework.rs index 1cd509a1..9c2e2bda 100644 --- a/crates/aiken-project/src/test_framework.rs +++ b/crates/aiken-project/src/test_framework.rs @@ -5,6 +5,7 @@ mod test { utils, }; use aiken_lang::{ + IdGenerator, ast::{DataTypeKey, Definition, ModuleKind, TraceLevel, Tracing, TypedDataType}, builtins, expr::UntypedExpr, @@ -14,7 +15,6 @@ mod test { parser::{self, extra::ModuleExtra}, plutus_version::PlutusVersion, test_framework::*, - IdGenerator, }; use indexmap::IndexMap; use indoc::indoc; @@ -246,12 +246,14 @@ mod test { } "#}); - assert!(TestResult::PropertyTestResult::<(), _>(prop.run( - 42, - PropertyTest::DEFAULT_MAX_SUCCESS, - &PlutusVersion::default() - )) - .is_success()); + assert!( + TestResult::PropertyTestResult::<(), _>(prop.run( + 42, + PropertyTest::DEFAULT_MAX_SUCCESS, + &PlutusVersion::default() + )) + .is_success() + ); } #[test] diff --git a/crates/aiken-project/src/tests/mod.rs b/crates/aiken-project/src/tests/mod.rs index 21273f82..a07c467c 100644 --- a/crates/aiken-project/src/tests/mod.rs +++ b/crates/aiken-project/src/tests/mod.rs @@ -5,6 +5,7 @@ use crate::{ utils, }; use aiken_lang::{ + IdGenerator, ast::{ DataTypeKey, FunctionAccessKey, ModuleKind, TraceLevel, Tracing, TypedDataType, TypedFunction, @@ -15,7 +16,6 @@ use aiken_lang::{ parser, plutus_version::PlutusVersion, tipo::TypeInfo, - IdGenerator, }; use indexmap::IndexMap; use std::{collections::HashMap, path::PathBuf}; diff --git a/crates/aiken-project/src/watch.rs b/crates/aiken-project/src/watch.rs index 05ca24d9..ae83913b 100644 --- a/crates/aiken-project/src/watch.rs +++ b/crates/aiken-project/src/watch.rs @@ -1,4 +1,4 @@ -use crate::{config::WorkspaceConfig, telemetry::EventTarget, Project}; +use crate::{Project, config::WorkspaceConfig, telemetry::EventTarget}; use miette::{Diagnostic, IntoDiagnostic}; use notify::{Event, RecursiveMode, Watcher}; use owo_colors::{OwoColorize, Stream::Stderr}; diff --git a/crates/aiken/Cargo.toml b/crates/aiken/Cargo.toml index e305adae..acbd93f3 100644 --- a/crates/aiken/Cargo.toml +++ b/crates/aiken/Cargo.toml @@ -1,17 +1,14 @@ [package] name = "aiken" -description = "Cardano smart contract language and toolchain" -version = "1.1.15" -edition = "2021" -repository = "https://github.com/aiken-lang/aiken" -homepage = "https://github.com/aiken-lang/aiken" -license = "Apache-2.0" -authors = [ - "Lucas Rosa ", - "Kasey White ", - "KtorZ ", -] -rust-version = "1.70.0" +version.workspace = true +edition.workspace = true +description.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true +homepage.workspace = true +documentation.workspace = true +rust-version.workspace = true [package.metadata.wix] upgrade-guid = "288B160D-418A-4558-91B9-7C38CFD789C7" diff --git a/crates/aiken/src/cmd/benchmark.rs b/crates/aiken/src/cmd/benchmark.rs index 6183d0cd..24b9a1ef 100644 --- a/crates/aiken/src/cmd/benchmark.rs +++ b/crates/aiken/src/cmd/benchmark.rs @@ -84,7 +84,7 @@ pub fn exec( ) -> miette::Result<()> { let mut rng = rand::thread_rng(); - let seed = seed.unwrap_or_else(|| rng.gen()); + let seed = seed.unwrap_or_else(|| rng.r#gen()); let result = with_project( directory.as_deref(), diff --git a/crates/aiken/src/cmd/blueprint/convert.rs b/crates/aiken/src/cmd/blueprint/convert.rs index fe900b20..1257c594 100644 --- a/crates/aiken/src/cmd/blueprint/convert.rs +++ b/crates/aiken/src/cmd/blueprint/convert.rs @@ -1,5 +1,5 @@ use aiken_project::{ - blueprint::{error::Error as BlueprintError, Blueprint}, + blueprint::{Blueprint, error::Error as BlueprintError}, error::Error as ProjectError, }; use clap::ValueEnum; diff --git a/crates/aiken/src/cmd/build.rs b/crates/aiken/src/cmd/build.rs index 60ca8965..7ce19b8d 100644 --- a/crates/aiken/src/cmd/build.rs +++ b/crates/aiken/src/cmd/build.rs @@ -118,8 +118,8 @@ pub fn exec( } #[allow(clippy::type_complexity)] -pub fn trace_filter_parser( -) -> MapValueParser fn(TraceLevel) -> Tracing> { +pub fn trace_filter_parser() +-> MapValueParser fn(TraceLevel) -> Tracing> { PossibleValuesParser::new(["user-defined", "compiler-generated", "all"]).map( |s: String| match s.as_str() { "user-defined" => Tracing::UserDefined, diff --git a/crates/aiken/src/cmd/check.rs b/crates/aiken/src/cmd/check.rs index 2b122473..033b9f3a 100644 --- a/crates/aiken/src/cmd/check.rs +++ b/crates/aiken/src/cmd/check.rs @@ -133,7 +133,7 @@ pub fn exec( let mut rng = rand::thread_rng(); - let seed = seed.unwrap_or_else(|| rng.gen()); + let seed = seed.unwrap_or_else(|| rng.r#gen()); let result = if watch { watch_project(directory.as_deref(), watch::default_filter, 500, |p| { diff --git a/crates/aiken/src/cmd/completion/shell.rs b/crates/aiken/src/cmd/completion/shell.rs index 8b4e730f..acf50bfb 100644 --- a/crates/aiken/src/cmd/completion/shell.rs +++ b/crates/aiken/src/cmd/completion/shell.rs @@ -1,6 +1,6 @@ use crate::{cmd::Cmd as MainCmd, pretty}; use clap::{Command, Subcommand}; -use clap_complete::{generate, Shell}; +use clap_complete::{Shell, generate}; use std::{ fmt::{self, Display}, fs::{File, OpenOptions}, diff --git a/crates/aiken/src/cmd/packages/add.rs b/crates/aiken/src/cmd/packages/add.rs index bdebd8fe..9b0c9d31 100644 --- a/crates/aiken/src/cmd/packages/add.rs +++ b/crates/aiken/src/cmd/packages/add.rs @@ -1,5 +1,5 @@ use aiken_project::{ - config::{ProjectConfig, Dependency, Platform}, + config::{Dependency, Platform, ProjectConfig}, error::Warning, package_name::PackageName, pretty, diff --git a/crates/aiken/src/cmd/tx/simulate.rs b/crates/aiken/src/cmd/tx/simulate.rs index 142b5d05..0ec90536 100644 --- a/crates/aiken/src/cmd/tx/simulate.rs +++ b/crates/aiken/src/cmd/tx/simulate.rs @@ -1,8 +1,8 @@ use miette::IntoDiagnostic; use owo_colors::{OwoColorize, Stream::Stderr}; use pallas_primitives::{ - conway::{Redeemer, TransactionInput, TransactionOutput}, Fragment, + conway::{Redeemer, TransactionInput, TransactionOutput}, }; use pallas_traverse::{Era, MultiEraTx}; use std::{fmt, fs, path::PathBuf, process}; diff --git a/crates/aiken/src/cmd/uplc/eval.rs b/crates/aiken/src/cmd/uplc/eval.rs index 61f4a81f..8e55f013 100644 --- a/crates/aiken/src/cmd/uplc/eval.rs +++ b/crates/aiken/src/cmd/uplc/eval.rs @@ -9,8 +9,8 @@ use uplc::{ ast::{FakeNamedDeBruijn, Name, NamedDeBruijn, Program, Term}, builtins::DefaultFunction, machine::{ - cost_model::{ExBudget, StepKind}, TERM_COUNT, + cost_model::{ExBudget, StepKind}, }, parser, }; diff --git a/crates/aiken/src/cmd/uplc/shrink.rs b/crates/aiken/src/cmd/uplc/shrink.rs index 8e00469d..f4cae546 100644 --- a/crates/aiken/src/cmd/uplc/shrink.rs +++ b/crates/aiken/src/cmd/uplc/shrink.rs @@ -3,7 +3,7 @@ use std::path::PathBuf; use uplc::ast::{DeBruijn, Name, NamedDeBruijn, Program}; use uplc::optimize::aiken_optimize_and_intern; -use super::{encode, Format}; +use super::{Format, encode}; #[derive(clap::Args)] /// Shrink / Optimize UPLC code using a variety of optimization steps diff --git a/crates/aiken/src/main.rs b/crates/aiken/src/main.rs index c58b5c08..bfecebeb 100644 --- a/crates/aiken/src/main.rs +++ b/crates/aiken/src/main.rs @@ -2,11 +2,11 @@ use aiken_project::{config, pretty}; #[cfg(not(target_os = "windows"))] use cmd::completion; use cmd::{ - benchmark, + Cmd, benchmark, blueprint::{self, address}, build, check, docs, export, fmt, lsp, new, packages::{self, add}, - tx, uplc, Cmd, + tx, uplc, }; use owo_colors::OwoColorize; diff --git a/crates/uplc/Cargo.toml b/crates/uplc/Cargo.toml index d409fb95..6ce71ea6 100644 --- a/crates/uplc/Cargo.toml +++ b/crates/uplc/Cargo.toml @@ -1,13 +1,15 @@ [package] name = "uplc" +version.workspace = true +edition.workspace = true description = "Utilities for working with Untyped Plutus Core" -version = "1.1.15" -edition = "2021" -repository = "https://github.com/aiken-lang/aiken" -homepage = "https://github.com/aiken-lang/aiken" -license = "Apache-2.0" +license.workspace = true authors = ["Lucas Rosa ", "Kasey White "] -rust-version = "1.70.0" +repository.workspace = true +homepage.workspace = true +documentation.workspace = true +rust-version.workspace = true + exclude = ["test_data/*"] [dependencies] diff --git a/crates/uplc/src/ast.rs b/crates/uplc/src/ast.rs index e1b623d4..cd17ce1e 100644 --- a/crates/uplc/src/ast.rs +++ b/crates/uplc/src/ast.rs @@ -3,9 +3,9 @@ use crate::{ debruijn::{self, Converter}, flat::Binder, machine::{ - cost_model::{initialize_cost_model, CostModel, ExBudget}, - eval_result::EvalResult, Machine, + cost_model::{CostModel, ExBudget, initialize_cost_model}, + eval_result::EvalResult, }, optimize::interner::CodeGenInterner, }; diff --git a/crates/uplc/src/builder.rs b/crates/uplc/src/builder.rs index abc18796..c5b635b1 100644 --- a/crates/uplc/src/builder.rs +++ b/crates/uplc/src/builder.rs @@ -799,7 +799,7 @@ mod tests { use crate::{ ast::{Data, Name, NamedDeBruijn, Program, Term}, builder::Constant, - machine::{cost_model::ExBudget, Error}, + machine::{Error, cost_model::ExBudget}, optimize::interner::CodeGenInterner, }; diff --git a/crates/uplc/src/flat.rs b/crates/uplc/src/flat.rs index 3c56b8eb..b81a233f 100644 --- a/crates/uplc/src/flat.rs +++ b/crates/uplc/src/flat.rs @@ -7,11 +7,11 @@ use crate::{ }; use num_bigint::BigInt; use pallas_codec::flat::{ + Flat, de::{self, Decode, Decoder}, en::{self, Encode, Encoder}, - Flat, }; -use pallas_primitives::{conway::PlutusData, Fragment}; +use pallas_primitives::{Fragment, conway::PlutusData}; use std::{collections::VecDeque, fmt::Debug, rc::Rc}; const BUILTIN_TAG_WIDTH: u32 = 7; diff --git a/crates/uplc/src/lib.rs b/crates/uplc/src/lib.rs index 798d680a..542a52a5 100644 --- a/crates/uplc/src/lib.rs +++ b/crates/uplc/src/lib.rs @@ -12,9 +12,9 @@ pub mod tx; pub use pallas_codec::utils::KeyValuePairs; pub use pallas_crypto::hash::Hash; pub use pallas_primitives::{ + Error, Fragment, alonzo::{BigInt, Constr, PlutusData}, babbage::{PostAlonzoTransactionOutput, TransactionInput, TransactionOutput, Value}, - Error, Fragment, }; pub use tx::redeemer_tag_to_string; diff --git a/crates/uplc/src/machine/eval_result.rs b/crates/uplc/src/machine/eval_result.rs index bfaf701d..ac7e22fd 100644 --- a/crates/uplc/src/machine/eval_result.rs +++ b/crates/uplc/src/machine/eval_result.rs @@ -1,4 +1,4 @@ -use super::{cost_model::ExBudget, Error, Trace}; +use super::{Error, Trace, cost_model::ExBudget}; use crate::ast::{Constant, NamedDeBruijn, Term}; #[derive(Debug)] diff --git a/crates/uplc/src/machine/runtime.rs b/crates/uplc/src/machine/runtime.rs index 05ad3c4a..bb741d0d 100644 --- a/crates/uplc/src/machine/runtime.rs +++ b/crates/uplc/src/machine/runtime.rs @@ -1,7 +1,7 @@ use super::{ + Error, Trace, Value, cost_model::{BuiltinCosts, ExBudget}, value::{from_pallas_bigint, to_pallas_bigint}, - Error, Trace, Value, }; use crate::{ ast::{Constant, Data, Type}, @@ -1882,7 +1882,7 @@ pub static ANY_TAG: u64 = 102; #[cfg(not(target_family = "wasm"))] fn verify_ecdsa(public_key: &[u8], message: &[u8], signature: &[u8]) -> Result { - use secp256k1::{ecdsa::Signature, Message, PublicKey, Secp256k1}; + use secp256k1::{Message, PublicKey, Secp256k1, ecdsa::Signature}; let secp = Secp256k1::verification_only(); @@ -1901,7 +1901,7 @@ fn verify_ecdsa(public_key: &[u8], message: &[u8], signature: &[u8]) -> Result Result { - use secp256k1::{schnorr::Signature, Message, Secp256k1, XOnlyPublicKey}; + use secp256k1::{Message, Secp256k1, XOnlyPublicKey, schnorr::Signature}; let secp = Secp256k1::verification_only(); diff --git a/crates/uplc/src/machine/value.rs b/crates/uplc/src/machine/value.rs index a868e9fe..2c2718c3 100644 --- a/crates/uplc/src/machine/value.rs +++ b/crates/uplc/src/machine/value.rs @@ -1,6 +1,6 @@ use super::{ - runtime::{self, BuiltinRuntime}, Error, + runtime::{self, BuiltinRuntime}, }; use crate::{ ast::{Constant, NamedDeBruijn, Term, Type}, @@ -480,7 +480,7 @@ pub fn to_pallas_bigint(n: &BigInt) -> conway::BigInt { mod tests { use crate::{ ast::Constant, - machine::value::{integer_log2, Value}, + machine::value::{Value, integer_log2}, }; use num_bigint::BigInt; diff --git a/crates/uplc/src/pretty.rs b/crates/uplc/src/pretty.rs index 8f989f17..4b69412c 100644 --- a/crates/uplc/src/pretty.rs +++ b/crates/uplc/src/pretty.rs @@ -2,7 +2,7 @@ use crate::{ ast::{Constant, Program, Term, Type}, flat::Binder, machine::{ - runtime::{convert_tag_to_constr, Compressable}, + runtime::{Compressable, convert_tag_to_constr}, value::from_pallas_bigint, }, }; diff --git a/crates/uplc/src/tx.rs b/crates/uplc/src/tx.rs index 69d76a2e..0d61bde9 100644 --- a/crates/uplc/src/tx.rs +++ b/crates/uplc/src/tx.rs @@ -1,15 +1,15 @@ use crate::{ + PlutusData, ast::{DeBruijn, Program}, machine::{cost_model::ExBudget, eval_result::EvalResult}, - PlutusData, }; use error::Error; use pallas_primitives::{ + Fragment, conway::{ CostModels, ExUnits, MintedTx, Redeemer, Redeemers, RedeemersKey, TransactionInput, TransactionOutput, }, - Fragment, }; use pallas_traverse::{Era, MultiEraTx}; pub use phase_one::{eval_phase_one, redeemer_tag_to_string}; diff --git a/crates/uplc/src/tx/error.rs b/crates/uplc/src/tx/error.rs index 61622f17..54292c89 100644 --- a/crates/uplc/src/tx/error.rs +++ b/crates/uplc/src/tx/error.rs @@ -1,6 +1,6 @@ use crate::{ - machine::{self, cost_model::ExBudget, Trace}, TransactionInput, + machine::{self, Trace, cost_model::ExBudget}, }; use pallas_primitives::conway::Language; diff --git a/crates/uplc/src/tx/eval.rs b/crates/uplc/src/tx/eval.rs index 25f3a4f7..160d5be9 100644 --- a/crates/uplc/src/tx/eval.rs +++ b/crates/uplc/src/tx/eval.rs @@ -1,16 +1,16 @@ use super::{ - script_context::{find_script, ResolvedInput, ScriptContext, SlotConfig, TxInfo}, - to_plutus_data::ToPlutusData, Error, + script_context::{ResolvedInput, ScriptContext, SlotConfig, TxInfo, find_script}, + to_plutus_data::ToPlutusData, }; use crate::{ + PlutusData, ast::{FakeNamedDeBruijn, NamedDeBruijn, Program}, machine::{cost_model::ExBudget, eval_result::EvalResult}, tx::{ phase_one::redeemer_tag_to_string, script_context::{DataLookupTable, ScriptVersion, TxInfoV1, TxInfoV2, TxInfoV3}, }, - PlutusData, }; use pallas_codec::utils::Bytes; use pallas_primitives::conway::{CostModel, CostModels, ExUnits, Language, MintedTx, Redeemer}; diff --git a/crates/uplc/src/tx/phase_one.rs b/crates/uplc/src/tx/phase_one.rs index 6a201b89..b4641ba1 100644 --- a/crates/uplc/src/tx/phase_one.rs +++ b/crates/uplc/src/tx/phase_one.rs @@ -1,6 +1,6 @@ use super::{ error::Error, - script_context::{sort_voters, DataLookupTable, ResolvedInput, ScriptPurpose, ScriptVersion}, + script_context::{DataLookupTable, ResolvedInput, ScriptPurpose, ScriptVersion, sort_voters}, }; use crate::tx::script_context::sort_reward_accounts; use itertools::Itertools; diff --git a/crates/uplc/src/tx/script_context.rs b/crates/uplc/src/tx/script_context.rs index 3eb9cace..a6b03a8c 100644 --- a/crates/uplc/src/tx/script_context.rs +++ b/crates/uplc/src/tx/script_context.rs @@ -1,4 +1,4 @@ -use super::{to_plutus_data::MintValue, Error}; +use super::{Error, to_plutus_data::MintValue}; use crate::tx::iter_redeemers; use itertools::Itertools; use pallas_addresses::{Address, Network, StakePayload}; @@ -1134,14 +1134,14 @@ mod tests { use crate::{ ast::Data, tx::{ + ResolvedInput, SlotConfig, script_context::{TxInfo, TxInfoV3}, to_plutus_data::ToPlutusData, - ResolvedInput, SlotConfig, }, }; use pallas_primitives::{ - conway::{ExUnits, PlutusData, Redeemer, RedeemerTag, TransactionInput, TransactionOutput}, Fragment, + conway::{ExUnits, PlutusData, Redeemer, RedeemerTag, TransactionInput, TransactionOutput}, }; use pallas_traverse::{Era, MultiEraTx}; diff --git a/crates/uplc/src/tx/tests.rs b/crates/uplc/src/tx/tests.rs index 40a83397..61209727 100644 --- a/crates/uplc/src/tx/tests.rs +++ b/crates/uplc/src/tx/tests.rs @@ -1,9 +1,9 @@ -use super::{eval_phase_two, ResolvedInput, SlotConfig}; +use super::{ResolvedInput, SlotConfig, eval_phase_two}; use crate::machine::cost_model::ExBudget; use pallas_codec::utils::MaybeIndefArray; use pallas_primitives::{ - conway::{CostModels, TransactionInput, TransactionOutput}, Fragment, + conway::{CostModels, TransactionInput, TransactionOutput}, }; use pallas_traverse::{Era, MultiEraTx}; @@ -1001,16 +1001,18 @@ fn test_eval_4() { .unwrap(); match multi_era_tx { MultiEraTx::Conway(tx) => { - assert!(eval_phase_two( - &tx, - &utxos, - Some(&cost_mdl), - Some(&initial_budget), - &slot_config, - false, - |_| (), - ) - .is_err()); + assert!( + eval_phase_two( + &tx, + &utxos, + Some(&cost_mdl), + Some(&initial_budget), + &slot_config, + false, + |_| (), + ) + .is_err() + ); } _ => unreachable!(), }; @@ -1757,16 +1759,18 @@ fn eval_extraneous_redeemer() { match multi_era_tx { MultiEraTx::Conway(tx) => { - assert!(eval_phase_two( - &tx, - &utxos, - Some(&cost_mdl), - Some(&initial_budget), - &slot_config, - false, - |_| (), - ) - .is_err()); + assert!( + eval_phase_two( + &tx, + &utxos, + Some(&cost_mdl), + Some(&initial_budget), + &slot_config, + false, + |_| (), + ) + .is_err() + ); } _ => unreachable!(), }; diff --git a/crates/uplc/src/tx/to_plutus_data.rs b/crates/uplc/src/tx/to_plutus_data.rs index 351ceb5d..95c81725 100644 --- a/crates/uplc/src/tx/to_plutus_data.rs +++ b/crates/uplc/src/tx/to_plutus_data.rs @@ -3,7 +3,7 @@ use super::script_context::{ }; use crate::{ ast::Data, - machine::runtime::{convert_constr_to_tag, ANY_TAG}, + machine::runtime::{ANY_TAG, convert_constr_to_tag}, tx::script_context::from_alonzo_output, }; use num_integer::Integer; @@ -421,7 +421,7 @@ impl<'a> ToPlutusData for WithOptionDatum<'a, WithZeroAdaAsset<'a, Vec PlutusData { Data::list( self.0 - .0 + .0 .iter() .map(|p| WithOptionDatum(&WithZeroAdaAsset(p)).to_plutus_data()) .collect(), @@ -442,7 +442,7 @@ impl ToPlutusData for WithZeroAdaAsset<'_, Vec> { impl<'a> ToPlutusData for WithOptionDatum<'a, WithZeroAdaAsset<'a, TransactionOutput>> { fn to_plutus_data(&self) -> PlutusData { - match self.0 .0 { + match self.0.0 { TransactionOutput::Legacy(legacy_output) => { WithOptionDatum(&WithZeroAdaAsset(&from_alonzo_output(legacy_output))) .to_plutus_data() @@ -805,8 +805,8 @@ impl<'a> ToPlutusData fn to_plutus_data(&self) -> PlutusData { Data::list( self.0 - .0 - .0 + .0 + .0 .iter() .map(|p| { WithOptionDatum(&WithZeroAdaAsset(&WithWrappedTransactionId(p))) @@ -821,7 +821,7 @@ impl<'a> ToPlutusData for WithZeroAdaAsset<'a, WithWrappedTransactionId<'a, Vec< fn to_plutus_data(&self) -> PlutusData { Data::list( self.0 - .0 + .0 .iter() .map(|p| WithZeroAdaAsset(&WithWrappedTransactionId(p)).to_plutus_data()) .collect(), @@ -834,8 +834,8 @@ impl<'a> ToPlutusData for WithZeroAdaAsset<'a, WithWrappedTransactionId<'a, TxIn wrap_multiple_with_constr( 0, vec![ - WithWrappedTransactionId(&self.0 .0.out_ref).to_plutus_data(), - WithZeroAdaAsset(&self.0 .0.resolved).to_plutus_data(), + WithWrappedTransactionId(&self.0.0.out_ref).to_plutus_data(), + WithZeroAdaAsset(&self.0.0.resolved).to_plutus_data(), ], ) } @@ -848,8 +848,8 @@ impl<'a> ToPlutusData wrap_multiple_with_constr( 0, vec![ - WithWrappedTransactionId(&self.0 .0 .0.out_ref).to_plutus_data(), - WithOptionDatum(&WithZeroAdaAsset(&self.0 .0 .0.resolved)).to_plutus_data(), + WithWrappedTransactionId(&self.0.0.0.out_ref).to_plutus_data(), + WithOptionDatum(&WithZeroAdaAsset(&self.0.0.0.resolved)).to_plutus_data(), ], ) } diff --git a/crates/uplc/tests/pretty_tests.rs b/crates/uplc/tests/pretty_tests.rs index 4e6c6c87..4091cd0a 100644 --- a/crates/uplc/tests/pretty_tests.rs +++ b/crates/uplc/tests/pretty_tests.rs @@ -1,9 +1,9 @@ use num_bigint::ToBigInt; use pallas_codec::utils::MaybeIndefArray; use uplc::{ + Constr, PlutusData, ast::{Constant, Name, Term, Type}, parser::term, - Constr, PlutusData, }; // Examples sourced from https://github.com/input-output-hk/plutus/issues/4751#issuecomment-1538377273 diff --git a/examples/gift_card/aiken.lock b/examples/gift_card/aiken.lock index 672723ff..cbf3d107 100644 --- a/examples/gift_card/aiken.lock +++ b/examples/gift_card/aiken.lock @@ -13,4 +13,4 @@ requirements = [] source = "github" [etags] -"aiken-lang/stdlib@v2" = [{ secs_since_epoch = 1735183696, nanos_since_epoch = 808235000 }, "25c8d0802b8266feca04b47933382c5dee3cadb422208a5d3810d9d2df108c2e"] +"aiken-lang/stdlib@v2" = [{ secs_since_epoch = 1742778281, nanos_since_epoch = 899807000 }, "25c8d0802b8266feca04b47933382c5dee3cadb422208a5d3810d9d2df108c2e"] diff --git a/examples/gift_card/plutus.json b/examples/gift_card/plutus.json index 1c7f2ef7..7ba97c2a 100644 --- a/examples/gift_card/plutus.json +++ b/examples/gift_card/plutus.json @@ -6,7 +6,7 @@ "plutusVersion": "v3", "compiler": { "name": "Aiken", - "version": "v1.1.9+2217206" + "version": "v1.1.15+8c55971" }, "license": "Apache-2.0" }, @@ -16,7 +16,7 @@ "datum": { "title": "datum", "schema": { - "$ref": "#/definitions/SpendTokenName" + "$ref": "#/definitions/multi~1SpendTokenName" } }, "redeemer": { @@ -33,8 +33,8 @@ } } ], - "compiledCode": "59040a01010032323232323232232253330043232323232323232325323233300f300100613233223232325333015300830163754002264a66602c6010602e6ea80044c94ccc05cc028c060dd5003099b8732325333019300b301a37540022900009bad301e301b375400264a666032601660346ea8004530103d87a8000132330010013756603e60386ea8008894ccc078004530103d87a8000132333222533301f337220100062a66603e66e3c02000c4c050cc08cdd400125eb80530103d87a8000133006006001375c603a0026eb4c078004c088008c080004cc030014008dd7180e180c9baa0064800458dd7180d980c1baa00116301a301737546034602e6ea8c068c06cc05cdd5180d180b9baa0011632330010013758603400644a6660320022980103d87a80001332253330183375e601c60346ea80080204c034cc0700092f5c0266008008002603600260380026eacc060c064c064c064c064004c050dd5006180a800980a980b00098089baa0071533300f3002006132323253330123005001132325333017301a00200416375a603000260286ea802c54ccc048c01000454ccc054c050dd50058010b0b18091baa00a1323232323232325333017300a3018375402026464a66603266002008466e3c0600044c8c8cc004004014894ccc07c004528899199911299981019804004919b8f00100415333020323300100100d22533302500114a026644a6660486464a66604c66ebcc0acc0b0c0b0008cdd2a4008660546ea40252f5c0266ebcc070c0a0dd50008068a50302a0013026375400429444cc010010004c09c004c0a000454ccc080c0480084cc0180180045280b0b1bae301e001375a603e0026046004604200266e9520023301d375201497ae014a044646600200200644a66603e00229404cc894ccc078c0140085288998020020009bae302100130220013232333001001375a603c60366ea80492f5c0444a666036601c0042002266600600666e0000920013301f37526e50cdc58010020009bb3300d3019375460380082646600200200444a66603800229444cc894ccc06ccdc39bad301d002480044cc010010004528180f000980f80099299980b9804980c1baa00114bd6f7b63009bab301c30193754002660146eacc06c01001cdd6180d180d980d980d980d8019bac30190033758603000660306030002602e602e00260246ea8028dd7180a18089baa00716370e90011b874800088c8cc00400400c894ccc04c0045300103d87a800013233322253330143372200e0062a66602866e3c01c00c4c024cc060dd300125eb80530103d87a8000133006006001375c60240026eacc04c004c05c008c054004dd2a40004602000260146ea8004c034c03800cc030008c02c008c02c004c018dd50008a4c26cac6eb80055cd2ab9d5573caae7d5d02ba15745", - "hash": "3fe854a1171108b9af1e064ee47af2f81c9788104a6f49213dec8bb7" + "compiledCode": "590405010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4001370e90012444464653001300937540032232330010010032259800800c530103d87a8000899192cc004cdc8802800c56600266e3c0140062601666024602000497ae08a60103d87a80004039133004004301400340386eb8c038004c04400500f4c03401a601a00491112cc004c01c01226466446644b3001300d3012375400513259800980698099baa0018acc004c038c04cdd500144cdc3cc004dd5980b980c180c180c180c0024dd7180b980a1baa0019bae301730143754004911192cc004c044c05cdd5000c5200089bad301b3018375400280b0c9660026022602e6ea8006298103d87a8000899198008009bab301c3019375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062602e6603c603800497ae08a60103d87a80004069133004004302000340686eb8c068004c07400501b202c3300c00300224003164049164048602c60266ea8c058c04cdd5180b180b98099baa30163013375400516404464660020026eb0c054008896600200314c103d87a80008992cc004cdd7980b980a1baa001005898079980b000a5eb8226600600660300048090c058005014180a180a801980900098079baa003300e375400b159800980400244c8cc896600260160031323259800980b80140122c80a0dd6980a80098089baa0048acc004c0280062b3001301137540090028b20248b201e403c26464646644b3001300e3013375400f13259800998009bac3018301930193019301900423371e0260031332232330010010062259800800c528c4c8c9660026600e00c466e3c00400a2b300132330010010092259800800c528456600264b30013375e60426044604400266e95200433020375200897ae0899baf3021301e3754604200201114a080e0c074dd51810000c528c4cc008008c08400501b203c8acc004c050dd6980d80144cc010010c07c00e29410194590194590191bae3019001301c0014068646530010019bad301a301737540154bd702002222598009809801440063300100399b8000248006660366ea4dca19b8b002004001400c80b8dd9980c180a9baa30183758603000c66e95200233017375200e97ae08a50404c44646600200200644b30010018a508acc004c00cdd7180d800c528c4cc008008c070005016203289919800800801912cc00400629462b30013370e6eb4c058c0640052001899801001180d000c5282028405c8090c966002601860246ea8006297adef6c6089bab3016301337540028088cc01cdd5980a8008021bac30150023015301500130143014001300f3754006601c6ea8008dd7180898071baa0058b20184030300c300d001300c004452689b2b20041", + "hash": "2f904329815ffc78edc99e90ca907d86fdd0c8fa886b50bdd42f36fa" }, { "title": "multi.redeem.mint", @@ -52,8 +52,8 @@ } } ], - "compiledCode": "59040a01010032323232323232232253330043232323232323232325323233300f300100613233223232325333015300830163754002264a66602c6010602e6ea80044c94ccc05cc028c060dd5003099b8732325333019300b301a37540022900009bad301e301b375400264a666032601660346ea8004530103d87a8000132330010013756603e60386ea8008894ccc078004530103d87a8000132333222533301f337220100062a66603e66e3c02000c4c050cc08cdd400125eb80530103d87a8000133006006001375c603a0026eb4c078004c088008c080004cc030014008dd7180e180c9baa0064800458dd7180d980c1baa00116301a301737546034602e6ea8c068c06cc05cdd5180d180b9baa0011632330010013758603400644a6660320022980103d87a80001332253330183375e601c60346ea80080204c034cc0700092f5c0266008008002603600260380026eacc060c064c064c064c064004c050dd5006180a800980a980b00098089baa0071533300f3002006132323253330123005001132325333017301a00200416375a603000260286ea802c54ccc048c01000454ccc054c050dd50058010b0b18091baa00a1323232323232325333017300a3018375402026464a66603266002008466e3c0600044c8c8cc004004014894ccc07c004528899199911299981019804004919b8f00100415333020323300100100d22533302500114a026644a6660486464a66604c66ebcc0acc0b0c0b0008cdd2a4008660546ea40252f5c0266ebcc070c0a0dd50008068a50302a0013026375400429444cc010010004c09c004c0a000454ccc080c0480084cc0180180045280b0b1bae301e001375a603e0026046004604200266e9520023301d375201497ae014a044646600200200644a66603e00229404cc894ccc078c0140085288998020020009bae302100130220013232333001001375a603c60366ea80492f5c0444a666036601c0042002266600600666e0000920013301f37526e50cdc58010020009bb3300d3019375460380082646600200200444a66603800229444cc894ccc06ccdc39bad301d002480044cc010010004528180f000980f80099299980b9804980c1baa00114bd6f7b63009bab301c30193754002660146eacc06c01001cdd6180d180d980d980d980d8019bac30190033758603000660306030002602e602e00260246ea8028dd7180a18089baa00716370e90011b874800088c8cc00400400c894ccc04c0045300103d87a800013233322253330143372200e0062a66602866e3c01c00c4c024cc060dd300125eb80530103d87a8000133006006001375c60240026eacc04c004c05c008c054004dd2a40004602000260146ea8004c034c03800cc030008c02c008c02c004c018dd50008a4c26cac6eb80055cd2ab9d5573caae7d5d02ba15745", - "hash": "3fe854a1171108b9af1e064ee47af2f81c9788104a6f49213dec8bb7" + "compiledCode": "590405010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4001370e90012444464653001300937540032232330010010032259800800c530103d87a8000899192cc004cdc8802800c56600266e3c0140062601666024602000497ae08a60103d87a80004039133004004301400340386eb8c038004c04400500f4c03401a601a00491112cc004c01c01226466446644b3001300d3012375400513259800980698099baa0018acc004c038c04cdd500144cdc3cc004dd5980b980c180c180c180c0024dd7180b980a1baa0019bae301730143754004911192cc004c044c05cdd5000c5200089bad301b3018375400280b0c9660026022602e6ea8006298103d87a8000899198008009bab301c3019375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062602e6603c603800497ae08a60103d87a80004069133004004302000340686eb8c068004c07400501b202c3300c00300224003164049164048602c60266ea8c058c04cdd5180b180b98099baa30163013375400516404464660020026eb0c054008896600200314c103d87a80008992cc004cdd7980b980a1baa001005898079980b000a5eb8226600600660300048090c058005014180a180a801980900098079baa003300e375400b159800980400244c8cc896600260160031323259800980b80140122c80a0dd6980a80098089baa0048acc004c0280062b3001301137540090028b20248b201e403c26464646644b3001300e3013375400f13259800998009bac3018301930193019301900423371e0260031332232330010010062259800800c528c4c8c9660026600e00c466e3c00400a2b300132330010010092259800800c528456600264b30013375e60426044604400266e95200433020375200897ae0899baf3021301e3754604200201114a080e0c074dd51810000c528c4cc008008c08400501b203c8acc004c050dd6980d80144cc010010c07c00e29410194590194590191bae3019001301c0014068646530010019bad301a301737540154bd702002222598009809801440063300100399b8000248006660366ea4dca19b8b002004001400c80b8dd9980c180a9baa30183758603000c66e95200233017375200e97ae08a50404c44646600200200644b30010018a508acc004c00cdd7180d800c528c4cc008008c070005016203289919800800801912cc00400629462b30013370e6eb4c058c0640052001899801001180d000c5282028405c8090c966002601860246ea8006297adef6c6089bab3016301337540028088cc01cdd5980a8008021bac30150023015301500130143014001300f3754006601c6ea8008dd7180898071baa0058b20184030300c300d001300c004452689b2b20041", + "hash": "2f904329815ffc78edc99e90ca907d86fdd0c8fa886b50bdd42f36fa" }, { "title": "multi.redeem.else", @@ -68,8 +68,8 @@ } } ], - "compiledCode": "59040a01010032323232323232232253330043232323232323232325323233300f300100613233223232325333015300830163754002264a66602c6010602e6ea80044c94ccc05cc028c060dd5003099b8732325333019300b301a37540022900009bad301e301b375400264a666032601660346ea8004530103d87a8000132330010013756603e60386ea8008894ccc078004530103d87a8000132333222533301f337220100062a66603e66e3c02000c4c050cc08cdd400125eb80530103d87a8000133006006001375c603a0026eb4c078004c088008c080004cc030014008dd7180e180c9baa0064800458dd7180d980c1baa00116301a301737546034602e6ea8c068c06cc05cdd5180d180b9baa0011632330010013758603400644a6660320022980103d87a80001332253330183375e601c60346ea80080204c034cc0700092f5c0266008008002603600260380026eacc060c064c064c064c064004c050dd5006180a800980a980b00098089baa0071533300f3002006132323253330123005001132325333017301a00200416375a603000260286ea802c54ccc048c01000454ccc054c050dd50058010b0b18091baa00a1323232323232325333017300a3018375402026464a66603266002008466e3c0600044c8c8cc004004014894ccc07c004528899199911299981019804004919b8f00100415333020323300100100d22533302500114a026644a6660486464a66604c66ebcc0acc0b0c0b0008cdd2a4008660546ea40252f5c0266ebcc070c0a0dd50008068a50302a0013026375400429444cc010010004c09c004c0a000454ccc080c0480084cc0180180045280b0b1bae301e001375a603e0026046004604200266e9520023301d375201497ae014a044646600200200644a66603e00229404cc894ccc078c0140085288998020020009bae302100130220013232333001001375a603c60366ea80492f5c0444a666036601c0042002266600600666e0000920013301f37526e50cdc58010020009bb3300d3019375460380082646600200200444a66603800229444cc894ccc06ccdc39bad301d002480044cc010010004528180f000980f80099299980b9804980c1baa00114bd6f7b63009bab301c30193754002660146eacc06c01001cdd6180d180d980d980d980d8019bac30190033758603000660306030002602e602e00260246ea8028dd7180a18089baa00716370e90011b874800088c8cc00400400c894ccc04c0045300103d87a800013233322253330143372200e0062a66602866e3c01c00c4c024cc060dd300125eb80530103d87a8000133006006001375c60240026eacc04c004c05c008c054004dd2a40004602000260146ea8004c034c03800cc030008c02c008c02c004c018dd50008a4c26cac6eb80055cd2ab9d5573caae7d5d02ba15745", - "hash": "3fe854a1171108b9af1e064ee47af2f81c9788104a6f49213dec8bb7" + "compiledCode": "590405010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4001370e90012444464653001300937540032232330010010032259800800c530103d87a8000899192cc004cdc8802800c56600266e3c0140062601666024602000497ae08a60103d87a80004039133004004301400340386eb8c038004c04400500f4c03401a601a00491112cc004c01c01226466446644b3001300d3012375400513259800980698099baa0018acc004c038c04cdd500144cdc3cc004dd5980b980c180c180c180c0024dd7180b980a1baa0019bae301730143754004911192cc004c044c05cdd5000c5200089bad301b3018375400280b0c9660026022602e6ea8006298103d87a8000899198008009bab301c3019375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062602e6603c603800497ae08a60103d87a80004069133004004302000340686eb8c068004c07400501b202c3300c00300224003164049164048602c60266ea8c058c04cdd5180b180b98099baa30163013375400516404464660020026eb0c054008896600200314c103d87a80008992cc004cdd7980b980a1baa001005898079980b000a5eb8226600600660300048090c058005014180a180a801980900098079baa003300e375400b159800980400244c8cc896600260160031323259800980b80140122c80a0dd6980a80098089baa0048acc004c0280062b3001301137540090028b20248b201e403c26464646644b3001300e3013375400f13259800998009bac3018301930193019301900423371e0260031332232330010010062259800800c528c4c8c9660026600e00c466e3c00400a2b300132330010010092259800800c528456600264b30013375e60426044604400266e95200433020375200897ae0899baf3021301e3754604200201114a080e0c074dd51810000c528c4cc008008c08400501b203c8acc004c050dd6980d80144cc010010c07c00e29410194590194590191bae3019001301c0014068646530010019bad301a301737540154bd702002222598009809801440063300100399b8000248006660366ea4dca19b8b002004001400c80b8dd9980c180a9baa30183758603000c66e95200233017375200e97ae08a50404c44646600200200644b30010018a508acc004c00cdd7180d800c528c4cc008008c070005016203289919800800801912cc00400629462b30013370e6eb4c058c0640052001899801001180d000c5282028405c8090c966002601860246ea8006297adef6c6089bab3016301337540028088cc01cdd5980a8008021bac30150023015301500130143014001300f3754006601c6ea8008dd7180898071baa0058b20184030300c300d001300c004452689b2b20041", + "hash": "2f904329815ffc78edc99e90ca907d86fdd0c8fa886b50bdd42f36fa" }, { "title": "oneshot.gift_card.spend", @@ -99,8 +99,8 @@ } } ], - "compiledCode": "5902730101003232323232323223222533300532323232323232323232532333010300500613233223232325333016300730173754002264a66602e601860306ea80044c8c94ccc070c07c0084c94ccc068cdc39bad301c002480044cdc780080c0a50375c60340022c603a002660160066eb8c070c064dd50008b1804980c1baa3009301837546036603860306ea8c06cc060dd50008b198039bac301a00223375e601260306ea8004014dd5980c980d180d180d180d000980a9baa00c3016001301630170013012375400e2a666020600200c2646464a66602660080022a66602c602a6ea802c0085854ccc04cc02000454ccc058c054dd50058010b0b18099baa00a1323232325333018301b00213232533301730083018375401e2a66602e601060306ea8cc0240148cdd79805980d1baa00101515333017300c00113371e00402a29405854ccc05ccdc3800a4002266e3c0080545281bad3018002375c602c0022c60320026600e6eacc060c064c064c064c06400800cdd6180b80098099baa00a375c602a60246ea801c58dc3a400044646600200200644a66602a0022980103d87a8000133225333014300500213374a90001980c00125eb804cc010010004c05c004c0600048c04c00488c94ccc03cc010c040dd50008a5eb7bdb1804dd5980a18089baa001323300100100322533301300114c103d87a800013233322253330143372200e0062a66602866e3c01c00c4cdd2a4000660306e980092f5c02980103d87a8000133006006001375c60240026eacc04c004c05c008c054004dc3a400460166ea8004c038c03c00cc034008c030008c030004c01cdd50008a4c26cac6eb80055cd2ab9d5573caae7d5d02ba15745", - "hash": "675eda685b40c32d3d2413fd2027d9f0cd7a07dcb3015fb70c5dc28d" + "compiledCode": "5902780101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00348888888966003300130043754013370e9001488c8cc00400400c896600200314c103d87a80008992cc004c010006266e9520003300b0014bd7044cc00c00cc0340090071805800a0129b874800122223232980098049baa00191192cc004c020c030dd5000c52f5bded8c1137566020601a6ea800500b1919800800801912cc0040062980103d87a8000899192cc004cdc8802800c56600266e3c014006266e9520003301230100024bd7045300103d87a80004039133004004301400340386eb8c038004c04400500f4c03401a601a00491112cc004c02401226466446644b3001300c3012375400513259800980798099baa0018992cc004c064006264b30013370e6eb4c0580052001899b8f375c602a00202714a080a0c0600062c80b0cc024dd5980b980c180c180c180c0021bae301730143754003164048602c60266ea8c058c04cdd5180b180b98099baa301630133754005164044660166eb0c0500048cdd7980a98091baa001003301430150033012001300f3754006601c6ea80162b3001300700489919912cc004c0280062b3001301137540090028b20248acc004c0300062b3001301137540090028b20248b201e403c26464b3001301500189919912cc004c034c04cdd5003c566002601a60266ea8cc038dd6180b802919baf3018301537540020371598009807800c4cdc7801008c52820248b20248acc004cdc3800a400313371e00402314a080910121bae3011001375a602400260280031640486600a6eacc04cc050c050c050c050004008c03cdd500198071baa002375c6022601c6ea80162c806100c0c030c034004c030011149a26cac8011", + "hash": "54b0903e563399968940db2ee9eda7f683f0a1d44752e65e4d2854e9" }, { "title": "oneshot.gift_card.mint", @@ -124,8 +124,8 @@ } } ], - "compiledCode": "5902730101003232323232323223222533300532323232323232323232532333010300500613233223232325333016300730173754002264a66602e601860306ea80044c8c94ccc070c07c0084c94ccc068cdc39bad301c002480044cdc780080c0a50375c60340022c603a002660160066eb8c070c064dd50008b1804980c1baa3009301837546036603860306ea8c06cc060dd50008b198039bac301a00223375e601260306ea8004014dd5980c980d180d180d180d000980a9baa00c3016001301630170013012375400e2a666020600200c2646464a66602660080022a66602c602a6ea802c0085854ccc04cc02000454ccc058c054dd50058010b0b18099baa00a1323232325333018301b00213232533301730083018375401e2a66602e601060306ea8cc0240148cdd79805980d1baa00101515333017300c00113371e00402a29405854ccc05ccdc3800a4002266e3c0080545281bad3018002375c602c0022c60320026600e6eacc060c064c064c064c06400800cdd6180b80098099baa00a375c602a60246ea801c58dc3a400044646600200200644a66602a0022980103d87a8000133225333014300500213374a90001980c00125eb804cc010010004c05c004c0600048c04c00488c94ccc03cc010c040dd50008a5eb7bdb1804dd5980a18089baa001323300100100322533301300114c103d87a800013233322253330143372200e0062a66602866e3c01c00c4cdd2a4000660306e980092f5c02980103d87a8000133006006001375c60240026eacc04c004c05c008c054004dc3a400460166ea8004c038c03c00cc034008c030008c030004c01cdd50008a4c26cac6eb80055cd2ab9d5573caae7d5d02ba15745", - "hash": "675eda685b40c32d3d2413fd2027d9f0cd7a07dcb3015fb70c5dc28d" + "compiledCode": "5902780101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00348888888966003300130043754013370e9001488c8cc00400400c896600200314c103d87a80008992cc004c010006266e9520003300b0014bd7044cc00c00cc0340090071805800a0129b874800122223232980098049baa00191192cc004c020c030dd5000c52f5bded8c1137566020601a6ea800500b1919800800801912cc0040062980103d87a8000899192cc004cdc8802800c56600266e3c014006266e9520003301230100024bd7045300103d87a80004039133004004301400340386eb8c038004c04400500f4c03401a601a00491112cc004c02401226466446644b3001300c3012375400513259800980798099baa0018992cc004c064006264b30013370e6eb4c0580052001899b8f375c602a00202714a080a0c0600062c80b0cc024dd5980b980c180c180c180c0021bae301730143754003164048602c60266ea8c058c04cdd5180b180b98099baa301630133754005164044660166eb0c0500048cdd7980a98091baa001003301430150033012001300f3754006601c6ea80162b3001300700489919912cc004c0280062b3001301137540090028b20248acc004c0300062b3001301137540090028b20248b201e403c26464b3001301500189919912cc004c034c04cdd5003c566002601a60266ea8cc038dd6180b802919baf3018301537540020371598009807800c4cdc7801008c52820248b20248acc004cdc3800a400313371e00402314a080910121bae3011001375a602400260280031640486600a6eacc04cc050c050c050c050004008c03cdd500198071baa002375c6022601c6ea80162c806100c0c030c034004c030011149a26cac8011", + "hash": "54b0903e563399968940db2ee9eda7f683f0a1d44752e65e4d2854e9" }, { "title": "oneshot.gift_card.else", @@ -146,8 +146,8 @@ } } ], - "compiledCode": "5902730101003232323232323223222533300532323232323232323232532333010300500613233223232325333016300730173754002264a66602e601860306ea80044c8c94ccc070c07c0084c94ccc068cdc39bad301c002480044cdc780080c0a50375c60340022c603a002660160066eb8c070c064dd50008b1804980c1baa3009301837546036603860306ea8c06cc060dd50008b198039bac301a00223375e601260306ea8004014dd5980c980d180d180d180d000980a9baa00c3016001301630170013012375400e2a666020600200c2646464a66602660080022a66602c602a6ea802c0085854ccc04cc02000454ccc058c054dd50058010b0b18099baa00a1323232325333018301b00213232533301730083018375401e2a66602e601060306ea8cc0240148cdd79805980d1baa00101515333017300c00113371e00402a29405854ccc05ccdc3800a4002266e3c0080545281bad3018002375c602c0022c60320026600e6eacc060c064c064c064c06400800cdd6180b80098099baa00a375c602a60246ea801c58dc3a400044646600200200644a66602a0022980103d87a8000133225333014300500213374a90001980c00125eb804cc010010004c05c004c0600048c04c00488c94ccc03cc010c040dd50008a5eb7bdb1804dd5980a18089baa001323300100100322533301300114c103d87a800013233322253330143372200e0062a66602866e3c01c00c4cdd2a4000660306e980092f5c02980103d87a8000133006006001375c60240026eacc04c004c05c008c054004dc3a400460166ea8004c038c03c00cc034008c030008c030004c01cdd50008a4c26cac6eb80055cd2ab9d5573caae7d5d02ba15745", - "hash": "675eda685b40c32d3d2413fd2027d9f0cd7a07dcb3015fb70c5dc28d" + "compiledCode": "5902780101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00348888888966003300130043754013370e9001488c8cc00400400c896600200314c103d87a80008992cc004c010006266e9520003300b0014bd7044cc00c00cc0340090071805800a0129b874800122223232980098049baa00191192cc004c020c030dd5000c52f5bded8c1137566020601a6ea800500b1919800800801912cc0040062980103d87a8000899192cc004cdc8802800c56600266e3c014006266e9520003301230100024bd7045300103d87a80004039133004004301400340386eb8c038004c04400500f4c03401a601a00491112cc004c02401226466446644b3001300c3012375400513259800980798099baa0018992cc004c064006264b30013370e6eb4c0580052001899b8f375c602a00202714a080a0c0600062c80b0cc024dd5980b980c180c180c180c0021bae301730143754003164048602c60266ea8c058c04cdd5180b180b98099baa301630133754005164044660166eb0c0500048cdd7980a98091baa001003301430150033012001300f3754006601c6ea80162b3001300700489919912cc004c0280062b3001301137540090028b20248acc004c0300062b3001301137540090028b20248b201e403c26464b3001301500189919912cc004c034c04cdd5003c566002601a60266ea8cc038dd6180b802919baf3018301537540020371598009807800c4cdc7801008c52820248b20248acc004cdc3800a400313371e00402314a080910121bae3011001375a602400260280031640486600a6eacc04cc050c050c050c050004008c03cdd500198071baa002375c6022601c6ea80162c806100c0c030c034004c030011149a26cac8011", + "hash": "54b0903e563399968940db2ee9eda7f683f0a1d44752e65e4d2854e9" } ], "definitions": { @@ -161,10 +161,6 @@ "Int": { "dataType": "integer" }, - "SpendTokenName": { - "title": "SpendTokenName", - "dataType": "bytes" - }, "cardano/transaction/OutputReference": { "title": "OutputReference", "description": "An `OutputReference` is a unique reference to an output on-chain. The `output_index`\n corresponds to the position in the output list of the transaction (identified by its id)\n that produced that output", @@ -207,6 +203,10 @@ } ] }, + "multi/SpendTokenName": { + "title": "SpendTokenName", + "dataType": "bytes" + }, "oneshot/Action": { "title": "Action", "anyOf": [