[workspace]
members = [
    "account-decoder",
    "account-decoder-client-types",
    "accounts-cluster-bench",
    "accounts-db",
    "accounts-db/store-histogram",
    "banking-stage-ingress-types",
    "banks-client",
    "banks-interface",
    "banks-server",
    "bench-streamer",
    "bench-vote",
    "bloom",
    "bucket_map",
    "builtins",
    "builtins-default-costs",
    "cargo-registry",
    "clap-utils",
    "clap-v3-utils",
    "cli",
    "cli-config",
    "cli-output",
    "client",
    "client-test",
    "compute-budget",
    "compute-budget-instruction",
    "connection-cache",
    "core",
    "cost-model",
    "curves/curve25519",
    "download-utils",
    "entry",
    "faucet",
    "feature-set",
    "fee",
    "fs",
    "genesis",
    "genesis-utils",
    "geyser-plugin-interface",
    "geyser-plugin-manager",
    "gossip",
    "gossip-bin",
    "install",
    "io-uring",
    "keygen",
    "lattice-hash",
    "ledger",
    "local-cluster",
    "logger",
    "measure",
    "merkle-tree",
    "metrics",
    "net-utils",
    "notifier",
    "perf",
    "platform-tools-sdk/cargo-build-sbf",
    "platform-tools-sdk/cargo-test-sbf",
    "platform-tools-sdk/gen-headers",
    "poh",
    "poh-bench",
    "poseidon",
    "precompiles",
    "program-binaries",
    "program-runtime",
    "program-test",
    "programs/bpf-loader-tests",
    "programs/bpf_loader",
    "programs/compute-budget",
    "programs/compute-budget-bench",
    "programs/ed25519-tests",
    "programs/loader-v4",
    "programs/system",
    "programs/vote",
    "programs/zk-elgamal-proof",
    "programs/zk-elgamal-proof-tests",
    "programs/zk-token-proof",
    "pubsub-client",
    "quic-client",
    "rayon-threadlimit",
    "rbpf-cli",
    "remote-wallet",
    "reserved-account-keys",
    "rpc",
    "rpc-client",
    "rpc-client-api",
    "rpc-client-nonce-utils",
    "rpc-client-types",
    "rpc-test",
    "runtime",
    "runtime-transaction",
    "scheduler-bindings",
    "scheduling-utils",
    "send-transaction-service",
    "snapshots",
    "stake-accounts",
    "storage-bigtable",
    "storage-bigtable/build-proto",
    "storage-proto",
    "streamer",
    "svm",
    "svm-callback",
    "svm-feature-set",
    "svm-log-collector",
    "svm-measure",
    "svm-test-harness",
    "svm-timings",
    "svm-transaction",
    "svm-type-overrides",
    "syscalls",
    "syscalls/gen-syscall-list",
    "test-validator",
    "thread-manager",
    "tls-utils",
    "tokens",
    "tps-client",
    "tpu-client",
    "tpu-client-next",
    "transaction-context",
    "transaction-dos",
    "transaction-metrics-tracker",
    "transaction-status",
    "transaction-status-client-types",
    "transaction-view",
    "turbine",
    "udp-client",
    "unified-scheduler-logic",
    "unified-scheduler-pool",
    "validator",
    "verified-packet-receiver",
    "version",
    "vortexor",
    "vote",
    "votor",
    "votor-messages",
    "watchtower",
    "wen-restart",
    "xdp",
    "xdp-ebpf",
    "zk-token-sdk",
]

