diff --git a/.github/actions/setup-rust/action.yml b/.github/actions/setup-rust/action.yml index 8a633a30..10901d40 100644 --- a/.github/actions/setup-rust/action.yml +++ b/.github/actions/setup-rust/action.yml @@ -5,7 +5,7 @@ runs: steps: # Install essential system packages required for building Rust projects - name: Install system packages - run: sudo apt-get update && sudo apt-get install -y build-essential libudev-dev # Installs essential packages like GCC and libudev development headers + run: sudo apt-get update && sudo apt-get install -y build-essential libudev-dev protobuf-compiler libprotobuf-dev # Installs essential packages like GCC and libudev development headers shell: bash # Install Rust nightly toolchain and additional components diff --git a/.github/workflows/fuzz.yml b/.github/workflows/fuzz.yml index 6c92169b..b39a534b 100644 --- a/.github/workflows/fuzz.yml +++ b/.github/workflows/fuzz.yml @@ -143,12 +143,12 @@ jobs: - name: Cache Target Folder uses: actions/cache@v3 with: - path: examples/fuzz-tests/cpi-metaplex-7/trident-tests/fuzzing/honggfuzz/hfuzz_target # Cache the folder where build artifacts are stored + path: examples/cpi/cpi-metaplex-7/trident-tests/fuzzing/honggfuzz/hfuzz_target # Cache the folder where build artifacts are stored key: target-${{ runner.os }}-cpi-metaplex-7 # Unique key for caching based on OS and test # Run the fuzzing test using Trident in the cpi-metaplex-7 directory - name: Test Fuzz - working-directory: examples/fuzz-tests/cpi-metaplex-7 # Set the working directory for the fuzzing test + working-directory: examples/cpi/cpi-metaplex-7/trident-tests # Set the working directory for the fuzzing test run: trident fuzz run-hfuzz fuzz_0 # Run the fuzz test with trident checks: diff --git a/Cargo.lock b/Cargo.lock index c842e750..08ed0880 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -442,7 +442,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -527,7 +527,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -641,7 +641,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -936,7 +936,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -947,7 +947,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -975,7 +975,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -1033,7 +1033,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -1115,7 +1115,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -1659,7 +1659,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -1785,7 +1785,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2026,7 +2026,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2088,7 +2088,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2340,7 +2340,7 @@ checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2624,7 +2624,7 @@ checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2672,7 +2672,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2727,7 +2727,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3120,7 +3120,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3302,9 +3302,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.93" +version = "2.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058" +checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3" dependencies = [ "proc-macro2", "quote", @@ -3325,7 +3325,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3415,7 +3415,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3469,7 +3469,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3588,9 +3588,10 @@ dependencies = [ "pathdiff", "pretty_assertions", "quote", + "rand 0.8.5", "serde", "serde_json", - "syn 2.0.93", + "syn 2.0.94", "thiserror", "tokio", "toml 0.8.19", @@ -3668,11 +3669,11 @@ dependencies = [ [[package]] name = "trident-idl-spec" version = "0.0.1" -source = "git+https://github.com/Ackee-Blockchain/trident-idl-spec#05267d45bf891244bf84aa07ef23015dc3285340" +source = "git+https://github.com/Ackee-Blockchain/trident-idl-spec#58d361e1b1de6148a75c5d83fdd224053ecce859" dependencies = [ "quote", "serde", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3835,7 +3836,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", "wasm-bindgen-shared", ] @@ -3870,7 +3871,7 @@ checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4160,7 +4161,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", "synstructure", ] @@ -4182,7 +4183,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -4202,7 +4203,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", "synstructure", ] @@ -4223,7 +4224,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -4245,5 +4246,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] diff --git a/crates/client/Cargo.toml b/crates/client/Cargo.toml index 1bf0f3a7..71357d28 100644 --- a/crates/client/Cargo.toml +++ b/crates/client/Cargo.toml @@ -12,8 +12,8 @@ description = "The trident_client crate helps you build and deploy an Anchor pro # Trident trident-fuzz = { path = "../fuzz", version = "0.2.1" } -trident-idl-spec = { git = "https://github.com/Ackee-Blockchain/trident-idl-spec", version = "0.0.1" } trident-config = { path = "../config", version = "0.0.1" } +trident-idl-spec = { git = "https://github.com/Ackee-Blockchain/trident-idl-spec", version = "0.0.1" } # Misc tokio = { version = "1", features = ["full"] } @@ -29,6 +29,7 @@ quote = "1" toml = { version = "0.8", features = ["preserve_order"] } convert_case = "0.6" pathdiff = "0.2" +rand = "0.8" [dev-dependencies] diff --git a/crates/client/src/commander/afl.rs b/crates/client/src/commander/afl.rs index 96dd72b2..52bc3bc3 100644 --- a/crates/client/src/commander/afl.rs +++ b/crates/client/src/commander/afl.rs @@ -9,6 +9,7 @@ use trident_config::afl::AflSeed; use trident_config::Config; use super::{Commander, Error}; +use rand::RngCore; impl Commander { /// Runs fuzzer on the given target. @@ -16,13 +17,20 @@ impl Commander { pub async fn run_afl(&self, target: String) { let config = Config::new(); + // build args without cargo target dir let build_args = config.get_afl_build_args(); + // fuzz args without afl workspace in and out let fuzz_args = config.get_afl_fuzz_args(); - let mut target_path = config.get_afl_target_path(); - target_path.push_str(&target); + // cargo target directory + let cargo_target_dir = config.get_afl_target_dir(); + // afl workspace in and out let afl_workspace_in = config.get_afl_workspace_in(); + let afl_workspace_out = config.get_afl_workspace_out(); + + let full_target_path = config.get_afl_target_path(&target); + let afl_workspace_in_path = Path::new(&afl_workspace_in); let initial_seeds = config.get_initial_seed(); @@ -30,11 +38,11 @@ impl Commander { std::fs::create_dir_all(afl_workspace_in_path)?; for x in initial_seeds { - create_seed_file(afl_workspace_in_path, x)?; + create_seed_file(afl_workspace_in_path, &x)?; } } else if afl_workspace_in_path.is_dir() { for x in initial_seeds { - create_seed_file(afl_workspace_in_path, x)?; + create_seed_file(afl_workspace_in_path, &x)?; } } else { throw!(Error::BadAFLWorkspace) @@ -48,6 +56,7 @@ impl Commander { .env("RUSTFLAGS", rustflags) .arg("afl") .arg("build") + .args(["--target-dir", &cargo_target_dir]) .args(build_args) .args(["--bin", &target]) .spawn()?; @@ -56,8 +65,10 @@ impl Commander { let mut child = Command::new("cargo") .arg("afl") .arg("fuzz") + .args(["-i", &afl_workspace_in]) + .args(["-o", &afl_workspace_out]) .args(fuzz_args) - .arg(&target_path) + .arg(&full_target_path) .spawn()?; Self::handle_child(&mut child).await?; @@ -65,17 +76,17 @@ impl Commander { /// Runs fuzzer on the given target. #[throws] - pub async fn run_afl_debug(&self, target: String, crash_file_path: String) { + pub async fn run_afl_debug(&self, target: String, crash_file: String) { let config = Config::new(); - let crash_file = Path::new(&crash_file_path); + let crash_file_path = Path::new(&crash_file); - let crash_file = if crash_file.is_absolute() { - crash_file + let crash_file = if crash_file_path.is_absolute() { + crash_file_path } else { let cwd = std::env::current_dir()?; - &cwd.join(crash_file) + &cwd.join(crash_file_path) }; if !crash_file.try_exists()? { @@ -83,7 +94,8 @@ impl Commander { throw!(Error::CrashFileNotFound); } - let cargo_target_dir = config.get_afl_cargo_build_dir(); + // cargo target directory + let cargo_target_dir = config.get_afl_target_dir(); let mut rustflags = std::env::var("RUSTFLAGS").unwrap_or_default(); @@ -111,17 +123,52 @@ impl Commander { } fn create_seed_file(path: &Path, seed: &AflSeed) -> std::io::Result<()> { + let (bytes, override_file) = obtain_seed(seed); + let file_path = path.join(&seed.file_name); if file_path.exists() { - if seed.override_file { + if override_file { let mut file = File::create(file_path)?; - file.write_all(&seed.seed)?; + file.write_all(&bytes)?; } } else { let mut file = File::create(file_path)?; - file.write_all(&seed.seed)?; + file.write_all(&bytes)?; } Ok(()) } + +fn obtain_seed(value: &AflSeed) -> (Vec, bool) { + match value.bytes_count { + Some(number_of_random_bytes) => { + if number_of_random_bytes > 0 { + let mut rng = rand::rngs::OsRng; + let mut seed = vec![0u8; number_of_random_bytes]; + rng.fill_bytes(&mut seed); + (seed, value.override_file.unwrap_or_default()) + } else { + let seed_as_bytes = value + .seed + .clone() + .unwrap_or_else(|| panic!("Seed value is empty for seed {}", value.file_name)); + + ( + seed_as_bytes.as_bytes().to_vec(), + value.override_file.unwrap_or_default(), + ) + } + } + None => { + let seed_as_bytes = value + .seed + .clone() + .unwrap_or_else(|| panic!("Seed value is empty for seed {}", value.file_name)); + ( + seed_as_bytes.as_bytes().to_vec(), + value.override_file.unwrap_or_default(), + ) + } + } +} diff --git a/crates/client/src/commander/honggfuzz.rs b/crates/client/src/commander/honggfuzz.rs index ece951f6..24e2f231 100644 --- a/crates/client/src/commander/honggfuzz.rs +++ b/crates/client/src/commander/honggfuzz.rs @@ -4,7 +4,6 @@ use std::process; use std::{os::unix::process::CommandExt, process::Stdio}; use tokio::process::Command; -use trident_config::honggfuzz::EnvVariable; use trident_config::Config; use crate::constants::*; @@ -27,11 +26,11 @@ impl Commander { let mut fuzz_args = config.get_honggfuzz_args(hfuzz_run_args); - let cargo_target_dir = std::env::var("CARGO_TARGET_DIR") - .unwrap_or_else(|_| config.get_env_arg(&EnvVariable::CargoTargetDir)); + let cargo_target_dir = + std::env::var("CARGO_TARGET_DIR").unwrap_or_else(|_| config.get_honggfuzz_target_dir()); - let hfuzz_workspace = std::env::var("HFUZZ_WORKSPACE") - .unwrap_or_else(|_| config.get_env_arg(&EnvVariable::HfuzzWorkspace)); + let hfuzz_workspace = + std::env::var("HFUZZ_WORKSPACE").unwrap_or_else(|_| config.get_honggfuzz_workspace()); let (crash_dir, ext) = get_crash_dir_and_ext(&self.root, &target, &fuzz_args, &hfuzz_workspace); @@ -91,10 +90,10 @@ impl Commander { let hfuzz_run_args = std::env::var("HFUZZ_RUN_ARGS").unwrap_or_default(); - let cargo_target_dir = std::env::var("CARGO_TARGET_DIR") - .unwrap_or_else(|_| config.get_env_arg(&EnvVariable::CargoTargetDir)); - let hfuzz_workspace = std::env::var("HFUZZ_WORKSPACE") - .unwrap_or_else(|_| config.get_env_arg(&EnvVariable::HfuzzWorkspace)); + let cargo_target_dir = + std::env::var("CARGO_TARGET_DIR").unwrap_or_else(|_| config.get_honggfuzz_target_dir()); + let hfuzz_workspace = + std::env::var("HFUZZ_WORKSPACE").unwrap_or_else(|_| config.get_honggfuzz_workspace()); let mut fuzz_args = config.get_honggfuzz_args(hfuzz_run_args); @@ -152,8 +151,8 @@ impl Commander { throw!(Error::CrashFileNotFound); } - let cargo_target_dir = std::env::var("CARGO_TARGET_DIR") - .unwrap_or_else(|_| config.get_env_arg(&EnvVariable::CargoTargetDir)); + let cargo_target_dir = + std::env::var("CARGO_TARGET_DIR").unwrap_or_else(|_| config.get_honggfuzz_target_dir()); let mut rustflags = std::env::var("RUSTFLAGS").unwrap_or_default(); diff --git a/crates/client/src/lib.rs b/crates/client/src/lib.rs index 9b5bd753..51c31b33 100644 --- a/crates/client/src/lib.rs +++ b/crates/client/src/lib.rs @@ -3,19 +3,19 @@ //! //! Trident could be useful for writing Rust dApps, too. -mod idl_loader; mod cleaner; mod commander; +mod idl_loader; mod source_code_generators; mod test_generator; mod utils; mod versions_config; pub mod ___private { - pub use super::idl_loader::*; pub use super::cleaner::*; pub use super::commander::Commander; pub use super::commander::Error; + pub use super::idl_loader::*; pub use super::source_code_generators::*; pub use super::test_generator::TestGenerator; } diff --git a/crates/client/src/templates/trident-tests/Cargo_fuzz.toml.tmpl b/crates/client/src/template/Cargo_fuzz.toml.tmpl similarity index 100% rename from crates/client/src/templates/trident-tests/Cargo_fuzz.toml.tmpl rename to crates/client/src/template/Cargo_fuzz.toml.tmpl diff --git a/crates/client/src/templates/Trident.toml.tmpl b/crates/client/src/templates/Trident.toml.tmpl deleted file mode 100644 index b5f89d65..00000000 --- a/crates/client/src/templates/Trident.toml.tmpl +++ /dev/null @@ -1,37 +0,0 @@ -[honggfuzz] -# Timeout in seconds (default: 10) -timeout = 10 -# Number of fuzzing iterations (default: 0 [no limit]) -iterations = 0 -# Number of concurrent fuzzing threads (default: 0 [number of CPUs / 2]) -threads = 0 -# Don't close children's stdin, stdout, stderr; can be noisy (default: false) -keep_output = false -# Disable ANSI console; use simple log output (default: false) -verbose = false -# Exit upon seeing the first crash (default: false) -exit_upon_crash = false -# Maximal number of mutations per one run (default: 6) -mutations_per_run = 6 -# Target compilation directory, (default: "" ["trident-tests/fuzzing/hfuzz_target"]). -# To not clash with cargo build's default target directory. -cargo_target_dir = "" -# Honggfuzz working directory, (default: "" ["trident-tests/fuzzing/hfuzz_workspace"]). -hfuzz_workspace = "" -# Directory where crashes are saved to (default: "" [workspace directory]) -crashdir = "" -# Input file extension (e.g. 'swf'), (default: "" ['fuzz']) -extension = "" -# Number of seconds this fuzzing session will last (default: 0 [no limit]) -run_time = 0 -# Maximal size of files processed by the fuzzer in bytes (default: 1048576 = 1MB) -max_file_size = 1048576 -# Save all test-cases (not only the unique ones) by appending the current time-stamp to the filenames (default: false) -save_all = false - -[fuzz] -# Allow processing of duplicate transactions. Setting to true might speed up fuzzing but can cause false positive crashes (default: false) -allow_duplicate_txs = false -# Trident will show statistics after the fuzzing session. This option forces use of honggfuzz parameter -# `keep_output` as true in order to be able to catch fuzzer stdout. (default: false) -fuzzing_with_stats = false diff --git a/crates/client/src/test_generator.rs b/crates/client/src/test_generator.rs index 1839e7e7..14a48d3e 100644 --- a/crates/client/src/test_generator.rs +++ b/crates/client/src/test_generator.rs @@ -126,8 +126,7 @@ impl TestGenerator { let fuzz_test_path = new_fuzz_test_dir.join(FUZZ_TEST); let fuzz_instructions_path = new_fuzz_test_dir.join(FUZZ_INSTRUCTIONS_FILE_NAME); - let cargo_toml_content = - load_template!("/src/templates/trident-tests/Cargo_fuzz.toml.tmpl"); + let cargo_toml_content = load_template!("/src/template/Cargo_fuzz.toml.tmpl"); create_file(&self.root, &fuzz_test_path, &self.test_fuzz).await?; create_file(&self.root, &fuzz_instructions_path, &self.fuzz_instructions).await?; @@ -162,10 +161,9 @@ impl TestGenerator { let fuzz_test_path = new_fuzz_test_dir.join(FUZZ_TEST); let fuzz_instructions_path = new_fuzz_test_dir.join(FUZZ_INSTRUCTIONS_FILE_NAME); - let cargo_toml_content = - load_template!("/src/templates/trident-tests/Cargo_fuzz.toml.tmpl"); + let cargo_toml_content = load_template!("/src/template/Cargo_fuzz.toml.tmpl"); - let trident_toml_content = load_template!("/src/templates/Trident.toml.tmpl"); + let trident_toml_content = load_template!("/../config/template/Trident.toml.tmpl"); create_file(&self.root, &fuzz_test_path, &self.test_fuzz).await?; create_file(&self.root, &fuzz_instructions_path, &self.fuzz_instructions).await?; diff --git a/crates/config/src/afl.rs b/crates/config/src/afl.rs index 8093838f..ad6d7bb3 100644 --- a/crates/config/src/afl.rs +++ b/crates/config/src/afl.rs @@ -1,226 +1,101 @@ -use std::collections::HashMap; - -use crate::constants::*; -use rand::RngCore; +use crate::{argument::Argument, constants::*, utils::arg_to_string}; use serde::Deserialize; -use super::find_full_path; - -#[derive(Debug, Deserialize, Clone, Hash, PartialEq, Eq)] -pub enum BuildArgument { - CargoTargetDir, -} - -#[derive(Debug, Deserialize, Clone, Hash, PartialEq, Eq)] -pub enum FuzzArgument { - AflWorkspaceIn, - AflWorkspaceOut, - Execs, - Seconds, -} - #[derive(Debug, Deserialize, Clone)] pub struct Afl { - pub build_args: HashMap, - pub fuzz_args: HashMap, - pub seeds: Vec, -} - -impl Afl { - pub fn get_cargo_build_dir(&self) -> Option<&AflArg> { - self.build_args.get(&BuildArgument::CargoTargetDir) - } - pub fn get_workspace_in(&self) -> Option<&AflArg> { - self.fuzz_args.get(&FuzzArgument::AflWorkspaceIn) - } - pub fn get_workspace_out(&self) -> Option<&AflArg> { - self.fuzz_args.get(&FuzzArgument::AflWorkspaceOut) - } - pub fn get_execs(&self) -> Option<&AflArg> { - self.fuzz_args.get(&FuzzArgument::Execs) - } - pub fn get_seconds(&self) -> Option<&AflArg> { - self.fuzz_args.get(&FuzzArgument::Seconds) - } - pub fn get_collect_build_args(&self) -> Vec { - self.build_args - .values() - .flat_map(|arg| { - let val = arg.val.clone().unwrap_or_default(); - if let Some(opt) = &arg.short_opt { - vec![opt.clone(), val] - } else if let Some(opt) = &arg.long_opt { - vec![opt.clone(), val] - } else { - vec![] - } - }) - .collect() - } - pub fn get_collect_fuzz_args(&self) -> Vec { - self.fuzz_args - .values() - .flat_map(|arg| { - let val = arg.val.clone().unwrap_or_default(); - if let Some(opt) = &arg.short_opt { - vec![opt.clone(), val] - } else if let Some(opt) = &arg.long_opt { - vec![opt.clone(), val] - } else { - vec![] - } - }) - .collect() - } -} - -#[derive(Default, Debug, Deserialize, Clone)] -pub struct _Afl { - #[serde(default)] + // cargo_target_dir + // --target-dir pub cargo_target_dir: Option, - #[serde(default)] + // afl_workspace_in + // -i pub afl_workspace_in: Option, - #[serde(default)] + // afl_workspace_out + // -o pub afl_workspace_out: Option, - #[serde(default)] - pub execs: Option, - #[serde(default)] - pub seconds: Option, - #[serde(default)] - pub seeds: Option>, + // execs + // -E + pub iterations: Option, + // seconds + // -V + pub timeout: Option, + // seeds + // -s + pub seeds: Option>, } -impl From<_Afl> for Afl { - fn from(_f: _Afl) -> Self { - let mut _self = Self { - seeds: vec![], - fuzz_args: HashMap::new(), - build_args: HashMap::new(), - }; - +impl Afl { + pub fn get_cargo_target_dir(&self) -> Argument { // cargo_target_dir - let cargo_target_dir = _f - .cargo_target_dir - .and_then(|value| if value.is_empty() { None } else { Some(value) }) - .unwrap_or(CARGO_TARGET_DIR_DEFAULT_AFL.to_owned()); - - let cargo_target_dir_full_path = find_full_path(&cargo_target_dir) - .expect("Failed to obtain full path to the AFL Target Directory"); - - _self.build_args.insert( - BuildArgument::CargoTargetDir, - AflArg::new( - "", - "--target-dir", - cargo_target_dir_full_path.to_str().unwrap(), - ), - ); - + if let Some(cargo_target_dir) = &self.cargo_target_dir { + Argument::new("", "--target-dir", Some(cargo_target_dir)) + } else { + Argument::new("", "--target-dir", Some(CARGO_TARGET_DIR_DEFAULT_AFL)) + } + } + pub fn get_workspace_in(&self) -> Argument { // afl_workspace_in - let afl_workspace_in = _f - .afl_workspace_in - .and_then(|value| if value.is_empty() { None } else { Some(value) }) - .unwrap_or(AFL_WORKSPACE_DEFAULT_IN.to_owned()); - - let afl_workspace_in_full_path = find_full_path(&afl_workspace_in) - .expect("Failed to obtain full path to the AFL Workspace-In Directory"); - - _self.fuzz_args.insert( - FuzzArgument::AflWorkspaceIn, - AflArg::new("-i", "", afl_workspace_in_full_path.to_str().unwrap()), - ); - + if let Some(afl_workspace_in) = &self.afl_workspace_in { + Argument::new("-i", "", Some(afl_workspace_in)) + } else { + Argument::new("-i", "", Some(AFL_WORKSPACE_DEFAULT_IN)) + } + } + pub fn get_workspace_out(&self) -> Argument { // afl_workspace_out - let afl_workspace_out = _f - .afl_workspace_out - .and_then(|value| if value.is_empty() { None } else { Some(value) }) - .unwrap_or(AFL_WORKSPACE_DEFAULT_OUT.to_owned()); - - let afl_workspace_out_full_path = find_full_path(&afl_workspace_out) - .expect("Failed to obtain full path to the AFL Workspace-Out Directory"); - - _self.fuzz_args.insert( - FuzzArgument::AflWorkspaceOut, - AflArg::new("-o", "", afl_workspace_out_full_path.to_str().unwrap()), - ); - - // execs - let execs = _f.execs.unwrap_or(0); - if execs > 0 { - _self.fuzz_args.insert( - FuzzArgument::Execs, - AflArg::new("-E", "", &execs.to_string()), - ); + if let Some(afl_workspace_out) = &self.afl_workspace_out { + Argument::new("-o", "", Some(afl_workspace_out)) + } else { + Argument::new("-o", "", Some(AFL_WORKSPACE_DEFAULT_OUT)) } - + } + pub fn get_iterations(&self) -> Option { + // execs + self.iterations + .as_ref() + .map(|iterations| Argument::new("-E", "", Some(&iterations.to_string()))) + } + pub fn get_timeout(&self) -> Option { // seconds - let seconds = _f.seconds.unwrap_or(0); - if seconds > 0 { - _self.fuzz_args.insert( - FuzzArgument::Seconds, - AflArg::new("-V", "", &seconds.to_string()), - ); - } - - if let Some(seeds) = _f.seeds { - for x in seeds { - _self.seeds.push(x.into()); - } + self.timeout + .as_ref() + .map(|timeout| Argument::new("-V", "", Some(&timeout.to_string()))) + } + pub fn get_seeds(&self) -> Vec { + // seeds + if let Some(seeds) = &self.seeds { + seeds.clone() } else { - _self.seeds.push(_AflSeed::default().into()); + vec![AflSeed::default()] } - - _self } -} + pub fn get_collect_build_args(&self) -> Vec { + #[allow(unused_mut)] + let mut result = vec![]; + // we do not have any build arguments so far. + result + } + pub fn get_collect_fuzz_args(&self) -> Vec { + let mut result = vec![]; -#[derive(Debug, Deserialize, Clone)] -pub struct AflArg { - pub short_opt: Option, - pub long_opt: Option, - pub val: Option, -} -impl AflArg { - pub fn new(short_opt: &str, long_opt: &str, val: &str) -> Self { - let short_opt = if short_opt.is_empty() { - None - } else { - Some(short_opt.to_owned()) - }; - let long_opt = if long_opt.is_empty() { - None - } else { - Some(long_opt.to_owned()) - }; - let val = if val.is_empty() { - None - } else { - Some(val.to_owned()) - }; - Self { - short_opt, - long_opt, - val, + if let Some(execs) = self.get_iterations() { + result.extend(arg_to_string(&execs)); + } + if let Some(seconds) = self.get_timeout() { + result.extend(arg_to_string(&seconds)); } + result } } #[derive(Debug, Deserialize, Clone)] -pub struct _AflSeed { +pub struct AflSeed { pub file_name: String, pub seed: Option, pub override_file: Option, pub bytes_count: Option, } -#[derive(Debug, Deserialize, Clone)] -pub struct AflSeed { - pub file_name: String, - pub seed: Vec, - pub override_file: bool, -} - -impl Default for _AflSeed { +impl Default for AflSeed { fn default() -> Self { Self { file_name: DEFAULT_SEED_FILENAME.to_string(), @@ -231,50 +106,6 @@ impl Default for _AflSeed { } } -impl From<_AflSeed> for AflSeed { - fn from(value: _AflSeed) -> Self { - match value.bytes_count { - Some(number_of_random_bytes) => { - if number_of_random_bytes > 0 { - let mut rng = rand::rngs::OsRng; - let mut seed = vec![0u8; number_of_random_bytes]; - rng.fill_bytes(&mut seed); - Self { - file_name: value.file_name, - seed, - override_file: value.override_file.unwrap_or_default(), - } - } else { - let seed_as_bytes = value - .seed - .and_then(|value| if value.is_empty() { None } else { Some(value) }) - .unwrap_or(DEFAULT_SEED.to_string()) - .as_bytes() - .to_vec(); - Self { - file_name: value.file_name, - seed: seed_as_bytes, - override_file: value.override_file.unwrap_or_default(), - } - } - } - None => { - let seed_as_bytes = value - .seed - .and_then(|value| if value.is_empty() { None } else { Some(value) }) - .unwrap_or(DEFAULT_SEED.to_string()) - .as_bytes() - .to_vec(); - Self { - file_name: value.file_name, - seed: seed_as_bytes, - override_file: value.override_file.unwrap_or_default(), - } - } - } - } -} - #[cfg(test)] mod tests { use super::*; @@ -282,9 +113,12 @@ mod tests { impl Afl { fn clean() -> Self { Self { - fuzz_args: HashMap::new(), - build_args: HashMap::new(), - seeds: vec![], + cargo_target_dir: None, + afl_workspace_in: None, + afl_workspace_out: None, + iterations: None, + timeout: None, + seeds: None, } } } @@ -293,60 +127,49 @@ mod tests { fn test_cargo_target_dir() { let mut afl = Afl::clean(); - afl.build_args.insert( - BuildArgument::CargoTargetDir, - AflArg::new("", "--target-dir", CARGO_TARGET_DIR_DEFAULT_AFL), - ); + let target_dir = "/foo/bar".to_string(); + + afl.cargo_target_dir = Some(target_dir); - let arg = afl.get_collect_build_args(); - assert_eq!(arg, vec!["--target-dir", CARGO_TARGET_DIR_DEFAULT_AFL]); + let arg = afl.get_cargo_target_dir(); + assert_eq!(arg, Argument::new("", "--target-dir", Some("/foo/bar"))); } #[test] fn test_workspace_in() { let mut afl = Afl::clean(); // afl_workspace_in - afl.fuzz_args.insert( - FuzzArgument::AflWorkspaceIn, - AflArg::new("-i", "", AFL_WORKSPACE_DEFAULT_IN), - ); + afl.afl_workspace_in = Some("/foo/bar/dead/beef".to_string()); - let arg = afl.get_collect_fuzz_args(); - assert_eq!(arg, vec!["-i", AFL_WORKSPACE_DEFAULT_IN]); + let arg = afl.get_workspace_in(); + assert_eq!(arg, Argument::new("-i", "", Some("/foo/bar/dead/beef"))); } #[test] fn test_workspace_out() { let mut afl = Afl::clean(); // afl_workspace_out - afl.fuzz_args.insert( - FuzzArgument::AflWorkspaceOut, - AflArg::new("-o", "", AFL_WORKSPACE_DEFAULT_OUT), - ); + afl.afl_workspace_out = Some("/foo/bar/dead/beef/out".to_string()); - let arg = afl.get_collect_fuzz_args(); - assert_eq!(arg, vec!["-o", AFL_WORKSPACE_DEFAULT_OUT]); + let arg = afl.get_workspace_out(); + assert_eq!(arg, Argument::new("-o", "", Some("/foo/bar/dead/beef/out"))); } #[test] - fn test_execs() { + fn test_iterations() { let mut afl = Afl::clean(); // execs - afl.fuzz_args - .insert(FuzzArgument::Execs, AflArg::new("-E", "", &555.to_string())); + afl.iterations = Some(555); let arg = afl.get_collect_fuzz_args(); assert_eq!(arg, vec!["-E", "555"]); } #[test] - fn test_seconds() { + fn test_timeout() { let mut afl = Afl::clean(); // seconds - afl.fuzz_args.insert( - FuzzArgument::Seconds, - AflArg::new("-V", "", &15.to_string()), - ); + afl.timeout = Some(15); let arg = afl.get_collect_fuzz_args(); assert_eq!(arg, vec!["-V", "15"]); diff --git a/crates/config/src/argument.rs b/crates/config/src/argument.rs new file mode 100644 index 00000000..d543395d --- /dev/null +++ b/crates/config/src/argument.rs @@ -0,0 +1,43 @@ +use serde::Deserialize; + +#[derive(Debug, Deserialize, Clone, PartialEq)] +pub struct Argument { + pub short_opt: Option, + pub long_opt: Option, + // for value type options, string is the value + // for flag type options, it will be None + pub value: Option, +} + +impl Argument { + pub(crate) fn new(short_opt: &str, long_opt: &str, val: Option<&str>) -> Self { + let short_opt = if short_opt.is_empty() { + None + } else { + Some(short_opt.to_owned()) + }; + let long_opt = if long_opt.is_empty() { + None + } else { + Some(long_opt.to_owned()) + }; + let value = val.map(|value| value.to_string()); + Self { + short_opt, + long_opt, + value, + } + } +} + +#[derive(Debug, Deserialize, Clone)] +pub struct EnvironmentVariable { + pub name: String, + pub value: String, +} + +impl EnvironmentVariable { + pub(crate) fn new(name: String, value: String) -> Self { + Self { name, value } + } +} diff --git a/crates/config/src/constants.rs b/crates/config/src/constants.rs index f06fb9e8..341b0e45 100644 --- a/crates/config/src/constants.rs +++ b/crates/config/src/constants.rs @@ -3,10 +3,8 @@ pub const TRIDENT_TOML: &str = "Trident.toml"; pub const ANCHOR_TOML: &str = "Anchor.toml"; // honggfuzz -pub const CARGO_TARGET_DIR_DEFAULT_HFUZZ: &str = - "trident-tests/fuzzing/honggfuzz/hfuzz_target"; -pub const HFUZZ_WORKSPACE_DEFAULT_HFUZZ: &str = - "trident-tests/fuzzing/honggfuzz/hfuzz_workspace"; +pub const CARGO_TARGET_DIR_DEFAULT_HFUZZ: &str = "trident-tests/fuzzing/honggfuzz/hfuzz_target"; +pub const HFUZZ_WORKSPACE_DEFAULT_HFUZZ: &str = "trident-tests/fuzzing/honggfuzz/hfuzz_workspace"; pub const CARGO_TARGET_DIR_ENV: &str = "CARGO_TARGET_DIR"; pub const HFUZZ_WORKSPACE_ENV: &str = "HFUZZ_WORKSPACE"; @@ -15,8 +13,7 @@ pub const CARGO_TARGET_DIR_DEFAULT_AFL: &str = "trident-tests/fuzzing/afl/afl_ta pub const AFL_WORKSPACE_DEFAULT_IN: &str = "trident-tests/fuzzing/afl/afl_workspace/in"; -pub const AFL_WORKSPACE_DEFAULT_OUT: &str = - "trident-tests/fuzzing/afl/afl_workspace/out"; +pub const AFL_WORKSPACE_DEFAULT_OUT: &str = "trident-tests/fuzzing/afl/afl_workspace/out"; pub const DEFAULT_SEED_FILENAME: &str = "trident-seed"; pub const DEFAULT_SEED: &str = "trident"; diff --git a/crates/config/src/fuzz.rs b/crates/config/src/fuzz.rs index 9b3a778a..50761f85 100644 --- a/crates/config/src/fuzz.rs +++ b/crates/config/src/fuzz.rs @@ -1,70 +1,26 @@ +use crate::utils::resolve_path; use base64::{prelude::BASE64_STANDARD, Engine}; use serde::{Deserialize, Serialize}; use solana_sdk::{ account::{AccountSharedData, WritableAccount}, pubkey::Pubkey, }; -use std::{ - fs, - path::{Path, PathBuf}, - str::FromStr, -}; - -use super::discover_root; +use std::{fs, str::FromStr}; #[derive(Debug, Deserialize, Clone, Default)] pub struct Fuzz { - pub fuzzing_with_stats: bool, - pub allow_duplicate_txs: bool, - pub programs: Vec, - pub accounts: Vec, -} - -#[derive(Default, Debug, Deserialize, Clone)] -pub struct _Fuzz { - #[serde(default)] pub fuzzing_with_stats: Option, - #[serde(default)] pub allow_duplicate_txs: Option, - #[serde(default)] pub programs: Option>, - #[serde(default)] pub accounts: Option>, } -impl From<_Fuzz> for Fuzz { - fn from(_f: _Fuzz) -> Self { - let mut _self = Self { - fuzzing_with_stats: _f.fuzzing_with_stats.unwrap_or_default(), - allow_duplicate_txs: _f.allow_duplicate_txs.unwrap_or_default(), - programs: vec![], - accounts: vec![], - }; - - if let Some(accounts) = _f.accounts { - for account in accounts { - _self - .accounts - .push(read_and_parse_account(&account.filename)); - } - } - if let Some(programs) = _f.programs { - for account in programs { - _self - .programs - .push(read_and_parse_program(&account.program, &account.address)); - } - } - - _self - } -} impl Fuzz { pub fn get_fuzzing_with_stats(&self) -> bool { - self.fuzzing_with_stats + self.fuzzing_with_stats.unwrap_or(false) } pub fn get_allow_duplicate_txs(&self) -> bool { - self.allow_duplicate_txs + self.allow_duplicate_txs.unwrap_or(false) } } @@ -86,12 +42,75 @@ pub struct FuzzProgram { pub data: Vec, } +impl From<&_FuzzProgram> for FuzzProgram { + fn from(_f: &_FuzzProgram) -> Self { + let program_path = &_f.program; + let program_address = &_f.address; + + let path = resolve_path(program_path); + + let program_data = + fs::read(path).unwrap_or_else(|_| panic!("Failed to read file: {}", program_path)); + + let pubkey = Pubkey::from_str(program_address) + .unwrap_or_else(|_| panic!("Cannot parse the program address: {}", program_address)); + + FuzzProgram { + address: pubkey, + data: program_data, + } + } +} + #[derive(Debug, Deserialize, Clone)] pub struct FuzzAccount { pub pubkey: Pubkey, pub account: AccountSharedData, } +impl From<&_FuzzAccount> for FuzzAccount { + fn from(_f: &_FuzzAccount) -> Self { + let account_path = &_f.filename; + + let path = resolve_path(account_path); + + let file_content = fs::read_to_string(path) + .unwrap_or_else(|_| panic!("Failed to read file: {}", account_path)); + + let account_raw: FuzzAccountRaw = serde_json::from_str(&file_content) + .unwrap_or_else(|_| panic!("Failed to parse JSON from file: {}", account_path)); + + let pubkey = Pubkey::from_str(&account_raw.pubkey) + .unwrap_or_else(|_| panic!("Cannot convert address for: {}", account_raw.pubkey)); + + let owner_address = Pubkey::from_str(&account_raw.account.owner).unwrap_or_else(|_| { + panic!( + "Cannot convert address for owner: {}", + account_raw.account.owner + ) + }); + + let data_base_64 = account_raw.account.data.first().unwrap_or_else(|| { + panic!( + "Cannot read base64 data for account: {}", + account_raw.pubkey + ) + }); + + let account = AccountSharedData::create( + account_raw.account.lamports, + BASE64_STANDARD + .decode(data_base_64) + .unwrap_or_else(|_| panic!("Failed to decode base64 data of {}", account_path)), + owner_address, + account_raw.account.executable, + account_raw.account.rent_epoch, + ); + + FuzzAccount { pubkey, account } + } +} + #[derive(Debug, Deserialize, Clone)] pub struct FuzzAccountRaw { pub pubkey: String, @@ -107,68 +126,3 @@ pub struct AccountRaw { #[serde(rename = "rentEpoch")] pub rent_epoch: u64, } - -fn read_and_parse_program(filename: &str, program_address: &str) -> FuzzProgram { - let path = resolve_path(filename); - - let program_data = - fs::read(path).unwrap_or_else(|_| panic!("Failed to read file: {}", filename)); - - let pubkey = Pubkey::from_str(program_address) - .unwrap_or_else(|_| panic!("Cannot parse the program address: {}", program_address)); - - FuzzProgram { - address: pubkey, - data: program_data, - } -} - -fn read_and_parse_account(filename: &str) -> FuzzAccount { - let path = resolve_path(filename); - - let file_content = - fs::read_to_string(path).unwrap_or_else(|_| panic!("Failed to read file: {}", filename)); - - let account_raw: FuzzAccountRaw = serde_json::from_str(&file_content) - .unwrap_or_else(|_| panic!("Failed to parse JSON from file: {}", filename)); - - let pubkey = Pubkey::from_str(&account_raw.pubkey) - .unwrap_or_else(|_| panic!("Cannot convert address for: {}", account_raw.pubkey)); - - let owner_address = Pubkey::from_str(&account_raw.account.owner).unwrap_or_else(|_| { - panic!( - "Cannot convert address for owner: {}", - account_raw.account.owner - ) - }); - - let data_base_64 = account_raw.account.data.first().unwrap_or_else(|| { - panic!( - "Cannot read base64 data for account: {}", - account_raw.pubkey - ) - }); - - let account = AccountSharedData::create( - account_raw.account.lamports, - BASE64_STANDARD - .decode(data_base_64) - .unwrap_or_else(|_| panic!("Failed to decode base64 data of {}", filename)), - owner_address, - account_raw.account.executable, - account_raw.account.rent_epoch, - ); - - FuzzAccount { pubkey, account } -} - -fn resolve_path(filename: &str) -> PathBuf { - let path = Path::new(filename); - if path.is_absolute() { - path.to_path_buf() - } else { - discover_root() - .map(|cwd| cwd.join(path)) - .unwrap_or_else(|_| panic!("Failed to resolve relative path: {}", path.display())) - } -} diff --git a/crates/config/src/honggfuzz.rs b/crates/config/src/honggfuzz.rs index 5cd77351..cbc026c7 100644 --- a/crates/config/src/honggfuzz.rs +++ b/crates/config/src/honggfuzz.rs @@ -1,117 +1,13 @@ use serde::Deserialize; -use std::collections::HashMap; - -use crate::constants::*; - -use super::find_full_path; - -#[derive(Debug, Deserialize, Clone, Hash, PartialEq, Eq)] -pub enum FuzzArgument { - Timeout, - Iterations, - Threads, - KeepOutput, - Verbose, - ExitUponCrash, - MutationsPerRun, - CargoTargetDir, - HfuzzWorkspace, - Crashdir, - Extension, - RunTime, - MaxFileSize, - SaveAll, -} - -#[derive(Debug, Deserialize, Clone, Hash, PartialEq, Eq)] -pub enum EnvVariable { - CargoTargetDir, - HfuzzWorkspace, -} - -#[derive(Debug, Deserialize, Clone)] -pub struct HonggFuzzArg { - pub short_opt: Option, - pub long_opt: Option, - pub val: Option, -} -#[derive(Debug, Deserialize, Clone)] -pub struct HonggFuzz { - pub fuzz_args: HashMap, - pub env_variables: HashMap, -} - -impl HonggFuzz { - pub fn get_timeout(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::Timeout) - } - pub fn get_iterations(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::Iterations) - } - pub fn get_threads(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::Threads) - } - pub fn get_keep_output(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::KeepOutput) - } - pub fn get_verbose(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::Verbose) - } - pub fn get_exit_upon_crash(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::ExitUponCrash) - } - pub fn get_mutations_per_run(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::MutationsPerRun) - } - pub fn get_crashdir(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::Crashdir) - } - pub fn get_extension(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::Extension) - } - pub fn get_run_time(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::RunTime) - } - pub fn get_max_file_size(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::MaxFileSize) - } - pub fn get_save_all(&self) -> Option<&HonggFuzzArg> { - self.fuzz_args.get(&FuzzArgument::SaveAll) - } - pub fn get_cargo_target_dir(&self) -> Option<&String> { - self.env_variables.get(&EnvVariable::CargoTargetDir) - } - pub fn get_hfuzz_workspace(&self) -> Option<&String> { - self.env_variables.get(&EnvVariable::HfuzzWorkspace) - } - pub fn get_collect_fuzz_args(&self) -> Vec { - self.fuzz_args - .values() - .map(|arg| { - if let Some(opt) = &arg.short_opt { - match &arg.val { - Some(value) => format!("{} {}", opt, value), - None => opt.to_string(), - } - } else if let Some(opt) = &arg.long_opt { - match &arg.val { - Some(value) => format!("{} {}", opt, value), - None => opt.to_string(), - } - } else { - "".to_string() - } - }) - .collect() - } - pub fn get_env_variable(&self, key: &EnvVariable) -> Option { - self.env_variables.get(key).cloned() - } -} +use crate::{ + argument::{Argument, EnvironmentVariable}, + constants::*, + utils::arg_to_string, +}; #[derive(Default, Debug, Deserialize, Clone)] -pub struct _HonggFuzz { +pub struct HonggFuzz { #[serde(default)] /// Timeout in seconds (default: 10) /// -t @@ -179,158 +75,160 @@ pub struct _HonggFuzz { pub save_all: Option, } -impl From<_HonggFuzz> for HonggFuzz { - fn from(_f: _HonggFuzz) -> Self { - let mut _self = Self { - fuzz_args: HashMap::new(), - env_variables: HashMap::new(), - }; - +impl HonggFuzz { + pub fn get_timeout(&self) -> Option { // timeout - let timeout = _f.timeout.unwrap_or(10); - _self.fuzz_args.insert( - FuzzArgument::Timeout, - HonggFuzzArg::new("-t", "--timeout", &timeout.to_string()), - ); - + self.timeout + .map(|timeout| Argument::new("-t", "--timeout", Some(&timeout.to_string()))) + } + pub fn get_iterations(&self) -> Option { // iterations - let iterations = _f.iterations.unwrap_or(0); - _self.fuzz_args.insert( - FuzzArgument::Iterations, - HonggFuzzArg::new("-N", "--iterations", &iterations.to_string()), - ); - + self.iterations + .map(|iterations| Argument::new("-N", "--iterations", Some(&iterations.to_string()))) + } + pub fn get_threads(&self) -> Option { // threads - let threads = _f.threads.unwrap_or(0); - if threads > 0 { - _self.fuzz_args.insert( - FuzzArgument::Threads, - HonggFuzzArg::new("-n", "--threads", &threads.to_string()), - ); - } - + self.threads + .map(|threads| Argument::new("-n", "--threads", Some(&threads.to_string()))) + } + pub fn get_keep_output(&self) -> Option { // keep_output - let keep_output = _f.keep_output.unwrap_or(false); - if keep_output { - _self.fuzz_args.insert( - FuzzArgument::KeepOutput, - HonggFuzzArg::new("-Q", "--keep_output", ""), - ); - } + self.keep_output.and_then(|keep_output| { + if keep_output { + Some(Argument::new("-Q", "--keep_output", None)) + } else { + None + } + }) + } + pub fn get_verbose(&self) -> Option { // verbose - let verbose = _f.verbose.unwrap_or(false); - if verbose { - _self.fuzz_args.insert( - FuzzArgument::Verbose, - HonggFuzzArg::new("-v", "--verbose", ""), - ); - } - + self.verbose.and_then(|verbose| { + if verbose { + Some(Argument::new("-v", "--verbose", None)) + } else { + None + } + }) + } + pub fn get_exit_upon_crash(&self) -> Option { // exit_upon_crash - let exit_upon_crash = _f.exit_upon_crash.unwrap_or(false); - if exit_upon_crash { - _self.fuzz_args.insert( - FuzzArgument::ExitUponCrash, - HonggFuzzArg::new("", "--exit_upon_crash", ""), - ); - } + self.exit_upon_crash.and_then(|exit_upon_crash| { + if exit_upon_crash { + Some(Argument::new("", "--exit_upon_crash", None)) + } else { + None + } + }) + } + pub fn get_mutations_per_run(&self) -> Option { // mutations_per_run - let mutations_per_run = _f.mutations_per_run.unwrap_or(6); - _self.fuzz_args.insert( - FuzzArgument::MutationsPerRun, - HonggFuzzArg::new("-r", "--mutations_per_run", &mutations_per_run.to_string()), - ); - // cargo_target_dir - let cargo_target_dir = _f - .cargo_target_dir - .and_then(|value| if value.is_empty() { None } else { Some(value) }) - .unwrap_or(CARGO_TARGET_DIR_DEFAULT_HFUZZ.to_owned()); - - let cargo_target_dir_full_path = find_full_path(&cargo_target_dir) - .expect("Failed to obtain full path to the Honggfuzz Target Directory"); - - _self.env_variables.insert( - EnvVariable::CargoTargetDir, - cargo_target_dir_full_path.to_str().unwrap().to_string(), - ); - - // hfuzz_workspace - let hfuzz_workspace = _f - .hfuzz_workspace - .and_then(|value| if value.is_empty() { None } else { Some(value) }) - .unwrap_or(HFUZZ_WORKSPACE_DEFAULT_HFUZZ.to_owned()); - - let hfuzz_workspace_full_path = find_full_path(&hfuzz_workspace) - .expect("Failed to obtain full path to the Honggfuzz Workspace Directory"); - - _self.env_variables.insert( - EnvVariable::HfuzzWorkspace, - hfuzz_workspace_full_path.to_str().unwrap().to_string(), - ); - + self.mutations_per_run.map(|mutations_per_run| { + Argument::new( + "-r", + "--mutations_per_run", + Some(&mutations_per_run.to_string()), + ) + }) + } + pub fn get_crashdir(&self) -> Option { // crashdir - let crash_dir = _f.crashdir.unwrap_or_default(); - if !crash_dir.is_empty() { - _self.fuzz_args.insert( - FuzzArgument::Crashdir, - HonggFuzzArg::new("", "--crashdir", &crash_dir), - ); - } + self.crashdir + .as_ref() + .map(|crashdir| Argument::new("", "--crashdir", Some(crashdir))) + } + pub fn get_extension(&self) -> Option { // extension - let extension = _f.extension.unwrap_or_default(); - if !extension.is_empty() { - _self.fuzz_args.insert( - FuzzArgument::Extension, - HonggFuzzArg::new("-e", "--extension", &extension), - ); - } + self.extension + .as_ref() + .map(|extension| Argument::new("-e", "--extension", Some(extension))) + } + pub fn get_run_time(&self) -> Option { // run_time - let run_time = _f.run_time.unwrap_or(0); - _self.fuzz_args.insert( - FuzzArgument::RunTime, - HonggFuzzArg::new("", "--run_time", &run_time.to_string()), - ); - + self.run_time + .map(|run_time| Argument::new("", "--run_time", Some(&run_time.to_string()))) + } + pub fn get_max_file_size(&self) -> Option { // max_file_size - let max_file_size = _f.max_file_size.unwrap_or(1_048_576); - _self.fuzz_args.insert( - FuzzArgument::MaxFileSize, - HonggFuzzArg::new("-F", "--max_file_size", &max_file_size.to_string()), - ); + self.max_file_size.map(|max_file_size| { + Argument::new("-F", "--max_file_size", Some(&max_file_size.to_string())) + }) + } + pub fn get_save_all(&self) -> Option { // save_all - let save_all = _f.save_all.unwrap_or_default(); - if save_all { - _self.fuzz_args.insert( - FuzzArgument::SaveAll, - HonggFuzzArg::new("-u", "--save_all", ""), - ); - } - _self + self.save_all.and_then(|save_all| { + if save_all { + Some(Argument::new("-u", "--save_all", None)) + } else { + None + } + }) } -} - -impl HonggFuzzArg { - pub(crate) fn new(short_opt: &str, long_opt: &str, val: &str) -> Self { - let short_opt = if short_opt.is_empty() { - None - } else { - Some(short_opt.to_owned()) - }; - let long_opt = if long_opt.is_empty() { - None + pub fn get_cargo_target_dir(&self) -> EnvironmentVariable { + // cargo_target_dir + if let Some(cargo_target_dir) = &self.cargo_target_dir { + EnvironmentVariable::new( + CARGO_TARGET_DIR_ENV.to_string(), + cargo_target_dir.to_string(), + ) } else { - Some(long_opt.to_owned()) - }; - let val = if val.is_empty() { - None + EnvironmentVariable::new( + CARGO_TARGET_DIR_ENV.to_string(), + CARGO_TARGET_DIR_DEFAULT_HFUZZ.to_string(), + ) + } + } + pub fn get_hfuzz_workspace(&self) -> EnvironmentVariable { + // hfuzz_workspace + if let Some(hfuzz_workspace) = &self.hfuzz_workspace { + EnvironmentVariable::new(HFUZZ_WORKSPACE_ENV.to_string(), hfuzz_workspace.to_string()) } else { - Some(val.to_owned()) - }; - Self { - short_opt, - long_opt, - val, + EnvironmentVariable::new( + HFUZZ_WORKSPACE_ENV.to_string(), + HFUZZ_WORKSPACE_DEFAULT_HFUZZ.to_string(), + ) + } + } + pub fn get_collect_fuzz_args(&self) -> Vec { + let mut result = vec![]; + + if let Some(timeout) = self.get_timeout() { + result.extend(arg_to_string(&timeout)); + } + if let Some(iterations) = self.get_iterations() { + result.extend(arg_to_string(&iterations)); + } + if let Some(threads) = self.get_threads() { + result.extend(arg_to_string(&threads)); } + if let Some(keep_output) = self.get_keep_output() { + result.extend(arg_to_string(&keep_output)); + } + if let Some(verbose) = self.get_verbose() { + result.extend(arg_to_string(&verbose)); + } + if let Some(exit_upon_crash) = self.get_exit_upon_crash() { + result.extend(arg_to_string(&exit_upon_crash)); + } + if let Some(mutations_per_run) = self.get_mutations_per_run() { + result.extend(arg_to_string(&mutations_per_run)); + } + if let Some(crashdir) = self.get_crashdir() { + result.extend(arg_to_string(&crashdir)); + } + if let Some(extension) = self.get_extension() { + result.extend(arg_to_string(&extension)); + } + if let Some(run_time) = self.get_run_time() { + result.extend(arg_to_string(&run_time)); + } + if let Some(max_file_size) = self.get_max_file_size() { + result.extend(arg_to_string(&max_file_size)); + } + if let Some(save_all) = self.get_save_all() { + result.extend(arg_to_string(&save_all)); + } + result } } @@ -341,8 +239,20 @@ mod tests { impl HonggFuzz { fn clean() -> Self { Self { - fuzz_args: HashMap::new(), - env_variables: HashMap::new(), + timeout: None, + iterations: None, + threads: None, + keep_output: None, + verbose: None, + exit_upon_crash: None, + mutations_per_run: None, + cargo_target_dir: None, + hfuzz_workspace: None, + crashdir: None, + extension: None, + run_time: None, + max_file_size: None, + save_all: None, } } } @@ -353,13 +263,11 @@ mod tests { // timeout let timeout = 10; - honggfuzz.fuzz_args.insert( - FuzzArgument::Timeout, - HonggFuzzArg::new("-t", "--timeout", &timeout.to_string()), - ); + + honggfuzz.timeout = Some(timeout); let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["-t 10"]); + assert_eq!(arg, vec!["-t", "10"]); } #[test] fn test_iterations() { @@ -367,13 +275,10 @@ mod tests { // iterations let iterations = 1000; - honggfuzz.fuzz_args.insert( - FuzzArgument::Iterations, - HonggFuzzArg::new("-N", "--iterations", &iterations.to_string()), - ); + honggfuzz.iterations = Some(iterations); let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["-N 1000"]); + assert_eq!(arg, vec!["-N", "1000"]); } #[test] fn test_threads() { @@ -381,52 +286,40 @@ mod tests { // threads let threads = 15; - honggfuzz.fuzz_args.insert( - FuzzArgument::Threads, - HonggFuzzArg::new("-n", "--threads", &threads.to_string()), - ); + honggfuzz.threads = Some(threads); let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["-n 15"]); + assert_eq!(arg, vec!["-n", "15"]); } #[test] fn test_keep_output() { let mut honggfuzz = HonggFuzz::clean(); // keep_output - honggfuzz.fuzz_args.insert( - FuzzArgument::KeepOutput, - HonggFuzzArg::new("-Q", "--keep_output", ""), - ); + honggfuzz.keep_output = Some(true); let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["-Q"]); + assert_eq!(arg, vec!["-Q", ""]); } #[test] fn test_verbose() { let mut honggfuzz = HonggFuzz::clean(); // verbose - honggfuzz.fuzz_args.insert( - FuzzArgument::Verbose, - HonggFuzzArg::new("-v", "--verbose", ""), - ); + honggfuzz.verbose = Some(true); let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["-v"]); + assert_eq!(arg, vec!["-v", ""]); } #[test] fn test_exit_upon_crash() { let mut honggfuzz = HonggFuzz::clean(); // exit_upon_crash - honggfuzz.fuzz_args.insert( - FuzzArgument::ExitUponCrash, - HonggFuzzArg::new("", "--exit_upon_crash", ""), - ); + honggfuzz.exit_upon_crash = Some(true); let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["--exit_upon_crash"]); + assert_eq!(arg, vec!["--exit_upon_crash", ""]); } #[test] fn test_mutations_per_run() { @@ -434,25 +327,20 @@ mod tests { // mutations_per_run let mutations_per_run = 33; - honggfuzz.fuzz_args.insert( - FuzzArgument::MutationsPerRun, - HonggFuzzArg::new("-r", "--mutations_per_run", &mutations_per_run.to_string()), - ); + honggfuzz.mutations_per_run = Some(mutations_per_run); let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["-r 33"]); + assert_eq!(arg, vec!["-r", "33"]); } #[test] fn test_crashdir() { let mut honggfuzz = HonggFuzz::clean(); let crash_dir = "crashdir1"; - honggfuzz.fuzz_args.insert( - FuzzArgument::Crashdir, - HonggFuzzArg::new("", "--crashdir", crash_dir), - ); + honggfuzz.crashdir = Some(crash_dir.to_string()); + let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["--crashdir crashdir1"]); + assert_eq!(arg, vec!["--crashdir", "crashdir1"]); } #[test] fn test_extension() { @@ -460,13 +348,10 @@ mod tests { // extension let extension = "sol"; - honggfuzz.fuzz_args.insert( - FuzzArgument::Extension, - HonggFuzzArg::new("-e", "--extension", extension), - ); + honggfuzz.extension = Some(extension.to_string()); let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["-e sol"]); + assert_eq!(arg, vec!["-e", "sol"]); } #[test] fn test_run_time() { @@ -474,13 +359,10 @@ mod tests { // run_time let run_time = 13; - honggfuzz.fuzz_args.insert( - FuzzArgument::RunTime, - HonggFuzzArg::new("", "--run_time", &run_time.to_string()), - ); + honggfuzz.run_time = Some(run_time); let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["--run_time 13"]); + assert_eq!(arg, vec!["--run_time", "13"]); } #[test] fn test_max_file_size() { @@ -488,51 +370,39 @@ mod tests { // max_file_size let max_file_size = 500; - honggfuzz.fuzz_args.insert( - FuzzArgument::MaxFileSize, - HonggFuzzArg::new("-F", "--max_file_size", &max_file_size.to_string()), - ); + honggfuzz.max_file_size = Some(max_file_size); let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["-F 500"]); + assert_eq!(arg, vec!["-F", "500"]); } #[test] fn test_save_all() { let mut honggfuzz = HonggFuzz::clean(); // save_all - honggfuzz.fuzz_args.insert( - FuzzArgument::SaveAll, - HonggFuzzArg::new("-u", "--save_all", ""), - ); + honggfuzz.save_all = Some(true); let arg = honggfuzz.get_collect_fuzz_args(); - assert_eq!(arg, vec!["-u"]); + assert_eq!(arg, vec!["-u", ""]); } #[test] fn test_cargo_target_dir() { let mut honggfuzz = HonggFuzz::clean(); // cargo_target_dir - honggfuzz.env_variables.insert( - EnvVariable::CargoTargetDir, - CARGO_TARGET_DIR_DEFAULT_HFUZZ.to_owned(), - ); + honggfuzz.cargo_target_dir = Some("/foo/bar/target".to_string()); - let arg = honggfuzz.get_cargo_target_dir().unwrap(); - assert_eq!(arg, CARGO_TARGET_DIR_DEFAULT_HFUZZ); + let arg = honggfuzz.get_cargo_target_dir().value; + assert_eq!(arg, "/foo/bar/target"); } #[test] fn test_hfuzz_workspace() { let mut honggfuzz = HonggFuzz::clean(); // hfuzz_workspace - honggfuzz.env_variables.insert( - EnvVariable::HfuzzWorkspace, - HFUZZ_WORKSPACE_DEFAULT_HFUZZ.to_owned(), - ); + honggfuzz.hfuzz_workspace = Some("/foo/bar/workspace".to_string()); - let arg = honggfuzz.get_hfuzz_workspace().unwrap(); - assert_eq!(arg, HFUZZ_WORKSPACE_DEFAULT_HFUZZ); + let arg = honggfuzz.get_hfuzz_workspace().value; + assert_eq!(arg, "/foo/bar/workspace"); } } diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs index 3539dded..9e8a5e5b 100644 --- a/crates/config/src/lib.rs +++ b/crates/config/src/lib.rs @@ -1,4 +1,5 @@ pub mod afl; +pub mod argument; pub mod constants; pub mod fuzz; pub mod honggfuzz; @@ -8,14 +9,12 @@ use constants::*; use fuzz::*; use honggfuzz::*; -use anyhow::Context; -use fehler::throw; +pub mod utils; + use serde::Deserialize; -use std::{ - env, fs, io, - path::{Path, PathBuf}, -}; +use std::{fs, io}; use thiserror::Error; +use utils::{discover_root, resolve_path}; #[derive(Error, Debug)] pub enum Error { @@ -31,29 +30,9 @@ pub enum Error { #[derive(Debug, Deserialize, Clone)] pub struct Config { - pub honggfuzz: HonggFuzz, - pub afl: Afl, - pub fuzz: Fuzz, -} - -#[derive(Default, Debug, Deserialize, Clone)] -struct _Config { - #[serde(default)] - pub honggfuzz: Option<_HonggFuzz>, - #[serde(default)] - pub afl: Option<_Afl>, - #[serde(default)] - pub fuzz: Option<_Fuzz>, -} - -impl From<_Config> for Config { - fn from(_c: _Config) -> Self { - Self { - honggfuzz: _c.honggfuzz.unwrap_or_default().into(), - afl: _c.afl.unwrap_or_default().into(), - fuzz: _c.fuzz.unwrap_or_default().into(), - } - } + pub honggfuzz: Option, + pub afl: Option, + pub fuzz: Option, } impl Default for Config { @@ -67,105 +46,130 @@ impl Config { let root = discover_root().expect("failed to find the root folder"); let s = fs::read_to_string(root.join(TRIDENT_TOML).as_path()) .expect("failed to read the Trident config file"); - let _config: _Config = toml::from_str(&s).expect("failed to parse the Trident config file"); - _config.into() + let _config: Config = toml::from_str(&s).expect("failed to parse the Trident config file"); + _config } + // -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* + // honggfuzz pub fn get_honggfuzz_args(&self, cli_input: String) -> String { - let mut args = self.honggfuzz.get_collect_fuzz_args(); - args.push(cli_input); - args.join(" ") + if let Some(honggfuzz) = &self.honggfuzz { + let mut args = honggfuzz.get_collect_fuzz_args(); + args.push(cli_input); + args.join(" ") + } else { + String::default() + } } - pub fn get_env_arg(&self, key: &EnvVariable) -> String { - let expect = format!("{:#?} not found", key); - self.honggfuzz.get_env_variable(key).expect(&expect) + pub fn get_honggfuzz_workspace(&self) -> String { + let path = self + .honggfuzz + .as_ref() + .map(|honggfuzz| honggfuzz.get_hfuzz_workspace().value) + .unwrap_or_else(|| HFUZZ_WORKSPACE_DEFAULT_HFUZZ.to_string()); + let full_path = resolve_path(&path); + full_path.to_str().unwrap().to_string() } - - pub fn get_afl_build_args(&self) -> Vec { - self.afl.get_collect_build_args() - } - pub fn get_afl_fuzz_args(&self) -> Vec { - self.afl.get_collect_fuzz_args() + pub fn get_honggfuzz_target_dir(&self) -> String { + let path = self + .honggfuzz + .as_ref() + .map(|honggfuzz| honggfuzz.get_cargo_target_dir().value) + .unwrap_or_else(|| CARGO_TARGET_DIR_DEFAULT_HFUZZ.to_string()); + let full_path = resolve_path(&path); + full_path.to_str().unwrap().to_string() } - pub fn get_afl_cargo_build_dir(&self) -> String { - self.afl - .get_cargo_build_dir() - .expect("AFL Cargo Target Dir argument not available") - .val - .clone() - .expect("AFL Cargo Target Dir value not available") - } - pub fn get_afl_target_path(&self) -> String { - let afl_arg = self + // -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* + // afl + pub fn get_afl_target_dir(&self) -> String { + let path = self .afl - .get_cargo_build_dir() - .expect("AFL Cargo Target Dir argument not available"); - - let mut target_path = afl_arg - .val - .clone() - .expect("AFL Cargo Target Dir value not available"); - - target_path.push_str("/debug/"); - target_path + .as_ref() + .map(|afl| afl.get_cargo_target_dir().value.unwrap()) + .unwrap_or_else(|| CARGO_TARGET_DIR_DEFAULT_AFL.to_string()); + let full_path = resolve_path(&path); + full_path.to_str().unwrap().to_string() + } + pub fn get_afl_target_path(&self, target: &str) -> String { + let mut afl_target_dir = self.get_afl_target_dir(); + afl_target_dir.push_str("/debug/"); + afl_target_dir.push_str(target); + afl_target_dir } pub fn get_afl_workspace_in(&self) -> String { - let afl_arg = self + let path = self .afl - .get_workspace_in() - .expect("AFL Workspace in value argument available"); - - afl_arg - .val - .clone() - .expect("AFL Workspace in value not available") + .as_ref() + .map(|afl| afl.get_workspace_in().value.unwrap()) + .unwrap_or_else(|| AFL_WORKSPACE_DEFAULT_IN.to_string()); + let full_path = resolve_path(&path); + full_path.to_str().unwrap().to_string() } - pub fn get_initial_seed(&self) -> &[AflSeed] { - &self.afl.seeds + pub fn get_afl_workspace_out(&self) -> String { + let path = self + .afl + .as_ref() + .map(|afl| afl.get_workspace_out().value.unwrap()) + .unwrap_or_else(|| AFL_WORKSPACE_DEFAULT_OUT.to_string()); + let full_path = resolve_path(&path); + full_path.to_str().unwrap().to_string() + } + pub fn get_afl_build_args(&self) -> Vec { + self.afl + .as_ref() + .map(|afl| afl.get_collect_build_args()) + .unwrap_or_default() + } + pub fn get_afl_fuzz_args(&self) -> Vec { + self.afl + .as_ref() + .map(|afl| afl.get_collect_fuzz_args()) + .unwrap_or_default() } + pub fn get_initial_seed(&self) -> Vec { + self.afl + .as_ref() + .map(|afl| afl.get_seeds()) + .unwrap_or_else(|| vec![AflSeed::default()]) + } + // -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* + // fuzz pub fn get_fuzzing_with_stats(&self) -> bool { - self.fuzz.get_fuzzing_with_stats() + self.fuzz + .as_ref() + .map(|fuzz| fuzz.get_fuzzing_with_stats()) + .unwrap_or_default() } pub fn get_allow_duplicate_txs(&self) -> bool { - self.fuzz.get_allow_duplicate_txs() + self.fuzz + .as_ref() + .map(|fuzz| fuzz.get_allow_duplicate_txs()) + .unwrap_or_default() } -} -/// Tries to find the root directory with the `Anchor.toml` file. -/// Throws an error when there is no directory with the `Anchor.toml` file -pub fn discover_root() -> Result { - let current_dir = env::current_dir()?; - let mut dir = Some(current_dir.as_path()); - while let Some(cwd) = dir { - for file in std::fs::read_dir(cwd) - .with_context(|| format!("Error reading the directory with path: {}", cwd.display()))? - { - let path = file - .with_context(|| { - format!("Error reading the directory with path: {}", cwd.display()) - })? - .path(); - if let Some(filename) = path.file_name() { - if filename.to_str() == Some(ANCHOR_TOML) { - return Ok(PathBuf::from(cwd)); + pub fn programs(&self) -> Vec { + self.fuzz + .as_ref() + .map(|fuzz| { + if let Some(programs) = &fuzz.programs { + programs.iter().map(FuzzProgram::from).collect() + } else { + Vec::default() } - } - } - dir = cwd.parent(); + }) + .unwrap_or_default() } - throw!(Error::BadWorkspace) -} - -pub fn find_full_path(input: &str) -> Result { - let path = Path::new(input); - - // If the path is absolute, return it directly - if path.is_absolute() { - return Ok(path.to_path_buf()); + pub fn accounts(&self) -> Vec { + self.fuzz + .as_ref() + .map(|fuzz| { + if let Some(accounts) = &fuzz.accounts { + accounts.iter().map(FuzzAccount::from).collect() + } else { + Vec::default() + } + }) + .unwrap_or_default() } - - let root = discover_root().expect("Failed to obtain Anchor root"); - - Ok(root.join(path)) } diff --git a/crates/config/src/utils.rs b/crates/config/src/utils.rs new file mode 100644 index 00000000..09050ca7 --- /dev/null +++ b/crates/config/src/utils.rs @@ -0,0 +1,54 @@ +use crate::{argument::Argument, Error, ANCHOR_TOML}; +use anyhow::Context; +use fehler::throw; +use std::{ + env, + path::{Path, PathBuf}, +}; + +pub(crate) fn resolve_path(filename: &str) -> PathBuf { + let path = Path::new(filename); + if path.is_absolute() { + path.to_path_buf() + } else { + discover_root() + .map(|cwd| cwd.join(path)) + .unwrap_or_else(|_| panic!("Failed to resolve relative path: {}", path.display())) + } +} + +pub(crate) fn arg_to_string(arg: &Argument) -> Vec { + let val = arg.value.clone().unwrap_or_default(); + if let Some(opt) = &arg.short_opt { + vec![opt.clone(), val] + } else if let Some(opt) = &arg.long_opt { + vec![opt.clone(), val] + } else { + vec![] + } +} + +/// Tries to find the root directory with the `Anchor.toml` file. +/// Throws an error when there is no directory with the `Anchor.toml` file +pub fn discover_root() -> Result { + let current_dir = env::current_dir()?; + let mut dir = Some(current_dir.as_path()); + while let Some(cwd) = dir { + for file in std::fs::read_dir(cwd) + .with_context(|| format!("Error reading the directory with path: {}", cwd.display()))? + { + let path = file + .with_context(|| { + format!("Error reading the directory with path: {}", cwd.display()) + })? + .path(); + if let Some(filename) = path.file_name() { + if filename.to_str() == Some(ANCHOR_TOML) { + return Ok(PathBuf::from(cwd)); + } + } + } + dir = cwd.parent(); + } + throw!(Error::BadWorkspace) +} diff --git a/crates/config/template/Trident.toml.tmpl b/crates/config/template/Trident.toml.tmpl new file mode 100644 index 00000000..cd820720 --- /dev/null +++ b/crates/config/template/Trident.toml.tmpl @@ -0,0 +1,13 @@ +# For the detailed description of the parameters, see: https://ackee.xyz/trident/docs/latest/features/trident-manifest/ + +[fuzz] +fuzzing_with_stats = true + +[honggfuzz] +iterations = 10000 +timeout = 20 +exit_upon_crash = true + +[afl] +iterations = 10000 +timeout = 20 diff --git a/crates/fuzz/src/fuzz_client.rs b/crates/fuzz/src/fuzz_client.rs index f310de49..f03df694 100644 --- a/crates/fuzz/src/fuzz_client.rs +++ b/crates/fuzz/src/fuzz_client.rs @@ -1,6 +1,5 @@ #![allow(dead_code)] -use trident_config::Config; use crate::error::*; use solana_sdk::account::AccountSharedData; use solana_sdk::hash::Hash; @@ -8,6 +7,7 @@ use solana_sdk::instruction::Instruction; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::Keypair; use solana_sdk::sysvar::Sysvar; +use trident_config::Config; use trident_svm::utils::ProgramEntrypoint; /// A trait providing methods to read and write (manipulate) accounts diff --git a/crates/fuzz/src/fuzz_client_impl.rs b/crates/fuzz/src/fuzz_client_impl.rs index b5fc7a87..8279e777 100644 --- a/crates/fuzz/src/fuzz_client_impl.rs +++ b/crates/fuzz/src/fuzz_client_impl.rs @@ -14,8 +14,7 @@ impl FuzzClient for TridentSVM<'_> { fn new_client(programs: &[ProgramEntrypoint], config: &Config) -> Self { let sbf_programs = config - .fuzz - .programs + .programs() .iter() .fold(Vec::new(), |mut sbf_programs, config_program| { let target = SBFTargets::new( @@ -28,17 +27,18 @@ impl FuzzClient for TridentSVM<'_> { sbf_programs }); - let permanent_accounts = config.fuzz.accounts.iter().fold( - Vec::new(), - |mut permanent_accounts, config_account| { - let account = TridentAccountSharedData::new( - config_account.pubkey, - config_account.account.clone(), - ); - permanent_accounts.push(account); - permanent_accounts - }, - ); + let permanent_accounts = + config + .accounts() + .iter() + .fold(Vec::new(), |mut permanent_accounts, config_account| { + let account = TridentAccountSharedData::new( + config_account.pubkey, + config_account.account.clone(), + ); + permanent_accounts.push(account); + permanent_accounts + }); TridentSVM::new(programs, &sbf_programs, &permanent_accounts) } diff --git a/examples/cpi/cpi-metaplex-7/.gitignore b/examples/cpi/cpi-metaplex-7/.gitignore index 31f8853b..dbdeffa5 100644 --- a/examples/cpi/cpi-metaplex-7/.gitignore +++ b/examples/cpi/cpi-metaplex-7/.gitignore @@ -5,4 +5,5 @@ target node_modules test-ledger .yarn -trident-tests/fuzz_tests/fuzzing/honggfuzz/hfuzz_target +trident-tests/fuzzing/honggfuzz/hfuzz_target +trident-tests/fuzzing/afl/afl_target diff --git a/examples/cpi/cpi-metaplex-7/Cargo.lock b/examples/cpi/cpi-metaplex-7/Cargo.lock index aaabdc44..57831be1 100644 --- a/examples/cpi/cpi-metaplex-7/Cargo.lock +++ b/examples/cpi/cpi-metaplex-7/Cargo.lock @@ -2,31 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - [[package]] name = "aead" version = "0.4.3" @@ -63,18 +38,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "afl" -version = "0.15.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80bb240a3b9ff18002142c1a736e98046461d51a694d687c3e7329b456ab0fe4" -dependencies = [ - "home", - "libc", - "rustc_version", - "xdg", -] - [[package]] name = "ahash" version = "0.7.8" @@ -93,7 +56,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -108,27 +70,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "aliasable" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - [[package]] name = "anchor-attribute-access-control" version = "0.30.1" @@ -198,7 +139,7 @@ dependencies = [ "anchor-syn", "anyhow", "bs58 0.5.1", - "heck 0.3.3", + "heck", "proc-macro2", "quote", "serde_json", @@ -274,7 +215,7 @@ checksum = "31cf97b4e6f7d6144a05e435660fcf757dbc3446d38d0e2b851d11ed13625bba" dependencies = [ "anchor-lang-idl-spec", "anyhow", - "heck 0.3.3", + "heck", "regex", "serde", "serde_json", @@ -298,12 +239,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04bd077c34449319a1e4e0bc21cea572960c9ae0d0fefda0dd7c52fcc3c647a3" dependencies = [ "anchor-lang", - "spl-associated-token-account 3.0.4", - "spl-pod 0.2.5", + "spl-associated-token-account", + "spl-pod", "spl-token", - "spl-token-2022 3.0.4", - "spl-token-group-interface 0.2.5", - "spl-token-metadata-interface 0.3.5", + "spl-token-2022", + "spl-token-group-interface", + "spl-token-metadata-interface", ] [[package]] @@ -315,7 +256,7 @@ dependencies = [ "anyhow", "bs58 0.5.1", "cargo_toml", - "heck 0.3.3", + "heck", "proc-macro2", "quote", "serde", @@ -325,59 +266,12 @@ dependencies = [ "thiserror", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "anyhow" version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" -[[package]] -name = "aquamarine" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1da02abba9f9063d786eab1509833ebb2fac0f966862ca59439c76b9c566760" -dependencies = [ - "include_dir", - "itertools", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" -dependencies = [ - "derive_arbitrary", -] - [[package]] name = "ark-bn254" version = "0.4.0" @@ -419,7 +313,7 @@ dependencies = [ "derivative", "digest 0.10.7", "itertools", - "num-bigint 0.4.6", + "num-bigint", "num-traits", "paste", "rustc_version", @@ -442,7 +336,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ - "num-bigint 0.4.6", + "num-bigint", "num-traits", "proc-macro2", "quote", @@ -471,7 +365,7 @@ dependencies = [ "ark-serialize-derive", "ark-std", "digest 0.10.7", - "num-bigint 0.4.6", + "num-bigint", ] [[package]] @@ -507,109 +401,19 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "ascii" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" - -[[package]] -name = "asn1-rs" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" -dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror", - "time", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure 0.12.6", -] - -[[package]] -name = "asn1-rs-impl" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "assert_matches" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", -] - -[[package]] -name = "async-compression" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb8f1d480b0ea3783ab015936d2a55c87e219676f0c0b7dec61494043f21857" -dependencies = [ - "brotli", - "flate2", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "async-mutex" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-trait" -version = "0.1.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - [[package]] name = "atty" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi 0.1.19", + "hermit-abi", "libc", "winapi", ] @@ -620,45 +424,18 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" -[[package]] -name = "backtrace" -version = "0.3.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base64" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" -[[package]] -name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - [[package]] name = "bincode" version = "1.3.3" @@ -668,12 +445,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.6.0" @@ -845,27 +616,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "brotli" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - [[package]] name = "bs58" version = "0.4.0" @@ -923,75 +673,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" -[[package]] -name = "bytes" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" - -[[package]] -name = "bzip2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "camino" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" -dependencies = [ - "serde", -] - -[[package]] -name = "caps" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" -dependencies = [ - "libc", - "thiserror", -] - -[[package]] -name = "cargo-platform" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "cargo_toml" version = "0.19.2" @@ -1031,22 +712,7 @@ version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", "num-traits", - "serde", - "wasm-bindgen", - "windows-targets 0.52.6", -] - -[[package]] -name = "chrono-humanize" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799627e6b4d27827a814e837b9d8a504832086081806d45b1afa34dc982b023b" -dependencies = [ - "chrono", ] [[package]] @@ -1059,195 +725,71 @@ dependencies = [ ] [[package]] -name = "clap" -version = "2.34.0" +name = "console_error_panic_hook" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" dependencies = [ - "ansi_term", - "atty", - "bitflags 1.3.2", - "strsim 0.8.0", - "textwrap 0.11.0", - "unicode-width", - "vec_map", + "cfg-if", + "wasm-bindgen", ] [[package]] -name = "clap" -version = "3.2.25" +name = "console_log" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" dependencies = [ - "atty", - "bitflags 1.3.2", - "clap_lex", - "indexmap 1.9.3", - "once_cell", - "strsim 0.10.0", - "termcolor", - "textwrap 0.16.1", + "log", + "web-sys", ] [[package]] -name = "clap_lex" -version = "0.2.4" +name = "constant_time_eq" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "cpi-metaplex-7" +version = "0.1.0" dependencies = [ - "os_str_bytes", + "anchor-lang", + "anchor-spl", + "mpl-token-metadata", ] [[package]] -name = "combine" -version = "3.8.1" +name = "cpufeatures" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ - "ascii", - "byteorder", - "either", - "memchr", - "unreachable", + "libc", ] [[package]] -name = "concurrent-queue" -version = "2.5.0" +name = "crossbeam-deque" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ + "crossbeam-epoch", "crossbeam-utils", ] [[package]] -name = "console" -version = "0.15.8" +name = "crossbeam-epoch" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "encode_unicode 0.3.6", - "lazy_static", - "libc", - "unicode-width", - "windows-sys 0.52.0", + "crossbeam-utils", ] [[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] - -[[package]] -name = "console_log" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" -dependencies = [ - "log", - "web-sys", -] - -[[package]] -name = "const-oid" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" - -[[package]] -name = "constant_time_eq" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" - -[[package]] -name = "convert_case" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "cpi-metaplex-7" -version = "0.1.0" -dependencies = [ - "anchor-lang", - "anchor-spl", - "mpl-token-metadata", -] - -[[package]] -name = "cpufeatures" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.20" +name = "crossbeam-utils" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" @@ -1277,27 +819,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "csv" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" -dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" -dependencies = [ - "memchr", -] - [[package]] name = "ctr" version = "0.8.0" @@ -1341,7 +862,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim 0.11.1", + "strsim", "syn 2.0.87", ] @@ -1356,58 +877,6 @@ dependencies = [ "syn 2.0.87", ] -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", - "rayon", -] - -[[package]] -name = "data-encoding" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" - -[[package]] -name = "der" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" -dependencies = [ - "const-oid", -] - -[[package]] -name = "der-parser" -version = "8.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" -dependencies = [ - "asn1-rs", - "displaydoc", - "nom", - "num-bigint 0.4.6", - "num-traits", - "rusticata-macros", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", -] - [[package]] name = "derivation-path" version = "0.2.0" @@ -1425,35 +894,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive_arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "dialoguer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" -dependencies = [ - "console", - "shell-words", - "tempfile", - "zeroize", -] - -[[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - [[package]] name = "digest" version = "0.9.0" @@ -1474,82 +914,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dir-diff" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ad16bf5f84253b50d6557681c58c3ab67c47c77d39fed9aeb56e947290bd10" -dependencies = [ - "walkdir", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "dlopen2" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" -dependencies = [ - "dlopen2_derive", - "libc", - "once_cell", - "winapi", -] - -[[package]] -name = "dlopen2_derive" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "downcast" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" - -[[package]] -name = "eager" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe71d579d1812060163dff96056261deb5bf6729b100fa2e36a68b9649ba3d3" - [[package]] name = "ed25519" version = "1.5.3" @@ -1585,18 +949,6 @@ dependencies = [ "sha2 0.10.8", ] -[[package]] -name = "educe" -version = "0.4.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" -dependencies = [ - "enum-ordinalize", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "either" version = "1.13.0" @@ -1604,716 +956,614 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] -name = "encode_unicode" -version = "0.3.6" +name = "env_logger" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] [[package]] -name = "encode_unicode" -version = "1.0.0" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "encoding_rs" -version = "0.8.35" +name = "feature-probe" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" [[package]] -name = "enum-iterator" -version = "1.5.0" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fd242f399be1da0a5354aa462d57b4ab2b4ee0683cc552f7c007d2d12d36e94" -dependencies = [ - "enum-iterator-derive", -] +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "enum-iterator-derive" -version = "1.4.0" +name = "generic-array" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", + "serde", + "typenum", + "version_check", ] [[package]] -name = "enum-ordinalize" -version = "3.1.15" +name = "getrandom" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf1fa3f06bbff1ea5b1a9c7b14aa992a39657db60a2759457328d7e058f49ee" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "num-bigint 0.4.6", - "num-traits", - "proc-macro2", - "quote", - "syn 2.0.87", + "cfg-if", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] -name = "env_logger" -version = "0.9.3" +name = "getrandom" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.9" +name = "hashbrown" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "libc", - "windows-sys 0.52.0", + "ahash 0.7.8", ] [[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "fastrand" -version = "2.1.1" +name = "hashbrown" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] [[package]] -name = "feature-probe" -version = "0.1.1" +name = "hashbrown" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" [[package]] -name = "fehler" -version = "1.0.0" +name = "heck" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5729fe49ba028cd550747b6e62cd3d841beccab5390aa398538c31a2d983635" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" dependencies = [ - "fehler-macros", + "unicode-segmentation", ] [[package]] -name = "fehler-macros" -version = "1.0.0" +name = "hermit-abi" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccb5acb1045ebbfa222e2c50679e392a71dd77030b78fb0189f2d9c5974400f9" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "libc", ] [[package]] -name = "filetime" -version = "0.2.25" +name = "hmac" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.59.0", + "crypto-mac", + "digest 0.9.0", ] [[package]] -name = "flate2" -version = "1.0.34" +name = "hmac" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "crc32fast", - "miniz_oxide", + "digest 0.10.7", ] [[package]] -name = "float-cmp" -version = "0.9.0" +name = "hmac-drbg" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ - "num-traits", + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "humantime" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] -name = "form_urlencoded" -version = "1.2.1" +name = "ident_case" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] -name = "fragile" -version = "2.0.0" +name = "im" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "rayon", + "serde", + "sized-chunks", + "typenum", + "version_check", +] [[package]] -name = "futures" -version = "0.3.31" +name = "indexmap" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", + "equivalent", + "hashbrown 0.15.1", ] [[package]] -name = "futures-channel" -version = "0.3.31" +name = "itertools" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ - "futures-core", - "futures-sink", + "either", ] [[package]] -name = "futures-core" -version = "0.3.31" +name = "itoa" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] -name = "futures-executor" -version = "0.3.31" +name = "jobserver" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ - "futures-core", - "futures-task", - "futures-util", + "libc", ] [[package]] -name = "futures-io" -version = "0.3.31" +name = "js-sys" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +dependencies = [ + "wasm-bindgen", +] [[package]] -name = "futures-macro" -version = "0.3.31" +name = "keccak" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", + "cpufeatures", ] [[package]] -name = "futures-sink" -version = "0.3.31" +name = "lazy_static" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] -name = "futures-task" -version = "0.3.31" +name = "libc" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] -name = "futures-util" -version = "0.3.31" +name = "libsecp256k1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", + "arrayref", + "base64 0.12.3", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "typenum", ] [[package]] -name = "fuzz_tests" -version = "0.1.0" +name = "libsecp256k1-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" dependencies = [ - "anchor-spl", - "arbitrary", - "assert_matches", - "cpi-metaplex-7", - "mpl-token-metadata", - "trident-client", + "crunchy", + "digest 0.9.0", + "subtle", ] [[package]] -name = "generic-array" -version = "0.14.7" +name = "libsecp256k1-gen-ecmult" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" dependencies = [ - "serde", - "typenum", - "version_check", + "libsecp256k1-core", ] [[package]] -name = "gethostname" -version = "0.2.3" +name = "libsecp256k1-gen-genmult" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" dependencies = [ - "libc", - "winapi", + "libsecp256k1-core", ] [[package]] -name = "getrandom" -version = "0.1.16" +name = "light-poseidon" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", - "wasm-bindgen", + "ark-bn254", + "ark-ff", + "num-bigint", + "thiserror", ] [[package]] -name = "getrandom" -version = "0.2.15" +name = "lock_api" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", + "autocfg", + "scopeguard", ] [[package]] -name = "gimli" -version = "0.31.1" +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "memchr" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] -name = "goblin" -version = "0.5.4" +name = "memmap2" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7666983ed0dd8d21a6f6576ee00053ca0926fb281a5522577a4dbd0f1b54143" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ - "log", - "plain", - "scroll", + "libc", ] [[package]] -name = "h2" -version = "0.3.26" +name = "memoffset" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 2.6.0", - "slab", - "tokio", - "tokio-util 0.7.12", - "tracing", + "autocfg", ] [[package]] -name = "hash32" -version = "0.2.1" +name = "merlin" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", ] [[package]] -name = "hashbrown" -version = "0.11.2" +name = "mpl-token-metadata" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "caf0f61b553e424a6234af1268456972ee66c2222e1da89079242251fa7479e5" dependencies = [ - "ahash 0.7.8", + "borsh 0.10.4", + "num-derive 0.3.3", + "num-traits", + "solana-program", + "thiserror", ] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "num-bigint" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "ahash 0.7.8", + "num-integer", + "num-traits", ] [[package]] -name = "hashbrown" -version = "0.13.2" +name = "num-derive" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "ahash 0.8.11", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hashbrown" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" - -[[package]] -name = "heck" -version = "0.3.3" +name = "num-derive" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ - "unicode-segmentation", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.1.19" +name = "num-integer" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "libc", + "num-traits", ] [[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - -[[package]] -name = "histogram" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cb882ccb290b8646e554b157ab0b71e64e8d5bef775cd66b6531e52d302669" - -[[package]] -name = "hmac" -version = "0.8.1" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "crypto-mac", - "digest 0.9.0", + "autocfg", ] [[package]] -name = "hmac" -version = "0.12.1" +name = "num_enum" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" dependencies = [ - "digest 0.10.7", + "num_enum_derive 0.6.1", ] [[package]] -name = "hmac-drbg" -version = "0.3.0" +name = "num_enum" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ - "digest 0.9.0", - "generic-array", - "hmac 0.8.1", + "num_enum_derive 0.7.3", ] [[package]] -name = "home" -version = "0.5.9" +name = "num_enum_derive" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ - "windows-sys 0.52.0", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "honggfuzz" -version = "0.5.56" +name = "num_enum_derive" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c76b6234c13c9ea73946d1379d33186151148e0da231506b964b44f3d023505" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "arbitrary", - "lazy_static", - "memmap2 0.9.5", - "rustc_version", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "http" -version = "0.2.12" +name = "once_cell" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] -name = "http-body" -version = "0.4.6" +name = "opaque-debug" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] -name = "httparse" -version = "1.9.5" +name = "parking_lot" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "parking_lot_core" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] [[package]] -name = "humantime" -version = "2.1.0" +name = "paste" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] -name = "hyper" -version = "0.14.31" +name = "pbkdf2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", + "crypto-mac", ] [[package]] -name = "hyper-rustls" -version = "0.24.2" +name = "pbkdf2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "futures-util", - "http", - "hyper", - "rustls", - "tokio", - "tokio-rustls", + "digest 0.10.7", ] [[package]] -name = "iana-time-zone" -version = "0.1.61" +name = "percent-encoding" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "polyval" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" dependencies = [ - "cc", + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", ] [[package]] -name = "icu_collections" -version = "1.5.0" +name = "ppv-lite86" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "displaydoc", - "yoke", - "zerofrom", - "zerovec", + "zerocopy", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "proc-macro-crate" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", + "toml 0.5.11", ] [[package]] -name = "icu_locid_transform" -version = "1.5.0" +name = "proc-macro-crate" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", + "once_cell", + "toml_edit 0.19.15", ] [[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - -[[package]] -name = "icu_normalizer" -version = "1.5.0" +name = "proc-macro-crate" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec", + "toml_edit 0.22.22", ] [[package]] -name = "icu_normalizer_data" -version = "1.5.0" +name = "proc-macro-error" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "version_check", +] [[package]] -name = "icu_properties" -version = "1.5.1" +name = "proc-macro-error-attr" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "displaydoc", - "icu_collections", - "icu_locid_transform", - "icu_properties_data", - "icu_provider", - "tinystr", - "zerovec", + "proc-macro2", + "quote", + "version_check", ] [[package]] -name = "icu_properties_data" -version = "1.5.0" +name = "proc-macro2" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +dependencies = [ + "unicode-ident", +] [[package]] -name = "icu_provider" -version = "1.5.0" +name = "qstring" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerovec", + "percent-encoding", ] [[package]] -name = "icu_provider_macros" -version = "1.5.0" +name = "qualifier_attr" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", @@ -2321,3897 +1571,825 @@ dependencies = [ ] [[package]] -name = "ident_case" -version = "1.0.1" +name = "quote" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] [[package]] -name = "idna" -version = "1.0.3" +name = "rand" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", ] [[package]] -name = "idna_adapter" -version = "1.2.0" +name = "rand" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "icu_normalizer", - "icu_properties", + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", ] [[package]] -name = "im" -version = "15.1.0" +name = "rand_chacha" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ - "bitmaps", - "rand_core 0.6.4", - "rand_xoshiro", - "rayon", - "serde", - "sized-chunks", - "typenum", - "version_check", + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] -name = "include_dir" -version = "0.7.4" +name = "rand_chacha" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "include_dir_macros", + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] -name = "include_dir_macros" -version = "0.7.4" +name = "rand_core" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "proc-macro2", - "quote", + "getrandom 0.1.16", ] [[package]] -name = "index_list" -version = "0.2.13" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e6ba961c14e98151cd6416dd3685efe786a94c38bc1a535c06ceff0a1600813" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] [[package]] -name = "indexmap" -version = "1.9.3" +name = "rand_hc" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "autocfg", - "hashbrown 0.12.3", + "rand_core 0.5.1", ] [[package]] -name = "indexmap" -version = "2.6.0" +name = "rand_xoshiro" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" dependencies = [ - "equivalent", - "hashbrown 0.15.1", + "rand_core 0.6.4", ] [[package]] -name = "indicatif" -version = "0.17.8" +name = "rayon" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ - "console", - "instant", - "number_prefix", - "portable-atomic", - "unicode-width", + "either", + "rayon-core", ] [[package]] -name = "instant" -version = "0.1.13" +name = "rayon-core" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "cfg-if", + "crossbeam-deque", + "crossbeam-utils", ] [[package]] -name = "ipnet" -version = "2.10.1" +name = "redox_syscall" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags", +] [[package]] -name = "is-terminal" -version = "0.4.13" +name = "regex" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ - "hermit-abi 0.4.0", - "libc", - "windows-sys 0.52.0", + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "regex-automata" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ - "either", + "aho-corasick", + "memchr", + "regex-syntax", ] [[package]] -name = "itoa" -version = "1.0.11" +name = "regex-syntax" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] -name = "jobserver" -version = "0.1.32" +name = "rustc-hash" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" -dependencies = [ - "libc", -] +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] -name = "js-sys" -version = "0.3.72" +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "wasm-bindgen", + "semver", ] [[package]] -name = "jsonrpc-core" -version = "18.0.0" +name = "rustversion" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" -dependencies = [ - "futures", - "futures-executor", - "futures-util", - "log", - "serde", - "serde_derive", - "serde_json", -] +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] -name = "keccak" -version = "0.1.5" +name = "ryu" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" -dependencies = [ - "cpufeatures", -] +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] -name = "lazy_static" -version = "1.5.0" +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "libc" -version = "0.2.161" +name = "semver" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] -name = "libredox" -version = "0.1.3" +name = "serde" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" dependencies = [ - "bitflags 2.6.0", - "libc", - "redox_syscall", + "serde_derive", ] [[package]] -name = "libsecp256k1" -version = "0.6.0" +name = "serde_bytes" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" dependencies = [ - "arrayref", - "base64 0.12.3", - "digest 0.9.0", - "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.7.3", "serde", - "sha2 0.9.9", - "typenum", ] [[package]] -name = "libsecp256k1-core" -version = "0.2.2" +name = "serde_derive" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" +checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.2.1" +name = "serde_json" +version = "1.0.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" dependencies = [ - "libsecp256k1-core", + "itoa", + "memchr", + "ryu", + "serde", ] [[package]] -name = "libsecp256k1-gen-genmult" -version = "0.2.1" +name = "serde_spanned" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ - "libsecp256k1-core", + "serde", ] [[package]] -name = "light-poseidon" -version = "0.2.0" +name = "serde_with" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" dependencies = [ - "ark-bn254", - "ark-ff", - "num-bigint 0.4.6", - "thiserror", + "serde", + "serde_with_macros", ] [[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - -[[package]] -name = "litemap" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" - -[[package]] -name = "lock_api" -version = "0.4.12" +name = "serde_with_macros" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "autocfg", - "scopeguard", + "darling", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "log" -version = "0.4.22" +name = "sha2" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] [[package]] -name = "lru" -version = "0.7.8" +name = "sha2" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ - "hashbrown 0.12.3", + "cfg-if", + "cpufeatures", + "digest 0.10.7", ] [[package]] -name = "lz4" -version = "1.28.0" +name = "sha3" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d1febb2b4a79ddd1980eede06a8f7902197960aa0383ffcfdd62fe723036725" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" dependencies = [ - "lz4-sys", + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", ] [[package]] -name = "lz4-sys" -version = "1.11.1+lz4-1.10.0" +name = "sha3" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "cc", - "libc", + "digest 0.10.7", + "keccak", ] [[package]] -name = "memchr" -version = "2.7.4" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "memmap2" -version = "0.5.10" +name = "signature" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" -dependencies = [ - "libc", -] - -[[package]] -name = "memmap2" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "merlin" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.6.4", - "zeroize", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" -dependencies = [ - "adler2", -] - -[[package]] -name = "mio" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", -] - -[[package]] -name = "mockall" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" -dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive", - "predicates", - "predicates-tree", -] - -[[package]] -name = "mockall_derive" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "modular-bitfield" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" -dependencies = [ - "modular-bitfield-impl", - "static_assertions", -] - -[[package]] -name = "modular-bitfield-impl" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "mpl-token-metadata" -version = "4.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf0f61b553e424a6234af1268456972ee66c2222e1da89079242251fa7479e5" -dependencies = [ - "borsh 0.10.4", - "num-derive 0.3.3", - "num-traits", - "solana-program", - "thiserror", -] - -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.7.1", - "pin-utils", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "num" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" -dependencies = [ - "num-bigint 0.2.6", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "num-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" -dependencies = [ - "autocfg", - "num-bigint 0.2.6", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.9", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" -dependencies = [ - "num_enum_derive 0.6.1", -] - -[[package]] -name = "num_enum" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" -dependencies = [ - "num_enum_derive 0.7.3", -] - -[[package]] -name = "num_enum_derive" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" -dependencies = [ - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - -[[package]] -name = "object" -version = "0.36.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" -dependencies = [ - "memchr", -] - -[[package]] -name = "oid-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" -dependencies = [ - "asn1-rs", -] - -[[package]] -name = "once_cell" -version = "1.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" - -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "opentelemetry" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8" -dependencies = [ - "async-trait", - "crossbeam-channel", - "futures-channel", - "futures-executor", - "futures-util", - "js-sys", - "lazy_static", - "percent-encoding", - "pin-project", - "rand 0.8.5", - "thiserror", -] - -[[package]] -name = "os_str_bytes" -version = "6.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" - -[[package]] -name = "ouroboros" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1358bd1558bd2a083fed428ffeda486fbfb323e698cdda7794259d592ca72db" -dependencies = [ - "aliasable", - "ouroboros_macro", -] - -[[package]] -name = "ouroboros_macro" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7" -dependencies = [ - "Inflector", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pathdiff" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" - -[[package]] -name = "pbkdf2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" -dependencies = [ - "crypto-mac", -] - -[[package]] -name = "pbkdf2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "pem" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" -dependencies = [ - "base64 0.13.1", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "percentage" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd23b938276f14057220b707937bcb42fa76dda7560e57a2da30cb52d557937" -dependencies = [ - "num", -] - -[[package]] -name = "pin-project" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs8" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" -dependencies = [ - "der", - "spki", - "zeroize", -] - -[[package]] -name = "pkg-config" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" - -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - -[[package]] -name = "polyval" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash", -] - -[[package]] -name = "portable-atomic" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "predicates" -version = "2.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" -dependencies = [ - "difflib", - "float-cmp", - "itertools", - "normalize-line-endings", - "predicates-core", - "regex", -] - -[[package]] -name = "predicates-core" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" - -[[package]] -name = "predicates-tree" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" -dependencies = [ - "predicates-core", - "termtree", -] - -[[package]] -name = "prettytable" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46480520d1b77c9a3482d39939fcf96831537a250ec62d4fd8fbdf8e0302e781" -dependencies = [ - "csv", - "encode_unicode 1.0.0", - "is-terminal", - "lazy_static", - "term", - "unicode-width", -] - -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml 0.5.11", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" -dependencies = [ - "toml_edit 0.22.22", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "qstring" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "qualifier_attr" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "quinn" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" -dependencies = [ - "bytes", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "quinn-proto" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" -dependencies = [ - "arbitrary", - "bytes", - "rand 0.8.5", - "ring 0.16.20", - "rustc-hash", - "rustls", - "rustls-native-certs", - "slab", - "thiserror", - "tinyvec", - "tracing", -] - -[[package]] -name = "quinn-udp" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" -dependencies = [ - "bytes", - "libc", - "socket2", - "tracing", - "windows-sys 0.48.0", -] - -[[package]] -name = "quote" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.15", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_xoshiro" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" -dependencies = [ - "rand_core 0.6.4", -] - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "rcgen" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" -dependencies = [ - "pem", - "ring 0.16.20", - "time", - "yasna", -] - -[[package]] -name = "redox_syscall" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.15", - "libredox", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "async-compression", - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "system-configuration", - "tokio", - "tokio-rustls", - "tokio-util 0.7.12", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots 0.25.4", - "winreg", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", -] - -[[package]] -name = "ring" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.15", - "libc", - "spin 0.9.8", - "untrusted 0.9.0", - "windows-sys 0.52.0", -] - -[[package]] -name = "rpassword" -version = "7.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" -dependencies = [ - "libc", - "rtoolbox", - "windows-sys 0.48.0", -] - -[[package]] -name = "rtoolbox" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rusticata-macros" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" -dependencies = [ - "nom", -] - -[[package]] -name = "rustix" -version = "0.38.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375116bee2be9ed569afe2154ea6a99dfdffd257f533f187498c2a8f5feaf4ee" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring 0.17.8", - "rustls-webpki", - "sct", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", -] - -[[package]] -name = "rustversion" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scroll" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" -dependencies = [ - "scroll_derive", -] - -[[package]] -name = "scroll_derive" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", -] - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.6.0", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" -dependencies = [ - "serde", -] - -[[package]] -name = "seqlock" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c67b6f14ecc5b86c66fa63d76b5092352678545a8a3cdae80aef5128371910" -dependencies = [ - "parking_lot", -] - -[[package]] -name = "serde" -version = "1.0.214" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_bytes" -version = "0.11.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.214" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "serde_json" -version = "1.0.132" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "serde_spanned" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" -dependencies = [ - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha3" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "keccak", - "opaque-debug", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest 0.10.7", - "keccak", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shell-words" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "sized-chunks" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" -dependencies = [ - "bitmaps", - "typenum", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "solana-account-decoder" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b109fd3a106e079005167e5b0e6f6d2c88bbedec32530837b584791a8b5abf36" -dependencies = [ - "Inflector", - "base64 0.21.7", - "bincode", - "bs58 0.4.0", - "bv", - "lazy_static", - "serde", - "serde_derive", - "serde_json", - "solana-config-program", - "solana-sdk", - "spl-token", - "spl-token-2022 1.0.0", - "spl-token-group-interface 0.1.0", - "spl-token-metadata-interface 0.2.0", - "thiserror", - "zstd", -] - -[[package]] -name = "solana-accounts-db" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9829d10d521f3ed5e50c12d2b62784e2901aa484a92c2aa3924151da046139" -dependencies = [ - "arrayref", - "bincode", - "blake3", - "bv", - "bytemuck", - "byteorder", - "bzip2", - "crossbeam-channel", - "dashmap", - "flate2", - "fnv", - "im", - "index_list", - "itertools", - "lazy_static", - "log", - "lz4", - "memmap2 0.5.10", - "modular-bitfield", - "num-derive 0.4.2", - "num-traits", - "num_cpus", - "num_enum 0.7.3", - "ouroboros", - "percentage", - "qualifier_attr", - "rand 0.8.5", - "rayon", - "regex", - "rustc_version", - "seqlock", - "serde", - "serde_derive", - "smallvec", - "solana-bucket-map", - "solana-config-program", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-measure", - "solana-metrics", - "solana-nohash-hasher", - "solana-program-runtime", - "solana-rayon-threadlimit", - "solana-sdk", - "solana-stake-program", - "solana-system-program", - "solana-vote-program", - "static_assertions", - "strum", - "strum_macros", - "tar", - "tempfile", - "thiserror", -] - -[[package]] -name = "solana-address-lookup-table-program" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3527a26138b5deb126f13c27743f3d95ac533abee5979e4113f6d59ef919cc6" -dependencies = [ - "bincode", - "bytemuck", - "log", - "num-derive 0.4.2", - "num-traits", - "rustc_version", - "serde", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-program", - "solana-program-runtime", - "solana-sdk", - "thiserror", -] - -[[package]] -name = "solana-banks-client" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e58fa66e1e240097665e7f87b267aa8e976ea3fcbd86918c8fd218c875395ada" -dependencies = [ - "borsh 1.5.1", - "futures", - "solana-banks-interface", - "solana-program", - "solana-sdk", - "tarpc", - "thiserror", - "tokio", - "tokio-serde", -] - -[[package]] -name = "solana-banks-interface" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54d0a4334c153eadaa0326296a47a92d110c1cc975075fd6e1a7b67067f9812" -dependencies = [ - "serde", - "solana-sdk", - "tarpc", -] - -[[package]] -name = "solana-banks-server" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cbe287a0f859362de9b155fabd44e479eba26d5d80e07a7d021297b7b06ecba" -dependencies = [ - "bincode", - "crossbeam-channel", - "futures", - "solana-accounts-db", - "solana-banks-interface", - "solana-client", - "solana-runtime", - "solana-sdk", - "solana-send-transaction-service", - "tarpc", - "tokio", - "tokio-serde", -] - -[[package]] -name = "solana-bpf-loader-program" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8cc27ceda9a22804d73902f5d718ff1331aa53990c2665c90535f6b182db259" -dependencies = [ - "bincode", - "byteorder", - "libsecp256k1", - "log", - "scopeguard", - "solana-measure", - "solana-program-runtime", - "solana-sdk", - "solana-zk-token-sdk", - "solana_rbpf", - "thiserror", -] - -[[package]] -name = "solana-bucket-map" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca55ec9b8d01d2e3bba9fad77b27c9a8fd51fe12475549b93a853d921b653139" -dependencies = [ - "bv", - "bytemuck", - "log", - "memmap2 0.5.10", - "modular-bitfield", - "num_enum 0.7.3", - "rand 0.8.5", - "solana-measure", - "solana-sdk", - "tempfile", -] - -[[package]] -name = "solana-clap-utils" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "074ef478856a45d5627270fbc6b331f91de9aae7128242d9e423931013fb8a2a" -dependencies = [ - "chrono", - "clap 2.34.0", - "rpassword", - "solana-remote-wallet", - "solana-sdk", - "thiserror", - "tiny-bip39", - "uriparse", - "url", -] - -[[package]] -name = "solana-client" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a9f32c42402c4b9484d5868ac74b7e0a746e3905d8bfd756e1203e50cbb87e" -dependencies = [ - "async-trait", - "bincode", - "dashmap", - "futures", - "futures-util", - "indexmap 2.6.0", - "indicatif", - "log", - "quinn", - "rayon", - "solana-connection-cache", - "solana-measure", - "solana-metrics", - "solana-pubsub-client", - "solana-quic-client", - "solana-rpc-client", - "solana-rpc-client-api", - "solana-rpc-client-nonce-utils", - "solana-sdk", - "solana-streamer", - "solana-thin-client", - "solana-tpu-client", - "solana-udp-client", - "thiserror", - "tokio", -] - -[[package]] -name = "solana-compute-budget-program" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6af050a6e0b402e322aa21f5441c7e27cdd52624a2d659f455b68afd7cda218c" -dependencies = [ - "solana-program-runtime", - "solana-sdk", -] - -[[package]] -name = "solana-config-program" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d75b803860c0098e021a26f0624129007c15badd5b0bc2fbd9f0e1a73060d3b" -dependencies = [ - "bincode", - "chrono", - "serde", - "serde_derive", - "solana-program-runtime", - "solana-sdk", -] - -[[package]] -name = "solana-connection-cache" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9306ede13e8ceeab8a096bcf5fa7126731e44c201ca1721ea3c38d89bcd4111" -dependencies = [ - "async-trait", - "bincode", - "crossbeam-channel", - "futures-util", - "indexmap 2.6.0", - "log", - "rand 0.8.5", - "rayon", - "rcgen", - "solana-measure", - "solana-metrics", - "solana-sdk", - "thiserror", - "tokio", -] - -[[package]] -name = "solana-cost-model" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c852790063f7646a1c5199234cc82e1304b55a3b3fb8055a0b5c8b0393565c1c" -dependencies = [ - "lazy_static", - "log", - "rustc_version", - "solana-address-lookup-table-program", - "solana-bpf-loader-program", - "solana-compute-budget-program", - "solana-config-program", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-loader-v4-program", - "solana-metrics", - "solana-program-runtime", - "solana-sdk", - "solana-stake-program", - "solana-system-program", - "solana-vote-program", -] - -[[package]] -name = "solana-frozen-abi" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03ab2c30c15311b511c0d1151e4ab6bc9a3e080a37e7c6e7c2d96f5784cf9434" -dependencies = [ - "block-buffer 0.10.4", - "bs58 0.4.0", - "bv", - "either", - "generic-array", - "im", - "lazy_static", - "log", - "memmap2 0.5.10", - "rustc_version", - "serde", - "serde_bytes", - "serde_derive", - "sha2 0.10.8", - "solana-frozen-abi-macro", - "subtle", - "thiserror", -] - -[[package]] -name = "solana-frozen-abi-macro" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c142f779c3633ac83c84d04ff06c70e1f558c876f13358bed77ba629c7417932" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "syn 2.0.87", -] - -[[package]] -name = "solana-loader-v4-program" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b58f70f5883b0f26a6011ed23f76c493a3f22df63aec46cfe8e1b9bf82b5cc" -dependencies = [ - "log", - "solana-measure", - "solana-program-runtime", - "solana-sdk", - "solana_rbpf", -] - -[[package]] -name = "solana-logger" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121d36ffb3c6b958763312cbc697fbccba46ee837d3a0aa4fc0e90fcb3b884f3" -dependencies = [ - "env_logger", - "lazy_static", - "log", -] - -[[package]] -name = "solana-measure" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c01a7f9cdc9d9d37a3d5651b2fe7ec9d433c2a3470b9f35897e373b421f0737" -dependencies = [ - "log", - "solana-sdk", -] - -[[package]] -name = "solana-metrics" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e36052aff6be1536bdf6f737c6e69aca9dbb6a2f3f582e14ecb0ddc0cd66ce" -dependencies = [ - "crossbeam-channel", - "gethostname", - "lazy_static", - "log", - "reqwest", - "solana-sdk", - "thiserror", -] - -[[package]] -name = "solana-net-utils" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1f5c6be9c5b272866673741e1ebc64b2ea2118e5c6301babbce526fdfb15f4" -dependencies = [ - "bincode", - "clap 3.2.25", - "crossbeam-channel", - "log", - "nix", - "rand 0.8.5", - "serde", - "serde_derive", - "socket2", - "solana-logger", - "solana-sdk", - "solana-version", - "tokio", - "url", -] - -[[package]] -name = "solana-nohash-hasher" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8a731ed60e89177c8a7ab05fe0f1511cedd3e70e773f288f9de33a9cfdc21e" - -[[package]] -name = "solana-perf" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28acaf22477566a0fbddd67249ea5d859b39bacdb624aff3fadd3c5745e2643c" -dependencies = [ - "ahash 0.8.11", - "bincode", - "bv", - "caps", - "curve25519-dalek", - "dlopen2", - "fnv", - "lazy_static", - "libc", - "log", - "nix", - "rand 0.8.5", - "rayon", - "rustc_version", - "serde", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-metrics", - "solana-rayon-threadlimit", - "solana-sdk", - "solana-vote-program", -] - -[[package]] -name = "solana-program" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c10f4588cefd716b24a1a40dd32c278e43a560ab8ce4de6b5805c9d113afdfa1" -dependencies = [ - "ark-bn254", - "ark-ec", - "ark-ff", - "ark-serialize", - "base64 0.21.7", - "bincode", - "bitflags 2.6.0", - "blake3", - "borsh 0.10.4", - "borsh 0.9.3", - "borsh 1.5.1", - "bs58 0.4.0", - "bv", - "bytemuck", - "cc", - "console_error_panic_hook", - "console_log", - "curve25519-dalek", - "getrandom 0.2.15", - "itertools", - "js-sys", - "lazy_static", - "libc", - "libsecp256k1", - "light-poseidon", - "log", - "memoffset 0.9.1", - "num-bigint 0.4.6", - "num-derive 0.4.2", - "num-traits", - "parking_lot", - "rand 0.8.5", - "rustc_version", - "rustversion", - "serde", - "serde_bytes", - "serde_derive", - "serde_json", - "sha2 0.10.8", - "sha3 0.10.8", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-sdk-macro", - "thiserror", - "tiny-bip39", - "wasm-bindgen", - "zeroize", -] - -[[package]] -name = "solana-program-runtime" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf0c3eab2a80f514289af1f422c121defb030937643c43b117959d6f1932fb5" -dependencies = [ - "base64 0.21.7", - "bincode", - "eager", - "enum-iterator", - "itertools", - "libc", - "log", - "num-derive 0.4.2", - "num-traits", - "percentage", - "rand 0.8.5", - "rustc_version", - "serde", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-measure", - "solana-metrics", - "solana-sdk", - "solana_rbpf", - "thiserror", -] - -[[package]] -name = "solana-program-test" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1382a5768ff738e283770ee331d0a4fa04aa1aceed8eb820a97094c93d53b72" -dependencies = [ - "assert_matches", - "async-trait", - "base64 0.21.7", - "bincode", - "chrono-humanize", - "crossbeam-channel", - "log", - "serde", - "solana-accounts-db", - "solana-banks-client", - "solana-banks-interface", - "solana-banks-server", - "solana-bpf-loader-program", - "solana-logger", - "solana-program-runtime", - "solana-runtime", - "solana-sdk", - "solana-vote-program", - "solana_rbpf", - "test-case", - "thiserror", - "tokio", -] - -[[package]] -name = "solana-pubsub-client" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b064e76909d33821b80fdd826e6757251934a52958220c92639f634bea90366d" -dependencies = [ - "crossbeam-channel", - "futures-util", - "log", - "reqwest", - "semver", - "serde", - "serde_derive", - "serde_json", - "solana-account-decoder", - "solana-rpc-client-api", - "solana-sdk", - "thiserror", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tungstenite", - "url", -] - -[[package]] -name = "solana-quic-client" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a90e40ee593f6e9ddd722d296df56743514ae804975a76d47e7afed4e3da244" -dependencies = [ - "async-mutex", - "async-trait", - "futures", - "itertools", - "lazy_static", - "log", - "quinn", - "quinn-proto", - "rcgen", - "rustls", - "solana-connection-cache", - "solana-measure", - "solana-metrics", - "solana-net-utils", - "solana-rpc-client-api", - "solana-sdk", - "solana-streamer", - "thiserror", - "tokio", -] - -[[package]] -name = "solana-rayon-threadlimit" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66468f9c014992167de10cc68aad6ac8919a8c8ff428dc88c0d2b4da8c02b8b7" -dependencies = [ - "lazy_static", - "num_cpus", -] - -[[package]] -name = "solana-remote-wallet" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c191019f4d4f84281a6d0dd9a43181146b33019627fc394e42e08ade8976b431" -dependencies = [ - "console", - "dialoguer", - "log", - "num-derive 0.4.2", - "num-traits", - "parking_lot", - "qstring", - "semver", - "solana-sdk", - "thiserror", - "uriparse", -] - -[[package]] -name = "solana-rpc-client" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36ed4628e338077c195ddbf790693d410123d17dec0a319b5accb4aaee3fb15c" -dependencies = [ - "async-trait", - "base64 0.21.7", - "bincode", - "bs58 0.4.0", - "indicatif", - "log", - "reqwest", - "semver", - "serde", - "serde_derive", - "serde_json", - "solana-account-decoder", - "solana-rpc-client-api", - "solana-sdk", - "solana-transaction-status", - "solana-version", - "solana-vote-program", - "tokio", -] - -[[package]] -name = "solana-rpc-client-api" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c913551faa4a1ae4bbfef6af19f3a5cf847285c05b4409e37c8993b3444229" -dependencies = [ - "base64 0.21.7", - "bs58 0.4.0", - "jsonrpc-core", - "reqwest", - "semver", - "serde", - "serde_derive", - "serde_json", - "solana-account-decoder", - "solana-sdk", - "solana-transaction-status", - "solana-version", - "spl-token-2022 1.0.0", - "thiserror", -] - -[[package]] -name = "solana-rpc-client-nonce-utils" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a47b6bb1834e6141a799db62bbdcf80d17a7d58d7bc1684c614e01a7293d7cf" -dependencies = [ - "clap 2.34.0", - "solana-clap-utils", - "solana-rpc-client", - "solana-sdk", - "thiserror", -] - -[[package]] -name = "solana-runtime" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73a12e1270121e1ca6a4e86d6d0f5c339f0811a8435161d9eee54cbb0a083859" -dependencies = [ - "aquamarine", - "arrayref", - "base64 0.21.7", - "bincode", - "blake3", - "bv", - "bytemuck", - "byteorder", - "bzip2", - "crossbeam-channel", - "dashmap", - "dir-diff", - "flate2", - "fnv", - "im", - "index_list", - "itertools", - "lazy_static", - "log", - "lru", - "lz4", - "memmap2 0.5.10", - "mockall", - "modular-bitfield", - "num-derive 0.4.2", - "num-traits", - "num_cpus", - "num_enum 0.7.3", - "ouroboros", - "percentage", - "qualifier_attr", - "rand 0.8.5", - "rayon", - "regex", - "rustc_version", - "serde", - "serde_derive", - "serde_json", - "solana-accounts-db", - "solana-address-lookup-table-program", - "solana-bpf-loader-program", - "solana-bucket-map", - "solana-compute-budget-program", - "solana-config-program", - "solana-cost-model", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-loader-v4-program", - "solana-measure", - "solana-metrics", - "solana-perf", - "solana-program-runtime", - "solana-rayon-threadlimit", - "solana-sdk", - "solana-stake-program", - "solana-system-program", - "solana-version", - "solana-vote", - "solana-vote-program", - "solana-zk-token-proof-program", - "solana-zk-token-sdk", - "static_assertions", - "strum", - "strum_macros", - "symlink", - "tar", - "tempfile", - "thiserror", - "zstd", -] - -[[package]] -name = "solana-sdk" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "580ad66c2f7a4c3cb3244fe21440546bd500f5ecb955ad9826e92a78dded8009" -dependencies = [ - "assert_matches", - "base64 0.21.7", - "bincode", - "bitflags 2.6.0", - "borsh 1.5.1", - "bs58 0.4.0", - "bytemuck", - "byteorder", - "chrono", - "derivation-path", - "digest 0.10.7", - "ed25519-dalek", - "ed25519-dalek-bip32", - "generic-array", - "hmac 0.12.1", - "itertools", - "js-sys", - "lazy_static", - "libsecp256k1", - "log", - "memmap2 0.5.10", - "num-derive 0.4.2", - "num-traits", - "num_enum 0.7.3", - "pbkdf2 0.11.0", - "qstring", - "qualifier_attr", - "rand 0.7.3", - "rand 0.8.5", - "rustc_version", - "rustversion", - "serde", - "serde_bytes", - "serde_derive", - "serde_json", - "serde_with", - "sha2 0.10.8", - "sha3 0.10.8", - "siphasher", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-logger", - "solana-program", - "solana-sdk-macro", - "thiserror", - "uriparse", - "wasm-bindgen", -] - -[[package]] -name = "solana-sdk-macro" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b75d0f193a27719257af19144fdaebec0415d1c9e9226ae4bd29b791be5e9bd" -dependencies = [ - "bs58 0.4.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.87", -] - -[[package]] -name = "solana-security-txt" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" - -[[package]] -name = "solana-send-transaction-service" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3218f670f582126a3859c4fd152e922b93b3748a636bb143f970391925723577" -dependencies = [ - "crossbeam-channel", - "log", - "solana-client", - "solana-measure", - "solana-metrics", - "solana-runtime", - "solana-sdk", - "solana-tpu-client", -] - -[[package]] -name = "solana-stake-program" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeb3e0d2dc7080b9fa61b34699b176911684f5e04e8df4b565b2b6c962bb4321" -dependencies = [ - "bincode", - "log", - "rustc_version", - "solana-config-program", - "solana-program-runtime", - "solana-sdk", - "solana-vote-program", -] - -[[package]] -name = "solana-streamer" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8476e41ad94fe492e8c06697ee35912cf3080aae0c9e9ac6430835256ccf056" -dependencies = [ - "async-channel", - "bytes", - "crossbeam-channel", - "futures-util", - "histogram", - "indexmap 2.6.0", - "itertools", - "libc", - "log", - "nix", - "pem", - "percentage", - "pkcs8", - "quinn", - "quinn-proto", - "rand 0.8.5", - "rcgen", - "rustls", - "smallvec", - "solana-metrics", - "solana-perf", - "solana-sdk", - "thiserror", - "tokio", - "x509-parser", -] - -[[package]] -name = "solana-system-program" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26f31e04f5baad7cbc2281fea312c4e48277da42a93a0ba050b74edc5a74d63c" -dependencies = [ - "bincode", - "log", - "serde", - "serde_derive", - "solana-program-runtime", - "solana-sdk", -] - -[[package]] -name = "solana-thin-client" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c02245d0d232430e79dc0d624aa42d50006097c3aec99ac82ac299eaa3a73f" -dependencies = [ - "bincode", - "log", - "rayon", - "solana-connection-cache", - "solana-rpc-client", - "solana-rpc-client-api", - "solana-sdk", -] - -[[package]] -name = "solana-tpu-client" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67251506ed03de15f1347b46636b45c47da6be75015b4a13f0620b21beb00566" -dependencies = [ - "async-trait", - "bincode", - "futures-util", - "indexmap 2.6.0", - "indicatif", - "log", - "rayon", - "solana-connection-cache", - "solana-measure", - "solana-metrics", - "solana-pubsub-client", - "solana-rpc-client", - "solana-rpc-client-api", - "solana-sdk", - "thiserror", - "tokio", -] - -[[package]] -name = "solana-transaction-status" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3d36db1b2ab2801afd5482aad9fb15ed7959f774c81a77299fdd0ddcf839d4" -dependencies = [ - "Inflector", - "base64 0.21.7", - "bincode", - "borsh 0.10.4", - "bs58 0.4.0", - "lazy_static", - "log", - "serde", - "serde_derive", - "serde_json", - "solana-account-decoder", - "solana-sdk", - "spl-associated-token-account 2.3.0", - "spl-memo", - "spl-token", - "spl-token-2022 1.0.0", - "thiserror", -] - -[[package]] -name = "solana-udp-client" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a754a3c2265eb02e0c35aeaca96643951f03cee6b376afe12e0cf8860ffccd1" -dependencies = [ - "async-trait", - "solana-connection-cache", - "solana-net-utils", - "solana-sdk", - "solana-streamer", - "thiserror", - "tokio", -] - -[[package]] -name = "solana-version" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f44776bd685cc02e67ba264384acc12ef2931d01d1a9f851cb8cdbd3ce455b9e" -dependencies = [ - "log", - "rustc_version", - "semver", - "serde", - "serde_derive", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-sdk", -] - -[[package]] -name = "solana-vote" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5983370c95b615dc5f5d0e85414c499f05380393c578749bcd14c114c77c9bc" -dependencies = [ - "crossbeam-channel", - "itertools", - "log", - "rustc_version", - "serde", - "serde_derive", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-sdk", - "solana-vote-program", - "thiserror", -] - -[[package]] -name = "solana-vote-program" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25810970c91feb579bd3f67dca215fce971522e42bfd59696af89c5dfebd997c" -dependencies = [ - "bincode", - "log", - "num-derive 0.4.2", - "num-traits", - "rustc_version", - "serde", - "serde_derive", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-metrics", - "solana-program", - "solana-program-runtime", - "solana-sdk", - "thiserror", -] - -[[package]] -name = "solana-zk-token-proof-program" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1be1c15d4aace575e2de73ebeb9b37bac455e89bee9a8c3531f47ac5066b33e1" -dependencies = [ - "bytemuck", - "num-derive 0.4.2", - "num-traits", - "solana-program-runtime", - "solana-sdk", - "solana-zk-token-sdk", -] - -[[package]] -name = "solana-zk-token-sdk" -version = "1.18.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cbdf4249b6dfcbba7d84e2b53313698043f60f8e22ce48286e6fbe8a17c8d16" -dependencies = [ - "aes-gcm-siv", - "base64 0.21.7", - "bincode", - "bytemuck", - "byteorder", - "curve25519-dalek", - "getrandom 0.1.16", - "itertools", - "lazy_static", - "merlin", - "num-derive 0.4.2", - "num-traits", - "rand 0.7.3", - "serde", - "serde_json", - "sha3 0.9.1", - "solana-program", - "solana-sdk", - "subtle", - "thiserror", - "zeroize", -] - -[[package]] -name = "solana_rbpf" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da5d083187e3b3f453e140f292c09186881da8a02a7b5e27f645ee26de3d9cc5" -dependencies = [ - "byteorder", - "combine", - "goblin", - "hash32", - "libc", - "log", - "rand 0.8.5", - "rustc-demangle", - "scroll", - "thiserror", - "winapi", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "spki" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "spl-associated-token-account" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "992d9c64c2564cc8f63a4b508bf3ebcdf2254b0429b13cd1d31adb6162432a5f" -dependencies = [ - "assert_matches", - "borsh 0.10.4", - "num-derive 0.4.2", - "num-traits", - "solana-program", - "spl-token", - "spl-token-2022 1.0.0", - "thiserror", -] - -[[package]] -name = "spl-associated-token-account" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143109d789171379e6143ef23191786dfaac54289ad6e7917cfb26b36c432b10" -dependencies = [ - "assert_matches", - "borsh 1.5.1", - "num-derive 0.4.2", - "num-traits", - "solana-program", - "spl-token", - "spl-token-2022 3.0.4", - "thiserror", -] - -[[package]] -name = "spl-discriminator" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator-derive 0.1.2", -] - -[[package]] -name = "spl-discriminator" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "210101376962bb22bb13be6daea34656ea1cbc248fce2164b146e39203b55e03" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator-derive 0.2.0", -] - -[[package]] -name = "spl-discriminator-derive" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07fd7858fc4ff8fb0e34090e41d7eb06a823e1057945c26d480bfc21d2338a93" -dependencies = [ - "quote", - "spl-discriminator-syn 0.1.2", - "syn 2.0.87", -] - -[[package]] -name = "spl-discriminator-derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" -dependencies = [ - "quote", - "spl-discriminator-syn 0.2.0", - "syn 2.0.87", -] - -[[package]] -name = "spl-discriminator-syn" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fea7be851bd98d10721782ea958097c03a0c2a07d8d4997041d0ece6319a63" -dependencies = [ - "proc-macro2", - "quote", - "sha2 0.10.8", - "syn 2.0.87", - "thiserror", -] - -[[package]] -name = "spl-discriminator-syn" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c1f05593b7ca9eac7caca309720f2eafb96355e037e6d373b909a80fe7b69b9" -dependencies = [ - "proc-macro2", - "quote", - "sha2 0.10.8", - "syn 2.0.87", - "thiserror", -] - -[[package]] -name = "spl-memo" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a" -dependencies = [ - "solana-program", -] - -[[package]] -name = "spl-pod" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2881dddfca792737c0706fa0175345ab282b1b0879c7d877bad129645737c079" -dependencies = [ - "borsh 0.10.4", - "bytemuck", - "solana-program", - "solana-zk-token-sdk", - "spl-program-error 0.3.0", -] - -[[package]] -name = "spl-pod" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c52d84c55efeef8edcc226743dc089d7e3888b8e3474569aa3eff152b37b9996" -dependencies = [ - "borsh 1.5.1", - "bytemuck", - "solana-program", - "solana-zk-token-sdk", - "spl-program-error 0.4.4", -] - -[[package]] -name = "spl-program-error" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "249e0318493b6bcf27ae9902600566c689b7dfba9f1bdff5893e92253374e78c" -dependencies = [ - "num-derive 0.4.2", - "num-traits", - "solana-program", - "spl-program-error-derive 0.3.2", - "thiserror", -] - -[[package]] -name = "spl-program-error" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e45a49acb925db68aa501b926096b2164adbdcade7a0c24152af9f0742d0a602" -dependencies = [ - "num-derive 0.4.2", - "num-traits", - "solana-program", - "spl-program-error-derive 0.4.1", - "thiserror", -] - -[[package]] -name = "spl-program-error-derive" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1845dfe71fd68f70382232742e758557afe973ae19e6c06807b2c30f5d5cb474" -dependencies = [ - "proc-macro2", - "quote", - "sha2 0.10.8", - "syn 2.0.87", -] - -[[package]] -name = "spl-program-error-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d375dd76c517836353e093c2dbb490938ff72821ab568b545fd30ab3256b3e" -dependencies = [ - "proc-macro2", - "quote", - "sha2 0.10.8", - "syn 2.0.87", -] - -[[package]] -name = "spl-tlv-account-resolution" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615d381f48ddd2bb3c57c7f7fb207591a2a05054639b18a62e785117dd7a8683" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator 0.1.0", - "spl-pod 0.1.0", - "spl-program-error 0.3.0", - "spl-type-length-value 0.3.0", -] - -[[package]] -name = "spl-tlv-account-resolution" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fab8edfd37be5fa17c9e42c1bff86abbbaf0494b031b37957f2728ad2ff842ba" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator 0.2.5", - "spl-pod 0.2.5", - "spl-program-error 0.4.4", - "spl-type-length-value 0.4.6", -] - -[[package]] -name = "spl-token" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08459ba1b8f7c1020b4582c4edf0f5c7511a5e099a7a97570c9698d4f2337060" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive 0.3.3", - "num-traits", - "num_enum 0.6.1", - "solana-program", - "thiserror", -] - -[[package]] -name = "spl-token-2022" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d697fac19fd74ff472dfcc13f0b442dd71403178ce1de7b5d16f83a33561c059" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive 0.4.2", - "num-traits", - "num_enum 0.7.3", - "solana-program", - "solana-security-txt", - "solana-zk-token-sdk", - "spl-memo", - "spl-pod 0.1.0", - "spl-token", - "spl-token-group-interface 0.1.0", - "spl-token-metadata-interface 0.2.0", - "spl-transfer-hook-interface 0.4.1", - "spl-type-length-value 0.3.0", - "thiserror", -] - -[[package]] -name = "spl-token-2022" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b01d1b2851964e257187c0bca43a0de38d0af59192479ca01ac3e2b58b1bd95a" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive 0.4.2", - "num-traits", - "num_enum 0.7.3", - "solana-program", - "solana-security-txt", - "solana-zk-token-sdk", - "spl-memo", - "spl-pod 0.2.5", - "spl-token", - "spl-token-group-interface 0.2.5", - "spl-token-metadata-interface 0.3.5", - "spl-transfer-hook-interface 0.6.5", - "spl-type-length-value 0.4.6", - "thiserror", -] - -[[package]] -name = "spl-token-group-interface" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b889509d49fa74a4a033ca5dae6c2307e9e918122d97e58562f5c4ffa795c75d" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator 0.1.0", - "spl-pod 0.1.0", - "spl-program-error 0.3.0", -] - -[[package]] -name = "spl-token-group-interface" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "014817d6324b1e20c4bbc883e8ee30a5faa13e59d91d1b2b95df98b920150c17" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator 0.2.5", - "spl-pod 0.2.5", - "spl-program-error 0.4.4", -] - -[[package]] -name = "spl-token-metadata-interface" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" -dependencies = [ - "borsh 0.10.4", - "solana-program", - "spl-discriminator 0.1.0", - "spl-pod 0.1.0", - "spl-program-error 0.3.0", - "spl-type-length-value 0.3.0", -] - -[[package]] -name = "spl-token-metadata-interface" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3da00495b602ebcf5d8ba8b3ecff1ee454ce4c125c9077747be49c2d62335ba" -dependencies = [ - "borsh 1.5.1", - "solana-program", - "spl-discriminator 0.2.5", - "spl-pod 0.2.5", - "spl-program-error 0.4.4", - "spl-type-length-value 0.4.6", -] - -[[package]] -name = "spl-transfer-hook-interface" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aabdb7c471566f6ddcee724beb8618449ea24b399e58d464d6b5bc7db550259" -dependencies = [ - "arrayref", - "bytemuck", - "solana-program", - "spl-discriminator 0.1.0", - "spl-pod 0.1.0", - "spl-program-error 0.3.0", - "spl-tlv-account-resolution 0.5.1", - "spl-type-length-value 0.3.0", -] - -[[package]] -name = "spl-transfer-hook-interface" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b5c08a89838e5a2931f79b17f611857f281a14a2100968a3ccef352cb7414b" -dependencies = [ - "arrayref", - "bytemuck", - "solana-program", - "spl-discriminator 0.2.5", - "spl-pod 0.2.5", - "spl-program-error 0.4.4", - "spl-tlv-account-resolution 0.6.5", - "spl-type-length-value 0.4.6", -] - -[[package]] -name = "spl-type-length-value" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator 0.1.0", - "spl-pod 0.1.0", - "spl-program-error 0.3.0", -] - -[[package]] -name = "spl-type-length-value" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c872f93d0600e743116501eba2d53460e73a12c9a496875a42a7d70e034fe06d" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator 0.2.5", - "spl-pod 0.2.5", - "spl-program-error 0.4.4", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strsim" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.109", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "symlink" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "unicode-xid", -] - -[[package]] -name = "synstructure" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" [[package]] -name = "system-configuration" -version = "0.5.1" +name = "siphasher" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] -name = "system-configuration-sys" -version = "0.5.0" +name = "sized-chunks" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" dependencies = [ - "core-foundation-sys", - "libc", + "bitmaps", + "typenum", ] [[package]] -name = "tar" -version = "0.4.43" +name = "smallvec" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" -dependencies = [ - "filetime", - "libc", - "xattr", -] +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] -name = "tarpc" -version = "0.29.0" +name = "solana-frozen-abi" +version = "1.18.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38a012bed6fb9681d3bf71ffaa4f88f3b4b9ed3198cda6e4c8462d24d4bb80" +checksum = "03ab2c30c15311b511c0d1151e4ab6bc9a3e080a37e7c6e7c2d96f5784cf9434" dependencies = [ - "anyhow", - "fnv", - "futures", - "humantime", - "opentelemetry", - "pin-project", - "rand 0.8.5", + "block-buffer 0.10.4", + "bs58 0.4.0", + "bv", + "either", + "generic-array", + "im", + "lazy_static", + "log", + "memmap2", + "rustc_version", "serde", - "static_assertions", - "tarpc-plugins", + "serde_bytes", + "serde_derive", + "sha2 0.10.8", + "solana-frozen-abi-macro", + "subtle", "thiserror", - "tokio", - "tokio-serde", - "tokio-util 0.6.10", - "tracing", - "tracing-opentelemetry", ] [[package]] -name = "tarpc-plugins" -version = "0.12.0" +name = "solana-frozen-abi-macro" +version = "1.18.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee42b4e559f17bce0385ebf511a7beb67d5cc33c12c96b7f4e9789919d9c10f" +checksum = "c142f779c3633ac83c84d04ff06c70e1f558c876f13358bed77ba629c7417932" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "rustc_version", + "syn 2.0.87", ] [[package]] -name = "tempfile" -version = "3.13.0" +name = "solana-logger" +version = "1.18.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "121d36ffb3c6b958763312cbc697fbccba46ee837d3a0aa4fc0e90fcb3b884f3" dependencies = [ - "cfg-if", - "fastrand", - "once_cell", - "rustix", - "windows-sys 0.59.0", + "env_logger", + "lazy_static", + "log", ] [[package]] -name = "term" -version = "0.7.0" +name = "solana-program" +version = "1.18.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +checksum = "c10f4588cefd716b24a1a40dd32c278e43a560ab8ce4de6b5805c9d113afdfa1" dependencies = [ - "dirs-next", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "base64 0.21.7", + "bincode", + "bitflags", + "blake3", + "borsh 0.10.4", + "borsh 0.9.3", + "borsh 1.5.1", + "bs58 0.4.0", + "bv", + "bytemuck", + "cc", + "console_error_panic_hook", + "console_log", + "curve25519-dalek", + "getrandom 0.2.15", + "itertools", + "js-sys", + "lazy_static", + "libc", + "libsecp256k1", + "light-poseidon", + "log", + "memoffset", + "num-bigint", + "num-derive 0.4.2", + "num-traits", + "parking_lot", + "rand 0.8.5", + "rustc_version", "rustversion", - "winapi", -] - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "termtree" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" - -[[package]] -name = "test-case" -version = "3.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2550dd13afcd286853192af8601920d959b14c401fcece38071d53bf0768a8" -dependencies = [ - "test-case-macros", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk-macro", + "thiserror", + "tiny-bip39", + "wasm-bindgen", + "zeroize", ] [[package]] -name = "test-case-core" -version = "3.3.1" +name = "solana-sdk" +version = "1.18.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcb7fd841cd518e279be3d5a3eb0636409487998a4aff22f3de87b81e88384f" +checksum = "580ad66c2f7a4c3cb3244fe21440546bd500f5ecb955ad9826e92a78dded8009" dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 2.0.87", + "assert_matches", + "base64 0.21.7", + "bincode", + "bitflags", + "borsh 1.5.1", + "bs58 0.4.0", + "bytemuck", + "byteorder", + "chrono", + "derivation-path", + "digest 0.10.7", + "ed25519-dalek", + "ed25519-dalek-bip32", + "generic-array", + "hmac 0.12.1", + "itertools", + "js-sys", + "lazy_static", + "libsecp256k1", + "log", + "memmap2", + "num-derive 0.4.2", + "num-traits", + "num_enum 0.7.3", + "pbkdf2 0.11.0", + "qstring", + "qualifier_attr", + "rand 0.7.3", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "serde_with", + "sha2 0.10.8", + "sha3 0.10.8", + "siphasher", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-logger", + "solana-program", + "solana-sdk-macro", + "thiserror", + "uriparse", + "wasm-bindgen", ] [[package]] -name = "test-case-macros" -version = "3.3.1" +name = "solana-sdk-macro" +version = "1.18.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" +checksum = "1b75d0f193a27719257af19144fdaebec0415d1c9e9226ae4bd29b791be5e9bd" dependencies = [ + "bs58 0.4.0", "proc-macro2", "quote", + "rustversion", "syn 2.0.87", - "test-case-core", -] - -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", ] [[package]] -name = "textwrap" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" - -[[package]] -name = "thiserror" -version = "1.0.68" +name = "solana-security-txt" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" -dependencies = [ - "thiserror-impl", -] +checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] -name = "thiserror-impl" -version = "1.0.68" +name = "solana-zk-token-sdk" +version = "1.18.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" +checksum = "7cbdf4249b6dfcbba7d84e2b53313698043f60f8e22ce48286e6fbe8a17c8d16" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", + "aes-gcm-siv", + "base64 0.21.7", + "bincode", + "bytemuck", + "byteorder", + "curve25519-dalek", + "getrandom 0.1.16", + "itertools", + "lazy_static", + "merlin", + "num-derive 0.4.2", + "num-traits", + "rand 0.7.3", + "serde", + "serde_json", + "sha3 0.9.1", + "solana-program", + "solana-sdk", + "subtle", + "thiserror", + "zeroize", ] [[package]] -name = "thread_local" -version = "1.1.8" +name = "spl-associated-token-account" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "143109d789171379e6143ef23191786dfaac54289ad6e7917cfb26b36c432b10" dependencies = [ - "cfg-if", - "once_cell", + "assert_matches", + "borsh 1.5.1", + "num-derive 0.4.2", + "num-traits", + "solana-program", + "spl-token", + "spl-token-2022", + "thiserror", ] [[package]] -name = "time" -version = "0.3.36" +name = "spl-discriminator" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "210101376962bb22bb13be6daea34656ea1cbc248fce2164b146e39203b55e03" dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", + "bytemuck", + "solana-program", + "spl-discriminator-derive", ] [[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.18" +name = "spl-discriminator-derive" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ - "num-conv", - "time-core", + "quote", + "spl-discriminator-syn", + "syn 2.0.87", ] [[package]] -name = "tiny-bip39" -version = "0.8.2" +name = "spl-discriminator-syn" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +checksum = "8c1f05593b7ca9eac7caca309720f2eafb96355e037e6d373b909a80fe7b69b9" dependencies = [ - "anyhow", - "hmac 0.8.1", - "once_cell", - "pbkdf2 0.4.0", - "rand 0.7.3", - "rustc-hash", - "sha2 0.9.9", + "proc-macro2", + "quote", + "sha2 0.10.8", + "syn 2.0.87", "thiserror", - "unicode-normalization", - "wasm-bindgen", - "zeroize", ] [[package]] -name = "tinystr" -version = "0.7.6" +name = "spl-memo" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a" dependencies = [ - "displaydoc", - "zerovec", + "solana-program", ] [[package]] -name = "tinyvec" -version = "1.8.0" +name = "spl-pod" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "c52d84c55efeef8edcc226743dc089d7e3888b8e3474569aa3eff152b37b9996" dependencies = [ - "tinyvec_macros", + "borsh 1.5.1", + "bytemuck", + "solana-program", + "solana-zk-token-sdk", + "spl-program-error", ] [[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.41.0" +name = "spl-program-error" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" +checksum = "e45a49acb925db68aa501b926096b2164adbdcade7a0c24152af9f0742d0a602" dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.52.0", + "num-derive 0.4.2", + "num-traits", + "solana-program", + "spl-program-error-derive", + "thiserror", ] [[package]] -name = "tokio-macros" -version = "2.4.0" +name = "spl-program-error-derive" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "e6d375dd76c517836353e093c2dbb490938ff72821ab568b545fd30ab3256b3e" dependencies = [ "proc-macro2", "quote", + "sha2 0.10.8", "syn 2.0.87", ] [[package]] -name = "tokio-rustls" -version = "0.24.1" +name = "spl-tlv-account-resolution" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "fab8edfd37be5fa17c9e42c1bff86abbbaf0494b031b37957f2728ad2ff842ba" dependencies = [ - "rustls", - "tokio", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", ] [[package]] -name = "tokio-serde" -version = "0.8.0" +name = "spl-token" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911a61637386b789af998ee23f50aa30d5fd7edcec8d6d3dedae5e5815205466" +checksum = "08459ba1b8f7c1020b4582c4edf0f5c7511a5e099a7a97570c9698d4f2337060" dependencies = [ - "bincode", - "bytes", - "educe", - "futures-core", - "futures-sink", - "pin-project", - "serde", - "serde_json", + "arrayref", + "bytemuck", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.6.1", + "solana-program", + "thiserror", ] [[package]] -name = "tokio-stream" -version = "0.1.16" +name = "spl-token-2022" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "b01d1b2851964e257187c0bca43a0de38d0af59192479ca01ac3e2b58b1bd95a" dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", + "arrayref", + "bytemuck", + "num-derive 0.4.2", + "num-traits", + "num_enum 0.7.3", + "solana-program", + "solana-security-txt", + "solana-zk-token-sdk", + "spl-memo", + "spl-pod", + "spl-token", + "spl-token-group-interface", + "spl-token-metadata-interface", + "spl-transfer-hook-interface", + "spl-type-length-value", + "thiserror", ] [[package]] -name = "tokio-tungstenite" -version = "0.20.1" +name = "spl-token-group-interface" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +checksum = "014817d6324b1e20c4bbc883e8ee30a5faa13e59d91d1b2b95df98b920150c17" dependencies = [ - "futures-util", - "log", - "rustls", - "tokio", - "tokio-rustls", - "tungstenite", - "webpki-roots 0.25.4", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", ] [[package]] -name = "tokio-util" -version = "0.6.10" +name = "spl-token-metadata-interface" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" +checksum = "f3da00495b602ebcf5d8ba8b3ecff1ee454ce4c125c9077747be49c2d62335ba" dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "slab", - "tokio", + "borsh 1.5.1", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", ] [[package]] -name = "tokio-util" -version = "0.7.12" +name = "spl-transfer-hook-interface" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "a9b5c08a89838e5a2931f79b17f611857f281a14a2100968a3ccef352cb7414b" dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", + "arrayref", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-tlv-account-resolution", + "spl-type-length-value", ] [[package]] -name = "toml" -version = "0.5.11" +name = "spl-type-length-value" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "c872f93d0600e743116501eba2d53460e73a12c9a496875a42a7d70e034fe06d" dependencies = [ - "serde", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", ] [[package]] -name = "toml" -version = "0.8.19" +name = "strsim" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" -dependencies = [ - "indexmap 2.6.0", - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.22.22", -] +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] -name = "toml_datetime" -version = "0.6.8" +name = "subtle" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "serde", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "toml_edit" -version = "0.19.15" +name = "syn" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ - "indexmap 2.6.0", - "toml_datetime", - "winnow 0.5.40", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "toml_edit" -version = "0.22.22" +name = "syn_derive" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" dependencies = [ - "indexmap 2.6.0", - "serde", - "serde_spanned", - "toml_datetime", - "winnow 0.6.20", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "tower-service" -version = "0.3.3" +name = "termcolor" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] [[package]] -name = "tracing" -version = "0.1.40" +name = "thiserror" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", + "thiserror-impl", ] [[package]] -name = "tracing-attributes" -version = "0.1.27" +name = "thiserror-impl" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" dependencies = [ "proc-macro2", "quote", @@ -6219,138 +2397,91 @@ dependencies = [ ] [[package]] -name = "tracing-core" -version = "0.1.32" +name = "tiny-bip39" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" dependencies = [ + "anyhow", + "hmac 0.8.1", "once_cell", - "valuable", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", ] [[package]] -name = "tracing-opentelemetry" -version = "0.17.4" +name = "tinyvec" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ - "once_cell", - "opentelemetry", - "tracing", - "tracing-core", - "tracing-subscriber", + "tinyvec_macros", ] [[package]] -name = "tracing-subscriber" -version = "0.3.18" +name = "tinyvec_macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" -dependencies = [ - "sharded-slab", - "thread_local", - "tracing-core", -] +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] -name = "trident-client" -version = "0.8.0" +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ - "afl", - "anchor-lang", - "anchor-lang-idl-spec", - "anchor-syn", - "anyhow", - "arbitrary", - "bincode", - "cargo_metadata", - "convert_case", - "fehler", - "futures", - "honggfuzz", - "pathdiff", - "quinn-proto", - "quote", "serde", - "serde_json", - "solana-program-test", - "solana-sdk", - "syn 2.0.87", - "thiserror", - "tokio", - "toml 0.8.19", - "trident-derive-displayix", - "trident-derive-fuzz-test-executor", - "trident-fuzz", -] - -[[package]] -name = "trident-derive-displayix" -version = "0.0.3" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", ] [[package]] -name = "trident-derive-fuzz-test-executor" -version = "0.0.3" +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.22", ] [[package]] -name = "trident-fuzz" -version = "0.2.0" +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ - "anchor-lang", - "anyhow", - "arbitrary", - "fehler", - "prettytable", - "rand 0.8.5", "serde", - "serde_json", - "solana-banks-client", - "solana-program-runtime", - "solana-program-test", - "solana-sdk", - "solana-stake-program", - "solana-vote-program", - "spl-token", - "thiserror", - "tokio", - "toml 0.8.19", ] [[package]] -name = "try-lock" -version = "0.2.5" +name = "toml_edit" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] [[package]] -name = "tungstenite" -version = "0.20.1" +name = "toml_edit" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand 0.8.5", - "rustls", - "sha1", - "thiserror", - "url", - "utf-8", - "webpki-roots 0.24.0", + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.20", ] [[package]] @@ -6380,18 +2511,6 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "universal-hash" version = "0.4.1" @@ -6402,27 +2521,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "unreachable" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" -dependencies = [ - "void", -] - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - [[package]] name = "uriparse" version = "0.6.4" @@ -6433,78 +2531,12 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "url" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -6543,18 +2575,6 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" version = "0.2.95" @@ -6594,21 +2614,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki-roots" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" -dependencies = [ - "rustls-webpki", -] - -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - [[package]] name = "winapi" version = "0.3.9" @@ -6631,7 +2636,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.59.0", + "windows-sys", ] [[package]] @@ -6640,55 +2645,13 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-targets", ] [[package]] @@ -6697,46 +2660,28 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -6749,48 +2694,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -6815,96 +2736,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - -[[package]] -name = "writeable" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" - -[[package]] -name = "x509-parser" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" -dependencies = [ - "asn1-rs", - "base64 0.13.1", - "data-encoding", - "der-parser", - "lazy_static", - "nom", - "oid-registry", - "rusticata-macros", - "thiserror", - "time", -] - -[[package]] -name = "xattr" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" -dependencies = [ - "libc", - "linux-raw-sys", - "rustix", -] - -[[package]] -name = "xdg" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" - -[[package]] -name = "yasna" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" -dependencies = [ - "time", -] - -[[package]] -name = "yoke" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", - "synstructure 0.13.1", -] - [[package]] name = "zerocopy" version = "0.7.35" @@ -6926,27 +2757,6 @@ dependencies = [ "syn 2.0.87", ] -[[package]] -name = "zerofrom" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", - "synstructure 0.13.1", -] - [[package]] name = "zeroize" version = "1.3.0" @@ -6966,54 +2776,3 @@ dependencies = [ "quote", "syn 2.0.87", ] - -[[package]] -name = "zerovec" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" -dependencies = [ - "cc", - "pkg-config", -] diff --git a/examples/cpi/cpi-metaplex-7/Cargo.toml b/examples/cpi/cpi-metaplex-7/Cargo.toml index 97d1d639..68da9ddd 100644 --- a/examples/cpi/cpi-metaplex-7/Cargo.toml +++ b/examples/cpi/cpi-metaplex-7/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["programs/*", "trident-tests/fuzz_tests"] +members = ["programs/*"] resolver = "2" [profile.release] diff --git a/examples/cpi/cpi-metaplex-7/Trident.toml b/examples/cpi/cpi-metaplex-7/Trident.toml index e4ed7982..34bac3ba 100644 --- a/examples/cpi/cpi-metaplex-7/Trident.toml +++ b/examples/cpi/cpi-metaplex-7/Trident.toml @@ -1,42 +1,28 @@ -[honggfuzz] -# Timeout in seconds (default: 10) -timeout = 10 -# Number of fuzzing iterations (default: 0 [no limit]) -iterations = 10 -# Number of concurrent fuzzing threads (default: 0 [number of CPUs / 2]) -threads = 0 -# Don't close children's stdin, stdout, stderr; can be noisy (default: false) -keep_output = false -# Disable ANSI console; use simple log output (default: false) -verbose = false -# Exit upon seeing the first crash (default: false) -exit_upon_crash = false -# Maximal number of mutations per one run (default: 6) -mutations_per_run = 6 -# Target compilation directory, (default: "" ["trident-tests/fuzz_tests/fuzzing/hfuzz_target"]). -# To not clash with cargo build's default target directory. -cargo_target_dir = "" -# Honggfuzz working directory, (default: "" ["trident-tests/fuzz_tests/fuzzing/hfuzz_workspace"]). -hfuzz_workspace = "" -# Directory where crashes are saved to (default: "" [workspace directory]) -crashdir = "" -# Input file extension (e.g. 'swf'), (default: "" ['fuzz']) -extension = "" -# Number of seconds this fuzzing session will last (default: 0 [no limit]) -run_time = 0 -# Maximal size of files processed by the fuzzer in bytes (default: 1048576 = 1MB) -max_file_size = 1048576 -# Save all test-cases (not only the unique ones) by appending the current time-stamp to the filenames (default: false) -save_all = false +# For the detailed description of the parameters, see: https://ackee.xyz/trident/docs/latest/features/trident-manifest/ [fuzz] -# Allow processing of duplicate transactions. Setting to true might speed up fuzzing but can cause false positive crashes (default: false) -allow_duplicate_txs = false -# Trident will show statistics after the fuzzing session. This option forces use of honggfuzz parameter -# `keep_output` as true in order to be able to catch fuzzer stdout. (default: false) fuzzing_with_stats = true - [[fuzz.programs]] address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" program = "metaplex-program/metaplex-token-metadata.so" + +[honggfuzz] +iterations = 10000 +timeout = 20 +exit_upon_crash = true + +[afl] +iterations = 1000 +timeout = 20 + +[[afl.seeds]] +file_name = "custom-seed" +override_file = false +bytes_count = 50 + + +[[afl.seeds]] +file_name = "custom-seed-text" +override_file = false +seed = "This is a custom seed" diff --git a/examples/cpi/cpi-metaplex-7/programs/cpi-metaplex-7/src/lib.rs b/examples/cpi/cpi-metaplex-7/programs/cpi-metaplex-7/src/lib.rs index 78b0debe..ab10bc28 100644 --- a/examples/cpi/cpi-metaplex-7/programs/cpi-metaplex-7/src/lib.rs +++ b/examples/cpi/cpi-metaplex-7/programs/cpi-metaplex-7/src/lib.rs @@ -25,7 +25,7 @@ pub mod cpi_metaplex_7 { ) -> Result<()> { ctx.accounts.create_metadata(name, symbol, uri)?; - if input > 15 { + if input > 15 && input < 20 { panic!("This number is magic"); } diff --git a/examples/cpi/cpi-metaplex-7/trident-tests/Cargo.toml b/examples/cpi/cpi-metaplex-7/trident-tests/Cargo.toml new file mode 100644 index 00000000..af4a0fa5 --- /dev/null +++ b/examples/cpi/cpi-metaplex-7/trident-tests/Cargo.toml @@ -0,0 +1,25 @@ +[[bin]] +name = "fuzz_0" +path = "fuzz_0/test_fuzz.rs" + +[workspace] + +[package] +name = "fuzz_tests" +version = "0.1.0" +description = "Created with Trident" +edition = "2021" + +[dependencies] +arbitrary = "1.3.0" +borsh = "1.5.3" +solana-sdk = "~2.0" + +[dependencies.trident-fuzz] +path = "../../../../crates/fuzz" + +[dependencies.cpi-metaplex-7] +path = "../programs/cpi-metaplex-7" + +[dependencies.trident-syscall-stubs-v1] +git = "https://github.com/Ackee-Blockchain/trident-syscall-stubs-v1" diff --git a/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_0/fuzz_instructions.rs b/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_0/fuzz_instructions.rs new file mode 100644 index 00000000..dfc0ed34 --- /dev/null +++ b/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_0/fuzz_instructions.rs @@ -0,0 +1,144 @@ +use borsh::{BorshDeserialize, BorshSerialize}; +use trident_fuzz::fuzzing::*; +/// FuzzInstruction contains all available Instructions. +/// Below, the instruction arguments (accounts and data) are defined. +#[derive(Arbitrary, DisplayIx, FuzzTestExecutor)] +pub enum FuzzInstruction { + Initialize(Initialize), +} +#[derive(Arbitrary, Debug)] +pub struct Initialize { + pub accounts: InitializeAccounts, + pub data: InitializeData, +} +#[derive(Arbitrary, Debug)] +pub struct InitializeAccounts { + pub signer: AccountId, + pub mint: AccountId, + pub metadata_account: AccountId, + pub _token_program: AccountId, +} +/// Custom data types must derive `Debug` and `Arbitrary`. +/// To do this, redefine the type in the fuzz test and implement the `From` +/// trait +/// to convert it into the type defined in the program. +/// For more details, see: https://ackee.xyz/trident/docs/latest/features/fuzz-instructions/#custom-data-types +#[derive(Arbitrary, Debug, BorshDeserialize, BorshSerialize)] +pub struct InitializeData { + pub input: u8, + pub name: String, + pub symbol: String, + pub uri: String, +} +///IxOps implementation for `Initialize` with all required functions. +impl IxOps for Initialize { + type IxAccounts = FuzzAccounts; + /// Definition of the instruction DISCRIMINATOR. + fn get_discriminator(&self) -> Vec { + vec![175u8, 175u8, 109u8, 31u8, 13u8, 152u8, 155u8, 237u8] + } + /// Definition of the program ID that the Instruction is associated with. + fn get_program_id(&self) -> solana_sdk::pubkey::Pubkey { + pubkey!("3XtULmXDGS867VbBXiPkjYr4EMjytGW8X12F6BS23Zcw") + } + /// Definition of the Instruction data. + /// Use randomly generated data from the fuzzer using `self.data.arg_name` + /// or customize the data as needed. + /// For more details, visit: https://ackee.xyz/trident/docs/latest/features/fuzz-instructions/#get-data + fn get_data( + &self, + _client: &mut impl FuzzClient, + _fuzz_accounts: &mut FuzzAccounts, + ) -> Result, FuzzingError> { + let mut args: Vec = self.get_discriminator(); + { + args.extend(borsh::to_vec(&self.data.input).unwrap()); + } + { + args.extend(borsh::to_vec(&self.data.name).unwrap()); + } + { + args.extend(borsh::to_vec(&self.data.symbol).unwrap()); + } + { + args.extend(borsh::to_vec(&self.data.uri).unwrap()); + } + Ok(args) + } + /// Definition of of the accounts required by the Instruction. + /// To utilize accounts stored in `FuzzAccounts`, use + /// `fuzz_accounts.account_name.get_or_create_account()`. + /// If no signers are required, leave the vector empty. + /// For AccountMetas use ::accounts:: + /// For more details, see: https://ackee.xyz/trident/docs/latest/features/fuzz-instructions/#get-accounts + fn get_accounts( + &self, + client: &mut impl FuzzClient, + fuzz_accounts: &mut FuzzAccounts, + ) -> Result<(Vec, Vec), FuzzingError> { + let mut account_metas = vec![]; + let mut signers = vec![]; + { + let signer = fuzz_accounts.signer_cpi_metaplex_7.get_or_create_account( + self.accounts.signer, + client, + 500 * LAMPORTS_PER_SOL, + ); + account_metas.push(AccountMeta::new(signer.pubkey(), true)); + signers.push(signer.insecure_clone()); + } + let mint = { + let mint = fuzz_accounts.mint_cpi_metaplex_7.get_or_create_account( + self.accounts.mint, + client, + 500 * LAMPORTS_PER_SOL, + ); + account_metas.push(AccountMeta::new(mint.pubkey(), true)); + signers.push(mint.insecure_clone()); + mint.pubkey() + }; + { + let metadata_account = fuzz_accounts + .metadata_account_cpi_metaplex_7 + .get_or_create_account( + self.accounts.metadata_account, + client, + &[ + b"metadata", + pubkey!("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s").as_ref(), + mint.as_ref(), + ], + &pubkey!("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"), + ); + account_metas.push(AccountMeta::new(metadata_account, false)); + } + { + account_metas.push(AccountMeta::new_readonly( + pubkey!("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"), + false, + )); + } + { + account_metas.push(AccountMeta::new_readonly( + pubkey!("11111111111111111111111111111111"), + false, + )); + } + { + account_metas.push(AccountMeta::new_readonly( + pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"), + false, + )); + } + Ok((signers, account_metas)) + } +} +/// Check supported AccountsStorages at +/// https://ackee.xyz/trident/docs/latest/features/account-storages/ +#[derive(Default)] +pub struct FuzzAccounts { + metadata_account_cpi_metaplex_7: AccountsStorage, + mint_cpi_metaplex_7: AccountsStorage, + signer_cpi_metaplex_7: AccountsStorage, + _token_program_cpi_metaplex_7: AccountsStorage, +} diff --git a/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_tests/fuzz_0/test_fuzz.rs b/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_0/test_fuzz.rs similarity index 55% rename from examples/cpi/cpi-metaplex-7/trident-tests/fuzz_tests/fuzz_0/test_fuzz.rs rename to examples/cpi/cpi-metaplex-7/trident-tests/fuzz_0/test_fuzz.rs index e55b42e9..73177d4f 100644 --- a/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_tests/fuzz_0/test_fuzz.rs +++ b/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_0/test_fuzz.rs @@ -1,10 +1,9 @@ -use fuzz_instructions::Initialize; -use trident_client::fuzzing::*; +use trident_fuzz::fuzzing::*; mod fuzz_instructions; -use cpi_metaplex_7::entry as entry_cpi_metaplex_7; -use cpi_metaplex_7::ID as PROGRAM_ID_CPI_METAPLEX_7; +use cpi_metaplex_7::entry; use fuzz_instructions::FuzzInstruction; -const PROGRAM_NAME_CPI_METAPLEX_7: &str = "cpi_metaplex_7"; +use fuzz_instructions::*; +use trident_syscall_stubs_v1::processor; struct InstructionsSequence; /// Define instruction sequences for invocation. /// `pre` runs at the start, `middle` in the middle, and `post` at the end. @@ -16,7 +15,7 @@ struct InstructionsSequence; /// middle_sequence!(WithdrawFn); ///} /// ``` -/// For more details, see: https://ackee.xyz/trident/docs/dev/features/instructions-sequences/#instructions-sequences +/// For more details, see: https://ackee.xyz/trident/docs/latest/features/instructions-sequences/#instructions-sequences impl FuzzDataBuilder for InstructionsSequence { pre_sequence!(Initialize); middle_sequence!(); @@ -27,17 +26,18 @@ impl FuzzDataBuilder for InstructionsSequence { fn fuzz_iteration + std::fmt::Display, U>( fuzz_data: FuzzData, config: &Config, + client: &mut impl FuzzClient, ) { - let fuzzing_program_cpi_metaplex_7 = FuzzingProgram::new( - PROGRAM_NAME_CPI_METAPLEX_7, - &PROGRAM_ID_CPI_METAPLEX_7, - processor!(convert_entry!(entry_cpi_metaplex_7)), - ); - let mut client = - ProgramTestClientBlocking::new(&[fuzzing_program_cpi_metaplex_7], config).unwrap(); - let _ = fuzz_data.run_with_runtime(&mut client, config); + let _ = fuzz_data.run_with_runtime(client, config); } fn main() { + let program = ProgramEntrypoint { + program_id: pubkey!("3XtULmXDGS867VbBXiPkjYr4EMjytGW8X12F6BS23Zcw"), + authority: None, + entry: processor!(entry), + }; + let config = Config::new(); - fuzz_trident ! (fuzz_ix : FuzzInstruction , | fuzz_data : InstructionsSequence | { fuzz_iteration (fuzz_data , & config) ; }); + let mut client = TridentSVM::new_client(&[program], &config); + fuzz_trident ! (fuzz_ix : FuzzInstruction , | fuzz_data : InstructionsSequence | { fuzz_iteration (fuzz_data , & config , & mut client) ; }); } diff --git a/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_tests/Cargo.toml b/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_tests/Cargo.toml deleted file mode 100644 index ae1b19aa..00000000 --- a/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_tests/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[[bin]] -name = "fuzz_0" -path = "fuzz_0/test_fuzz.rs" - -[package] -name = "fuzz_tests" -version = "0.1.0" -description = "Created with Trident" -edition = "2021" - -[dependencies] -arbitrary = "1.3.0" -assert_matches = "1.4.0" -mpl-token-metadata = "4.1.2" -anchor-spl = "0.30.1" - -[dependencies.trident-client] -path = "../../../../../crates/client" - -[dependencies.cpi-metaplex-7] -path = "../../programs/cpi-metaplex-7" diff --git a/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_tests/fuzz_0/fuzz_instructions.rs b/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_tests/fuzz_0/fuzz_instructions.rs deleted file mode 100644 index 6b07a8d7..00000000 --- a/examples/cpi/cpi-metaplex-7/trident-tests/fuzz_tests/fuzz_0/fuzz_instructions.rs +++ /dev/null @@ -1,108 +0,0 @@ -use solana_sdk::native_token::LAMPORTS_PER_SOL; -use trident_client::fuzzing::*; -/// FuzzInstruction contains all available Instructions. -/// Below, the instruction arguments (accounts and data) are defined. -#[derive(Arbitrary, DisplayIx, FuzzTestExecutor)] -pub enum FuzzInstruction { - Initialize(Initialize), -} -#[derive(Arbitrary, Debug)] -pub struct Initialize { - pub accounts: InitializeAccounts, - pub data: InitializeData, -} -#[derive(Arbitrary, Debug)] -pub struct InitializeAccounts { - pub signer: AccountId, - pub mint: AccountId, - pub _metadata_account: AccountId, - pub _mpl_token_metadata: AccountId, - pub _system_program: AccountId, - pub _token_program: AccountId, -} -/// Custom data types must derive `Debug` and `Arbitrary`. -/// To do this, redefine the type in the fuzz test and implement the `From` -/// trait -/// to convert it into the type defined in the program. -/// For more details, see: https://ackee.xyz/trident/docs/dev/features/arbitrary-data/#custom-data-types -#[derive(Arbitrary, Debug)] -pub struct InitializeData { - pub input: u8, - pub name: String, - pub symbol: String, - pub uri: String, -} -///IxOps implementation for `Initialize` with all required functions. -impl IxOps for Initialize { - type IxData = cpi_metaplex_7::instruction::Initialize; - type IxAccounts = FuzzAccounts; - /// Definition of the program ID that the Instruction is associated with. - fn get_program_id(&self) -> solana_sdk::pubkey::Pubkey { - cpi_metaplex_7::ID - } - /// Definition of the Instruction data. - /// Use randomly generated data from the fuzzer using `self.data.arg_name` - /// or customize the data as needed. - /// For more details, visit: https://ackee.xyz/trident/docs/dev/features/fuzz-instructions/#get-data - fn get_data( - &self, - _client: &mut impl FuzzClient, - _fuzz_accounts: &mut FuzzAccounts, - ) -> Result { - let data = cpi_metaplex_7::instruction::Initialize { - input: self.data.input, - name: self.data.name.clone(), - symbol: self.data.symbol.clone(), - uri: self.data.uri.clone(), - }; - Ok(data) - } - /// Definition of of the accounts required by the Instruction. - /// To utilize accounts stored in `FuzzAccounts`, use - /// `fuzz_accounts.account_name.get_or_create_account()`. - /// If no signers are required, leave the vector empty. - /// For AccountMetas use ::accounts:: - /// For more details, see: https://ackee.xyz/trident/docs/dev/features/fuzz-instructions/#get-accounts - fn get_accounts( - &self, - client: &mut impl FuzzClient, - fuzz_accounts: &mut FuzzAccounts, - ) -> Result<(Vec, Vec), FuzzingError> { - let signer = fuzz_accounts.signer.get_or_create_account( - self.accounts.signer, - client, - 10 * LAMPORTS_PER_SOL, - ); - - let mint = fuzz_accounts.mint.get_or_create_account( - self.accounts.mint, - client, - 10 * LAMPORTS_PER_SOL, - ); - - let metadata_account = mpl_token_metadata::accounts::Metadata::find_pda(&mint.pubkey()); - - let signers = vec![signer.clone(), mint.clone()]; - let acc_meta = cpi_metaplex_7::accounts::Initialize { - signer: signer.pubkey(), - mint: mint.pubkey(), - metadata_account: metadata_account.0, - mpl_token_metadata: mpl_token_metadata::ID, - system_program: solana_sdk::system_program::ID, - token_program: anchor_spl::token::ID, - } - .to_account_metas(None); - Ok((signers, acc_meta)) - } -} -/// Use AccountsStorage where T can be one of: -/// Keypair, PdaStore, TokenStore, MintStore, ProgramStore -#[derive(Default)] -pub struct FuzzAccounts { - _metadata_account: AccountsStorage, - mint: AccountsStorage, - _mpl_token_metadata: AccountsStorage, - signer: AccountsStorage, - _system_program: AccountsStorage, - _token_program: AccountsStorage, -} diff --git a/examples/hello_world/Trident.toml b/examples/hello_world/Trident.toml index 47af7806..cd820720 100644 --- a/examples/hello_world/Trident.toml +++ b/examples/hello_world/Trident.toml @@ -1,37 +1,13 @@ -[honggfuzz] -# Timeout in seconds (default: 10) -timeout = 10 -# Number of fuzzing iterations (default: 0 [no limit]) -iterations = 10000 -# Number of concurrent fuzzing threads (default: 0 [number of CPUs / 2]) -threads = 0 -# Don't close children's stdin, stdout, stderr; can be noisy (default: false) -keep_output = false -# Disable ANSI console; use simple log output (default: false) -verbose = false -# Exit upon seeing the first crash (default: false) -exit_upon_crash = false -# Maximal number of mutations per one run (default: 6) -mutations_per_run = 6 -# Target compilation directory, (default: "" ["trident-tests/fuzzing/hfuzz_target"]). -# To not clash with cargo build's default target directory. -cargo_target_dir = "" -# Honggfuzz working directory, (default: "" ["trident-tests/fuzzing/hfuzz_workspace"]). -hfuzz_workspace = "" -# Directory where crashes are saved to (default: "" [workspace directory]) -crashdir = "" -# Input file extension (e.g. 'swf'), (default: "" ['fuzz']) -extension = "" -# Number of seconds this fuzzing session will last (default: 0 [no limit]) -run_time = 0 -# Maximal size of files processed by the fuzzer in bytes (default: 1048576 = 1MB) -max_file_size = 1048576 -# Save all test-cases (not only the unique ones) by appending the current time-stamp to the filenames (default: false) -save_all = false +# For the detailed description of the parameters, see: https://ackee.xyz/trident/docs/latest/features/trident-manifest/ [fuzz] -# Allow processing of duplicate transactions. Setting to true might speed up fuzzing but can cause false positive crashes (default: false) -allow_duplicate_txs = false -# Trident will show statistics after the fuzzing session. This option forces use of honggfuzz parameter -# `keep_output` as true in order to be able to catch fuzzer stdout. (default: false) fuzzing_with_stats = true + +[honggfuzz] +iterations = 10000 +timeout = 20 +exit_upon_crash = true + +[afl] +iterations = 10000 +timeout = 20 diff --git a/examples/hello_world/programs/hello_world/src/lib.rs b/examples/hello_world/programs/hello_world/src/lib.rs index 49f98a6e..7611698a 100644 --- a/examples/hello_world/programs/hello_world/src/lib.rs +++ b/examples/hello_world/programs/hello_world/src/lib.rs @@ -9,6 +9,11 @@ pub mod hello_world { pub fn initialize_fn(ctx: Context, input: u8) -> Result<()> { let hello_world_store = &mut ctx.accounts.hello_world_account; hello_world_store.input = input; + + if input > 200 && input < 210 { + panic!("This number is magic") + } + Ok(()) } } diff --git a/examples/hello_world/trident-tests/Cargo.lock b/examples/hello_world/trident-tests/Cargo.lock index bdfcc299..02429fc8 100644 --- a/examples/hello_world/trident-tests/Cargo.lock +++ b/examples/hello_world/trident-tests/Cargo.lock @@ -614,7 +614,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -730,7 +730,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -972,7 +972,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -983,7 +983,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -1011,7 +1011,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -1063,7 +1063,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -1145,7 +1145,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -1720,7 +1720,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2073,7 +2073,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2135,7 +2135,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2380,7 +2380,7 @@ checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2699,7 +2699,7 @@ checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2744,7 +2744,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -2799,7 +2799,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3010,7 +3010,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3275,7 +3275,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3288,7 +3288,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3447,9 +3447,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.4.1" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -3464,9 +3464,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.93" +version = "2.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058" +checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3" dependencies = [ "proc-macro2", "quote", @@ -3487,7 +3487,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3561,7 +3561,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -3958,7 +3958,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", "wasm-bindgen-shared", ] @@ -3993,7 +3993,7 @@ checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4277,7 +4277,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", "synstructure", ] @@ -4299,7 +4299,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -4319,7 +4319,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", "synstructure", ] @@ -4340,7 +4340,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ] [[package]] @@ -4362,5 +4362,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.94", ]