[workspace]
members = [
    "../accounts-db/store-tool",
    "../banking-bench",
    "../bench-tps",
    "../dos",
    "../ledger-tool",
]

resolver = "2"

[workspace.package]
version = "4.0.0-alpha.0"
authors = ["Anza Maintainers <maintainers@anza.xyz>"]
description = "Blockchain, Rebuilt for Scale"
repository = "https://github.com/anza-xyz/agave"
homepage = "https://anza.xyz/"
license = "Apache-2.0"
edition = "2021"

[workspace.lints.rust]
warnings = "deny"

# List of rust-2024-compatibility lints that are already satisfied
# See https://doc.rust-lang.org/rustc/lints/groups.html
boxed_slice_into_iter = "deny"
dependency_on_unit_never_type_fallback = "deny"
deprecated_safe_2024 = "deny"
impl_trait_overcaptures = "deny"
missing_unsafe_on_extern = "deny"
never_type_fallback_flowing_into_unsafe = "deny"
rust_2024_guarded_string_incompatible_syntax = "deny"
rust_2024_incompatible_pat = "deny"
rust_2024_prelude_collisions = "deny"
static_mut_refs = "deny"
unsafe_attr_outside_unsafe = "deny"
unsafe_op_in_unsafe_fn = "deny"

[workspace.lints.rust.unexpected_cfgs]
level = "warn"
check-cfg = [
    'cfg(target_os, values("solana"))',
    'cfg(feature, values("frozen-abi", "no-entrypoint"))',
]

# Clippy lint configuration that can not be applied in clippy.toml
[workspace.lints.clippy]
arithmetic_side_effects = "deny"
default_trait_access = "deny"
manual_let_else = "deny"
used_underscore_binding = "deny"

