From 3f6ad6be60e085454be1730c6cd8648721eaa823 Mon Sep 17 00:00:00 2001 From: Kasey White Date: Mon, 22 Aug 2022 21:18:22 -0400 Subject: [PATCH] verify signature changed name and cost --- crates/uplc/src/builtins.rs | 10 +++++----- crates/uplc/src/machine/cost_model.rs | 25 ++++++++++++++++++------- crates/uplc/src/machine/runtime.rs | 17 +++++++++++++---- 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/crates/uplc/src/builtins.rs b/crates/uplc/src/builtins.rs index acf187d6..92872ee9 100644 --- a/crates/uplc/src/builtins.rs +++ b/crates/uplc/src/builtins.rs @@ -31,7 +31,7 @@ pub enum DefaultFunction { Sha2_256 = 18, Sha3_256 = 19, Blake2b_256 = 20, - VerifySignature = 21, + VerifyEd25519Signature = 21, VerifyEcdsaSecp256k1Signature = 52, VerifySchnorrSecp256k1Signature = 53, // String functions @@ -134,8 +134,8 @@ impl TryFrom for DefaultFunction { v if v == DefaultFunction::Sha2_256 as u8 => Ok(DefaultFunction::Sha2_256), v if v == DefaultFunction::Sha3_256 as u8 => Ok(DefaultFunction::Sha3_256), v if v == DefaultFunction::Blake2b_256 as u8 => Ok(DefaultFunction::Blake2b_256), - v if v == DefaultFunction::VerifySignature as u8 => { - Ok(DefaultFunction::VerifySignature) + v if v == DefaultFunction::VerifyEd25519Signature as u8 => { + Ok(DefaultFunction::VerifyEd25519Signature) } v if v == DefaultFunction::VerifyEcdsaSecp256k1Signature as u8 => { Ok(DefaultFunction::VerifyEcdsaSecp256k1Signature) @@ -223,7 +223,7 @@ impl FromStr for DefaultFunction { "sha2_256" => Ok(Sha2_256), "sha3_256" => Ok(Sha3_256), "blake2b_256" => Ok(Blake2b_256), - "verifySignature" => Ok(VerifySignature), + "verifyEd25519Signature" => Ok(VerifyEd25519Signature), "verifyEcdsaSecp256k1Signature" => Ok(VerifyEcdsaSecp256k1Signature), "verifySchnorrSecp256k1Signature" => Ok(VerifySchnorrSecp256k1Signature), "appendString" => Ok(AppendString), @@ -287,7 +287,7 @@ impl Display for DefaultFunction { Sha2_256 => write!(f, "sha2_256"), Sha3_256 => write!(f, "sha3_256"), Blake2b_256 => write!(f, "blake2b_256"), - VerifySignature => write!(f, "verifySignature"), + VerifyEd25519Signature => write!(f, "verifySignature"), VerifyEcdsaSecp256k1Signature => write!(f, "verifyEcdsaSecp256k1Signature"), VerifySchnorrSecp256k1Signature => write!(f, "verifySchnorrSecp256k1Signature"), AppendString => write!(f, "appendString"), diff --git a/crates/uplc/src/machine/cost_model.rs b/crates/uplc/src/machine/cost_model.rs index 755d5c0b..9211cfff 100644 --- a/crates/uplc/src/machine/cost_model.rs +++ b/crates/uplc/src/machine/cost_model.rs @@ -277,13 +277,13 @@ impl Default for BuiltinCosts { }, append_byte_string: CostingFun { mem: TwoArguments::AddedSizes(AddedSizes { - intercept: 1000, - slope: 571, - }), - cpu: TwoArguments::AddedSizes(AddedSizes { intercept: 0, slope: 1, }), + cpu: TwoArguments::AddedSizes(AddedSizes { + intercept: 1000, + slope: 571, + }), }, cons_byte_string: CostingFun { mem: TwoArguments::AddedSizes(AddedSizes { @@ -359,8 +359,8 @@ impl Default for BuiltinCosts { verify_ed25519_signature: CostingFun { mem: ThreeArguments::ConstantCost(10), cpu: ThreeArguments::LinearInZ(LinearSize { - intercept: 41047009, - slope: 18816, + intercept: 57996947, + slope: 18975, }), }, verify_ecdsa_secp256k1_signature: CostingFun { @@ -693,7 +693,18 @@ impl BuiltinCosts { mem: self.blake2b_256.mem.cost(args[0].to_ex_mem()), cpu: self.blake2b_256.cpu.cost(args[0].to_ex_mem()), }, - DefaultFunction::VerifySignature => todo!(), + DefaultFunction::VerifyEd25519Signature => ExBudget { + mem: self.verify_ed25519_signature.mem.cost( + args[0].to_ex_mem(), + args[1].to_ex_mem(), + args[2].to_ex_mem(), + ), + cpu: self.verify_ed25519_signature.cpu.cost( + args[0].to_ex_mem(), + args[1].to_ex_mem(), + args[2].to_ex_mem(), + ), + }, DefaultFunction::VerifyEcdsaSecp256k1Signature => todo!(), DefaultFunction::VerifySchnorrSecp256k1Signature => todo!(), DefaultFunction::AppendString => ExBudget { diff --git a/crates/uplc/src/machine/runtime.rs b/crates/uplc/src/machine/runtime.rs index 82c41332..4dedbb53 100644 --- a/crates/uplc/src/machine/runtime.rs +++ b/crates/uplc/src/machine/runtime.rs @@ -93,7 +93,7 @@ impl DefaultFunction { DefaultFunction::Sha2_256 => 1, DefaultFunction::Sha3_256 => 1, DefaultFunction::Blake2b_256 => 1, - DefaultFunction::VerifySignature => todo!(), + DefaultFunction::VerifyEd25519Signature => 3, DefaultFunction::VerifyEcdsaSecp256k1Signature => todo!(), DefaultFunction::VerifySchnorrSecp256k1Signature => todo!(), DefaultFunction::AppendString => 2, @@ -152,7 +152,7 @@ impl DefaultFunction { DefaultFunction::Sha2_256 => 0, DefaultFunction::Sha3_256 => 0, DefaultFunction::Blake2b_256 => 0, - DefaultFunction::VerifySignature => todo!(), + DefaultFunction::VerifyEd25519Signature => 0, DefaultFunction::VerifyEcdsaSecp256k1Signature => todo!(), DefaultFunction::VerifySchnorrSecp256k1Signature => todo!(), DefaultFunction::AppendString => 0, @@ -229,7 +229,7 @@ impl DefaultFunction { DefaultFunction::Sha2_256 => arg.expect_type(Type::ByteString), DefaultFunction::Sha3_256 => arg.expect_type(Type::ByteString), DefaultFunction::Blake2b_256 => arg.expect_type(Type::ByteString), - DefaultFunction::VerifySignature => todo!(), + DefaultFunction::VerifyEd25519Signature => arg.expect_type(Type::ByteString), DefaultFunction::VerifyEcdsaSecp256k1Signature => todo!(), DefaultFunction::VerifySchnorrSecp256k1Signature => todo!(), DefaultFunction::AppendString => arg.expect_type(Type::String), @@ -459,7 +459,16 @@ impl DefaultFunction { } _ => unreachable!(), }, - DefaultFunction::VerifySignature => todo!(), + DefaultFunction::VerifyEd25519Signature => match (&args[0], &args[1], &args[2]) { + ( + Value::Con(Constant::ByteString(_arg1)), + Value::Con(Constant::ByteString(_arg2)), + Value::Con(Constant::ByteString(_arg3)), + ) => { + todo!() + } + _ => unreachable!(), + }, DefaultFunction::VerifyEcdsaSecp256k1Signature => todo!(), DefaultFunction::VerifySchnorrSecp256k1Signature => todo!(), DefaultFunction::AppendString => match (&args[0], &args[1]) {