Remove 'purpose' from blueprint's schema.

This has been removed from the CIP-0057 specification since validators
  are often re-used for multiple purposes (especially validators with
  arity 2). It's misleading to assign a validator a purpose since the
  purpose distinction actually happens _within_ the validator itself.
This commit is contained in:
KtorZ 2023-02-21 15:29:47 +01:00
parent db0dfbbec1
commit 82a32a082b
No known key found for this signature in database
GPG Key ID: 33173CB6F77F4277
3 changed files with 1 additions and 54 deletions

View File

@ -30,11 +30,5 @@ impl IdGenerator {
} }
} }
pub const SPEND: &str = "spend";
pub const PUBLISH: &str = "publish";
pub const MINT: &str = "mint";
pub const WITHDRAW: &str = "withdraw";
pub const VALIDATOR_NAMES: [&str; 4] = [SPEND, PUBLISH, MINT, WITHDRAW];
#[cfg(test)] #[cfg(test)]
mod tests; mod tests;

View File

@ -16,8 +16,6 @@ use uplc::ast::{DeBruijn, Program, Term};
pub struct Validator<T> { pub struct Validator<T> {
pub title: String, pub title: String,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub purpose: Option<Purpose>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>, pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub datum: Option<Annotated<T>>, pub datum: Option<Annotated<T>>,
@ -29,15 +27,6 @@ pub struct Validator<T> {
pub program: Program<DeBruijn>, pub program: Program<DeBruijn>,
} }
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum Purpose {
Spend,
Mint,
Withdraw,
Publish,
}
impl Display for Validator<Schema> { impl Display for Validator<Schema> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let s = serde_json::to_string_pretty(self).map_err(|_| fmt::Error)?; let s = serde_json::to_string_pretty(self).map_err(|_| fmt::Error)?;
@ -63,7 +52,6 @@ impl Validator<Schema> {
Ok(Validator { Ok(Validator {
title: format!("{}.{}", &module.name, &def.fun.name), title: format!("{}.{}", &module.name, &def.fun.name),
description: None, description: None,
purpose: None,
parameters: def parameters: def
.params .params
.iter() .iter()
@ -137,40 +125,6 @@ where
} }
} }
impl Purpose {
pub fn min_arity(&self) -> u8 {
match self {
Purpose::Spend => 3,
Purpose::Mint | Purpose::Withdraw | Purpose::Publish => 2,
}
}
}
impl Display for Purpose {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str(match self {
Purpose::Spend => "spend",
Purpose::Mint => "mint",
Purpose::Withdraw => "withdraw",
Purpose::Publish => "publish",
})
}
}
impl TryFrom<String> for Purpose {
type Error = String;
fn try_from(purpose: String) -> Result<Purpose, Self::Error> {
match &purpose[..] {
"spend" => Ok(Purpose::Spend),
"mint" => Ok(Purpose::Mint),
"withdraw" => Ok(Purpose::Withdraw),
"publish" => Ok(Purpose::Publish),
unexpected => Err(format!("Can't turn '{unexpected}' into any Purpose")),
}
}
}
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use super::*; use super::*;

View File

@ -399,8 +399,7 @@ where
.into_iter() .into_iter()
.map(|validator| { .map(|validator| {
let same_title = validator.title == applied_validator.title; let same_title = validator.title == applied_validator.title;
let same_purpose = validator.purpose == applied_validator.purpose; if same_title {
if same_title && same_purpose {
applied_validator.to_owned() applied_validator.to_owned()
} else { } else {
validator validator