/* This file is part of DarkFi (https://dark.fi) * * Copyright (C) 2020-2026 Dyne.org foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ /// Heap types in bincode & vm #[derive(Clone, Debug)] #[repr(u8)] pub enum HeapType { Var = 0x00, Lit = 0x01, } impl HeapType { pub fn from_repr(b: u8) -> Option { match b { 0x00 => Some(Self::Var), 0x01 => Some(Self::Lit), _ => None, } } } /// Variable types supported by the zkas VM #[derive(Copy, Clone, PartialEq, Eq, Debug)] #[repr(u8)] pub enum VarType { /// Dummy intermediate type Dummy = 0x00, /// Elliptic curve point EcPoint = 0x01, /// Elliptic curve fixed point (a constant) EcFixedPoint = 0x02, /// Elliptic curve fixed point short EcFixedPointShort = 0x03, /// Elliptic curve fixed point in base field EcFixedPointBase = 0x04, /// Elliptic curve nonidentity point EcNiPoint = 0x05, /// Base field element Base = 0x10, /// Base field element array BaseArray = 0x11, /// Scalar field element Scalar = 0x12, /// Scalar field element array ScalarArray = 0x13, /// Merkle tree path MerklePath = 0x20, /// Sparse merkle tree path SparseMerklePath = 0x21, /// Unsigned 32-bit integer Uint32 = 0x30, /// Unsigned 64-bit integer Uint64 = 0x31, /// Catch-all for any type Any = 0xff, } impl VarType { pub fn from_repr(b: u8) -> Option { match b { 0x01 => Some(Self::EcPoint), 0x02 => Some(Self::EcFixedPoint), 0x03 => Some(Self::EcFixedPointShort), 0x04 => Some(Self::EcFixedPointBase), 0x05 => Some(Self::EcNiPoint), 0x10 => Some(Self::Base), 0x11 => Some(Self::BaseArray), 0x12 => Some(Self::Scalar), 0x13 => Some(Self::ScalarArray), 0x20 => Some(Self::MerklePath), 0x21 => Some(Self::SparseMerklePath), 0x30 => Some(Self::Uint32), 0x31 => Some(Self::Uint64), 0xff => Some(Self::Any), _ => None, } } pub fn name(&self) -> &'static str { match self { Self::Dummy => "Dummy", Self::EcPoint => "EcPoint", Self::EcFixedPoint => "EcFixedPoint", Self::EcFixedPointShort => "EcFixedPointShort", Self::EcFixedPointBase => "EcFixedPointBase", Self::EcNiPoint => "EcNiPoint", Self::Base => "Base", Self::BaseArray => "BaseArray", Self::Scalar => "Scalar", Self::ScalarArray => "ScalarArray", Self::MerklePath => "MerklePath", Self::SparseMerklePath => "SparseMerklePath", Self::Uint32 => "Uint32", Self::Uint64 => "Uint64", Self::Any => "Any", } } } /// Literal types supported by the zkas VM #[derive(Copy, Clone, PartialEq, Eq, Debug)] #[repr(u8)] pub enum LitType { /// Dummy intermediate type Dummy = 0x00, /// Unsigned 64-bit integer Uint64 = 0x01, } impl LitType { pub fn from_repr(b: u8) -> Option { match b { 0x01 => Some(Self::Uint64), _ => None, } } pub fn to_vartype(&self) -> VarType { match self { Self::Dummy => VarType::Dummy, Self::Uint64 => VarType::Uint64, } } }