cairo-vm 2.0.0-rc1

Blazing fast Cairo interpreter
Documentation
[package]
name = "cairo-vm"
description = "Blazing fast Cairo interpreter"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
readme.workspace = true
keywords.workspace = true

[features]
default = ["std"]
std = [
    "serde_json/std",
    "bincode/std",
    "anyhow/std",
    "starknet-types-core/std",
    "starknet-crypto/std",
    "dep:num-prime",
    "thiserror-no-std/std",
    "dep:zip",
]
cairo-1-hints = [
    "dep:cairo-lang-starknet",
    "dep:cairo-lang-casm",
    "dep:cairo-lang-starknet-classes",
    "dep:ark-ff",
    "dep:ark-std",
]
tracer = []
mod_builtin = []

# Note that these features are not retro-compatible with the cairo Python VM.
test_utils = ["std", "dep:arbitrary", "starknet-types-core/arbitrary", "starknet-types-core/std"] # This feature will reference every test-oriented feature
# Allows extending the set of hints for the current vm run from within a hint.
# For a usage example checkout vm/src/tests/run_deprecated_contract_class_simplified.rs
extensive_hints = []

[dependencies]
zip = { version = "0.6.6", optional = true, default-features = false, features = ["deflate"] }
num-bigint = { workspace = true }
rand = { workspace = true }
num-traits = { workspace = true }
num-integer = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
hex = { workspace = true }
bincode = { workspace = true }
starknet-crypto = { workspace = true }
sha3 = { workspace = true }
lazy_static = { workspace = true }
nom = { workspace = true }
sha2 = { workspace = true }
generic-array = { workspace = true }
keccak = { workspace = true }
hashbrown = { workspace = true }
anyhow = { workspace = true }
thiserror-no-std = { workspace = true }
starknet-types-core = { version = "0.1.2", default-features = false, features = ["serde", "curve", "num-traits", "hash"] }
rust_decimal = { version = "1.35.0", default-features = false }

# only for std
num-prime = { version = "0.4.3", features = ["big-int"], optional = true }
bitvec = { workspace = true }

# Dependencies for cairo-1-hints feature
cairo-lang-starknet = { workspace = true, optional = true }
cairo-lang-starknet-classes = { workspace = true, optional = true }
cairo-lang-casm = { workspace = true, optional = true }

# TODO: check these dependencies for wasm compatibility
ark-ff = { workspace = true, optional = true }
ark-std = { workspace = true, optional = true }

# Enable arbitrary when fuzzing
arbitrary = { workspace = true, features = ["derive"], optional = true }

# Used to derive clap traits for CLIs
clap = { version = "4.3.10", features = ["derive"], optional = true}

# Pin wasm-bindgen version to fix ensure-no_std CI workflow
# It's not used directly
wasm-bindgen = { version = "= 0.2.92" }

[dev-dependencies]
assert_matches = "1.5.0"
rstest = { version = "0.17.0", default-features = false }
num-prime = { version = "0.4.3", features = ["big-int"] }

[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
wasm-bindgen-test = "0.3.34"

[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
iai-callgrind = "0.3.1"
criterion = { version = "0.5.1", features = ["html_reports"] }
proptest = "1.0.0"
mimalloc.workspace = true

[[bench]]
path = "../bench/iai_benchmark.rs"
name = "iai_benchmark"
harness = false

[[bench]]
path = "../bench/criterion_benchmark.rs"
name = "criterion_benchmark"
harness = false

[[example]]
name = "custom_hint"
path = "../examples/custom_hint/src/main.rs"
required-features = ["std"]