[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 = [] cairo-0-secp-hints = [] # 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" # The js feature needs to be enabled getrandom = { version = "0.2", features = ["js"]} [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"]