From 964696609980f91c1526eb38c0011a732e6f0bfc Mon Sep 17 00:00:00 2001 From: Michal Nazarewicz Date: Tue, 20 Aug 2024 01:13:58 +0200 Subject: [PATCH] trie-geyser --- .github/workflows/master.yml | 37 +- Cargo.lock | 9 +- Cargo.toml | 5 + common/cf-solana/Cargo.toml | 3 + solana/trie-geyser/.rustfmt.toml | 1 + solana/trie-geyser/Cargo.lock | 4654 ++++++++++++++++++++++++++++++ solana/trie-geyser/Cargo.toml | 134 + solana/trie-geyser/README.md | 45 + solana/trie-geyser/config.json | 5 + solana/trie-geyser/src/config.rs | 67 + solana/trie-geyser/src/lib.rs | 15 + solana/trie-geyser/src/plugin.rs | 193 ++ solana/trie-geyser/src/types.rs | 200 ++ solana/trie-geyser/src/utils.rs | 28 + solana/trie-geyser/src/worker.rs | 194 ++ 15 files changed, 5569 insertions(+), 21 deletions(-) create mode 120000 solana/trie-geyser/.rustfmt.toml create mode 100644 solana/trie-geyser/Cargo.lock create mode 100644 solana/trie-geyser/Cargo.toml create mode 100644 solana/trie-geyser/README.md create mode 100644 solana/trie-geyser/config.json create mode 100644 solana/trie-geyser/src/config.rs create mode 100644 solana/trie-geyser/src/lib.rs create mode 100644 solana/trie-geyser/src/plugin.rs create mode 100644 solana/trie-geyser/src/types.rs create mode 100644 solana/trie-geyser/src/utils.rs create mode 100644 solana/trie-geyser/src/worker.rs diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 8e70174c..258822df 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -42,21 +42,9 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Check formatting - run: cargo fmt --all --check - - - name: Cache cargo-deny - id: cache-cargo-deny - uses: actions/cache@v4 - with: - path: ~/.cargo/bin/cargo-deny - key: ${{ runner.os }}-${{ steps.install-rust.outputs.cachekey }}-cargo-deny - - - name: Install cargo-deny - if: steps.cache-cargo-deny.outputs.cache-hit != 'true' - run: cargo install --locked cargo-deny - - - name: Check bans - run: cargo-deny --all-features check bans + run: | + cargo fmt --all --check + ( cd solana/trie-geyser && cargo fmt --all --check ) - name: Check Clippy (all features) uses: actions-rs/clippy-check@v1 @@ -64,8 +52,16 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} args: --all-features -- -D warnings + - name: Check trie-geyser Clippy (all features) + uses: actions-rs/clippy-check@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + args: --all-features --manifest-path solana/trie-geyser/Cargo.toml -- -D warnings + - name: Miri tests - run: cargo miri test -- -Z unstable-options --report-time --skip ::anchor + run: | + cargo miri test -- -Z unstable-options --report-time --skip ::anchor + ( cd solana/trie-geyser && cargo miri test -- -Z unstable-options --report-time ) anchor-build: name: Anchor Test @@ -160,3 +156,12 @@ jobs: - name: Run tests (all features) run: cargo test --all-features + + - name: Run trie-geyser tests (default features) + run: cd solana/trie-geyser && cargo test + + - name: Run trie-geyser tests (no default features) + run: cd solana/trie-geyser && cargo test --no-default-features + + - name: Run trie-geyser tests (all features) + run: cd solana/trie-geyser && cargo test --all-features diff --git a/Cargo.lock b/Cargo.lock index 1fa0dbe5..027d3b19 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1684,15 +1684,15 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 1.0.109", + "syn 2.0.46", ] [[package]] @@ -3822,7 +3822,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 2.0.46", @@ -7700,7 +7700,6 @@ dependencies = [ "anchor-lang 0.29.0", "anchor-spl", "base64 0.21.7", - "bincode", "borsh 0.10.3", "bs58 0.5.1", "clap 4.4.18", diff --git a/Cargo.toml b/Cargo.toml index 99502293..dea7c5d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,11 @@ members = [ "solana/write-account", "validator", ] +exclude = [ + # See solana/trie-geyser/Cargo.toml for description why this is + # not part of the workspace. + "solana/trie-geyser", +] resolver = "2" [profile.release] diff --git a/common/cf-solana/Cargo.toml b/common/cf-solana/Cargo.toml index e7e8241d..18a0bc41 100644 --- a/common/cf-solana/Cargo.toml +++ b/common/cf-solana/Cargo.toml @@ -31,3 +31,6 @@ solana-program = [ "dep:solana-program", "lib/solana-program", ] +solana-program-2 = [ + "dep:solana-program-2", +] diff --git a/solana/trie-geyser/.rustfmt.toml b/solana/trie-geyser/.rustfmt.toml new file mode 120000 index 00000000..fed79016 --- /dev/null +++ b/solana/trie-geyser/.rustfmt.toml @@ -0,0 +1 @@ +../../.rustfmt.toml \ No newline at end of file diff --git a/solana/trie-geyser/Cargo.lock b/solana/trie-geyser/Cargo.lock new file mode 100644 index 00000000..e16d620f --- /dev/null +++ b/solana/trie-geyser/Cargo.lock @@ -0,0 +1,4654 @@ +# This file is automatically @generated by Cargo. +# 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.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", + "opaque-debug", +] + +[[package]] +name = "aes-gcm-siv" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589c637f0e68c877bbd59a4599bbe849cac8e5f3e4b5a3ebae8f528cd218dcdc" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "polyval", + "subtle", + "zeroize", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[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.24.2" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anchor-syn", + "anyhow", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-account" +version = "0.24.2" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anchor-syn", + "anyhow", + "bs58 0.4.0", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-constant" +version = "0.24.2" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anchor-syn", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-error" +version = "0.24.2" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anchor-syn", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-event" +version = "0.24.2" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anchor-syn", + "anyhow", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-interface" +version = "0.24.2" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anchor-syn", + "anyhow", + "heck 0.3.3", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-program" +version = "0.24.2" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anchor-syn", + "anyhow", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-state" +version = "0.24.2" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anchor-syn", + "anyhow", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-derive-accounts" +version = "0.24.2" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anchor-syn", + "anyhow", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-lang" +version = "0.24.2" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anchor-attribute-access-control", + "anchor-attribute-account", + "anchor-attribute-constant", + "anchor-attribute-error", + "anchor-attribute-event", + "anchor-attribute-interface", + "anchor-attribute-program", + "anchor-attribute-state", + "anchor-derive-accounts", + "arrayref", + "base64 0.13.1", + "bincode", + "borsh 0.10.3", + "bytemuck", + "solana-program", + "thiserror", +] + +[[package]] +name = "anchor-syn" +version = "0.24.2" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anyhow", + "bs58 0.3.1", + "heck 0.3.3", + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "serde", + "serde_json", + "sha2 0.9.9", + "syn 1.0.109", + "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 = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint 0.4.6", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "ascii" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "async-compression" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd066d0b4ef8ecb03a55319dc13aa6910616d0f44008a045bb1835af830abff5" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", +] + +[[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", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[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 = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] + +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "blake3" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "borsh" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +dependencies = [ + "borsh-derive 0.9.3", + "hashbrown 0.11.2", +] + +[[package]] +name = "borsh" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +dependencies = [ + "borsh-derive 0.10.3", + "hashbrown 0.13.2", +] + +[[package]] +name = "borsh" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +dependencies = [ + "borsh-derive 1.5.1", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +dependencies = [ + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +dependencies = [ + "borsh-derive-internal 0.10.3", + "borsh-schema-derive-internal 0.10.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +dependencies = [ + "once_cell", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.71", + "syn_derive", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "brotli" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" +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.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" +dependencies = [ + "feature-probe", + "serde", +] + +[[package]] +name = "bytemuck" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" + +[[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 = "cc" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "324c74f2155653c90b04f25b2a47a8a631360cb908f92a772695f430c7e31052" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cf-solana" +version = "0.0.0" +dependencies = [ + "arrayvec", + "blake3", + "bs58 0.5.1", + "bytemuck", + "derive_more", + "lib", + "solana-program", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +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 = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + +[[package]] +name = "combine" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder", + "either", + "memchr", + "unreachable", +] + +[[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 = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "serde", + "subtle", + "zeroize", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.71", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.71", +] + +[[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 = "derivation-path" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.71", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", + "subtle", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek-bip32" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" +dependencies = [ + "derivation-path", + "ed25519-dalek", + "hmac 0.12.1", + "sha2 0.10.8", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-iterator" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd242f399be1da0a5354aa462d57b4ab2b4ee0683cc552f7c007d2d12d36e94" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "feature-probe" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", +] + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "serde", + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "goblin" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7666983ed0dd8d21a6f6576ee00053ca0926fb281a5522577a4dbd0f1b54143" +dependencies = [ + "log", + "plain", + "scroll", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "git+https://github.com/mina86/rust-hex.git?branch=main#d6c4c7a207dfcc3888b696ce9d9101e9fc4343d9" + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "im" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "rayon", + "serde", + "sized-chunks", + "typenum", + "version_check", +] + +[[package]] +name = "index_list" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e6ba961c14e98151cd6416dd3685efe786a94c38bc1a535c06ceff0a1600813" + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lib" +version = "0.0.0" +dependencies = [ + "base64 0.21.7", + "bs58 0.5.1", + "bytemuck", + "derive_more", + "sha2 0.10.8", + "stdx", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libsecp256k1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "light-poseidon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +dependencies = [ + "ark-bn254", + "ark-ff", + "num-bigint 0.4.6", + "thiserror", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "lz4" +version = "1.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958b4caa893816eea05507c20cfe47574a43d9a697138a7872990bba8a0ece68" +dependencies = [ + "libc", + "lz4-sys", +] + +[[package]] +name = "lz4-sys" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109de74d5d2353660401699a4174a4ff23fcc649caf553df71933c7fb45ad868" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[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 = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[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 = "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-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[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.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "object" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[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 0.5.3", + "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 = "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 = "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-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[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 = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit", +] + +[[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", + "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.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc-macro2-diagnostics" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", + "yansi", +] + +[[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.71", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +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 = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "regex" +version = "1.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[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", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[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", + "untrusted", + "windows-sys 0.52.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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +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", + "rustls-webpki", + "sct", +] + +[[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", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[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.71", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[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.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +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.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "serde_json" +version = "1.0.120" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +dependencies = [ + "itoa", + "ryu", + "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.71", +] + +[[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 = "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 = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "Inflector", + "base64 0.22.1", + "bincode", + "bs58 0.4.0", + "bv", + "lazy_static", + "serde", + "serde_derive", + "serde_json", + "solana-config-program", + "solana-sdk", + "spl-token", + "spl-token-2022", + "spl-token-group-interface", + "spl-token-metadata-interface", + "thiserror", + "zstd", +] + +[[package]] +name = "solana-accounts-db" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "arrayref", + "bincode", + "blake3", + "bv", + "bytemuck", + "byteorder", + "bzip2", + "crossbeam-channel", + "dashmap", + "flate2", + "fnv", + "im", + "index_list", + "indexmap", + "itertools", + "lazy_static", + "log", + "lz4", + "memmap2", + "modular-bitfield", + "num-derive", + "num-traits", + "num_cpus", + "num_enum", + "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-svm", + "solana-system-program", + "solana-vote-program", + "static_assertions", + "strum 0.24.1", + "strum_macros 0.24.3", + "tar", + "tempfile", + "thiserror", +] + +[[package]] +name = "solana-bpf-loader-program" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +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 = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "bv", + "bytemuck", + "log", + "memmap2", + "modular-bitfield", + "num_enum", + "rand 0.8.5", + "solana-measure", + "solana-sdk", + "tempfile", +] + +[[package]] +name = "solana-config-program" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "bincode", + "chrono", + "serde", + "serde_derive", + "solana-program-runtime", + "solana-sdk", +] + +[[package]] +name = "solana-frozen-abi" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "block-buffer 0.10.4", + "bs58 0.4.0", + "bv", + "either", + "generic-array", + "im", + "log", + "memmap2", + "rustc_version", + "serde", + "serde_bytes", + "serde_derive", + "sha2 0.10.8", + "solana-frozen-abi-macro", + "subtle", + "thiserror", +] + +[[package]] +name = "solana-frozen-abi-macro" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.71", +] + +[[package]] +name = "solana-geyser-plugin-interface" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "log", + "solana-sdk", + "solana-transaction-status", + "thiserror", +] + +[[package]] +name = "solana-loader-v4-program" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "log", + "solana-measure", + "solana-program-runtime", + "solana-sdk", + "solana_rbpf", +] + +[[package]] +name = "solana-logger" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "solana-measure" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "log", + "solana-sdk", +] + +[[package]] +name = "solana-metrics" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "crossbeam-channel", + "gethostname", + "lazy_static", + "log", + "reqwest", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-nohash-hasher" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b8a731ed60e89177c8a7ab05fe0f1511cedd3e70e773f288f9de33a9cfdc21e" + +[[package]] +name = "solana-program" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "base64 0.22.1", + "bincode", + "bitflags 2.6.0", + "blake3", + "borsh 0.10.3", + "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 0.4.6", + "num-derive", + "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 = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "base64 0.22.1", + "bincode", + "eager", + "enum-iterator", + "itertools", + "libc", + "log", + "num-derive", + "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-rayon-threadlimit" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "lazy_static", + "num_cpus", +] + +[[package]] +name = "solana-sdk" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "anchor-lang", + "assert_matches", + "base64 0.22.1", + "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", + "num-derive", + "num-traits", + "num_enum", + "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 = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "bs58 0.4.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.71", +] + +[[package]] +name = "solana-security-txt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" + +[[package]] +name = "solana-stake-program" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "bincode", + "log", + "rustc_version", + "solana-config-program", + "solana-program-runtime", + "solana-sdk", + "solana-vote-program", +] + +[[package]] +name = "solana-svm" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "itertools", + "log", + "percentage", + "rustc_version", + "solana-bpf-loader-program", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-loader-v4-program", + "solana-measure", + "solana-metrics", + "solana-program-runtime", + "solana-sdk", + "solana-system-program", +] + +[[package]] +name = "solana-system-program" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "bincode", + "log", + "serde", + "serde_derive", + "solana-program-runtime", + "solana-sdk", +] + +[[package]] +name = "solana-transaction-status" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "Inflector", + "base64 0.22.1", + "bincode", + "borsh 1.5.1", + "bs58 0.4.0", + "lazy_static", + "log", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-sdk", + "spl-associated-token-account", + "spl-memo", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "solana-vote-program" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "bincode", + "log", + "num-derive", + "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-witnessed-trie" +version = "0.0.3" +dependencies = [ + "arrayvec", + "bytemuck", + "cf-solana", + "derive_more", + "lib", + "solana-program", + "stdx", + "strum 0.25.0", +] + +[[package]] +name = "solana-zk-token-sdk" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" +dependencies = [ + "aes-gcm-siv", + "base64 0.22.1", + "bincode", + "bytemuck", + "byteorder", + "curve25519-dalek", + "getrandom 0.1.16", + "itertools", + "lazy_static", + "merlin", + "num-derive", + "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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d457cc2ba742c120492a64b7fa60e22c575e891f6b55039f4d736568fb112a3" +dependencies = [ + "byteorder", + "combine", + "goblin", + "hash32", + "libc", + "log", + "rand 0.8.5", + "rustc-demangle", + "scroll", + "thiserror", + "winapi", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spl-associated-token-account" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68034596cf4804880d265f834af1ff2f821ad5293e41fa0f8f59086c181fc38e" +dependencies = [ + "assert_matches", + "borsh 1.5.1", + "num-derive", + "num-traits", + "solana-program", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "spl-discriminator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a38ea8b6dedb7065887f12d62ed62c1743aa70749e8558f963609793f6fb12bc" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator-derive", +] + +[[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", + "syn 2.0.71", +] + +[[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.71", + "thiserror", +] + +[[package]] +name = "spl-memo" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0dba2f2bb6419523405d21c301a32c9f9568354d4742552e7972af801f4bdb3" +dependencies = [ + "solana-program", +] + +[[package]] +name = "spl-pod" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6166a591d93af33afd75bbd8573c5fd95fb1213f1bf254f0508c89fdb5ee156" +dependencies = [ + "borsh 1.5.1", + "bytemuck", + "bytemuck_derive", + "solana-program", + "solana-zk-token-sdk", + "spl-program-error", +] + +[[package]] +name = "spl-program-error" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7b28bed65356558133751cc32b48a7a5ddfc59ac4e941314630bbed1ac10532" +dependencies = [ + "num-derive", + "num-traits", + "solana-program", + "spl-program-error-derive", + "thiserror", +] + +[[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.71", +] + +[[package]] +name = "spl-tlv-account-resolution" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37a75a5f0fcc58126693ed78a17042e9dc53f07e357d6be91789f7d62aff61a4" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + +[[package]] +name = "spl-token" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a0f06ac7f23dc0984931b1fe309468f14ea58e32660439c1cef19456f5d0e3" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive", + "num-traits", + "num_enum", + "solana-program", + "thiserror", +] + +[[package]] +name = "spl-token-2022" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c10f3483e48679619c76598d4e4aebb955bc49b0a5cc63323afbf44135c9bf" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive", + "num-traits", + "num_enum", + "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 = "spl-token-group-interface" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8752b85a5ecc1d9f3a43bce3dd9a6a053673aacf5deb513d1cbb88d3534ffd" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", +] + +[[package]] +name = "spl-token-metadata-interface" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c2318ddff97e006ed9b1291ebec0750a78547f870f62a69c56fe3b46a5d8fc" +dependencies = [ + "borsh 1.5.1", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + +[[package]] +name = "spl-transfer-hook-interface" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a110f33d941275d9f868b96daaa993f1e73b6806cc8836e43075b4d3ad8338a7" +dependencies = [ + "arrayref", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-tlv-account-resolution", + "spl-type-length-value", +] + +[[package]] +name = "spl-type-length-value" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdcd73ec187bc409464c60759232e309f83b52a18a9c5610bf281c9c6432918c" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stdx" +version = "0.0.0" + +[[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 0.24.3", +] + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.3", +] + +[[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 = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.71", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[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.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" +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.71", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tar" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2675633b1499176c2dff06b0856a27976a8f9d436737b4cf4f312d4d91d8bbb" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d20468752b09f49e909e55a5d338caa8bedf615594e9d80bc4c565d30faf798c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "tiny-bip39" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +dependencies = [ + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[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.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array", + "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.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "uriparse" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" +dependencies = [ + "fnv", + "lazy_static", +] + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.71", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +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-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", +] + +[[package]] +name = "windows-targets" +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_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", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +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 = "witnessed-trie-geyser" +version = "0.0.0" +dependencies = [ + "arrayvec", + "borsh 1.5.1", + "cf-solana", + "crossbeam-channel", + "derive_more", + "hex", + "log", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "serde", + "serde_json", + "solana-accounts-db", + "solana-geyser-plugin-interface", + "solana-sdk", + "solana-transaction-status", + "solana-witnessed-trie", +] + +[[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 = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "zeroize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[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.12+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" +dependencies = [ + "cc", + "pkg-config", +] + +[[patch.unused]] +name = "solana-address-lookup-table-program" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-banks-client" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-banks-interface" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-banks-server" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-bloom" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-bundle" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-cargo-registry" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-clap-utils" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-clap-v3-utils" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-cli" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-cli-config" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-cli-output" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-compute-budget-program" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-connection-cache" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-core" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-cost-model" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-dos" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-download-utils" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-entry" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-faucet" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-genesis" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-genesis-utils" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-geyser-plugin-manager" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-gossip" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-keygen" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-ledger" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-ledger-tool" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-local-cluster" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-log-analyzer" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-memory-management" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-merkle-tree" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-net-shaper" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-net-utils" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-notifier" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-perf" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-poh" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-pubsub-client" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-quic-client" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-remote-wallet" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-rpc" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-rpc-client" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-rpc-client-api" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-rpc-client-nonce-utils" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-runtime" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-runtime-plugin" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-runtime-transaction" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-send-transaction-service" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-stake-accounts" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-storage-bigtable" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-storage-proto" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-store-tool" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-streamer" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-thin-client" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-tip-distributor" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-tokens" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-tpu-client" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-transaction-dos" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-turbine" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-udp-client" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-unified-scheduler-logic" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-unified-scheduler-pool" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-upload-perf" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-validator" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-version" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-vote" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-watchtower" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-wen-restart" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-zk-keygen" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" + +[[patch.unused]] +name = "solana-zk-token-proof-program" +version = "2.0.0" +source = "git+https://github.com/ComposableFi/mantis-solana.git?branch=mantis/dev#55fa2f7a17b28999b394956f153646b3914245d4" diff --git a/solana/trie-geyser/Cargo.toml b/solana/trie-geyser/Cargo.toml new file mode 100644 index 00000000..73b80900 --- /dev/null +++ b/solana/trie-geyser/Cargo.toml @@ -0,0 +1,134 @@ +# This is outside of the workspace because it uses solana 2.x crates +# rather than 1.17. This makes it somewhat easier since we don’t need +# deal with conflicting indirect dependencies. separate CI and stuff. +# It’s probably not the best way of dealing with it but for the time +# being let’s just go with it. + +[package] +name = "witnessed-trie-geyser" +version = "0.0.0" +edition = "2021" + +[lib] +crate-type = ["cdylib","rlib"] + +[dependencies] +arrayvec = "0.7.4" +borsh = "1.5.1" +crossbeam-channel = "0.5.13" +derive_more = "0.99.18" +hex = { git = "https://github.com/mina86/rust-hex.git", branch = "main", default-features = false } +log = "0.4.17" +rayon = "1.10.0" +# TODO(mina86): Change to "1" once we update the toolchain. Building +# with serde 1.0.204 breaks due to the use of ‘diagnostic’ attribute. +serde = { version = "=1.0.203", features = ["derive"] } +serde_json = "1" + +cf-solana = { path = "../../common/cf-solana", default-features = false, features = ["solana-program-2"] } +solana-witnessed-trie = { path = "../witnessed-trie", default-features = false, features = ["api2"] } + +solana-accounts-db = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-geyser-plugin-interface = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-sdk = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-transaction-status = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } + +[dev-dependencies] +rand = "0.8.5" +rand_chacha = "0.3.1" + +[profile.release] +lto = true +codegen-units = 1 + +[patch.crates-io] +solana-account-decoder = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-accounts-db = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-address-lookup-table-program = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-banks-client = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-banks-interface = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-banks-server = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-bloom = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-bundle = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-cargo-registry = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-clap-utils = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-clap-v3-utils = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-cli = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-cli-config = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-cli-output = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-compute-budget-program = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-config-program = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-connection-cache = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-core = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-cost-model = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-dos = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-download-utils = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-entry = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-faucet = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-frozen-abi = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-frozen-abi-macro = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-genesis = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-genesis-utils = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-geyser-plugin-interface = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-geyser-plugin-manager = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-gossip = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-keygen = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-ledger = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-ledger-tool = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-loader-v4-program = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-local-cluster = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-log-analyzer = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-logger = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-measure = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-memory-management = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-merkle-tree = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-metrics = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-net-shaper = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-net-utils = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-notifier = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-perf = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-poh = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-program = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-program-runtime = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-pubsub-client = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-quic-client = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-rayon-threadlimit = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-remote-wallet = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-rpc = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-rpc-client = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-rpc-client-api = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-rpc-client-nonce-utils = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-runtime = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-runtime-plugin = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-runtime-transaction = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-sdk = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-sdk-macro = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-send-transaction-service = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-stake-accounts = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-stake-program = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-storage-bigtable = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-storage-proto = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-store-tool = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-streamer = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-svm = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-system-program = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-thin-client = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-tip-distributor = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-tokens = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-tpu-client = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-transaction-dos = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-transaction-status = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-turbine = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-udp-client = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-unified-scheduler-logic = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-unified-scheduler-pool = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-upload-perf = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-validator = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-version = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-vote = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-vote-program = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-watchtower = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-wen-restart = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-zk-keygen = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-zk-token-proof-program = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } +solana-zk-token-sdk = { git = "https://github.com/ComposableFi/mantis-solana.git", branch = "mantis/dev" } diff --git a/solana/trie-geyser/README.md b/solana/trie-geyser/README.md new file mode 100644 index 00000000..5fa19f0b --- /dev/null +++ b/solana/trie-geyser/README.md @@ -0,0 +1,45 @@ +# Witnessed trie Solana geyser plugin + +The plugin runs as part of Solana client and observes changes to the trie +witness account. When change happens, the plugin generates proofs for the trie +root and captures the trie root account. This allows generating proofs for +individual keys in the trie. + +## Usage + +The plugin requires Solana client from `mantis/dev` branch in +https://github.com/ComposableFi/mantis-solana/. First clone that repository and +build the client: + + git clone -b mantis/dev https://github.com/ComposableFi/mantis-solana/ + cd mantis-solana + cargo build -rp solana-test-validator + +With that done, enter root of the `emulated-light-client` repository and build +necessary binaries: + + cd path/to/emulated-light-client + cargo build-sbf + cargo build -r --manifest-path=solana/trie-geyser/Cargo.toml + +To start the Solana validator with the plugin enabled, use the +`--geyser-plugin-config` flag to point at the `config.json` file. + + cd mantis-solana + ./target/release/solana-test-validator --geyser-plugin-config \ + path/to/emulated-light-client/solana/trie-geyser/config.json + +In another terminal, deploy the witnessed-trie contract and test it with +provided command line tool: + + cd path/to/emulated-light-client + solana -u localhost program deploy ./target/deploy/wittrie.so + ./target/release/solana-witnessed-trie-cli set foo bar + +You may need to adjust `trie_program` and `root_account` in `config.json` and +restart the validator. + +## Using the proof + +At the moment, the proof is only logged. Mechanism for getting the proof to be +used by relayer is not yet implemented. diff --git a/solana/trie-geyser/config.json b/solana/trie-geyser/config.json new file mode 100644 index 00000000..9a0d52a5 --- /dev/null +++ b/solana/trie-geyser/config.json @@ -0,0 +1,5 @@ +{ + "libpath": "target/release/libwitnessed_trie_geyser.so", + "trie_program": "8Czzh5DFpFAN69Qow3gvpqS4APJyTFpqZR7cJhwphqPE", + "root_account": "4r4XhdAitwVUXmurwF6ywkVjUYnUqxe23NjzBo6MdNsj" +} diff --git a/solana/trie-geyser/src/config.rs b/solana/trie-geyser/src/config.rs new file mode 100644 index 00000000..fd28347b --- /dev/null +++ b/solana/trie-geyser/src/config.rs @@ -0,0 +1,67 @@ +use solana_geyser_plugin_interface::geyser_plugin_interface; +use solana_sdk::pubkey::Pubkey; + +#[derive(Debug, Clone)] +pub struct Config { + pub root_account: Pubkey, + pub witness_account: Pubkey, +} + +#[derive(Debug, Clone, serde::Deserialize)] +#[serde(deny_unknown_fields)] +struct RawConfig { + #[serde(rename = "libpath")] + _libpath: String, + #[serde(deserialize_with = "deserialize_pubkey")] + trie_program: Pubkey, + #[serde(deserialize_with = "deserialize_pubkey")] + root_account: Pubkey, +} + +#[derive(Debug, derive_more::From, derive_more::Display)] +pub enum Error { + IO(std::io::Error), + Parse(serde_json::Error), + #[display( + fmt = "Unable to find witness account for trie {} owned by {}", + root_account, + program_id + )] + UnableToFindWitnessAccount { + program_id: Pubkey, + root_account: Pubkey, + }, +} + +impl Config { + /// Loads configuration from a file. + pub fn load(file: &std::path::Path) -> Result { + let rd = std::fs::File::open(file)?; + let cfg: RawConfig = serde_json::from_reader(rd)?; + let (witness_account, _) = wittrie::api::find_witness_account( + &cfg.trie_program, + &cfg.root_account, + ) + .ok_or_else(|| Error::UnableToFindWitnessAccount { + program_id: cfg.trie_program, + root_account: cfg.root_account, + })?; + Ok(Self { root_account: cfg.root_account, witness_account }) + } +} + +impl From for geyser_plugin_interface::GeyserPluginError { + fn from(err: Error) -> Self { + match err { + Error::IO(err) => err.into(), + err => Self::ConfigFileReadError { msg: err.to_string() }, + } + } +} + +fn deserialize_pubkey<'de, D: serde::Deserializer<'de>>( + de: D, +) -> Result { + let value: String = serde::Deserialize::deserialize(de)?; + core::str::FromStr::from_str(&value).map_err(serde::de::Error::custom) +} diff --git a/solana/trie-geyser/src/lib.rs b/solana/trie-geyser/src/lib.rs new file mode 100644 index 00000000..e799a76d --- /dev/null +++ b/solana/trie-geyser/src/lib.rs @@ -0,0 +1,15 @@ +use solana_geyser_plugin_interface::geyser_plugin_interface::GeyserPlugin; + +mod config; +mod plugin; +mod types; +mod utils; +mod worker; + +#[no_mangle] +#[allow(improper_ctypes_definitions)] +/// # Safety +/// This function returns the Plugin pointer as trait GeyserPlugin. +pub unsafe extern "C" fn _create_plugin() -> *mut dyn GeyserPlugin { + Box::into_raw(Box::::default()) +} diff --git a/solana/trie-geyser/src/plugin.rs b/solana/trie-geyser/src/plugin.rs new file mode 100644 index 00000000..585e3552 --- /dev/null +++ b/solana/trie-geyser/src/plugin.rs @@ -0,0 +1,193 @@ +use solana_geyser_plugin_interface::geyser_plugin_interface::{ + self, GeyserPlugin, GeyserPluginError, ReplicaAccountInfoVersions, + ReplicaBlockInfoVersions, ReplicaTransactionInfoVersions, +}; + +use crate::{config, types, utils, worker}; + +type Result = ::core::result::Result; + +#[derive(Debug, Default)] +pub(crate) struct Plugin(Option); + +#[derive(Debug)] +struct Inner { + sender: crossbeam_channel::Sender, + thread: std::thread::JoinHandle<()>, +} + +impl Plugin { + fn inner(&self) -> Result<&Inner> { + self.0.as_ref().ok_or_else(Self::uninitialised_err) + } + + fn uninitialised_err() -> GeyserPluginError { + utils::custom_err("Plugin hasn’t been initialised yet") + } +} + +impl GeyserPlugin for Plugin { + fn name(&self) -> &'static str { "witnessed-trie-plugin" } + + /// Initialises the logger. + fn setup_logger( + &self, + logger: &'static dyn log::Log, + level: log::LevelFilter, + ) -> Result { + eprintln!("setup_logger({level:?})"); + log::set_max_level(level); + log::set_logger(logger).map_err(utils::custom_err)?; + log::info!("Info"); + log::error!("Error"); + Ok(()) + } + + /// Initialises the plugin by loading the configuration and starting worker + /// thread. + /// + /// Note that this callback behaves in very strange way. If it returns Err, + /// the validator just segfaults with no error being reported in the log + /// file. For that reason, whenever this would return an Err result, it + /// also logs that error. + fn on_load(&mut self, config_file: &str, _is_reload: bool) -> Result { + eprintln!("on_load"); + if self.0.is_some() { + let msg = "Plugin has been initialised already"; + log::error!("{msg}"); + return Err(utils::custom_err(msg)); + } + + let cfg = + config::Config::load(config_file.as_ref()).map_err(|err| { + log::error!("{config_file}: {err}"); + err + })?; + let (sender, receiver) = crossbeam_channel::unbounded(); + let thread = std::thread::Builder::new() + .name("witnessed-trie-worker".into()) + .spawn(move || worker::worker(cfg, receiver)) + .map_err(|err| { + log::error!("{err}"); + utils::custom_err(err) + })?; + self.0 = Some(Inner { sender, thread }); + Ok(()) + } + + /// Resets the object and terminates the worker thread. + fn on_unload(&mut self) { + let handler = self.0.take().map(Inner::into_join_handler); + let err = match handler.and_then(|h| h.join().err()) { + Some(err) => err, + None => return, + }; + if let Some(msg) = err.downcast_ref::<&str>() { + log::error!("worker thread panicked: {msg}") + } else if let Some(msg) = err.downcast_ref::() { + log::error!("worker thread panicked: {msg}") + } else { + log::error!("worker thread panicked with unknown message") + } + } + + /// Handles account value change. + /// + /// Processes changes to root and witness trie accounts. + /// + /// Startup updates are processed unless `is_startup` is true and they are + /// for `slot == 0` (since in that case it’s not clear that we can figure + /// out which slot the account has been changed in). + fn update_account( + &self, + account: ReplicaAccountInfoVersions, + slot: u64, + is_startup: bool, + ) -> Result { + eprintln!("update_account(_, {slot}, {is_startup})"); + log::info!("update_account(_, {slot}, {is_startup})"); + if is_startup && slot == 0 { + return Ok(()); + } + let account = types::AccountInfo::try_from(account)?; + let write_version = account.write_version; + + // We need to record all changed accounts because we need to be able to + // calculate the accounts hash delta. + // + // For accounts we’re tracking we care about all the account data. For + // other accounts we only care about the hash. For those accounts we + // could calculate the hash here and pass only that to the worker (which + // would save memory allocation), however: + // * that would put more computation on the plugin thread which may slow + // down block processing, + // * if an account is changed multiple times in a single slot we would + // be calculating it’s hash multiple times unnecessarily, + // * if no accounts we’re tracking are modified in a slot, we would be + // computing hashes unnecessarily and + // * passing all information is just simpler. + let account = cf_solana::proof::AccountHashData::from(account); + let msg = worker::AccountUpdateInfo { slot, write_version, account }; + self.inner()?.send_message(msg.into()) + } + + fn notify_transaction( + &self, + transaction: ReplicaTransactionInfoVersions<'_>, + slot: u64, + ) -> Result { + let transaction = match transaction { + ReplicaTransactionInfoVersions::V0_0_1(info) => &info.transaction, + ReplicaTransactionInfoVersions::V0_0_2(info) => &info.transaction, + }; + let num_sigs = transaction.signatures().len(); + let msg = worker::Message::Transaction { slot, num_sigs }; + self.inner()?.send_message(msg) + } + + /// Handle new block. + /// + /// We need block information to calculate bankhash and create proof for the + /// accounts delta hash. + fn notify_block_metadata( + &self, + block: ReplicaBlockInfoVersions<'_>, + ) -> Result { + let block = types::BlockInfoWithSlot::try_from(block)?; + self.inner()? + .send_message(worker::Message::Block(block.slot, block.info)) + } + + /// Handle change of slot status. + /// + /// Once slot is rooted, we signal the worker to generate proofs for it. + fn update_slot_status( + &self, + slot: u64, + _parent: Option, + status: geyser_plugin_interface::SlotStatus, + ) -> Result { + if status == geyser_plugin_interface::SlotStatus::Rooted { + self.inner()?.send_message(worker::Message::SlotRooted(slot)) + } else { + Ok(()) + } + } + + /// We need to collect transaction information to count how many signatures + /// were present in the block since it’s part of the bankhash. + fn transaction_notifications_enabled(&self) -> bool { true } +} + +impl Inner { + /// Sends message to the worker thread. + fn send_message(&self, message: worker::Message) -> Result { + self.sender.send(message).map_err(utils::custom_err) + } + + /// Consumes self and returns the worker join handler. + /// + /// The send channel is disconnected which signals the worker to terminate. + /// The returned handler can be used to wait for the thread. + fn into_join_handler(self) -> std::thread::JoinHandle<()> { self.thread } +} diff --git a/solana/trie-geyser/src/types.rs b/solana/trie-geyser/src/types.rs new file mode 100644 index 00000000..fa8e3274 --- /dev/null +++ b/solana/trie-geyser/src/types.rs @@ -0,0 +1,200 @@ +use core::str::FromStr; + +use geyser_plugin_interface::ReplicaAccountInfoVersions; +use solana_geyser_plugin_interface::geyser_plugin_interface::{ + self, GeyserPluginError, ReplicaBlockInfoVersions, +}; +use solana_sdk::hash::Hash; + +use crate::utils; + + +// ============================================================================= +// Account information + +/// Account information extracted from the data sent to the plugin. +/// +/// The type provides conversion from [`ReplicaAccountInfoVersions`] allowing it +/// to be easily used in the plugin code. +#[derive(Debug, Clone)] +pub struct AccountInfo<'a> { + pub lamports: u64, + pub owner: &'a [u8; 32], + pub executable: bool, + pub rent_epoch: u64, + pub data: &'a [u8], + pub write_version: u64, + pub pubkey: &'a [u8; 32], +} + +impl<'a> TryFrom<&'a geyser_plugin_interface::ReplicaAccountInfo<'a>> + for AccountInfo<'a> +{ + type Error = core::array::TryFromSliceError; + + fn try_from( + acc: &'a geyser_plugin_interface::ReplicaAccountInfo<'a>, + ) -> Result { + Ok(Self { + lamports: acc.lamports, + owner: acc.owner.try_into()?, + executable: acc.executable, + rent_epoch: acc.rent_epoch, + data: acc.data, + write_version: acc.write_version, + pubkey: acc.pubkey.try_into()?, + }) + } +} + +impl<'a> TryFrom<&'a geyser_plugin_interface::ReplicaAccountInfoV2<'a>> + for AccountInfo<'a> +{ + type Error = core::array::TryFromSliceError; + + fn try_from( + acc: &'a geyser_plugin_interface::ReplicaAccountInfoV2<'a>, + ) -> Result { + Ok(Self { + lamports: acc.lamports, + owner: acc.owner.try_into()?, + executable: acc.executable, + rent_epoch: acc.rent_epoch, + data: acc.data, + write_version: acc.write_version, + pubkey: acc.pubkey.try_into()?, + }) + } +} + +impl<'a> TryFrom<&'a geyser_plugin_interface::ReplicaAccountInfoV3<'a>> + for AccountInfo<'a> +{ + type Error = core::array::TryFromSliceError; + + fn try_from( + acc: &'a geyser_plugin_interface::ReplicaAccountInfoV3<'a>, + ) -> Result { + Ok(Self { + lamports: acc.lamports, + owner: acc.owner.try_into()?, + executable: acc.executable, + rent_epoch: acc.rent_epoch, + data: acc.data, + write_version: acc.write_version, + pubkey: acc.pubkey.try_into()?, + }) + } +} + +impl<'a> TryFrom> for AccountInfo<'a> { + type Error = GeyserPluginError; + + fn try_from( + acc: ReplicaAccountInfoVersions<'a>, + ) -> Result { + match acc { + ReplicaAccountInfoVersions::V0_0_1(acc) => acc.try_into(), + ReplicaAccountInfoVersions::V0_0_2(acc) => acc.try_into(), + ReplicaAccountInfoVersions::V0_0_3(acc) => acc.try_into(), + } + .map_err(|_| GeyserPluginError::AccountsUpdateError { + msg: "invalid pubkey length".into(), + }) + } +} + +impl<'a> From> for cf_solana::proof::AccountHashData { + fn from(info: AccountInfo<'a>) -> Self { + Self::new( + info.lamports, + info.owner.into(), + info.executable, + info.rent_epoch, + info.data, + info.pubkey.into(), + ) + } +} + +// ============================================================================= +// Block information + +/// Block information extracted from the data sent to the plugin. +/// +/// The type provides conversion from [`ReplicaBlockInfoVersions`] allowing it +/// to be easily used in the plugin code. +#[derive(Debug, Clone)] +pub struct BlockInfo { + pub parent_blockhash: Hash, + pub blockhash: Hash, + pub executed_transaction_count: u64, +} + +/// Block information extracted from the data sent to the plugin including slot +/// number. +/// +/// This is separated from [`BlockInfo`] so that slot → block info mappings +/// don’t store slot twice. +#[derive(Debug, Clone)] +pub struct BlockInfoWithSlot { + pub slot: u64, + pub info: BlockInfo, +} + +impl<'a> TryFrom<&'a geyser_plugin_interface::ReplicaBlockInfoV2<'a>> + for BlockInfoWithSlot +{ + type Error = solana_sdk::hash::ParseHashError; + + fn try_from( + block: &'a geyser_plugin_interface::ReplicaBlockInfoV2<'a>, + ) -> Result { + Ok(Self { + slot: block.slot, + info: BlockInfo { + parent_blockhash: Hash::from_str(block.parent_blockhash)?, + blockhash: Hash::from_str(block.blockhash)?, + executed_transaction_count: block.executed_transaction_count, + }, + }) + } +} + +impl<'a> TryFrom<&'a geyser_plugin_interface::ReplicaBlockInfoV3<'a>> + for BlockInfoWithSlot +{ + type Error = solana_sdk::hash::ParseHashError; + + fn try_from( + block: &'a geyser_plugin_interface::ReplicaBlockInfoV3<'a>, + ) -> Result { + Ok(Self { + slot: block.slot, + info: BlockInfo { + parent_blockhash: Hash::from_str(block.parent_blockhash)?, + blockhash: Hash::from_str(block.blockhash)?, + executed_transaction_count: block.executed_transaction_count, + }, + }) + } +} + +impl<'a> TryFrom> for BlockInfoWithSlot { + type Error = GeyserPluginError; + + fn try_from( + block: ReplicaBlockInfoVersions<'a>, + ) -> Result { + match block { + ReplicaBlockInfoVersions::V0_0_1(_) => { + return Err(utils::custom_err( + "ReplicaBlockInfoV1 unsupported", + )); + } + ReplicaBlockInfoVersions::V0_0_2(block) => block.try_into(), + ReplicaBlockInfoVersions::V0_0_3(block) => block.try_into(), + } + .map_err(utils::custom_err) + } +} diff --git a/solana/trie-geyser/src/utils.rs b/solana/trie-geyser/src/utils.rs new file mode 100644 index 00000000..90d14fcb --- /dev/null +++ b/solana/trie-geyser/src/utils.rs @@ -0,0 +1,28 @@ +use solana_geyser_plugin_interface::geyser_plugin_interface::GeyserPluginError; + + +/// Convenience helper which constructs a `GeyserPluginError::Custom` error. +pub fn custom_err(err: T) -> GeyserPluginError +where + T: Into>, +{ + GeyserPluginError::Custom(err.into()) +} + + +/// Displays data buffer. +/// +/// Displays the first 64 bytes of the slice in hex followed by its length. +/// Truncated data is indicated with an ellipsis. +pub struct DataDisplay<'a>(pub &'a [u8]); + +impl<'a> core::fmt::Display for DataDisplay<'a> { + fn fmt(&self, fmtr: &mut core::fmt::Formatter) -> core::fmt::Result { + let (data, suff) = if self.0.len() <= 64 { + (self.0, "") + } else { + (&self.0[..64], "…") + }; + write!(fmtr, "0x{}{suff} ({} bytes)", hex::display(&data), self.0.len()) + } +} diff --git a/solana/trie-geyser/src/worker.rs b/solana/trie-geyser/src/worker.rs new file mode 100644 index 00000000..dda44b2c --- /dev/null +++ b/solana/trie-geyser/src/worker.rs @@ -0,0 +1,194 @@ +use std::collections::{BTreeMap, HashMap}; + +use cf_solana::proof::AccountHashData; +use solana_sdk::pubkey::Pubkey; + +use crate::{config, types, utils}; + +/// Message sent from the plugin to the worker thread. +#[derive(derive_more::From)] +pub(crate) enum Message { + /// An account changed its state. + Account(AccountUpdateInfo), + /// A new block has been constructed. + Block(u64, types::BlockInfo), + /// Slot has been rooted. + #[from(ignore)] + SlotRooted(u64), + /// A new transaction has been executed. + Transaction { + /// Slot in which the transiting has been executed. + slot: u64, + /// Number of signatures in the transaction. + num_sigs: usize, + }, +} + +/// An account changed its state. +pub(crate) struct AccountUpdateInfo { + /// Slot in which the account changed its state. + pub slot: u64, + /// A monotonically increasing number used to identify last write to an + /// account if the account has been modified multiple times within a slot. + pub write_version: u64, + + /// All hashed information of the account. + pub account: AccountHashData, +} + +/// Context of the worker thread. +struct Worker { + /// Configuration of the plugin. + config: config::Config, + /// Data accumulated about individual slots. + slots: BTreeMap, +} + +/// State of a slot which hasn’t been rooted yet. +/// +/// As worker receives information about a slot from the plugin, it accumulates +/// them in this object. Once slot is rooted, information here are used to +/// build all necessary proofs. +#[derive(Default)] +struct SlotAccumulator { + block: Option, + accounts: HashMap, + num_sigs: u64, +} + +pub(crate) fn worker( + config: config::Config, + receiver: crossbeam_channel::Receiver, +) { + let mut worker = Worker { config, slots: Default::default() }; + for msg in receiver { + match msg { + Message::Account(msg) => worker.handle_account(msg), + Message::Block(slot, block) => worker.handle_block(slot, block), + Message::SlotRooted(slot) => worker.handle_slot_rooted(slot), + Message::Transaction { slot, num_sigs } => { + worker.handle_transaction(slot, num_sigs) + } + } + } +} + +impl Worker { + fn handle_account(&mut self, info: AccountUpdateInfo) { + use std::collections::hash_map::Entry; + + struct DataDisplay<'a>(Option<&'a [u8]>); + + impl<'a> core::fmt::Display for DataDisplay<'a> { + fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::fmt::Result { + self.0 + .map(utils::DataDisplay) + .map_or(Ok(()), |data| write!(fmt, "; data: {data}")) + } + } + + log::info!( + "[{}-{}] account update: {}", + info.slot, + info.write_version, + info.account.key(), + ); + + let entry = self.slots.entry(info.slot).or_default(); + let pubkey = *info.account.key(); + let item = (info.write_version, info.account); + match entry.accounts.entry(pubkey.into()) { + Entry::Vacant(entry) => { + entry.insert(item); + } + Entry::Occupied(mut entry) => { + if entry.get().0 < item.0 { + entry.insert(item); + } + } + }; + } + + fn handle_transaction(&mut self, slot: u64, num_sigs: usize) { + self.slots.entry(slot).or_default().num_sigs += num_sigs as u64; + } + + fn handle_block(&mut self, slot: u64, block: types::BlockInfo) { + let entry = self.slots.entry(slot).or_default(); + entry.block = Some(block); + } + + fn handle_slot_rooted(&mut self, slot: u64) { + // Grab accumulator for given slot and drop entries for all preceding + // slots. + let mut entry = loop { + match self.slots.first_entry() { + Some(entry) if *entry.key() <= slot => { + let (key, value) = entry.remove_entry(); + if key == slot { + break value; + } + log::info!("[{key}] dropping accumulator"); + } + _ => { + log::error!("[{slot}] accumulator not found"); + return; + } + } + }; + + // If the witness account is not in collection of changed accounts, + // don’t do anything. + if !entry.accounts.contains_key(&self.config.witness_account) { + log::info!("[{slot}] witness account not modified"); + return; + } + + // Bail if required information is not present + let block = if let Some(block) = entry.block { + block + } else { + log::error!("[{slot}] missing block info"); + return; + }; + + // Hash all the accounts. + let mut accounts: Vec<_> = entry + .accounts + .iter() + .map(|(pubkey, (_write_version, account))| { + ((*pubkey).into(), account.calculate_hash()) + }) + .collect(); + + // Create account proof for the witness account. + let (accounts_delta_hash, account_proof) = entry + .accounts + .remove(&self.config.witness_account) + .unwrap() + .1 + .generate_proof(&mut accounts[..]) + .unwrap(); + + // Calculate bankhash based on accounts_delta_hash and information + // extracted from the block. + let hash_proof = cf_solana::proof::DeltaHashProof { + parent_blockhash: block.parent_blockhash.into(), + accounts_delta_hash, + num_sigs: entry.num_sigs, + blockhash: block.blockhash.into(), + // TODO(mina86): Once every epoch, Solana validators calculate + // Merkle tree of all accounts. When that happens, bank_hash is + // further calculated as hashv(&[bank_hash, all_accounts_hash]). + // This is currently not handled properly but since we’re at the + // moment trusting bank hash anyway this is fine for now. + epoch_accounts_hash: None, + }; + + // TODO(mina86): Figure out how we communicate the proofs to relayer. + let bank_hash = hash_proof.calculate_bank_hash(); + log::info!("[{slot}] bank_hash: {bank_hash}"); + log::info!("[{slot}] hash_proof: {hash_proof:?}"); + log::info!("[{slot}] account_proof: {account_proof:?}"); + } +}