[workspace.dependencies]
agave-banking-stage-ingress-types = { path = "../banking-stage-ingress-types", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-feature-set = { path = "../feature-set", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-logger = { path = "../logger", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-reserved-account-keys = { path = "../reserved-account-keys", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-snapshots = { path = "../snapshots", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-syscalls = { path = "../syscalls", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
ahash = "0.8.11"
assert_cmd = "2.0"
assert_matches = "1.5.0"
bincode = "1.3.3"
bs58 = { version = "0.5.1", default-features = false }
chrono = { version = "0.4.42", default-features = false }
clap = "2.33.1"
crossbeam-channel = "0.5.15"
csv = "1.4.0"
dashmap = "5.5.3"
futures = "0.3.31"
histogram = "0.6.9"
itertools = "0.13.0"
jemallocator = { package = "tikv-jemallocator", version = "0.6.0", features = [
    "unprefixed_malloc_on_supported_platforms",
] }
log = "0.4.28"
num_cpus = "1.17.0"
pretty-hex = "0.3.0"
rand = "0.8.5"
rayon = "1.11.0"
regex = "1.12.2"
serde = { version = "1.0.228", features = ["derive"] }
serde_bytes = "0.11.19"
serde_json = "1.0.145"
serde_yaml = "0.9.34"
serial_test = "2.0.0"
signal-hook = "0.3.18"
solana-account = "3.2.0"
solana-account-decoder = { path = "../account-decoder", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-accounts-db = { path = "../accounts-db", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-bench-tps = { path = "../bench-tps", version = "=4.0.0-alpha.0" }
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-clap-utils = { path = "../clap-utils", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-cli-config = { path = "../cli-config", version = "=4.0.0-alpha.0" }
solana-cli-output = { path = "../cli-output", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-client = { path = "../client", version = "=4.0.0-alpha.0" }
solana-clock = "3.0.0"
solana-cluster-type = "3.0.0"
solana-commitment-config = "3.0.0"
solana-compute-budget = { path = "../compute-budget", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-compute-budget-interface = "3.0.0"
solana-connection-cache = { path = "../connection-cache", version = "=4.0.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
solana-core = { path = "../core", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-cost-model = { path = "../cost-model", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-entry = { path = "../entry", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-faucet = { path = "../faucet", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-feature-gate-interface = "3.0.0"
solana-fee-calculator = "3.0.0"
solana-genesis = { path = "../genesis", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-genesis-config = "3.0.0"
solana-genesis-utils = { path = "../genesis-utils", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-gossip = { path = "../gossip", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-hash = "3.0.0"
solana-inflation = "3.0.0"
solana-instruction = "3.0.0"
solana-keypair = "3.0.1"
solana-ledger = { path = "../ledger", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-loader-v3-interface = "6.1.0"
solana-local-cluster = { path = "../local-cluster", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-measure = { path = "../measure", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-message = "3.0.1"
solana-metrics = { path = "../metrics", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-native-token = "3.0.0"
solana-net-utils = { path = "../net-utils", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-nonce = "3.0.0"
solana-perf = { path = "../perf", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-poh = { path = "../poh", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-program-runtime = { path = "../program-runtime", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-pubkey = { version = "3.0.0", default-features = false }
solana-quic-client = { path = "../quic-client", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-rent = "3.0.0"
solana-rpc = { path = "../rpc", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-rpc-client = { path = "../rpc-client", version = "=4.0.0-alpha.0", default-features = false }
solana-rpc-client-api = { path = "../rpc-client-api", version = "=4.0.0-alpha.0" }
solana-rpc-client-nonce-utils = { path = "../rpc-client-nonce-utils", version = "=4.0.0-alpha.0" }
solana-runtime = { path = "../runtime", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-runtime-transaction = { path = "../runtime-transaction", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-sbpf = { version = "=0.13.1", default-features = false }
solana-sdk-ids = "3.0.0"
solana-shred-version = "3.0.0"
solana-signature = { version = "3.1.0", default-features = false }
solana-signer = "3.0.0"
solana-stake-interface = { version = "2.0.1" }
solana-storage-bigtable = { path = "../storage-bigtable", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-streamer = { path = "../streamer", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-svm-callback = { path = "../svm-callback", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-svm-feature-set = { path = "../svm-feature-set", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-svm-log-collector = { path = "../svm-log-collector", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-svm-type-overrides = { path = "../svm-type-overrides", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-system-interface = "2.0"
solana-system-transaction = "3.0.0"
solana-test-validator = { path = "../test-validator", version = "=4.0.0-alpha.0" }
solana-time-utils = "3.0.0"
solana-tps-client = { path = "../tps-client", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-tpu-client = { path = "../tpu-client", version = "=4.0.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
solana-transaction = "3.0.1"
solana-transaction-context = { path = "../transaction-context", version = "=4.0.0-alpha.0", features = ["agave-unstable-api", "bincode"] }
solana-transaction-status = { path = "../transaction-status", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-unified-scheduler-pool = { path = "../unified-scheduler-pool", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-version = { path = "../version", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-vote = { path = "../vote", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-vote-program = { path = "../programs/vote", version = "=4.0.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
tempfile = "3.23.0"
thiserror = "2.0.17"
tokio = "1.48.0"

[profile.release-with-debug]
inherits = "release"
debug = true
strip = false
split-debuginfo = "off"

[profile.release]
split-debuginfo = "unpacked"
lto = "thin"

[profile.release-with-lto]
inherits = "release"
lto = "fat"
codegen-units = 1

# curve25519-dalek uses the simd backend by default in v4 if possible,
# which has very slow performance on some platforms with opt-level 0,
# which is the default for dev and test builds.
# This slowdown causes certain interactions in the solana-test-validator,
# such as verifying ZK proofs in transactions, to take much more than 400ms,
# creating problems in the testing environment.
# To enable better performance in solana-test-validator during tests and dev builds,
# we override the opt-level to 3 for the crate.
[profile.dev.package.curve25519-dalek]
opt-level = 3

[patch.crates-io]
# We include the following crates as our dependencies above from crates.io:
#
#  * spl-associated-token-account-interface
#  * spl-instruction-padding
#  * spl-memo-interface
#  * spl-pod
#  * spl-token
#  * spl-token-2022-interface
#  * spl-token-metadata-interface
#
# They, in turn, depend on a number of crates that we also include directly
# using `path` specifications.  For example, `spl-token` depends on
# `solana-program`.  And we explicitly specify `solana-program` above as a local
# path dependency:
#
#     solana-program = { path = "../../../sdk/program", version = "=1.16.0" }
#
# Unfortunately, Cargo will try to resolve the `spl-token` `solana-program`
# dependency only using what is available on crates.io.  Crates.io normally
# contains a previous version of these crates, and we end up with two versions
# of `solana-program` and `solana-zk-token-sdk` and all of their dependencies in
# our build tree.
#
# If you are developing downstream using non-crates-io solana-program (local or
# forked repo, or from github rev, eg), duplicate the following patch statements
# in your Cargo.toml. If you still hit duplicate-type errors with the patch
# statements in place, run `cargo update -p solana-program` and/or `cargo update
# -p solana-zk-token-sdk` to remove extraneous versions from your Cargo.lock
# file.
#
# There is a similar override in `programs/sbf/Cargo.toml`.  Please keep both
# comments and the overrides in sync.
solana-curve25519 = { path = "../curves/curve25519" }
