[workspace]
resolver = "2"
members = [
  # Version patches
  "patches/parking_lot_core",
  "patches/parking_lot",
  "patches/zstd",
  "patches/rocksdb",

  # std patches
  "patches/matches",
  "patches/is-terminal",

  # Rewrites/redirects
  "patches/option-ext",
  "patches/directories-next",

  "common/std-shims",
  "common/zalloc",
  "common/patchable-async-sleep",
  "common/db",
  "common/env",
  "common/request",

  "crypto/transcript",

  "crypto/ff-group-tests",
  "crypto/dalek-ff-group",
  "crypto/ed448",
  "crypto/ciphersuite",

  "crypto/multiexp",
  "crypto/schnorr",
  "crypto/dleq",

  "crypto/evrf/secq256k1",
  "crypto/evrf/embedwards25519",
  "crypto/evrf/generalized-bulletproofs",
  "crypto/evrf/circuit-abstraction",
  "crypto/evrf/divisors",
  "crypto/evrf/ec-gadgets",

  "crypto/dkg",
  "crypto/frost",
  "crypto/schnorrkel",

  "networks/bitcoin",

  "networks/ethereum/alloy-simple-request-transport",
  "networks/ethereum",
  "networks/ethereum/relayer",

  "networks/monero/io",
  "networks/monero/generators",
  "networks/monero/primitives",
  "networks/monero/ringct/mlsag",
  "networks/monero/ringct/clsag",
  "networks/monero/ringct/borromean",
  "networks/monero/ringct/bulletproofs",
  "networks/monero",
  "networks/monero/rpc",
  "networks/monero/rpc/simple-request",
  "networks/monero/wallet/address",
  "networks/monero/wallet",
  "networks/monero/wallet/seed",
  "networks/monero/wallet/polyseed",
  "networks/monero/wallet/util",
  "networks/monero/verify-chain",

  "message-queue",

  "processor/messages",
  "processor/key-gen",
  "processor/frost-attempt-manager",

  "processor/primitives",
  "processor/scanner",
  "processor",

  "coordinator/tributary/tendermint",
  "coordinator/tributary",
  "coordinator",

  "substrate/primitives",

  "substrate/coins/primitives",
  "substrate/coins/pallet",

  "substrate/dex/pallet",

  "substrate/validator-sets/primitives",
  "substrate/validator-sets/pallet",

  "substrate/genesis-liquidity/primitives",
  "substrate/genesis-liquidity/pallet",

  "substrate/emissions/primitives",
  "substrate/emissions/pallet",

  "substrate/economic-security/pallet",

  "substrate/in-instructions/primitives",
  "substrate/in-instructions/pallet",

  "substrate/signals/primitives",
  "substrate/signals/pallet",

  "substrate/abi",

  "substrate/runtime",
  "substrate/node",

  "substrate/client",

  "orchestration",

  "mini",

  "tests/no-std",

  "tests/docker",
  "tests/message-queue",
  "tests/processor",
  "tests/coordinator",
  "tests/full-stack",
  "tests/reproducible-runtime",
]

# Always compile Monero (and a variety of dependencies) with optimizations due
# to the extensive operations required for Bulletproofs
[profile.dev.package]
subtle = { opt-level = 3 }

ff = { opt-level = 3 }
group = { opt-level = 3 }

crypto-bigint = { opt-level = 3 }
secp256k1 = { opt-level = 3 }
curve25519-dalek = { opt-level = 3 }
dalek-ff-group = { opt-level = 3 }
minimal-ed448 = { opt-level = 3 }

multiexp = { opt-level = 3 }

secq256k1 = { opt-level = 3 }
embedwards25519 = { opt-level = 3 }
generalized-bulletproofs = { opt-level = 3 }
generalized-bulletproofs-circuit-abstraction = { opt-level = 3 }
ec-divisors = { opt-level = 3 }
generalized-bulletproofs-ec-gadgets = { opt-level = 3 }

dkg = { opt-level = 3 }

monero-generators = { opt-level = 3 }
monero-borromean = { opt-level = 3 }
monero-bulletproofs = { opt-level = 3 }
monero-mlsag = { opt-level = 3 }
monero-clsag = { opt-level = 3 }

[profile.release]
panic = "unwind"

[patch.crates-io]
# https://github.com/rust-lang-nursery/lazy-static.rs/issues/201
lazy_static = { git = "https://github.com/rust-lang-nursery/lazy-static.rs", rev = "5735630d46572f1e5377c8f2ba0f79d18f53b10c" }

parking_lot_core = { path = "patches/parking_lot_core" }
parking_lot = { path = "patches/parking_lot" }
# wasmtime pulls in an old version for this
zstd = { path = "patches/zstd" }
# Needed for WAL compression
rocksdb = { path = "patches/rocksdb" }

# is-terminal now has an std-based solution with an equivalent API
is-terminal = { path = "patches/is-terminal" }
# So does matches
matches = { path = "patches/matches" }

# directories-next was created because directories was unmaintained
# directories-next is now unmaintained while directories is maintained
# The directories author pulls in ridiculously pointless crates and prefers
# copyleft licenses
# The following two patches resolve everything
option-ext = { path = "patches/option-ext" }
directories-next = { path = "patches/directories-next" }

# The official pasta_curves repo doesn't support Zeroize
pasta_curves = { git = "https://github.com/kayabaNerve/pasta_curves", rev = "a46b5be95cacbff54d06aad8d3bbcba42e05d616" }

# https://github.com/alloy-rs/core/issues/717
alloy-sol-type-parser = { git = "https://github.com/alloy-rs/core", rev = "446b9d2fbce12b88456152170709a3eaac929af0" }

[workspace.lints.clippy]
unwrap_or_default = "allow"
borrow_as_ptr = "deny"
cast_lossless = "deny"
cast_possible_truncation = "deny"
cast_possible_wrap = "deny"
cast_precision_loss = "deny"
cast_ptr_alignment = "deny"
cast_sign_loss = "deny"
checked_conversions = "deny"
cloned_instead_of_copied = "deny"
enum_glob_use = "deny"
expl_impl_clone_on_copy = "deny"
explicit_into_iter_loop = "deny"
explicit_iter_loop = "deny"
flat_map_option = "deny"
float_cmp = "deny"
fn_params_excessive_bools = "deny"
ignored_unit_patterns = "deny"
implicit_clone = "deny"
inefficient_to_string = "deny"
invalid_upcast_comparisons = "deny"
large_stack_arrays = "deny"
linkedlist = "deny"
macro_use_imports = "deny"
manual_instant_elapsed = "deny"
manual_let_else = "deny"
manual_ok_or = "deny"
manual_string_new = "deny"
map_unwrap_or = "deny"
match_bool = "deny"
match_same_arms = "deny"
missing_fields_in_debug = "deny"
needless_continue = "deny"
needless_pass_by_value = "deny"
ptr_cast_constness = "deny"
range_minus_one = "deny"
range_plus_one = "deny"
redundant_closure_for_method_calls = "deny"
redundant_else = "deny"
string_add_assign = "deny"
unchecked_duration_subtraction = "deny"
uninlined_format_args = "deny"
unnecessary_box_returns = "deny"
unnecessary_join = "deny"
unnecessary_wraps = "deny"
unnested_or_patterns = "deny"
unused_async = "deny"
unused_self = "deny"
zero_sized_map_values = "deny"
