From 7951c113934073b22b8f18d437a7b238be6d2f04 Mon Sep 17 00:00:00 2001 From: Kasey White Date: Fri, 17 Mar 2023 10:39:26 -0400 Subject: [PATCH] start on refactoring validator to support multi-validators in blueprint --- crates/aiken-project/src/blueprint/mod.rs | 2 +- .../aiken-project/src/blueprint/validator.rs | 41 +++++++++++++++---- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/crates/aiken-project/src/blueprint/mod.rs b/crates/aiken-project/src/blueprint/mod.rs index 2863d5f13..9930169e5 100644 --- a/crates/aiken-project/src/blueprint/mod.rs +++ b/crates/aiken-project/src/blueprint/mod.rs @@ -60,7 +60,7 @@ impl Blueprint> { let validators: Result, Error> = modules .validators() - .map(|(validator, def)| { + .flat_map(|(validator, def)| { Validator::from_checked_module(modules, generator, validator, def).map( |mut schema| { definitions.merge(&mut schema.definitions); diff --git a/crates/aiken-project/src/blueprint/validator.rs b/crates/aiken-project/src/blueprint/validator.rs index 67f54ea1e..af6ee7928 100644 --- a/crates/aiken-project/src/blueprint/validator.rs +++ b/crates/aiken-project/src/blueprint/validator.rs @@ -4,10 +4,13 @@ use super::{ schema::{Annotated, Schema}, }; use crate::module::{CheckedModule, CheckedModules}; -use aiken_lang::{ast::TypedValidator, uplc::CodeGenerator}; +use aiken_lang::{ + ast::{TypedArg, TypedFunction, TypedValidator}, + uplc::CodeGenerator, +}; use miette::NamedSource; use serde; -use uplc::ast::{DeBruijn, Program, Term}; +use uplc::ast::{DeBruijn, Name, Program, Term}; #[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize)] pub struct Validator { @@ -47,19 +50,39 @@ impl Validator> { generator: &mut CodeGenerator, module: &CheckedModule, def: &TypedValidator, + ) -> Vec>, Error>> { + let program: Program = generator.generate(def).try_into().unwrap(); + + let mut definitions = Definitions::new(); + + let mut validators = vec![Validator::create_validator_blueprint( + modules, def.params, def.fun, + )]; + + if let Some(other_func) = def.other_fun { + todo!() + } else { + todo!() + } + + validators + } + + fn create_validator_blueprint( + modules: &CheckedModules, + params: Vec, + func: TypedFunction, ) -> Result>, Error> { - let mut args = def.fun.arguments.iter().rev(); + let mut args = func.arguments.iter().rev(); let (_, redeemer, datum) = (args.next(), args.next().unwrap(), args.next()); - let mut arguments = Vec::with_capacity(def.params.len() + def.fun.arguments.len()); - - arguments.extend(def.params.clone()); - arguments.extend(def.fun.arguments.clone()); + let mut arguments = Vec::with_capacity(params.len() + func.arguments.len()); - let mut definitions = Definitions::new(); + arguments.extend(params.clone()); + arguments.extend(func.arguments.clone()); Ok(Validator { - title: format!("{}.{}", &module.name, &def.fun.name), + title: format!("{}.{}", &module.name, &func.name), description: None, parameters: def .params