From 619d26e1ddff48449a2bdeeb9b5e0a71f5c537b1 Mon Sep 17 00:00:00 2001 From: Brice Dobry Date: Fri, 2 Feb 2024 10:37:34 -0500 Subject: [PATCH] feat: initial changes to support Clarity 3 --- clarity/src/vm/variables.rs | 2 ++ clarity/src/vm/version.rs | 11 ++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/clarity/src/vm/variables.rs b/clarity/src/vm/variables.rs index 539e14c39..3c9cf5c6f 100644 --- a/clarity/src/vm/variables.rs +++ b/clarity/src/vm/variables.rs @@ -35,6 +35,8 @@ define_versioned_named_enum!(NativeVariables(ClarityVersion) { TxSponsor("tx-sponsor?", ClarityVersion::Clarity2), Mainnet("is-in-mainnet", ClarityVersion::Clarity2), ChainId("chain-id", ClarityVersion::Clarity2), + StacksBlockHeight("stacks-block-height", ClarityVersion::Clarity3), + TenureHeight("tenure-height", ClarityVersion::Clarity3), }); impl NativeVariables { diff --git a/clarity/src/vm/version.rs b/clarity/src/vm/version.rs index f64d4ee87..4c437d52c 100644 --- a/clarity/src/vm/version.rs +++ b/clarity/src/vm/version.rs @@ -9,6 +9,7 @@ use crate::vm::errors::{Error, RuntimeErrorType}; pub enum ClarityVersion { Clarity1, Clarity2, + Clarity3, } impl fmt::Display for ClarityVersion { @@ -16,13 +17,14 @@ impl fmt::Display for ClarityVersion { match self { ClarityVersion::Clarity1 => write!(f, "Clarity 1"), ClarityVersion::Clarity2 => write!(f, "Clarity 2"), + ClarityVersion::Clarity3 => write!(f, "Clarity 3"), } } } impl ClarityVersion { pub fn latest() -> ClarityVersion { - ClarityVersion::Clarity2 + ClarityVersion::Clarity3 } pub fn default_for_epoch(epoch_id: StacksEpochId) -> ClarityVersion { match epoch_id { @@ -37,7 +39,7 @@ impl ClarityVersion { StacksEpochId::Epoch23 => ClarityVersion::Clarity2, StacksEpochId::Epoch24 => ClarityVersion::Clarity2, StacksEpochId::Epoch25 => ClarityVersion::Clarity2, - StacksEpochId::Epoch30 => ClarityVersion::Clarity2, + StacksEpochId::Epoch30 => ClarityVersion::Clarity3, } } } @@ -51,9 +53,12 @@ impl FromStr for ClarityVersion { Ok(ClarityVersion::Clarity1) } else if s == "clarity2" { Ok(ClarityVersion::Clarity2) + } else if s == "clarity3" { + Ok(ClarityVersion::Clarity3) } else { Err(RuntimeErrorType::ParseError( - "Invalid clarity version. Valid versions are: Clarity1, Clarity2.".to_string(), + "Invalid clarity version. Valid versions are: Clarity1, Clarity2, Clarity3." + .to_string(), ) .into()) }