exclude = [
    # solana-dos depends on bench-tps. ignore bench-tps here to avoid confusing cargo's
    # workspace resolution logic, which expects it in the top-level worspace rather than
    # dev-bins
    "bench-tps",
    "ci/xtask",
    "dev-bins",
    "programs/sbf",
    "svm/tests/example-programs",
]

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]
Inflector = "0.11.4"
aes-gcm-siv = "0.11.1"
agave-banking-stage-ingress-types = { path = "banking-stage-ingress-types", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-cargo-registry = { path = "cargo-registry", version = "=4.0.0-alpha.0" }
agave-feature-set = { path = "feature-set", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-fs = { path = "fs", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-geyser-plugin-interface = { path = "geyser-plugin-interface", version = "=4.0.0-alpha.0" }
agave-io-uring = { path = "io-uring", 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-precompiles = { path = "precompiles", 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-scheduler-bindings = { path = "scheduler-bindings", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-scheduling-utils = { path = "scheduling-utils", 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"] }
agave-thread-manager = { path = "thread-manager", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-transaction-view = { path = "transaction-view", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-verified-packet-receiver = { path = "verified-packet-receiver", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-votor = { path = "votor", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-votor-messages = { path = "votor-messages", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-xdp = { path = "xdp", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
agave-xdp-ebpf = { path = "xdp-ebpf", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
ahash = "0.8.11"
anyhow = "1.0.100"
aquamarine = "0.6.0"
arbitrary = "1.4.2"
arc-swap = "1.7.1"
ark-bn254 = "0.5.0"
ark-bn254-0-4 = { package = "ark-bn254", version = "0.4.0" }
array-bytes = "=1.4.1"
arrayref = "0.3.9"
arrayvec = "0.7.6"
assert_cmd = "2.0"
assert_matches = "1.5.0"
async-lock = "3.4.1"
async-trait = "0.1.89"
atty = "0.2.11"
axum = "0.8.6"
aya = "0.13"
aya-ebpf = "0.1.1"
backoff = "0.4.0"
base64 = "0.22.1"
bencher = "0.1.5"
bincode = "1.3.3"
bitflags = { version = "2.10.0" }
bitvec = { version = "1.0.1", features = ["serde"] }
blake3 = "1.8.2"
borsh = { version = "1.5.7", features = ["derive", "unstable__schema"] }
bs58 = { version = "0.5.1", default-features = false }
bv = "0.11.1"
byte-unit = "4.0.19"
bytemuck = "1.24.0"
bytemuck_derive = "1.10.2"
bytes = "1.10"
bzip2 = "0.4.4"
caps = "0.5.5"
cargo_metadata = "0.15.4"
cfg-if = "1.0.4"
cfg_eval = "0.1.2"
chrono = { version = "0.4.42", default-features = false }
chrono-humanize = "0.2.3"
clap = "2.33.1"
console = "0.16.1"
console_error_panic_hook = "0.1.7"
console_log = "0.2.2"
const_format = "0.2.35"
core_affinity = "0.5.10"
criterion = "0.5.1"
criterion-stats = "0.3.0"
crossbeam-channel = "0.5.15"
csv = "1.4.0"
ctrlc = "3.5.0"
curve25519-dalek = { version = "4.1.3", features = ["digest", "rand_core"] }
dashmap = "5.5.3"
derivation-path = { version = "0.2.0", default-features = false }
derive-where = "1.6.0"
derive_more = { version = "2.0.1", features = ["full"] }
dialoguer = "0.12.0"
digest = "0.10.7"
dir-diff = "0.3.3"
dirs-next = "2.0.0"
dlopen2 = "0.8.0"
dyn-clone = "1.0.20"
eager = "0.1.0"
ed25519-dalek = "=1.0.1"
ed25519-dalek-bip32 = "0.2.0"
enum-iterator = "2.3.0"
env_logger = "0.11.8"
fast-math = "0.1"
fd-lock = "3.0.13"
five8_const = "0.1.4"
flate2 = "1.0.31"
fnv = "1.0.7"
fs_extra = "1.3.0"
futures = "0.3.31"
futures-util = "0.3.29"
gag = "1.0.0"
gethostname = "0.2.3"
getrandom = "0.3.4"
goauth = "0.13.1"
governor = "0.6.3"
hex = "0.4.3"
hidapi = { version = "2.6.3", default-features = false }
histogram = "0.6.9"
hmac = "0.12.1"
http = "0.2.12"
humantime = "2.3.0"
hyper = "0.14.32"
hyper-proxy = "0.9.1"
im = "15.1.0"
indexmap = "2.11.4"
indicatif = "0.18.2"
io-uring = "0.7.11"
itertools = "0.13.0"
jemallocator = { package = "tikv-jemallocator", version = "0.6.0", features = [
    "unprefixed_malloc_on_supported_platforms",
] }
js-sys = "0.3.81"
json5 = "0.4.1"
jsonrpc-core = "18.0.0"
jsonrpc-core-client = "18.0.0"
jsonrpc-derive = "18.0.0"
jsonrpc-http-server = "18.0.0"
jsonrpc-ipc-server = "18.0.0"
jsonrpc-pubsub = "18.0.0"
lazy-lru = "0.1.3"
libc = "0.2.177"
libloading = "0.7.4"
libsecp256k1 = { version = "0.6.0", default-features = false, features = [
    "std",
    "static-context",
] }
light-poseidon = "0.4.0"
light-poseidon-0-2 = { package = "light-poseidon", version = "0.2.0" }
log = "0.4.28"
lru = "0.7.7"
lz4 = "1.28.1"
memmap2 = "0.9.8"
memoffset = "0.9"
merlin = { version = "3", default-features = false }
min-max-heap = "1.3.0"
mockall = "0.13.1"
modular-bitfield = "0.13.0"
nix = "0.30.1"
num-bigint = "0.4.6"
num-derive = "0.4"
num-traits = "0.2"
num_cpus = "1.17.0"
num_enum = "0.7.4"
openssl = "0.10"
parking_lot = "0.12"
pbkdf2 = { version = "0.12.2", default-features = false }
pem = "1.1.1"
percentage = "0.1.0"
pickledb = { version = "0.5.1", default-features = false }
predicates = "3.1"
pretty-hex = "0.3.0"
pretty_assertions = "1.4.1"
prio-graph = "0.3.0"
proc-macro2 = "1.0.97"
proptest = "1.9"
prost = "0.11.9"
prost-build = "0.11.9"
prost-types = "0.11.9"
protobuf-src = "1.1.0"
protosol = "2.0.0"
qstring = "0.7.2"
qualifier_attr = { version = "0.2.2", default-features = false }
quinn = "0.11.9"
quinn-proto = "0.11.13"
quote = "1.0"
rand = "0.8.5"
rand0-7 = { package = "rand", version = "0.7" }
rand_chacha = "0.3.1"
rand_chacha0-2 = { package = "rand_chacha", version = "0.2.2" }
rayon = "1.11.0"
reed-solomon-erasure = "6.0.0"
regex = "1.12.2"
reqwest = { version = "0.12.24", default-features = false }
reqwest-middleware = "0.4.2"
rolling-file = "0.2.0"
rpassword = "7.4"
rts-alloc = { version = "1.0.0" }
rustls = { version = "0.23.34", features = ["std"], default-features = false }
scopeguard = "1.2.0"
semver = "1.0.27"
seqlock = "0.2.0"
serde = { version = "1.0.228", features = ["derive"] }
serde-big-array = "0.5.1"
serde_bytes = "0.11.19"
serde_json = "1.0.145"
serde_with = { version = "3.15.1", default-features = false }
serde_yaml = "0.9.34"
serial_test = "3.2.0"
sha2 = "0.10.9"
sha3 = "0.10.8"
shaq = { version = "1.0.0" }
shuttle = "0.7.1"
signal-hook = "0.3.18"
siphasher = "1.0.1"
slab = "0.4.11"
smallvec = { version = "1.15.1", default-features = false, features = ["union"] }
smpl_jwt = "0.7.1"
socket2 = "0.6.1"
soketto = "0.8"
solana-account = "3.2.0"
solana-account-decoder = { path = "account-decoder", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-account-decoder-client-types = { path = "account-decoder-client-types", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-account-info = "3.0.0"
solana-accounts-db = { path = "accounts-db", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-address = "1.0.0"
solana-address-lookup-table-interface = "3.0.0"
solana-atomic-u64 = "3.0.0"
solana-banks-client = { path = "banks-client", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-banks-interface = { path = "banks-interface", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-banks-server = { path = "banks-server", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-big-mod-exp = "3.0.0"
solana-bincode = "3.0.0"
solana-blake3-hasher = "3.0.0"
solana-bloom = { path = "bloom", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-bls-signatures = { version = "1.0.0", features = ["serde"] }
solana-bn254 = "3.1.2"
solana-borsh = "3.0.0"
solana-bpf-loader-program = { path = "programs/bpf_loader", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-bucket-map = { path = "bucket_map", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-builtins = { path = "builtins", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-builtins-default-costs = { path = "builtins-default-costs", 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-clap-v3-utils = { path = "clap-v3-utils", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-cli = { path = "cli", version = "=4.0.0-alpha.0" }
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-client-traits = "3.0.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-instruction = { path = "compute-budget-instruction", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-compute-budget-interface = "3.0.0"
solana-compute-budget-program = { path = "programs/compute-budget", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-config-interface = "2.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-cpi = "3.0.0"
solana-curve25519 = { path = "curves/curve25519", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-define-syscall = "3.0.0"
solana-derivation-path = "3.0.0"
solana-download-utils = { path = "download-utils", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-ed25519-program = "3.0.0"
solana-entry = { path = "entry", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-epoch-info = "3.0.0"
solana-epoch-rewards = "3.0.0"
solana-epoch-rewards-hasher = "3.0.0"
solana-epoch-schedule = "3.0.0"
solana-example-mocks = "3.0.0"
solana-faucet = { path = "faucet", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-feature-gate-interface = "3.0.0"
solana-fee = { path = "fee", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-fee-calculator = "3.0.0"
solana-fee-structure = "3.0.0"
solana-file-download = "3.1.0"
solana-frozen-abi = "3.0.1"
solana-frozen-abi-macro = "3.0.1"
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-hard-forks = "3.0.0"
solana-hash = "3.0.0"
solana-inflation = "3.0.0"
solana-instruction = "3.0.0"
solana-instruction-error = "2.0.0"
solana-instructions-sysvar = "3.0.0"
solana-keccak-hasher = "3.0.0"
solana-keypair = "3.0.1"
solana-last-restart-slot = "3.0.0"
solana-lattice-hash = { path = "lattice-hash", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-ledger = { path = "ledger", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-loader-v2-interface = "3.0.0"
solana-loader-v3-interface = "6.1.0"
solana-loader-v4-interface = "3.1.0"
solana-loader-v4-program = { path = "programs/loader-v4", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
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-merkle-tree = { path = "merkle-tree", 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-msg = "3.0.0"
solana-native-token = "3.0.0"
solana-net-utils = { path = "net-utils", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-nohash-hasher = "0.2.1"
solana-nonce = "3.0.0"
solana-nonce-account = "3.0.0"
solana-notifier = { path = "notifier", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-offchain-message = "3.0.0"
solana-packet = "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-poh-config = "3.0.0"
solana-poseidon = { path = "poseidon", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-precompile-error = "3.0.0"
solana-presigner = "3.0.0"
solana-program = { version = "3.0.0", default-features = false }
solana-program-binaries = { path = "program-binaries", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-program-entrypoint = "3.1.0"
solana-program-error = "3.0.0"
solana-program-memory = "3.0.0"
solana-program-option = "3.0.0"
solana-program-pack = "3.0.0"
solana-program-runtime = { path = "program-runtime", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-program-test = { path = "program-test", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-pubkey = { version = "3.0.0", default-features = false }
solana-pubsub-client = { path = "pubsub-client", version = "=4.0.0-alpha.0" }
solana-quic-client = { path = "quic-client", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-quic-definitions = "3.0.0"
solana-rayon-threadlimit = { path = "rayon-threadlimit", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-remote-wallet = { path = "remote-wallet", version = "=4.0.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
solana-rent = "3.0.0"
solana-reward-info = "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-rpc-client-types = { path = "rpc-client-types", 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-sanitize = "3.0.1"
solana-sbpf = { version = "=0.13.1", default-features = false }
solana-sdk-ids = "3.0.0"
solana-secp256k1-program = "3.0.0"
solana-secp256k1-recover = "3.0.0"
solana-secp256r1-program = "3.0.0"
solana-seed-derivable = "3.0.0"
solana-seed-phrase = "3.0.0"
solana-send-transaction-service = { path = "send-transaction-service", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-serde = "3.0.0"
solana-serde-varint = "3.0.0"
solana-serialize-utils = "3.1.0"
solana-sha256-hasher = "3.0.1"
solana-short-vec = "3.0.0"
solana-shred-version = "3.0.0"
solana-signature = { version = "3.1.0", default-features = false }
solana-signer = "3.0.0"
solana-signer-store = "0.1.0"
solana-slot-hashes = "3.0.0"
solana-slot-history = "3.0.0"
solana-stable-layout = "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-storage-proto = { path = "storage-proto", 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 = { path = "svm", 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-measure = { path = "svm-measure", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-svm-test-harness = { path = "svm-test-harness", version = "=4.0.0-alpha.0" }
solana-svm-timings = { path = "svm-timings", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-svm-transaction = { path = "svm-transaction", 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-program = { path = "programs/system", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-system-transaction = "3.0.0"
solana-sysvar = "3.0.0"
solana-sysvar-id = "3.0.0"
solana-test-validator = { path = "test-validator", version = "=4.0.0-alpha.0" }
solana-time-utils = "3.0.0"
solana-tls-utils = { path = "tls-utils", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
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-tpu-client-next = { path = "tpu-client-next", version = "=4.0.0-alpha.0", 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-error = "3.0.0"
solana-transaction-metrics-tracker = { path = "transaction-metrics-tracker", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-transaction-status = { path = "transaction-status", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-transaction-status-client-types = { path = "transaction-status-client-types", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-turbine = { path = "turbine", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-udp-client = { path = "udp-client", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-unified-scheduler-logic = { path = "unified-scheduler-logic", 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-validator-exit = "3.0.0"
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-interface = "4.0.4"
solana-vote-program = { path = "programs/vote", version = "=4.0.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
solana-wen-restart = { path = "wen-restart", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-zk-elgamal-proof-program = { path = "programs/zk-elgamal-proof", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-zk-sdk = "4.0.0"
solana-zk-token-proof-program = { path = "programs/zk-token-proof", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-zk-token-sdk = { path = "zk-token-sdk", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
spl-associated-token-account-interface = "2.0.0"
spl-generic-token = "2.0.0"
spl-memo-interface = "2.0.0"
spl-pod = "0.7.0"
spl-token-2022-interface = "2.1.0"
spl-token-confidential-transfer-proof-extraction = "0.5.0"
spl-token-group-interface = "0.7.0"
spl-token-interface = "2.0.0"
spl-token-metadata-interface = "0.8.0"
static_assertions = "1.1.0"
stream-cancel = "0.8.2"
strum = "0.24"
strum_macros = "0.24"
subtle = "2.6.1"
symlink = "0.1.0"
syn = "2.0"
sys-info = "0.9.1"
sysctl = "0.7.1"
systemstat = "0.2.5"
tar = "0.4.44"
tarpc = "0.29.0"
tempfile = "3.23.0"
test-case = "3.3.1"
thiserror = "2.0.17"
thread-priority = "3.0.0"
tiny-bip39 = "2.0.0"
tokio = "1.48.0"
tokio-serde = "0.8"
tokio-stream = "0.1.17"
tokio-tungstenite = "0.28.0"
tokio-util = "0.7.17"
toml = "0.9.8"
tonic = "0.9.2"
tonic-build = "0.9.2"
tower = "0.5.2"
tracing = "0.1"
trait-set = "0.3.0"
trees = "0.4.2"
tungstenite = "0.28.0"
unwrap_none = "0.1.2"
uriparse = "0.6.4"
url = "2.5.7"
vec_extract_if_polyfill = "0.1.0"
wasm-bindgen = "0.2"
winapi = "0.3.8"
wincode = { version = "0.1.2", features = ["derive", "solana-short-vec"] }
winreg = "0.55"
x509-parser = "0.14.0"
zeroize = { version = "1.8", default-features = false }
zstd = "0.13.3"

[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]
# for details, see https://github.com/anza-xyz/crossbeam/commit/fd279d707025f0e60951e429bf778b4813d1b6bf
crossbeam-epoch = { git = "https://github.com/anza-xyz/crossbeam", rev = "fd279d707025f0e60951e429bf778b4813d1b6bf" }

# 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" }
