diff --git a/Cargo.lock b/Cargo.lock index 9b29c55a4..952bb38aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1579,11 +1579,7 @@ dependencies = [ "futures", "halo2_gadgets", "halo2_proofs", - "hex", - "indexmap 1.9.3", "indicatif", - "ipnet", - "iprange", "itertools 0.10.5", "lazy_static", "libc", @@ -1593,7 +1589,6 @@ dependencies = [ "prettytable-rs", "rand 0.8.5", "rcgen", - "ripemd", "rusqlite", "rustls-pemfile", "semver 1.0.17", @@ -3405,21 +3400,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "ipnet" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" - -[[package]] -name = "iprange" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37209be0ad225457e63814401415e748e2453a5297f9b637338f5fb8afa4ec00" -dependencies = [ - "ipnet", -] - [[package]] name = "is-terminal" version = "0.4.8" diff --git a/Cargo.toml b/Cargo.toml index 85fcb2277..56fdce866 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -70,14 +70,11 @@ smol = {version = "1.3.0", optional = true} # Networking async-rustls = {version = "0.4.0", features = ["dangerous_configuration"], optional = true} -iprange = {version = "0.6.7", optional = true} -ipnet = {version = "2.7.2", optional = true} socket2 = {version = "0.5.3", optional = true, features = ["all"]} # Pluggable Transports arti-client = {version = "0.9.2", default-features = false, features = ["async-std", "rustls", "onion-service-client"], optional = true} tor-hscrypto = {version = "0.3.0", optional = true} -# TODO: nym ( Read this to figure out impl https://github.com/ChainSafe/rust-libp2p-nym ) # TLS cert utilities ed25519-compact = {version = "2.0.4", optional = true} @@ -87,7 +84,6 @@ x509-parser = {version = "0.15.0", features = ["validate", "verify"], optional = # Encoding bs58 = {version = "0.5.0", optional = true} -hex = {version = "0.4.3", optional = true} serde_json = {version = "1.0.96", optional = true} serde = {version = "1.0.164", features = ["derive"], optional = true} semver = {version = "1.0.17", optional = true} @@ -103,7 +99,6 @@ chrono = {version = "0.4.26", optional = true} darkfi-serial = {path = "src/serial", optional = true} darkfi-derive = {path = "src/serial/derive", optional = true} darkfi-derive-internal = {path = "src/serial/derive-internal", optional = true} -indexmap = {version = "1.9.3", optional = true} itertools = {version = "0.10.5", optional = true} lazy_static = {version = "1.4.0", optional = true} # TODO: Test without serde @@ -113,7 +108,6 @@ url = {version = "2.4.0", features = ["serde"], optional = true} # TODO: Implement something simple and kill these deps indicatif = {version = "0.17.5", optional = true} simplelog = {version = "0.12.1", optional = true} -ripemd = {version = "0.1.3", optional = true} # Crypto rand = {version = "0.8.5", optional = true} @@ -199,7 +193,6 @@ dht = [ event-graph = [ "blake3", "chrono", - "hex", "rand", "async-runtime", @@ -210,9 +203,6 @@ event-graph = [ net = [ "ed25519-compact", "async-rustls", - "hex", - "iprange", - "ipnet", "structopt", "structopt-toml", "rand", @@ -249,7 +239,6 @@ raft = [ ] rpc = [ - "hex", "rand", "serde", "serde_json", @@ -315,7 +304,6 @@ zk = [ ] zkas = [ - "indexmap", "itertools", "darkfi-serial", diff --git a/src/error.rs b/src/error.rs index 3392eb13c..ce2ceee93 100644 --- a/src/error.rs +++ b/src/error.rs @@ -94,10 +94,6 @@ pub enum Error { #[error(transparent)] Bs58DecodeError(#[from] bs58::decode::Error), - #[cfg(feature = "hex")] - #[error(transparent)] - HexDecodeError(#[from] hex::FromHexError), - #[error("Bad operation type byte")] BadOperationType, @@ -221,18 +217,6 @@ pub enum Error { // ======================= // Protocol-related errors // ======================= - #[error("Unsupported chain")] - UnsupportedChain, - - #[error("Unsupported token")] - UnsupportedToken, - - #[error("Unsupported coin network")] - UnsupportedCoinNetwork, - - #[error("Raft error: {0}")] - RaftError(String), - #[error("JSON-RPC error: {0}")] JsonRpcError(String), diff --git a/src/zkas/parser.rs b/src/zkas/parser.rs index c1484be6a..56345208e 100644 --- a/src/zkas/parser.rs +++ b/src/zkas/parser.rs @@ -16,9 +16,8 @@ * along with this program. If not, see . */ -use std::{iter::Peekable, str::Chars}; +use std::{borrow::Borrow, collections::HashMap, hash::Hash, iter::Peekable, str::Chars}; -use indexmap::IndexMap; use itertools::Itertools; use super::{ @@ -44,6 +43,49 @@ const VALID_ECFIXEDPOINTSHORT: [&str; 1] = ["VALUE_COMMIT_VALUE"]; /// Valid EcFixedPointBase constant names supported by the VM. const VALID_ECFIXEDPOINTBASE: [&str; 1] = ["NULLIFIER_K"]; +#[derive(Clone)] +struct IndexMap { + pub order: Vec, + pub map: HashMap, +} + +impl IndexMap { + fn new() -> Self { + Self { order: vec![], map: HashMap::new() } + } +} + +impl IndexMap +where + K: Eq + Hash + Send + Sync + Clone + 'static, + V: Send + Sync + Clone + 'static, +{ + fn contains_key(&self, k: &Q) -> bool + where + K: Borrow, + Q: Hash + Eq, + { + self.map.contains_key(k) + } + + fn get(&self, k: &Q) -> Option<&V> + where + K: Borrow, + Q: Hash + Eq, + { + self.map.get(k) + } + + fn insert(&mut self, k: K, v: V) -> Option { + self.order.push(k.clone()); + self.map.insert(k, v) + } + + fn scam_iter(&self) -> Vec<(K, V)> { + self.order.iter().map(|k| (k.clone(), self.get(k).unwrap().clone())).collect() + } +} + pub struct Parser { tokens: Vec, error: ErrorEmitter, @@ -373,8 +415,8 @@ impl Parser { // k = name // v = (name, type) - for (k, v) in ast { - if &v.0.token != k { + for (k, v) in ast.scam_iter() { + if v.0.token != k { self.error.abort( &format!("Constant name `{}` doesn't match token `{}`.", v.0.token, k), v.0.line, @@ -482,8 +524,8 @@ impl Parser { // k = name // v = (name, type) - for (k, v) in ast { - if &v.0.token != k { + for (k, v) in ast.scam_iter() { + if v.0.token != k { self.error.abort( &format!("Witness name `{}` doesn't match token `{}`.", v.0.token, k), v.0.line,