content: [workspace]
  members = [
      "account-keys",
      "account-keys/types",
      "admin-http-gateway",
      "api",
      "attest/ake",
      "attest/api",
      "attest/core",
      "attest/trusted",
      "attest/untrusted",
      "attest/verifier",
      "attest/verifier/config",
      "attest/verifier/types",
      "blockchain/types",
      "blockchain/validators",
      "common",
      "connection",
      "connection/test-utils",
      "consensus/api",
      "consensus/enclave",
      "consensus/enclave/api",
      "consensus/enclave/edl",
      "consensus/enclave/impl",
      "consensus/enclave/measurement",
      "consensus/enclave/mock",
      "consensus/mint-client",
      "consensus/scp",
      "consensus/scp/play",
      "consensus/scp/types",
      "consensus/service",
      "consensus/service/config",
      "consensus/tool",
      "core",
      "core/types",
      "crypto/box",
      "crypto/digestible",
      "crypto/digestible/derive/test",
      "crypto/digestible/signature",
      "crypto/digestible/test-utils",
      "crypto/keys",
      "crypto/memo-mac",
      "crypto/message-cipher",
      "crypto/multisig",
      "crypto/noise",
      "crypto/ring-signature",
      "crypto/ring-signature/signer",
      "crypto/sig",
      "crypto/x509/test-vectors",
      "crypto/x509/utils",
      "enclave-boundary",
      "fog/api",
      "fog/block_provider",
      "fog/distribution",
      "fog/enclave_connection",
      "fog/ingest/client",
      "fog/ingest/enclave",
      "fog/ingest/enclave/api",
      "fog/ingest/enclave/edl",
      "fog/ingest/enclave/impl",
      "fog/ingest/enclave/measurement",
      "fog/ingest/report",
      "fog/ingest/server",
      "fog/kex_rng",
      "fog/ledger/connection",
      "fog/ledger/enclave",
      "fog/ledger/enclave/api",
      "fog/ledger/enclave/edl",
      "fog/ledger/enclave/impl",
      "fog/ledger/enclave/measurement",
      "fog/ledger/server",
      "fog/load_testing",
      "fog/ocall_oram_storage/edl",
      "fog/ocall_oram_storage/testing",
      "fog/ocall_oram_storage/trusted",
      "fog/ocall_oram_storage/untrusted",
      "fog/overseer/server",
      "fog/recovery_db_iface",
      "fog/report/api",
      "fog/report/cli",
      "fog/report/connection",
      "fog/report/resolver",
      "fog/report/server",
      "fog/report/types",
      "fog/report/validation",
      "fog/report/validation/test-utils",
      "fog/sample-paykit",
      "fog/sig",
      "fog/sig/authority",
      "fog/sig/report",
      "fog/sql_recovery_db",
      "fog/sql_recovery_db/cleanup",
      "fog/test-client",
      "fog/test_infra",
      "fog/types",
      "fog/uri",
      "fog/view/connection",
      "fog/view/enclave",
      "fog/view/enclave/api",
      "fog/view/enclave/edl",
      "fog/view/enclave/impl",
      "fog/view/enclave/measurement",
      "fog/view/load-test",
      "fog/view/protocol",
      "fog/view/server",
      "fog/view/server/test-utils",
      "go-grpc-gateway/testing",
      "ledger/db",
      "ledger/distribution",
      "ledger/from-archive",
      "ledger/migration",
      "ledger/sync",
      "light-client/cli",
      "light-client/relayer",
      "light-client/verifier",
      "mobilecoind",
      "mobilecoind-dev-faucet",
      "mobilecoind-json",
      "mobilecoind/api",
      "peers",
      "peers/test-utils",
      "sgx/build",
      "sgx/compat-edl",
      "sgx/css",
      "sgx/css-dump",
      "sgx/debug-edl",
      "sgx/panic-edl",
      "sgx/report-cache/api",
      "sgx/report-cache/untrusted",
      "sgx/slog",
      "sgx/slog-edl",
      "sgx/urts",
      "t3/api",
      "t3/connection",
      "test-vectors/account-keys",
      "test-vectors/b58-encodings",
      "test-vectors/memos",
      "test-vectors/tx-out-records",
      "transaction/builder",
      "transaction/core",
      "transaction/core/test-utils",
      "transaction/extra",
      "transaction/signer",
      "transaction/summary",
      "transaction/types",
      "util/b58-decoder",
      "util/build/enclave",
      "util/build/grpc",
      "util/build/script",
      "util/build/sgx",
      "util/cli",
      "util/dump-ledger",
      "util/encodings",
      "util/ffi",
      "util/from-random",
      "util/generate-sample-ledger",
      "util/grpc",
      "util/grpc-admin-tool",
      "util/grpc-token-generator",
      "util/host-cert",
      "util/keyfile",
      "util/lmdb",
      "util/logger-macros",
      "util/metered-channel",
      "util/metrics",
      "util/parse",
      "util/repr-bytes",
      "util/seeded-ed25519-key-gen",
      "util/serial",
      "util/telemetry",
      "util/test-helper",
      "util/test-vector",
      "util/u64-ratio",
      "util/uri",
      "util/vec-map",
      "util/zip-exact",
      "wasm-test",
      "watcher",
      "watcher/api",
  ]
  exclude = [
      # N.B. for some reason, putting these crates under `exclude` helps with
      # making `cargo test --all` work, when `consensus-enclave-impl` is part of workspace
      "fog/ingest/enclave/trusted",
      "fog/ledger/enclave/trusted",
      "fog/view/enclave/trusted",
      "sgx",
      # mc-util-serial should only be accessed via the `common` crate.
      "util/serial",
  ]
  
  resolver = "2"
  
  [workspace.package]
  rust-version = "1.83.0"
  
  [workspace.dependencies]
  aead = { version = "0.5", default-features = false }
  aes = "0.8"
  aes-gcm = "0.10"
  aligned-cmov = "2"
  anyhow = "1"
  assert_cmd = "2"
  assert_matches = "1"
  async-channel = "2"
  backtrace = "0.3"
  balanced-tree-index = "2"
  base64 = { version = "0.21", default-features = false }
  bincode = "1"
  bitflags = { version = "2", default-features = false }
  blake2 = { version = "0.10", default-features = false }
  bs58 = "0.4"
  bulletproofs-og = { version = "3.0.0-pre.1", default-features = false }
  cargo-emit = "0.2"
  cargo_metadata = "0.18"
  cc = "1"
  cfg-if = "1"
  chrono = { version = "0.4", default-features = false }
  clap = "4"
  clio = "0.3"
  cookie = "0.18"
  crc = { version = "3", default-features = false }
  criterion = "0.5"
  crossbeam-channel = "0.5"
  ctr = "0.9"
  ctrlc = "3"
  curve25519-dalek = { version = "4", default-features = false }
  der = { version = "0.7", default-features = false }
  diesel = "2"
  diesel-derive-enum = "2"
  diesel_migrations = "2"
  digest = { version = "0.10", default-features = false }
  dirs = "5"
  displaydoc = { version = "0.2", default-features = false }
  dyn-clone = "1"
  ed25519 = { version = "2", default-features = false }
  ed25519-dalek = { version = "2", default-features = false }
  fs_extra = "1"
  futures = "0.3"
  generic-array = { version = "0.14", default-features = false }
  getrandom = "0.2"
  grpcio = "0.13"
  hashbrown = { version = "0.14", default-features = false }
  heapless = { version = "0.8", default-features = false }
  hex = { version = "0.4", default-features = false }
  hex-literal = "0.4"
  hex_fmt = "0.3"
  hkdf = "0.12"
  hmac = "0.12"
  hostname = "0.3"
  itertools = "0.12"
  json = "0.12"
  lazy_static = "1"
  libc = "0.2"
  libz-sys = "1"
  link-cplusplus = "1"
  lmdb-rkv = "0.14"
  log = "0.4"
  maplit = "1"
  mbedtls = { version = "0.8", default-features = false }
  mbedtls-sys-auto = "2"
  mc-attestation-verifier = "0.4"
  mc-oblivious-aes-gcm = { version = "0.10", default-features = false }
  mc-oblivious-map = "2"
  mc-oblivious-ram = "2"
  mc-oblivious-traits = "2"
  mc-rand = "1"
  mc-sgx-core-sys-types = "0.12"
  mc-sgx-core-types = "0.12"
  mc-sgx-dcap-ql = "0.12"
  mc-sgx-dcap-quoteverify = "0.12"
  mc-sgx-dcap-sys-types = { version = "0.12", default-features = false }
  mc-sgx-dcap-types = { version = "0.12", default-features = false }
  merlin = { version = "3", default-features = false }
  mockall = "0.12"
  more-asserts = "0.3"
  num_cpus = "1"
  once_cell = { version = "1", default-features = false }
  opentelemetry = "0.21"
  opentelemetry-jaeger = "0.20"
  opentelemetry_sdk = "0.21"
  p256 = { version = "0.13", default-features = false }
  pem = "3"
  percent-encoding = "2"
  pkg-config = "0.3"
  portpicker = "0.1"
  predicates = "3"
  primitive-types = "0.12"
  proc-macro2 = "1"
  prometheus = "0.13"
  proptest = { version = "1", default-features = false }
  prost = { version = "0.12", default-features = false }
  prost-build = "0.12"
  protobuf = "2"
  protoc-grpcio = "3"
  quote = "1"
  r2d2 = "0.8"
  rand = { version = "0.8", default-features = false }
  rand_chacha = "0.3"
  rand_core = { version = "0.6", default-features = false }
  rand_hc = { version = "0.3", default-features = false }
  rayon = "1"
  regex = "1"
  reqwest = { version = "0.11", default-features = false }
  retry = "2"
  rjson = "0.3"
  rocket = "0.5"
  rusoto_core = { version = "0.48", default-features = false }
  rusoto_s3 = { version = "0.48", default-features = false }
  schnorrkel-og = { version = "0.11.0-pre.0", default-features = false }
  scoped_threadpool = "0.1"
  secrecy = "0.8"
  semver = "1"
  sentry = { version = "0.32", default-features = false }
  serde = { version = "1", default-features = false }
  serde_cbor = { version = "0.11", default-features = false }
  serde_derive = "1"
  serde_json = { version = "1", default-features = false }
  serde_with = { version = "3", default-features = false }
  serial_test = "3"
  sha2 = { version = "0.10", default-features = false }
  sha3 = { version = "0.10", default-features = false }
  signal-hook = "0.3"
  signature = { version = "2", default-features = false }
  siphasher = "1"
  slip10_ed25519 = "0.1"
  slog = { version = "2", default-features = false }
  slog-async = "2"
  slog-atomic = "3"
  slog-envlogger = "2"
  slog-json = "2"
  slog-scope = "4"
  slog-stdlog = "4"
  slog-term = "2"
  static_assertions = "1"
  stdext = "0.3"
  subtle = { version = "2", default-features = false }
  syn = "2"
  tempfile = "3"
  textwrap = "0.16"
  tiny-bip39 = "1"
  tokio = "1"
  toml = "0.8"
  url = "2"
  walkdir = "2"
  wasm-bindgen = "0.2"
  wasm-bindgen-test = "0.3"
  x25519-dalek = { version = "2", default-features = false }
  x509-cert = { version = "0.2", default-features = false }
  x509-signature = "0.5"
  yaml-rust = "0.4"
  yare = "2"
  zeroize = { version = "1", default-features = false }
  
  mc-account-keys = { path = "account-keys", default-features = false }
  mc-account-keys-types = { path = "account-keys/types" }
  mc-api = { path = "api" }
  mc-attest-ake = { path = "attest/ake", default-features = false }
  mc-attest-api = { path = "attest/api" }
  mc-attest-core = { path = "attest/core", default-features = false }
  mc-attest-enclave-api = { path = "attest/enclave-api", default-features = false }
  mc-attest-trusted = { path = "attest/trusted", default-features = false }
  mc-attest-untrusted = { path = "attest/untrusted", default-features = false }
  mc-attest-verifier = { path = "attest/verifier", default-features = false }
  mc-attest-verifier-types = { path = "attest/verifier/types", default-features = false }
  mc-blockchain-test-utils = { path = "blockchain/test-utils" }
  mc-blockchain-types = { path = "blockchain/types" }
  mc-common = { path = "common", default-features = false }
  mc-connection = { path = "connection" }
  mc-connection-test-utils = { path = "connection/test-utils" }
  mc-consensus-api = { path = "consensus/api" }
  mc-consensus-enclave = { path = "consensus/enclave" }
  mc-consensus-enclave-api = { path = "consensus/enclave/api", default-features = false }
  mc-consensus-enclave-edl = { path = "consensus/enclave/edl" }
  mc-consensus-enclave-measurement = { path = "consensus/enclave/measurement" }
  mc-consensus-enclave-mock = { path = "consensus/enclave/mock" }
  mc-consensus-mint-client-types = { path = "consensus/mint-client/types" }
  mc-consensus-scp = { path = "consensus/scp" }
  mc-consensus-scp-types = { path = "consensus/scp/types" }
  mc-consensus-service-config = { path = "consensus/service/config" }
  mc-core = { path = "core", default-features = false }
  mc-core-types = { path = "core/types", default-features = false }
  mc-crypto-ake-enclave = { path = "crypto/ake/enclave", default-features = false }
  mc-crypto-box = { path = "crypto/box" }
  mc-crypto-digestible = { path = "crypto/digestible", default-features = false }
  mc-crypto-digestible-derive = { path = "crypto/digestible/derive", default-features = false }
  mc-crypto-digestible-signature = { path = "crypto/digestible/signature", default-features = false }
  mc-crypto-digestible-test-utils = { path = "crypto/digestible/test-utils" }
  mc-crypto-hashes = { path = "crypto/hashes", default-features = false }
  mc-crypto-keys = { path = "crypto/keys", default-features = false }
  mc-crypto-memo-mac = { path = "crypto/memo-mac" }
  mc-crypto-message-cipher = { path = "crypto/message-cipher" }
  mc-crypto-multisig = { path = "crypto/multisig", default-features = false }
  mc-crypto-noise = { path = "crypto/noise", default-features = false }
  mc-crypto-ring-signature = { path = "crypto/ring-signature", default-features = false }
  mc-crypto-ring-signature-signer = { path = "crypto/ring-signature/signer", default-features = false }
  mc-crypto-x509-test-vectors = { path = "crypto/x509/test-vectors" }
  mc-crypto-x509-utils = { path = "crypto/x509/utils" }
  mc-enclave-boundary = { path = "enclave-boundary" }
  mc-fog-api = { path = "fog/api" }
  mc-fog-block-provider = { path = "fog/block_provider" }
  mc-fog-enclave-connection = { path = "fog/enclave_connection" }
  mc-fog-ingest-client = { path = "fog/ingest/client" }
  mc-fog-ingest-enclave = { path = "fog/ingest/enclave" }
  mc-fog-ingest-enclave-api = { path = "fog/ingest/enclave/api", default-features = false }
  mc-fog-ingest-enclave-edl = { path = "fog/ingest/enclave/edl" }
  mc-fog-ingest-enclave-impl = { path = "fog/ingest/enclave/impl" }
  mc-fog-ingest-enclave-measurement = { path = "fog/ingest/enclave/measurement" }
  mc-fog-ingest-report = { path = "fog/ingest/report" }
  mc-fog-ingest-server = { path = "fog/ingest/server" }
  mc-fog-ingest-server-test-utils = { path = "fog/ingest/server/test-utils" }
  mc-fog-kex-rng = { path = "fog/kex_rng" }
  mc-fog-ledger-connection = { path = "fog/ledger/connection" }
  mc-fog-ledger-enclave = { path = "fog/ledger/enclave" }
  mc-fog-ledger-enclave-api = { path = "fog/ledger/enclave/api", default-features = false }
  mc-fog-ledger-enclave-edl = { path = "fog/ledger/enclave/edl" }
  mc-fog-ledger-enclave-measurement = { path = "fog/ledger/enclave/measurement" }
  mc-fog-ledger-test-infra = { path = "fog/ledger/test_infra" }
  mc-fog-ocall-oram-storage-edl = { path = "fog/ocall_oram_storage/edl" }
  mc-fog-ocall-oram-storage-trusted = { path = "fog/ocall_oram_storage/trusted" }
  mc-fog-ocall-oram-storage-untrusted = { path = "fog/ocall_oram_storage/untrusted" }
  mc-fog-recovery-db-iface = { path = "fog/recovery_db_iface", default-features = false }
  mc-fog-report-api = { path = "fog/report/api" }
  mc-fog-report-api-test-utils = { path = "fog/report/api/test-utils" }
  mc-fog-report-connection = { path = "fog/report/connection" }
  mc-fog-report-resolver = { path = "fog/report/resolver" }
  mc-fog-report-server = { path = "fog/report/server" }
  mc-fog-report-types = { path = "fog/report/types", default-features = false }
  mc-fog-report-validation = { path = "fog/report/validation" }
  mc-fog-report-validation-test-utils = { path = "fog/report/validation/test-utils" }
  mc-fog-sample-paykit = { path = "fog/sample-paykit" }
  mc-fog-sig = { path = "fog/sig", default-features = false }
  mc-fog-sig-authority = { path = "fog/sig/authority" }
  mc-fog-sig-report = { path = "fog/sig/report" }
  mc-fog-sql-recovery-db = { path = "fog/sql_recovery_db" }
  mc-fog-test-infra = { path = "fog/test_infra" }
  mc-fog-types = { path = "fog/types", default-features = false }
  mc-fog-uri = { path = "fog/uri" }
  mc-fog-view-connection = { path = "fog/view/connection" }
  mc-fog-view-enclave = { path = "fog/view/enclave" }
  mc-fog-view-enclave-api = { path = "fog/view/enclave/api" }
  mc-fog-view-enclave-edl = { path = "fog/view/enclave/edl" }
  mc-fog-view-enclave-measurement = { path = "fog/view/enclave/measurement" }
  mc-fog-view-protocol = { path = "fog/view/protocol" }
  mc-fog-view-server = { path = "fog/view/server" }
  mc-fog-view-server-test-utils = { path = "fog/view/server/test-utils" }
  mc-ledger-db = { path = "ledger/db" }
  mc-ledger-migration = { path = "ledger/migration" }
  mc-ledger-sync = { path = "ledger/sync" }
  mc-light-client-verifier = { path = "light-client/verifier" }
  mc-mobilecoind-api = { path = "mobilecoind/api" }
  mc-peers = { path = "peers" }
  mc-peers-test-utils = { path = "peers/test-utils" }
  mc-sgx-build = { path = "sgx/build" }
  mc-sgx-compat = { path = "sgx/compat", default-features = false }
  mc-sgx-css = { path = "sgx/css", default-features = false }
  mc-sgx-debug-edl = { path = "sgx/debug-edl" }
  mc-sgx-panic-edl = { path = "sgx/panic-edl" }
  mc-sgx-report-cache-api = { path = "sgx/report-cache/api" }
  mc-sgx-report-cache-untrusted = { path = "sgx/report-cache/untrusted" }
  mc-sgx-slog = { path = "sgx/slog" }
  mc-sgx-slog-edl = { path = "sgx/slog-edl" }
  mc-sgx-types = { path = "sgx/types", default-features = false }
  mc-sgx-urts = { path = "sgx/urts" }
  mc-t3-api = { path = "t3/api" }
  mc-t3-connection = { path = "t3/connection" }
  mc-test-vectors-account-keys = { path = "test-vectors/account-keys" }
  mc-test-vectors-b58-encodings = { path = "test-vectors/b58-encodings" }
  mc-test-vectors-definitions = { path = "test-vectors/definitions" }
  mc-test-vectors-tx-out-records = { path = "test-vectors/tx-out-records" }
  mc-transaction-builder = { path = "transaction/builder" }
  mc-transaction-core = { path = "transaction/core", default-features = false }
  mc-transaction-core-test-utils = { path = "transaction/core/test-utils" }
  mc-transaction-extra = { path = "transaction/extra" }
  mc-transaction-summary = { path = "transaction/summary" }
  mc-transaction-types = { path = "transaction/types", default-features = false }
  mc-util-build-enclave = { path = "util/build/enclave" }
  mc-util-build-grpc = { path = "util/build/grpc" }
  mc-util-build-info = { path = "util/build/info" }
  mc-util-build-script = { path = "util/build/script" }
  mc-util-build-sgx = { path = "util/build/sgx" }
  mc-util-cli = { path = "util/cli" }
  mc-util-encodings = { path = "util/encodings", default-features = false }
  mc-util-from-random = { path = "util/from-random", default-features = false }
  mc-util-generate-sample-ledger = { path = "util/generate-sample-ledger" }
  mc-util-grpc = { path = "util/grpc" }
  mc-util-host-cert = { path = "util/host-cert", default-features = false }
  mc-util-keyfile = { path = "util/keyfile" }
  mc-util-lmdb = { path = "util/lmdb" }
  mc-util-logger-macros = { path = "util/logger-macros" }
  mc-util-metered-channel = { path = "util/metered-channel" }
  mc-util-metrics = { path = "util/metrics" }
  mc-util-parse = { path = "util/parse" }
  mc-util-repr-bytes = { path = "util/repr-bytes", default-features = false }
  mc-util-serial = { path = "util/serial", default-features = false }
  mc-util-telemetry = { path = "util/telemetry" }
  mc-util-test-helper = { path = "util/test-helper", default-features = false }
  mc-util-test-vector = { path = "util/test-vector" }
  mc-util-test-with-data = { path = "util/test-with-data" }
  mc-util-u64-ratio = { path = "util/u64-ratio" }
  mc-util-uri = { path = "util/uri" }
  mc-util-vec-map = { path = "util/vec-map" }
  mc-util-zip-exact = { path = "util/zip-exact", default-features = false }
  mc-watcher = { path = "watcher" }
  mc-watcher-api = { path = "watcher/api" }
  
  [profile.dev]
  opt-level = 0
  rpath = true
  
  [profile.release]
  opt-level = 3
  rpath = false
  lto = false
  debug-assertions = false
  overflow-checks = false
  
  [profile.mobile]
  inherits = "release"
  debug = false
  lto = true
  
  [profile.mobile-release]
  inherits = "mobile"
  codegen-units = 1
  lto = false
  
  # Skip the need for LD_LIBRARY_PATH in `cargo test`
  [profile.test]
  rpath = true
  
  [profile.ci]
  # Build config.
  inherits = "test"
  # Enable some compiler optimizations.
  opt-level = 2
  # LLVM's Link-Time Optimization: Some, relatively quick to generate.
  lto = "thin"
  
  [patch.crates-io]
  # Fork and rename to use "OG" dalek-cryptography with latest dependencies.
  bulletproofs-og = { git = "https://github.com/mobilecoinfoundation/bulletproofs.git", rev = "9abfdc054d9ba65f1e185ea1e6eff3947ce879dc" }
  
  # mbedtls patched to allow certificate verification with a profile
  mbedtls = { git = "https://github.com/mobilecoinfoundation/rust-mbedtls.git", rev = "f82523478a1dd813ca381c190175355d249a8123" }
  mbedtls-sys-auto = { git = "https://github.com/mobilecoinfoundation/rust-mbedtls.git", rev = "f82523478a1dd813ca381c190175355d249a8123" }
  
  # Override lmdb-rkv for a necessary bugfix (see https://github.com/mozilla/lmdb-rs/pull/80)
  lmdb-rkv = { git = "https://github.com/mozilla/lmdb-rs", rev = "df1c2f5" }
  
  # Fork and rename to use "OG" dalek-cryptography.
  schnorrkel-og = { git = "https://github.com/mobilecoinfoundation/schnorrkel.git", rev = "049bf9d30f3bbe072e2ad1b5eefdf0f3c851215e" }
  
  # Fixes the following:
  # * Allow enabling `serde/std` without also requiring `serde_cbor/std` to be enabled.
  #   See: https://github.com/pyfisch/cbor/pull/198
  serde_cbor = { git = "https://github.com/mobilecoinofficial/cbor", rev = "4c886a7c1d523aae1ec4aa7386f402cb2f4341b5" }
  