diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 02b5340..89182a1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -111,28 +111,6 @@ jobs: - name: Test Programs run: pnpm programs:test - generate_idls: - name: Check IDL Generation - runs-on: ubuntu-latest - needs: format_and_lint_programs - steps: - - name: Git Checkout - uses: actions/checkout@v4 - - - name: Setup Environment - uses: ./.github/actions/setup - with: - cargo-cache-key: cargo-programs - cargo-cache-local-key: cargo-local - - - name: Generate IDLs - run: pnpm generate:idls - - - name: Check Working Directory - run: | - git status --porcelain - test -z "$(git status --porcelain)" - generate_clients: name: Check Client Generation runs-on: ubuntu-latest @@ -177,26 +155,3 @@ jobs: - name: Test Client JS run: pnpm clients:js:test - - test_client_rust: - name: Test Client Rust - runs-on: ubuntu-latest - needs: build_programs - steps: - - name: Git Checkout - uses: actions/checkout@v4 - - - name: Setup Environment - uses: ./.github/actions/setup - with: - cargo-cache-key: cargo-rust-client - solana: true - - - name: Restore Program Builds - uses: actions/cache/restore@v4 - with: - path: ./**/*.so - key: ${{ runner.os }}-builds-${{ github.sha }} - - - name: Test Client Rust - run: pnpm clients:rust:test diff --git a/Cargo.lock b/Cargo.lock index 7607e8f..b89edb0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -17,58 +17,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" -[[package]] -name = "aead" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" -dependencies = [ - "crypto-common", - "generic-array", -] - -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "aes-gcm-siv" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "polyval", - "subtle", - "zeroize", -] - -[[package]] -name = "agave-transaction-view" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4778fd549144e8776fb7ac04e7dac598546f0d4cb0b25e336cb0a7d93120ddb9" -dependencies = [ - "solana-hash", - "solana-message", - "solana-packet", - "solana-pubkey", - "solana-sdk-ids", - "solana-short-vec", - "solana-signature", - "solana-svm-transaction", -] - [[package]] name = "ahash" version = "0.8.11" @@ -79,7 +27,7 @@ dependencies = [ "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -123,23 +71,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" - -[[package]] -name = "aquamarine" -version = "0.6.0" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f50776554130342de4836ba542aa85a4ddb361690d7e8df13774d7284c3d5c2" -dependencies = [ - "include_dir", - "itertools 0.10.5", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.98", -] +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "ark-bn254" @@ -315,12 +249,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "assert_matches" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" - [[package]] name = "async-channel" version = "1.9.0" @@ -359,9 +287,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.86" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", @@ -448,15 +376,6 @@ 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.6.0" @@ -636,27 +555,6 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" -[[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.12+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ebc2f1a417f01e1da30ef264ee86ae31d2dcd2d603ea283d3c244a883ca2a9" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "caps" version = "0.5.5" @@ -715,32 +613,11 @@ checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", - "js-sys", "num-traits", "serde", - "wasm-bindgen", "windows-targets 0.52.6", ] -[[package]] -name = "chrono-humanize" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799627e6b4d27827a814e837b9d8a504832086081806d45b1afa34dc982b023b" -dependencies = [ - "chrono", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - [[package]] name = "combine" version = "3.8.1" @@ -775,9 +652,9 @@ dependencies = [ [[package]] name = "console" -version = "0.15.10" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" dependencies = [ "encode_unicode", "libc", @@ -822,6 +699,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -893,7 +780,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "rand_core 0.6.4", "typenum", ] @@ -907,15 +793,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - [[package]] name = "curve25519-dalek" version = "3.2.0" @@ -1004,7 +881,6 @@ dependencies = [ "lock_api", "once_cell", "parking_lot_core", - "rayon", ] [[package]] @@ -1029,9 +905,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "28cfac68e08048ae1883171632c2aef3ebc555621ae56fbccce1cbf22dd7f058" dependencies = [ "powerfmt", "serde", @@ -1054,12 +930,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - [[package]] name = "digest" version = "0.9.0" @@ -1080,15 +950,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dir-diff" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ad16bf5f84253b50d6557681c58c3ab67c47c77d39fed9aeb56e947290bd10" -dependencies = [ - "walkdir", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -1123,12 +984,6 @@ dependencies = [ "syn 2.0.98", ] -[[package]] -name = "downcast" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" - [[package]] name = "eager" version = "0.1.0" @@ -1170,18 +1025,6 @@ dependencies = [ "sha2 0.10.8", ] -[[package]] -name = "educe" -version = "0.4.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" -dependencies = [ - "enum-ordinalize", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "either" version = "1.14.0" @@ -1223,19 +1066,6 @@ dependencies = [ "syn 2.0.98", ] -[[package]] -name = "enum-ordinalize" -version = "3.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf1fa3f06bbff1ea5b1a9c7b14aa992a39657db60a2759457328d7e058f49ee" -dependencies = [ - "num-bigint 0.4.6", - "num-traits", - "proc-macro2", - "quote", - "syn 2.0.98", -] - [[package]] name = "env_logger" version = "0.9.3" @@ -1255,16 +1085,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "errno" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "event-listener" version = "2.5.3" @@ -1284,20 +1104,14 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ "event-listener 5.4.0", "pin-project-lite", ] -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - [[package]] name = "feature-probe" version = "0.1.1" @@ -1310,18 +1124,6 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" -[[package]] -name = "filetime" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.59.0", -] - [[package]] name = "five8_const" version = "0.1.3" @@ -1347,15 +1149,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] - [[package]] name = "fnv" version = "1.0.7" @@ -1386,12 +1179,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fragile" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" - [[package]] name = "futures" version = "0.3.31" @@ -1535,14 +1322,16 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets 0.52.6", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", + "wasm-bindgen", ] [[package]] @@ -1586,7 +1375,7 @@ dependencies = [ "indexmap 2.7.1", "slab", "tokio", - "tokio-util 0.7.13", + "tokio-util", "tracing", ] @@ -1626,12 +1415,6 @@ version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" -[[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" @@ -1769,14 +1552,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "b2fd658b06e56721792c5df4475705b6cda790e9298d19d2f8af083457bcd127" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -1935,47 +1719,6 @@ dependencies = [ "icu_properties", ] -[[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 = "include_dir" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" -dependencies = [ - "include_dir_macros", -] - -[[package]] -name = "include_dir_macros" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "index_list" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa38453685e5fe724fd23ff6c1a158c1e2ca21ce0c2718fa11e96e70e99fd4de" - [[package]] name = "indexmap" version = "1.9.3" @@ -2011,15 +1754,6 @@ dependencies = [ "web-time", ] -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "generic-array", -] - [[package]] name = "ipnet" version = "2.11.0" @@ -2052,16 +1786,18 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jni" -version = "0.19.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ "cesu8", + "cfg-if", "combine 4.6.7", "jni-sys", "log", "thiserror 1.0.69", "walkdir", + "windows-sys 0.45.0", ] [[package]] @@ -2135,17 +1871,6 @@ version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.8.0", - "libc", - "redox_syscall", -] - [[package]] name = "libsecp256k1" version = "0.6.0" @@ -2206,12 +1931,6 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "litemap" version = "0.7.4" @@ -2234,25 +1953,6 @@ version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" -[[package]] -name = "lz4" -version = "1.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20b523e860d03443e98350ceaac5e71c6ba89aea7d960769ec3ce37f4de5af4" -dependencies = [ - "lz4-sys", -] - -[[package]] -name = "lz4-sys" -version = "1.11.1+lz4-1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "memchr" version = "2.7.4" @@ -2286,18 +1986,6 @@ 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" @@ -2341,58 +2029,10 @@ dependencies = [ ] [[package]] -name = "mockall" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" -dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive", - "predicates", - "predicates-tree", -] - -[[package]] -name = "mockall_derive" -version = "0.11.4" +name = "mollusk-svm" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "modular-bitfield" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" -dependencies = [ - "modular-bitfield-impl", - "static_assertions", -] - -[[package]] -name = "modular-bitfield-impl" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "mollusk-svm" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd69eeb49efb56a6da89cb095260d327ed585031c1d9f7c2aa70633621e1d2e" +checksum = "8485907fd5b9a88dfebab31e420e3e0e2050c439ab29b22924b29618dac338f7" dependencies = [ "bincode", "mollusk-svm-error", @@ -2427,9 +2067,9 @@ dependencies = [ [[package]] name = "mollusk-svm-error" -version = "0.1.0" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c8d71e29fb7e0047f3cffec055bc931011a7abfa3c1954fb18612d28a7c1f9" +checksum = "d39c95982aa8f243ee7bbf662450ae5326cb06a95429d5d46fc1fd6904e1bafe" dependencies = [ "solana-pubkey", "thiserror 1.0.69", @@ -2437,9 +2077,9 @@ dependencies = [ [[package]] name = "mollusk-svm-keys" -version = "0.1.0" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c08779697eeb0a288ec9338edf8b7a74417818aaef11fdadb5ebb0a3fe9075b" +checksum = "e7f096a27c13602b3e599f167e215947858a0da11d02d38e0a05c43219608030" dependencies = [ "mollusk-svm-error", "solana-account", @@ -2483,12 +2123,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - [[package]] name = "num" version = "0.2.1" @@ -2540,17 +2174,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "num-derive" version = "0.4.2" @@ -2714,25 +2337,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "opentelemetry" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8" -dependencies = [ - "async-trait", - "crossbeam-channel", - "futures-channel", - "futures-executor", - "futures-util", - "js-sys", - "lazy_static", - "percent-encoding", - "pin-project", - "rand 0.8.5", - "thiserror 1.0.69", -] - [[package]] name = "parking" version = "2.2.1" @@ -2801,26 +2405,6 @@ dependencies = [ "num", ] -[[package]] -name = "pin-project" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.98", -] - [[package]] name = "pin-project-lite" version = "0.2.16" @@ -2835,15 +2419,15 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pinocchio" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a8a77bf74e1c4050a2bad53648acfcfbf22b1806473f9c9334a58ef3b38ec4" +checksum = "2281a8e9e947c480ce0b64e2d6c6349d72890ba5db6503d5568edf96f304cba9" [[package]] name = "pinocchio-pubkey" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "103d69776a0c585bb01b344d641346593adb4496120796df229722a9bab2db68" +checksum = "7c8cd934ccaf7915d19049275f77c8888860a2792102a5d9f0b8eafbf670f6a8" dependencies = [ "five8_const", "pinocchio", @@ -2851,9 +2435,9 @@ dependencies = [ [[package]] name = "pinocchio-system" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "691ec8989fcb86fba22f22deb3cae9d440dc174d1735dd785b172349e9cbbb8a" +checksum = "ee1e06182bee542854db81640d0782143751a0e98331a7c67148ccb1c932acd7" dependencies = [ "pinocchio", "pinocchio-pubkey", @@ -2865,18 +2449,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" -[[package]] -name = "polyval" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash", -] - [[package]] name = "portable-atomic" version = "1.11.0" @@ -2895,37 +2467,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", -] - -[[package]] -name = "predicates" -version = "2.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" -dependencies = [ - "difflib", - "float-cmp", - "itertools 0.10.5", - "normalize-line-endings", - "predicates-core", - "regex", -] - -[[package]] -name = "predicates-core" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" - -[[package]] -name = "predicates-tree" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" -dependencies = [ - "predicates-core", - "termtree", + "zerocopy 0.7.35", ] [[package]] @@ -2946,27 +2488,6 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", -] - [[package]] name = "proc-macro2" version = "1.0.93" @@ -3013,34 +2534,36 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.6" +version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" dependencies = [ "bytes", + "cfg_aliases", "pin-project-lite", "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.23", + "rustls 0.23.25", "socket2", "thiserror 2.0.11", "tokio", "tracing", + "web-time", ] [[package]] name = "quinn-proto" -version = "0.11.9" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +checksum = "b820744eb4dc9b57a3398183639c511b5a26d2ed702cedd3febaa1393caa22cc" dependencies = [ "bytes", - "getrandom 0.2.15", - "rand 0.8.5", + "getrandom 0.3.2", + "rand 0.9.0", "ring", "rustc-hash", - "rustls 0.23.23", + "rustls 0.23.25", "rustls-pki-types", "rustls-platform-verifier", "slab", @@ -3052,9 +2575,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" +checksum = "541d0f57c6ec747a90738a52741d3221f7960e8ac2f0ff4b1a63680e033b4ab5" dependencies = [ "cfg_aliases", "libc", @@ -3073,6 +2596,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "rand" version = "0.7.3" @@ -3097,6 +2626,17 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", + "zerocopy 0.8.24", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -3117,6 +2657,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -3136,28 +2686,28 @@ dependencies = [ ] [[package]] -name = "rand_hc" -version = "0.2.0" +name = "rand_core" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "rand_core 0.5.1", + "getrandom 0.3.2", ] [[package]] -name = "rand_xoshiro" -version = "0.6.0" +name = "rand_hc" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "rand_core 0.6.4", + "rand_core 0.5.1", ] [[package]] name = "raw-cpuid" -version = "11.4.0" +version = "11.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "529468c1335c1c03919960dfefdb1b3648858c20d7ec2d0663e728e4a717efbc" +checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" dependencies = [ "bitflags 2.8.0", ] @@ -3246,7 +2796,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", @@ -3254,7 +2804,7 @@ dependencies = [ "system-configuration", "tokio", "tokio-rustls", - "tokio-util 0.7.13", + "tokio-util", "tower-service", "url", "wasm-bindgen", @@ -3323,19 +2873,6 @@ dependencies = [ "nom", ] -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.8.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.59.0", -] - [[package]] name = "rustls" version = "0.21.12" @@ -3350,26 +2887,25 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.23" +version = "0.23.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" +checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c" dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.8", + "rustls-webpki 0.103.1", "subtle", "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", - "rustls-pemfile 2.2.0", "rustls-pki-types", "schannel", "security-framework", @@ -3384,15 +2920,6 @@ dependencies = [ "base64 0.21.7", ] -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "rustls-pki-types" version = "1.11.0" @@ -3404,23 +2931,23 @@ dependencies = [ [[package]] name = "rustls-platform-verifier" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c7dc240fec5517e6c4eab3310438636cfe6391dfc345ba013109909a90d136" +checksum = "4a5467026f437b4cb2a533865eaa73eb840019a0916f4b9ec563c6e617e086c9" dependencies = [ - "core-foundation", + "core-foundation 0.10.0", "core-foundation-sys", "jni", "log", "once_cell", - "rustls 0.23.23", + "rustls 0.23.25", "rustls-native-certs", "rustls-platform-verifier-android", - "rustls-webpki 0.102.8", + "rustls-webpki 0.103.1", "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3441,9 +2968,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.103.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" dependencies = [ "ring", "rustls-pki-types", @@ -3498,15 +3025,14 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ "bitflags 2.8.0", - "core-foundation", + "core-foundation 0.10.0", "core-foundation-sys", "libc", - "num-bigint 0.4.6", "security-framework-sys", ] @@ -3526,15 +3052,6 @@ version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" -[[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.218" @@ -3672,15 +3189,6 @@ dependencies = [ "keccak", ] -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - [[package]] name = "shlex" version = "1.3.0" @@ -3708,16 +3216,6 @@ 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" @@ -3763,9 +3261,9 @@ dependencies = [ [[package]] name = "solana-account-decoder-client-types" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad44260b45eb8c75005fbe361186136e52e2cf0de2139f530295f04f9521ad" +checksum = "6329c4f360f5173dd6f65022708486cdd24d302841058e2310945a2502284105" dependencies = [ "base64 0.22.1", "bs58", @@ -3790,55 +3288,6 @@ dependencies = [ "solana-pubkey", ] -[[package]] -name = "solana-accounts-db" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7c93e9f9184f8c785da2136e84adb4123e45297890ec1d39baa2f693bc83c3" -dependencies = [ - "ahash", - "bincode", - "blake3", - "bv", - "bytemuck", - "bytemuck_derive", - "bzip2", - "crossbeam-channel", - "dashmap", - "index_list", - "indexmap 2.7.1", - "itertools 0.12.1", - "lazy_static", - "log", - "lz4", - "memmap2 0.5.10", - "modular-bitfield", - "num_cpus", - "num_enum", - "rand 0.8.5", - "rayon", - "seqlock", - "serde", - "serde_derive", - "smallvec", - "solana-bucket-map", - "solana-clock", - "solana-hash", - "solana-inline-spl", - "solana-lattice-hash", - "solana-measure", - "solana-metrics", - "solana-nohash-hasher", - "solana-pubkey", - "solana-rayon-threadlimit", - "solana-sdk", - "solana-svm-transaction", - "static_assertions", - "tar", - "tempfile", - "thiserror 2.0.11", -] - [[package]] name = "solana-address-lookup-table-interface" version = "2.2.2" @@ -3856,31 +3305,6 @@ dependencies = [ "solana-slot-hashes", ] -[[package]] -name = "solana-address-lookup-table-program" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bffd21cefb44a61a051f5f36bdb8863b619754e057099506a73cabd8716b10d4" -dependencies = [ - "bincode", - "bytemuck", - "log", - "num-derive 0.4.2", - "num-traits", - "solana-address-lookup-table-interface", - "solana-bincode", - "solana-clock", - "solana-feature-set", - "solana-instruction", - "solana-log-collector", - "solana-packet", - "solana-program-runtime", - "solana-pubkey", - "solana-system-interface", - "solana-transaction-context", - "thiserror 2.0.11", -] - [[package]] name = "solana-atomic-u64" version = "2.2.1" @@ -3891,61 +3315,10 @@ dependencies = [ ] [[package]] -name = "solana-banks-client" -version = "2.2.0" +name = "solana-big-mod-exp" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b8593f50e34f44ed168dccbac0a9b8e43e138ac75102dac6635fbdfff88d1e" -dependencies = [ - "borsh 1.5.5", - "futures", - "solana-banks-interface", - "solana-program", - "solana-sdk", - "tarpc", - "thiserror 2.0.11", - "tokio", - "tokio-serde", -] - -[[package]] -name = "solana-banks-interface" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414f5d83bf9aa83d5a387959d0849bd4a3df86f8b09219278f964688710faeb4" -dependencies = [ - "serde", - "serde_derive", - "solana-sdk", - "tarpc", -] - -[[package]] -name = "solana-banks-server" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f3a1c619d54d4a8c30802b4ac6f572a293914e592f2c3e904be3cdacbb22333" -dependencies = [ - "bincode", - "crossbeam-channel", - "futures", - "solana-banks-interface", - "solana-client", - "solana-feature-set", - "solana-runtime", - "solana-runtime-transaction", - "solana-sdk", - "solana-send-transaction-service", - "solana-svm", - "tarpc", - "tokio", - "tokio-serde", -] - -[[package]] -name = "solana-big-mod-exp" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75db7f2bbac3e62cfd139065d15bcda9e2428883ba61fc8d27ccb251081e7567" +checksum = "75db7f2bbac3e62cfd139065d15bcda9e2428883ba61fc8d27ccb251081e7567" dependencies = [ "num-bigint 0.4.6", "num-traits", @@ -4002,9 +3375,9 @@ dependencies = [ [[package]] name = "solana-bpf-loader-program" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f452bd2217eb46f24a828c7408c9e4fef2cc1767656560ca26006e20febf4068" +checksum = "6931e8893b48e3a1c8124938f580fff857d84895582578cc7dbf100dd08d2c8f" dependencies = [ "bincode", "libsecp256k1", @@ -4049,76 +3422,11 @@ dependencies = [ "thiserror 2.0.11", ] -[[package]] -name = "solana-bucket-map" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf96e6e1d0f3a66be62587ff675c7feaa630f827c2e1514ecf4ea48940436a9" -dependencies = [ - "bv", - "bytemuck", - "bytemuck_derive", - "log", - "memmap2 0.5.10", - "modular-bitfield", - "num_enum", - "rand 0.8.5", - "solana-clock", - "solana-measure", - "solana-pubkey", - "tempfile", -] - -[[package]] -name = "solana-builtins" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586a702f2d78f6d9cba627c63757deb9e7944cc0531e689100bd71473618f16" -dependencies = [ - "solana-address-lookup-table-program", - "solana-bpf-loader-program", - "solana-compute-budget-program", - "solana-config-program", - "solana-feature-set", - "solana-loader-v4-program", - "solana-program-runtime", - "solana-pubkey", - "solana-sdk-ids", - "solana-stake-program", - "solana-system-program", - "solana-vote-program", - "solana-zk-elgamal-proof-program", - "solana-zk-token-proof-program", -] - -[[package]] -name = "solana-builtins-default-costs" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aff717901cb7ed2ae65a69994d2e758b0468e84d460e60a793a0c862a2c254bc" -dependencies = [ - "ahash", - "lazy_static", - "log", - "qualifier_attr", - "solana-address-lookup-table-program", - "solana-bpf-loader-program", - "solana-compute-budget-program", - "solana-config-program", - "solana-feature-set", - "solana-loader-v4-program", - "solana-pubkey", - "solana-sdk-ids", - "solana-stake-program", - "solana-system-program", - "solana-vote-program", -] - [[package]] name = "solana-client" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c77e1bdc6d727070a3ddfb571cfaf4a8e46a4d81049fd8510c7fe12a40b4768" +checksum = "5e827416867d988cbba327b6e448ad0bfb85ba44f080c6a02a00aa498c2249c4" dependencies = [ "async-trait", "bincode", @@ -4217,35 +3525,14 @@ dependencies = [ [[package]] name = "solana-compute-budget" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57e9b1dc0a5a63ea68e08ff2cac13c92e86cfe8e6c31421dd795e8c3df78de39" +checksum = "46e593ce26764fa3366b6d125b9f2455f6cd8d557f86b4f3c7b7c517db6d8f5f" dependencies = [ "solana-fee-structure", "solana-program-entrypoint", ] -[[package]] -name = "solana-compute-budget-instruction" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66d536fe93ff372340151b053d003f9d2a0d695c65fd28c11224f629a5e1da7" -dependencies = [ - "log", - "solana-borsh", - "solana-builtins-default-costs", - "solana-compute-budget", - "solana-compute-budget-interface", - "solana-feature-set", - "solana-instruction", - "solana-packet", - "solana-pubkey", - "solana-sdk-ids", - "solana-svm-transaction", - "solana-transaction-error", - "thiserror 2.0.11", -] - [[package]] name = "solana-compute-budget-interface" version = "2.2.1" @@ -4259,45 +3546,11 @@ dependencies = [ "solana-sdk-ids", ] -[[package]] -name = "solana-compute-budget-program" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd0daef640520980f40b578367dd4ca1181e592b36b4959c04f13a617701ac6" -dependencies = [ - "qualifier_attr", - "solana-program-runtime", -] - -[[package]] -name = "solana-config-program" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f6a00ecb0eb3e4c68186a26216deb6c2376929f235fc9f3fd59e5745df937a" -dependencies = [ - "bincode", - "chrono", - "serde", - "serde_derive", - "solana-account", - "solana-bincode", - "solana-instruction", - "solana-log-collector", - "solana-packet", - "solana-program-runtime", - "solana-pubkey", - "solana-sdk-ids", - "solana-short-vec", - "solana-stake-interface", - "solana-system-interface", - "solana-transaction-context", -] - [[package]] name = "solana-connection-cache" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc19eff90b17e022a5642b7ab0d3fe5c8dc251cb9d2b032dc73bd25fa4171e" +checksum = "55ad0b507b4044e2690915c9aa69eacfd51b1fa55e4deeca662ee5cff7d7d1f4" dependencies = [ "async-trait", "bincode", @@ -4317,35 +3570,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "solana-cost-model" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fa9756128d456489956fc3b105d0ba6d5434e00200303103c13b1587f3ffc0c" -dependencies = [ - "ahash", - "lazy_static", - "log", - "solana-bincode", - "solana-borsh", - "solana-builtins-default-costs", - "solana-clock", - "solana-compute-budget", - "solana-compute-budget-instruction", - "solana-compute-budget-interface", - "solana-feature-set", - "solana-fee-structure", - "solana-metrics", - "solana-packet", - "solana-pubkey", - "solana-runtime-transaction", - "solana-sdk-ids", - "solana-svm-transaction", - "solana-system-interface", - "solana-transaction-error", - "solana-vote-program", -] - [[package]] name = "solana-cpi" version = "2.2.1" @@ -4362,9 +3586,9 @@ dependencies = [ [[package]] name = "solana-curve25519" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e46b297431ab5a67b99d9aba1e7cff16105e4d44e1c0b92c916935d86b2424" +checksum = "9b3d15f1a893ced38529d44d7fe0d4348dc38c28fea13b6d6be5d13d438a441f" dependencies = [ "bytemuck", "bytemuck_derive", @@ -4517,17 +3741,6 @@ dependencies = [ "solana-sha256-hasher", ] -[[package]] -name = "solana-fee" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7af7739e65896d4ac160230949dce021c9ee8c1ce26cb13bebbec01cd9c95" -dependencies = [ - "solana-feature-set", - "solana-fee-structure", - "solana-svm-transaction", -] - [[package]] name = "solana-fee-calculator" version = "2.2.1" @@ -4622,9 +3835,9 @@ dependencies = [ [[package]] name = "solana-inline-spl" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f623a26022a600a64fc233412808d79c5a135952eee643c127c4b42aa089b8aa" +checksum = "ed78e6709851bb3fa8a0acb1ee40fbffa888049d042ca132d6ccb8e0b313ac72" dependencies = [ "bytemuck", "solana-pubkey", @@ -4709,18 +3922,6 @@ dependencies = [ "solana-sysvar-id", ] -[[package]] -name = "solana-lattice-hash" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "450482255f6951d21bb4b8987a794b0da751b492108e74567f945ccde809039d" -dependencies = [ - "base64 0.22.1", - "blake3", - "bs58", - "bytemuck", -] - [[package]] name = "solana-loader-v2-interface" version = "2.2.1" @@ -4765,37 +3966,11 @@ dependencies = [ "solana-system-interface", ] -[[package]] -name = "solana-loader-v4-program" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "885258f9506b74d0bd72aea1b8c0492e2f28af625fba914b07cd7ca892d38465" -dependencies = [ - "log", - "qualifier_attr", - "solana-account", - "solana-bincode", - "solana-bpf-loader-program", - "solana-compute-budget", - "solana-instruction", - "solana-loader-v3-interface", - "solana-loader-v4-interface", - "solana-log-collector", - "solana-measure", - "solana-packet", - "solana-program-runtime", - "solana-pubkey", - "solana-sbpf", - "solana-sdk-ids", - "solana-transaction-context", - "solana-type-overrides", -] - [[package]] name = "solana-log-collector" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05db948a307b55c553f6b8a23439b4be619a65552ffc4c88caa5d7dd4bd53001" +checksum = "4d03bf4c676117575be755296e8f21233d74cd28dca227c42e97e86219a27193" dependencies = [ "log", ] @@ -4813,9 +3988,9 @@ dependencies = [ [[package]] name = "solana-measure" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504bfa21b291ad23edf2a9499929b653004f8585acbd32ee1ce186403a2d092d" +checksum = "0b17ee553110d2bfc454b8784840a4b75867e123d3816e13046989463fed2c6b" [[package]] name = "solana-message" @@ -4842,9 +4017,9 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77daa9b73989b40c5e3c6ab9c8b9a9aa6facf209db8743dd37834975355baf53" +checksum = "98b79bd642efa8388791fef7a900bfeb48865669148d523fba041fa7e407312f" dependencies = [ "crossbeam-channel", "gethostname", @@ -4875,9 +4050,9 @@ checksum = "33e9de00960197412e4be3902a6cd35e60817c511137aca6c34c66cd5d4017ec" [[package]] name = "solana-net-utils" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "797b3c3534d999e868e5859392976619653b3bc679e7e729019b462c775bb498" +checksum = "ef9db57e121ca1577fb5578d916bed549632be0e54a2098e8325980ac724d283" dependencies = [ "anyhow", "bincode", @@ -4895,12 +4070,6 @@ dependencies = [ "url", ] -[[package]] -name = "solana-nohash-hasher" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8a731ed60e89177c8a7ab05fe0f1511cedd3e70e773f288f9de33a9cfdc21e" - [[package]] name = "solana-nonce" version = "2.2.1" @@ -4959,9 +4128,9 @@ dependencies = [ [[package]] name = "solana-perf" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "682214ffa84ad08fe3a3a013fc0a487596b007027777fa7d7f865d8dcd3d808c" +checksum = "7b87939c18937f8bfad6028779a02fa123b27e986fb2c55fbbf683952a0e4932" dependencies = [ "ahash", "bincode", @@ -5001,9 +4170,9 @@ dependencies = [ [[package]] name = "solana-poseidon" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360635ce7e20eec1cf9b400d2d962580bca34562bee8e0a34825f26565a4f5ea" +checksum = "5d2908b48b3828bc04b752d1ff36122f5a06de043258da88df5f8ce64791d208" dependencies = [ "ark-bn254", "light-poseidon", @@ -5068,7 +4237,7 @@ dependencies = [ "log", "memoffset", "num-bigint 0.4.6", - "num-derive 0.4.2", + "num-derive", "num-traits", "rand 0.8.5", "serde", @@ -5184,9 +4353,9 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8ce68ce0f2777490a7ca3662d1c793e1dd5a400c9772514025185838fc5162" +checksum = "ce0a9acc6049c2ae8a2a2dd0b63269ab1a6d8fab4dead1aae75a9bcdd4aa6f05" dependencies = [ "base64 0.22.1", "bincode", @@ -5223,43 +4392,6 @@ dependencies = [ "thiserror 2.0.11", ] -[[package]] -name = "solana-program-test" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf6e241cf9090db4dde586e37607b849ab69db2bc3045855966214fa19cd3ace" -dependencies = [ - "assert_matches", - "async-trait", - "base64 0.22.1", - "bincode", - "chrono-humanize", - "crossbeam-channel", - "log", - "serde", - "solana-accounts-db", - "solana-banks-client", - "solana-banks-interface", - "solana-banks-server", - "solana-bpf-loader-program", - "solana-compute-budget", - "solana-feature-set", - "solana-inline-spl", - "solana-instruction", - "solana-log-collector", - "solana-logger", - "solana-program-runtime", - "solana-runtime", - "solana-sbpf", - "solana-sdk", - "solana-sdk-ids", - "solana-svm", - "solana-timings", - "solana-vote-program", - "thiserror 2.0.11", - "tokio", -] - [[package]] name = "solana-pubkey" version = "2.2.1" @@ -5289,9 +4421,9 @@ dependencies = [ [[package]] name = "solana-pubsub-client" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "181d082f1fc71e3e72b4e8e1226bbfbd844d9aa053c18a5d44acf3ca3f4ce6b1" +checksum = "52d219147fd3a6753dc4819578fb6830c082a7c26b1559fab0f240fcf11f4e39" dependencies = [ "crossbeam-channel", "futures-util", @@ -5316,9 +4448,9 @@ dependencies = [ [[package]] name = "solana-quic-client" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ddb60775a36033662bbf70957403deba846b45783d4a5b16cdadcc11ff878a" +checksum = "769d66df4ab445ab689ab2c4f10135dfe80576859b4fea1cae7d9bdd7985e4e2" dependencies = [ "async-lock", "async-trait", @@ -5328,7 +4460,7 @@ dependencies = [ "log", "quinn", "quinn-proto", - "rustls 0.23.23", + "rustls 0.23.25", "solana-connection-cache", "solana-keypair", "solana-measure", @@ -5356,9 +4488,9 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca12616e0d5a20708797e7e57dcf1912451efd1059d64c8d9660f2e8552817c" +checksum = "7bf3ad7091b26c9bd0ebabff6ac4d825c88ecf2eafdb83de30dffda80ffc2f17" dependencies = [ "lazy_static", "num_cpus", @@ -5428,9 +4560,9 @@ dependencies = [ [[package]] name = "solana-rpc-client" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039ad5152d72bd530ecc98dc55fa36d7e16ce92b2faf58befc07d51da1b72cdb" +checksum = "44f1809a424bb8d90aa40990451593cde7e734a060fb52b35e475db585450578" dependencies = [ "async-trait", "base64 0.22.1", @@ -5466,9 +4598,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80ce7f8565fc928d04ae56d69423b514c2e41566b48e828b868355c7034de4b7" +checksum = "aa2eb4fe573cd2d59d8672f0d8ac65f64e70c948b36cf97218b9aeb80dca3329" dependencies = [ "anyhow", "base64 0.22.1", @@ -5497,9 +4629,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-nonce-utils" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a3adc401074f5ecd7101d48ba4b66e0698d4e41879de4bb75162f521a5233d" +checksum = "2712d22c58616762ad8e02fc18556eaf7be4104d5e56b11a2b8aa892c7de2a08" dependencies = [ "solana-account", "solana-commitment-config", @@ -5513,123 +4645,16 @@ dependencies = [ ] [[package]] -name = "solana-runtime" -version = "2.2.0" +name = "solana-sanitize" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61f1bc1357b8188d9c4a3af3fc55276e56987265eb7ad073ae6f8180ee54cecf" + +[[package]] +name = "solana-sbpf" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acc5805ea88f4020c7899229d507cc3a8ca0e3afc512db173f8ec70104183d2c" -dependencies = [ - "ahash", - "aquamarine", - "arrayref", - "base64 0.22.1", - "bincode", - "blake3", - "bv", - "bytemuck", - "bzip2", - "crossbeam-channel", - "dashmap", - "dir-diff", - "flate2", - "fnv", - "im", - "index_list", - "itertools 0.12.1", - "lazy_static", - "libc", - "log", - "lz4", - "memmap2 0.5.10", - "mockall", - "modular-bitfield", - "num-derive 0.4.2", - "num-traits", - "num_cpus", - "num_enum", - "percentage", - "qualifier_attr", - "rand 0.8.5", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "serde_with", - "solana-accounts-db", - "solana-bpf-loader-program", - "solana-bucket-map", - "solana-builtins", - "solana-compute-budget", - "solana-compute-budget-instruction", - "solana-config-program", - "solana-cost-model", - "solana-feature-set", - "solana-fee", - "solana-inline-spl", - "solana-lattice-hash", - "solana-measure", - "solana-metrics", - "solana-nohash-hasher", - "solana-nonce-account", - "solana-perf", - "solana-program", - "solana-program-runtime", - "solana-pubkey", - "solana-rayon-threadlimit", - "solana-runtime-transaction", - "solana-sdk", - "solana-stake-program", - "solana-svm", - "solana-svm-rent-collector", - "solana-svm-transaction", - "solana-timings", - "solana-transaction-status-client-types", - "solana-unified-scheduler-logic", - "solana-version", - "solana-vote", - "solana-vote-program", - "static_assertions", - "strum", - "strum_macros", - "symlink", - "tar", - "tempfile", - "thiserror 2.0.11", - "zstd", -] - -[[package]] -name = "solana-runtime-transaction" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c37fec5b3d291b382a6b21aac6df461da8cc2d733b3d095596129a78d72f7" -dependencies = [ - "agave-transaction-view", - "log", - "solana-compute-budget", - "solana-compute-budget-instruction", - "solana-hash", - "solana-message", - "solana-pubkey", - "solana-sdk-ids", - "solana-signature", - "solana-svm-transaction", - "solana-transaction", - "solana-transaction-error", - "thiserror 2.0.11", -] - -[[package]] -name = "solana-sanitize" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61f1bc1357b8188d9c4a3af3fc55276e56987265eb7ad073ae6f8180ee54cecf" - -[[package]] -name = "solana-sbpf" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a3ce7a0f4d6830124ceb2c263c36d1ee39444ec70146eb49b939e557e72b96" +checksum = "66a3ce7a0f4d6830124ceb2c263c36d1ee39444ec70146eb49b939e557e72b96" dependencies = [ "byteorder", "combine 3.8.1", @@ -5798,25 +4823,6 @@ dependencies = [ "sha2 0.10.8", ] -[[package]] -name = "solana-send-transaction-service" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd59874c1f709fffa4b455c524e9bd98e419ce7df0aa6a37826989fed4c06271" -dependencies = [ - "crossbeam-channel", - "itertools 0.12.1", - "log", - "solana-client", - "solana-connection-cache", - "solana-measure", - "solana-metrics", - "solana-runtime", - "solana-sdk", - "solana-tpu-client", - "tokio", -] - [[package]] name = "solana-serde" version = "2.2.1" @@ -5960,40 +4966,11 @@ dependencies = [ "solana-sysvar-id", ] -[[package]] -name = "solana-stake-program" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7045076ed29255f228dede3a2554755449a610e42f3694afadb59e3424920858" -dependencies = [ - "bincode", - "log", - "solana-account", - "solana-bincode", - "solana-clock", - "solana-config-program", - "solana-feature-set", - "solana-genesis-config", - "solana-instruction", - "solana-log-collector", - "solana-native-token", - "solana-packet", - "solana-program-runtime", - "solana-pubkey", - "solana-rent", - "solana-sdk-ids", - "solana-stake-interface", - "solana-sysvar", - "solana-transaction-context", - "solana-type-overrides", - "solana-vote-interface", -] - [[package]] name = "solana-streamer" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41e73688c30ff6016b74c4b609fc78bad08f2b2a3b53006cbc331933e7e86aa" +checksum = "c8251a832b9f849e32266e2ebc14dba374c6c58d64e8b1ea9e9d95e836a53fe6" dependencies = [ "async-channel", "bytes", @@ -6013,7 +4990,7 @@ dependencies = [ "quinn", "quinn-proto", "rand 0.8.5", - "rustls 0.23.23", + "rustls 0.23.25", "smallvec", "socket2", "solana-keypair", @@ -6032,78 +5009,10 @@ dependencies = [ "solana-transaction-metrics-tracker", "thiserror 2.0.11", "tokio", - "tokio-util 0.7.13", + "tokio-util", "x509-parser", ] -[[package]] -name = "solana-svm" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e74fc2cd71d75f3e311bb568604184b51e90c280040efabaa3ab3c8a2c4d85" -dependencies = [ - "ahash", - "itertools 0.12.1", - "log", - "percentage", - "serde", - "serde_derive", - "solana-account", - "solana-bpf-loader-program", - "solana-clock", - "solana-compute-budget", - "solana-compute-budget-instruction", - "solana-feature-set", - "solana-fee-structure", - "solana-hash", - "solana-instruction", - "solana-instructions-sysvar", - "solana-loader-v4-program", - "solana-log-collector", - "solana-measure", - "solana-message", - "solana-nonce", - "solana-nonce-account", - "solana-precompiles", - "solana-program", - "solana-program-runtime", - "solana-pubkey", - "solana-rent", - "solana-rent-debits", - "solana-sdk", - "solana-sdk-ids", - "solana-svm-rent-collector", - "solana-svm-transaction", - "solana-timings", - "solana-transaction-context", - "solana-transaction-error", - "solana-type-overrides", - "thiserror 2.0.11", -] - -[[package]] -name = "solana-svm-rent-collector" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4387d97a27730ef97b52b81f814e3e31f869f001ede75fb53f2fcbc335c03e" -dependencies = [ - "solana-sdk", -] - -[[package]] -name = "solana-svm-transaction" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ffa8d1463d6813433cd4f31ec1c96abc85dc693f29b80986a77186dfe5e144" -dependencies = [ - "solana-hash", - "solana-message", - "solana-pubkey", - "solana-sdk-ids", - "solana-signature", - "solana-transaction", -] - [[package]] name = "solana-system-interface" version = "1.0.0" @@ -6122,9 +5031,9 @@ dependencies = [ [[package]] name = "solana-system-program" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4c7851977d6fc24c5d734b836c5c1d5c0f40d07d835c1bcc76021e325492c5" +checksum = "6321fd5380961387ef4633a98c109ac7f978667ceab2a38d0a699d6ddb2fc57a" dependencies = [ "bincode", "log", @@ -6210,9 +5119,9 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6c6b2376c3e0a6ae5538d86818e403841b8b11861c6b39a943221c6c2164eea" +checksum = "61f6e417c23af670d7861ef74feae3c556d47ea9e5f64c664cfcf6d254f43e1a" dependencies = [ "bincode", "log", @@ -6245,9 +5154,9 @@ checksum = "6af261afb0e8c39252a04d026e3ea9c405342b08c871a2ad8aa5448e068c784c" [[package]] name = "solana-timings" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f59d5f154e1b2fb4aef3257af4b4823e2c2e61c3d77e52e5ef28464d37453c4" +checksum = "224f93327d9d3178a30cd6c057e1ac6ca85e95287dd7355064dfa6b9c49f5671" dependencies = [ "eager", "enum-iterator", @@ -6256,11 +5165,11 @@ dependencies = [ [[package]] name = "solana-tls-utils" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9da625758b52894dfde5d72f3b78f5141045ec5296a5acadec934dd2ccbb1b" +checksum = "ec21c6c242ee93642aa50b829f5727470cdbdf6b461fb7323fe4bc31d1b54c08" dependencies = [ - "rustls 0.23.23", + "rustls 0.23.25", "solana-keypair", "solana-pubkey", "solana-signer", @@ -6269,9 +5178,9 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1045fd558ad215e8d2f2a0e87154444ea0dc8821a80f088dcdcf4831a510879a" +checksum = "637e3ff3c8ece22043d96758f980d95558d50792d827d1457c2e06d9daaa7ff5" dependencies = [ "async-trait", "bincode", @@ -6359,9 +5268,9 @@ dependencies = [ [[package]] name = "solana-transaction-metrics-tracker" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d97bffaf9515adbf3b1a04efbc9dbc815d635da684f358357e76abdbe2a4e5" +checksum = "58e40670c0780af24e73551be1fadf2306f61ed13f538ff3933846dab813b06d" dependencies = [ "base64 0.22.1", "bincode", @@ -6376,9 +5285,9 @@ dependencies = [ [[package]] name = "solana-transaction-status-client-types" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6d348cd4cd79cab56e58590a301aef5b5247ba503f94f97900db3a0f8f7ff94" +checksum = "1458fc750d0df4439bb4c1b418a4fe61afbd2e83963e452256eca99dc0c1cf76" dependencies = [ "base64 0.22.1", "bincode", @@ -6399,9 +5308,9 @@ dependencies = [ [[package]] name = "solana-type-overrides" -version = "2.2.0" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "040beb66259d485dd8623cddb8f5e8d537a8e3e0d893b84b0239423b1a6460ce" +checksum = "d26d927bf3ed2f2b6b06a0f409dd8d6b1ad1af73cbba337e9471d05d42f026c9" dependencies = [ "lazy_static", "rand 0.8.5", @@ -6409,239 +5318,62 @@ dependencies = [ [[package]] name = "solana-udp-client" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac5859430b42c8f6412d57230b2918a1cc89597cbc26b546e84fbc5277538898" -dependencies = [ - "async-trait", - "solana-connection-cache", - "solana-keypair", - "solana-net-utils", - "solana-streamer", - "solana-transaction-error", - "thiserror 2.0.11", - "tokio", -] - -[[package]] -name = "solana-unified-scheduler-logic" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73db72aa7dfb35bc8715cd9990a68671e4d970fff63080c45fc44fed59f54946" -dependencies = [ - "assert_matches", - "solana-pubkey", - "solana-runtime-transaction", - "solana-transaction", - "static_assertions", -] - -[[package]] -name = "solana-validator-exit" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bbf6d7a3c0b28dd5335c52c0e9eae49d0ae489a8f324917faf0ded65a812c1d" - -[[package]] -name = "solana-version" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a843098ea779826eb0fb4b04c8aee3acb42ecc1f9595a9e40306e3938026d3" -dependencies = [ - "semver", - "serde", - "serde_derive", - "solana-feature-set", - "solana-sanitize", - "solana-serde-varint", -] - -[[package]] -name = "solana-vote" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b1735371e033fd6c340ea8a6dfcf8992a6c05c6bf428955100697c8f8baab3e" -dependencies = [ - "itertools 0.12.1", - "log", - "serde", - "serde_derive", - "solana-account", - "solana-bincode", - "solana-clock", - "solana-hash", - "solana-instruction", - "solana-packet", - "solana-pubkey", - "solana-sdk-ids", - "solana-signature", - "solana-svm-transaction", - "solana-transaction", - "solana-vote-interface", - "thiserror 2.0.11", -] - -[[package]] -name = "solana-vote-interface" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4507bb9d071fb81cfcf676f12fba3db4098f764524ef0b5567d671a81d41f3e" -dependencies = [ - "bincode", - "num-derive 0.4.2", - "num-traits", - "serde", - "serde_derive", - "solana-clock", - "solana-decode-error", - "solana-hash", - "solana-instruction", - "solana-pubkey", - "solana-rent", - "solana-sdk-ids", - "solana-serde-varint", - "solana-serialize-utils", - "solana-short-vec", - "solana-system-interface", -] - -[[package]] -name = "solana-vote-program" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4862f099c25d20857d270a2423ed4e0dd11038ad2f7f25905ff72c33c5132828" -dependencies = [ - "bincode", - "log", - "num-derive 0.4.2", - "num-traits", - "serde", - "serde_derive", - "solana-account", - "solana-bincode", - "solana-clock", - "solana-epoch-schedule", - "solana-feature-set", - "solana-hash", - "solana-instruction", - "solana-keypair", - "solana-packet", - "solana-program-runtime", - "solana-pubkey", - "solana-rent", - "solana-sdk-ids", - "solana-signer", - "solana-slot-hashes", - "solana-transaction", - "solana-transaction-context", - "solana-vote-interface", - "thiserror 2.0.11", -] - -[[package]] -name = "solana-zk-elgamal-proof-program" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75248110af0908a5280adca0f8b1f7fc8b7299358a7476cfcac4ebd039bd5921" -dependencies = [ - "bytemuck", - "num-derive 0.4.2", - "num-traits", - "solana-instruction", - "solana-log-collector", - "solana-program-runtime", - "solana-sdk-ids", - "solana-zk-sdk", -] - -[[package]] -name = "solana-zk-sdk" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26f66acae4f01a718825ae0201ea0a05ae3c9a3afb27a7eed6f0803b96da639b" -dependencies = [ - "aes-gcm-siv", - "base64 0.22.1", - "bincode", - "bytemuck", - "bytemuck_derive", - "curve25519-dalek 4.1.3", - "itertools 0.12.1", - "js-sys", - "lazy_static", - "merlin", - "num-derive 0.4.2", - "num-traits", - "rand 0.8.5", - "serde", - "serde_derive", - "serde_json", - "sha3", - "solana-derivation-path", - "solana-instruction", - "solana-pubkey", - "solana-sdk-ids", - "solana-seed-derivable", - "solana-seed-phrase", - "solana-signature", - "solana-signer", - "subtle", +version = "2.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c37955cc627be2745e29ce326fd1b51739e499445b5e2b5fec687ed8ec581e34" +dependencies = [ + "async-trait", + "solana-connection-cache", + "solana-keypair", + "solana-net-utils", + "solana-streamer", + "solana-transaction-error", "thiserror 2.0.11", - "wasm-bindgen", - "zeroize", + "tokio", ] [[package]] -name = "solana-zk-token-proof-program" -version = "2.2.0" +name = "solana-validator-exit" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bbf6d7a3c0b28dd5335c52c0e9eae49d0ae489a8f324917faf0ded65a812c1d" + +[[package]] +name = "solana-version" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7deadf45ab349e02ccd402f9534b7ae9ebbb7a70160f5068a09a71946be103cb" +checksum = "374dea09855d46655c776256dda9cc3c854cc70fd923ef22ba0805bc83ca7bfd" dependencies = [ - "bytemuck", - "num-derive 0.4.2", - "num-traits", + "semver", + "serde", + "serde_derive", "solana-feature-set", - "solana-instruction", - "solana-log-collector", - "solana-program-runtime", - "solana-sdk-ids", - "solana-zk-token-sdk", + "solana-sanitize", + "solana-serde-varint", ] [[package]] -name = "solana-zk-token-sdk" -version = "2.2.0" +name = "solana-vote-interface" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77367202d84b62d224289ff7174ddecd737626108e5a3278deb1c3b38d050084" +checksum = "d4507bb9d071fb81cfcf676f12fba3db4098f764524ef0b5567d671a81d41f3e" dependencies = [ - "aes-gcm-siv", - "base64 0.22.1", "bincode", - "bytemuck", - "bytemuck_derive", - "curve25519-dalek 4.1.3", - "itertools 0.12.1", - "lazy_static", - "merlin", - "num-derive 0.4.2", + "num-derive", "num-traits", - "rand 0.8.5", "serde", "serde_derive", - "serde_json", - "sha3", - "solana-curve25519", - "solana-derivation-path", + "solana-clock", + "solana-decode-error", + "solana-hash", "solana-instruction", "solana-pubkey", + "solana-rent", "solana-sdk-ids", - "solana-seed-derivable", - "solana-seed-phrase", - "solana-signature", - "solana-signer", - "subtle", - "thiserror 2.0.11", - "zeroize", + "solana-serde-varint", + "solana-serialize-utils", + "solana-short-vec", + "solana-system-interface", ] [[package]] @@ -6668,15 +5400,14 @@ dependencies = [ name = "spl-program-metadata-client" version = "0.0.0" dependencies = [ - "assert_matches", "borsh 0.10.4", "kaigan", - "num-derive 0.3.3", + "num-derive", "num-traits", "serde", "serde_with", + "solana-client", "solana-program", - "solana-program-test", "solana-sdk", "thiserror 1.0.69", ] @@ -6687,52 +5418,18 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.109", -] - [[package]] name = "subtle" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "symlink" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" - [[package]] name = "syn" version = "1.0.109" @@ -6791,7 +5488,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -6805,52 +5502,6 @@ dependencies = [ "libc", ] -[[package]] -name = "tar" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tarpc" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38a012bed6fb9681d3bf71ffaa4f88f3b4b9ed3198cda6e4c8462d24d4bb80" -dependencies = [ - "anyhow", - "fnv", - "futures", - "humantime", - "opentelemetry", - "pin-project", - "rand 0.8.5", - "serde", - "static_assertions", - "tarpc-plugins", - "thiserror 1.0.69", - "tokio", - "tokio-serde", - "tokio-util 0.6.10", - "tracing", - "tracing-opentelemetry", -] - -[[package]] -name = "tarpc-plugins" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee42b4e559f17bce0385ebf511a7beb67d5cc33c12c96b7f4e9789919d9c10f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "task-local-extensions" version = "0.1.4" @@ -6860,20 +5511,6 @@ dependencies = [ "pin-utils", ] -[[package]] -name = "tempfile" -version = "3.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" -dependencies = [ - "cfg-if", - "fastrand", - "getrandom 0.3.1", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - [[package]] name = "termcolor" version = "1.4.1" @@ -6883,12 +5520,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "termtree" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" - [[package]] name = "thiserror" version = "1.0.69" @@ -6929,21 +5560,11 @@ dependencies = [ "syn 2.0.98", ] -[[package]] -name = "thread_local" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" -dependencies = [ - "cfg-if", - "once_cell", -] - [[package]] name = "time" -version = "0.3.37" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -6956,15 +5577,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -7034,22 +5655,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-serde" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911a61637386b789af998ee23f50aa30d5fd7edcec8d6d3dedae5e5815205466" -dependencies = [ - "bincode", - "bytes", - "educe", - "futures-core", - "futures-sink", - "pin-project", - "serde", - "serde_json", -] - [[package]] name = "tokio-stream" version = "0.1.17" @@ -7076,21 +5681,6 @@ dependencies = [ "webpki-roots 0.25.4", ] -[[package]] -name = "tokio-util" -version = "0.6.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "slab", - "tokio", -] - [[package]] name = "tokio-util" version = "0.7.13" @@ -7144,21 +5734,9 @@ checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", - "tracing-attributes", "tracing-core", ] -[[package]] -name = "tracing-attributes" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.98", -] - [[package]] name = "tracing-core" version = "0.1.33" @@ -7166,31 +5744,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", - "valuable", -] - -[[package]] -name = "tracing-opentelemetry" -version = "0.17.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f" -dependencies = [ - "once_cell", - "opentelemetry", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" -dependencies = [ - "sharded-slab", - "thread_local", - "tracing-core", ] [[package]] @@ -7250,16 +5803,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "universal-hash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle", -] - [[package]] name = "unreachable" version = "1.0.0" @@ -7314,12 +5857,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - [[package]] name = "vcpkg" version = "0.2.15" @@ -7371,9 +5908,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi" -version = "0.13.3+wasi-0.2.2" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ "wit-bindgen-rt", ] @@ -7533,6 +6070,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -7560,6 +6106,21 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -7591,6 +6152,12 @@ dependencies = [ "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -7603,6 +6170,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -7615,6 +6188,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -7633,6 +6212,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -7645,6 +6230,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -7657,6 +6248,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -7669,6 +6266,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -7702,9 +6305,9 @@ dependencies = [ [[package]] name = "wit-bindgen-rt" -version = "0.33.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ "bitflags 2.8.0", ] @@ -7739,17 +6342,6 @@ dependencies = [ "time", ] -[[package]] -name = "xattr" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" -dependencies = [ - "libc", - "linux-raw-sys", - "rustix", -] - [[package]] name = "yoke" version = "0.7.5" @@ -7781,7 +6373,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +dependencies = [ + "zerocopy-derive 0.8.24", ] [[package]] @@ -7795,6 +6396,17 @@ dependencies = [ "syn 2.0.98", ] +[[package]] +name = "zerocopy-derive" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "zerofrom" version = "0.1.5" @@ -7869,18 +6481,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.2.3" +version = "7.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.14+zstd.1.5.7" +version = "2.0.15+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" dependencies = [ "cc", "pkg-config", diff --git a/clients/rust/Cargo.toml b/clients/rust/Cargo.toml index 216f7ab..6771162 100644 --- a/clients/rust/Cargo.toml +++ b/clients/rust/Cargo.toml @@ -8,20 +8,17 @@ readme = "README.md" license-file = "../../LICENSE" [features] -test-sbf = [] serde = ["dep:serde", "dep:serde_with"] +fetch = ["dep:solana-client", "dep:solana-sdk"] [dependencies] borsh = "^0.10" -num-derive = "^0.3" +num-derive = "^0.4" num-traits = "^0.2" serde = { version = "^1.0", features = ["derive"], optional = true } serde_with = { version = "^3.0", optional = true } +solana-client = { version = "^2.2", optional = true } solana-program = "^2.2" +solana-sdk = { version = "^2.2", optional = true } thiserror = "^1.0" kaigan = { version = "^0.2", features = ["serde"] } - -[dev-dependencies] -assert_matches = "1.5.0" -solana-program-test = "^2.2" -solana-sdk = "^2.2" diff --git a/clients/rust/src/generated/accounts/buffer.rs b/clients/rust/src/generated/accounts/buffer.rs index e71b7ee..e0612a0 100644 --- a/clients/rust/src/generated/accounts/buffer.rs +++ b/clients/rust/src/generated/accounts/buffer.rs @@ -45,7 +45,7 @@ impl<'a> TryFrom<&solana_program::account_info::AccountInfo<'a>> for Buffer { #[cfg(feature = "fetch")] pub fn fetch_buffer( rpc: &solana_client::rpc_client::RpcClient, - address: &Pubkey, + address: &solana_program::pubkey::Pubkey, ) -> Result, std::io::Error> { let accounts = fetch_all_buffer(rpc, &[*address])?; Ok(accounts[0].clone()) @@ -54,10 +54,10 @@ pub fn fetch_buffer( #[cfg(feature = "fetch")] pub fn fetch_all_buffer( rpc: &solana_client::rpc_client::RpcClient, - addresses: &[Pubkey], + addresses: &[solana_program::pubkey::Pubkey], ) -> Result>, std::io::Error> { let accounts = rpc - .get_multiple_accounts(&addresses) + .get_multiple_accounts(addresses) .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?; let mut decoded_accounts: Vec> = Vec::new(); for i in 0..addresses.len() { @@ -79,7 +79,7 @@ pub fn fetch_all_buffer( #[cfg(feature = "fetch")] pub fn fetch_maybe_buffer( rpc: &solana_client::rpc_client::RpcClient, - address: &Pubkey, + address: &solana_program::pubkey::Pubkey, ) -> Result, std::io::Error> { let accounts = fetch_all_maybe_buffer(rpc, &[*address])?; Ok(accounts[0].clone()) @@ -88,10 +88,10 @@ pub fn fetch_maybe_buffer( #[cfg(feature = "fetch")] pub fn fetch_all_maybe_buffer( rpc: &solana_client::rpc_client::RpcClient, - addresses: &[Pubkey], + addresses: &[solana_program::pubkey::Pubkey], ) -> Result>, std::io::Error> { let accounts = rpc - .get_multiple_accounts(&addresses) + .get_multiple_accounts(addresses) .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?; let mut decoded_accounts: Vec> = Vec::new(); for i in 0..addresses.len() { diff --git a/clients/rust/src/generated/accounts/metadata.rs b/clients/rust/src/generated/accounts/metadata.rs index 15404f3..9b1224c 100644 --- a/clients/rust/src/generated/accounts/metadata.rs +++ b/clients/rust/src/generated/accounts/metadata.rs @@ -60,7 +60,7 @@ impl<'a> TryFrom<&solana_program::account_info::AccountInfo<'a>> for Metadata { #[cfg(feature = "fetch")] pub fn fetch_metadata( rpc: &solana_client::rpc_client::RpcClient, - address: &Pubkey, + address: &solana_program::pubkey::Pubkey, ) -> Result, std::io::Error> { let accounts = fetch_all_metadata(rpc, &[*address])?; Ok(accounts[0].clone()) @@ -69,10 +69,10 @@ pub fn fetch_metadata( #[cfg(feature = "fetch")] pub fn fetch_all_metadata( rpc: &solana_client::rpc_client::RpcClient, - addresses: &[Pubkey], + addresses: &[solana_program::pubkey::Pubkey], ) -> Result>, std::io::Error> { let accounts = rpc - .get_multiple_accounts(&addresses) + .get_multiple_accounts(addresses) .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?; let mut decoded_accounts: Vec> = Vec::new(); for i in 0..addresses.len() { @@ -94,7 +94,7 @@ pub fn fetch_all_metadata( #[cfg(feature = "fetch")] pub fn fetch_maybe_metadata( rpc: &solana_client::rpc_client::RpcClient, - address: &Pubkey, + address: &solana_program::pubkey::Pubkey, ) -> Result, std::io::Error> { let accounts = fetch_all_maybe_metadata(rpc, &[*address])?; Ok(accounts[0].clone()) @@ -103,10 +103,10 @@ pub fn fetch_maybe_metadata( #[cfg(feature = "fetch")] pub fn fetch_all_maybe_metadata( rpc: &solana_client::rpc_client::RpcClient, - addresses: &[Pubkey], + addresses: &[solana_program::pubkey::Pubkey], ) -> Result>, std::io::Error> { let accounts = rpc - .get_multiple_accounts(&addresses) + .get_multiple_accounts(addresses) .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?; let mut decoded_accounts: Vec> = Vec::new(); for i in 0..addresses.len() { diff --git a/clients/rust/src/generated/instructions/allocate.rs b/clients/rust/src/generated/instructions/allocate.rs index ae182c1..5d18f50 100644 --- a/clients/rust/src/generated/instructions/allocate.rs +++ b/clients/rust/src/generated/instructions/allocate.rs @@ -31,6 +31,7 @@ impl Allocate { ) -> solana_program::instruction::Instruction { self.instruction_with_remaining_accounts(args, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::vec_init_then_push)] pub fn instruction_with_remaining_accounts( &self, @@ -284,6 +285,7 @@ impl<'a, 'b> AllocateCpi<'a, 'b> { ) -> solana_program::entrypoint::ProgramResult { self.invoke_signed_with_remaining_accounts(signers_seeds, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::clone_on_copy)] #[allow(clippy::vec_init_then_push)] pub fn invoke_signed_with_remaining_accounts( diff --git a/clients/rust/src/generated/instructions/close.rs b/clients/rust/src/generated/instructions/close.rs index 620323b..c70f7a5 100644 --- a/clients/rust/src/generated/instructions/close.rs +++ b/clients/rust/src/generated/instructions/close.rs @@ -27,6 +27,7 @@ impl Close { pub fn instruction(&self) -> solana_program::instruction::Instruction { self.instruction_with_remaining_accounts(&[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::vec_init_then_push)] pub fn instruction_with_remaining_accounts( &self, @@ -251,6 +252,7 @@ impl<'a, 'b> CloseCpi<'a, 'b> { ) -> solana_program::entrypoint::ProgramResult { self.invoke_signed_with_remaining_accounts(signers_seeds, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::clone_on_copy)] #[allow(clippy::vec_init_then_push)] pub fn invoke_signed_with_remaining_accounts( diff --git a/clients/rust/src/generated/instructions/extend.rs b/clients/rust/src/generated/instructions/extend.rs index beeda2b..be5e049 100644 --- a/clients/rust/src/generated/instructions/extend.rs +++ b/clients/rust/src/generated/instructions/extend.rs @@ -28,6 +28,7 @@ impl Extend { ) -> solana_program::instruction::Instruction { self.instruction_with_remaining_accounts(args, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::vec_init_then_push)] pub fn instruction_with_remaining_accounts( &self, @@ -256,6 +257,7 @@ impl<'a, 'b> ExtendCpi<'a, 'b> { ) -> solana_program::entrypoint::ProgramResult { self.invoke_signed_with_remaining_accounts(signers_seeds, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::clone_on_copy)] #[allow(clippy::vec_init_then_push)] pub fn invoke_signed_with_remaining_accounts( diff --git a/clients/rust/src/generated/instructions/initialize.rs b/clients/rust/src/generated/instructions/initialize.rs index 60a30bf..5c172d1 100644 --- a/clients/rust/src/generated/instructions/initialize.rs +++ b/clients/rust/src/generated/instructions/initialize.rs @@ -36,6 +36,7 @@ impl Initialize { ) -> solana_program::instruction::Instruction { self.instruction_with_remaining_accounts(args, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::vec_init_then_push)] pub fn instruction_with_remaining_accounts( &self, @@ -322,6 +323,7 @@ impl<'a, 'b> InitializeCpi<'a, 'b> { ) -> solana_program::entrypoint::ProgramResult { self.invoke_signed_with_remaining_accounts(signers_seeds, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::clone_on_copy)] #[allow(clippy::vec_init_then_push)] pub fn invoke_signed_with_remaining_accounts( diff --git a/clients/rust/src/generated/instructions/set_authority.rs b/clients/rust/src/generated/instructions/set_authority.rs index 1ef81cf..269407e 100644 --- a/clients/rust/src/generated/instructions/set_authority.rs +++ b/clients/rust/src/generated/instructions/set_authority.rs @@ -29,6 +29,7 @@ impl SetAuthority { ) -> solana_program::instruction::Instruction { self.instruction_with_remaining_accounts(args, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::vec_init_then_push)] pub fn instruction_with_remaining_accounts( &self, @@ -258,6 +259,7 @@ impl<'a, 'b> SetAuthorityCpi<'a, 'b> { ) -> solana_program::entrypoint::ProgramResult { self.invoke_signed_with_remaining_accounts(signers_seeds, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::clone_on_copy)] #[allow(clippy::vec_init_then_push)] pub fn invoke_signed_with_remaining_accounts( diff --git a/clients/rust/src/generated/instructions/set_data.rs b/clients/rust/src/generated/instructions/set_data.rs index 843d2e4..9aac119 100644 --- a/clients/rust/src/generated/instructions/set_data.rs +++ b/clients/rust/src/generated/instructions/set_data.rs @@ -35,6 +35,7 @@ impl SetData { ) -> solana_program::instruction::Instruction { self.instruction_with_remaining_accounts(args, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::vec_init_then_push)] pub fn instruction_with_remaining_accounts( &self, @@ -318,6 +319,7 @@ impl<'a, 'b> SetDataCpi<'a, 'b> { ) -> solana_program::entrypoint::ProgramResult { self.invoke_signed_with_remaining_accounts(signers_seeds, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::clone_on_copy)] #[allow(clippy::vec_init_then_push)] pub fn invoke_signed_with_remaining_accounts( diff --git a/clients/rust/src/generated/instructions/set_immutable.rs b/clients/rust/src/generated/instructions/set_immutable.rs index 094ef70..5fb1d90 100644 --- a/clients/rust/src/generated/instructions/set_immutable.rs +++ b/clients/rust/src/generated/instructions/set_immutable.rs @@ -25,6 +25,7 @@ impl SetImmutable { pub fn instruction(&self) -> solana_program::instruction::Instruction { self.instruction_with_remaining_accounts(&[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::vec_init_then_push)] pub fn instruction_with_remaining_accounts( &self, @@ -231,6 +232,7 @@ impl<'a, 'b> SetImmutableCpi<'a, 'b> { ) -> solana_program::entrypoint::ProgramResult { self.invoke_signed_with_remaining_accounts(signers_seeds, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::clone_on_copy)] #[allow(clippy::vec_init_then_push)] pub fn invoke_signed_with_remaining_accounts( diff --git a/clients/rust/src/generated/instructions/trim.rs b/clients/rust/src/generated/instructions/trim.rs index b0261df..c7dcf7e 100644 --- a/clients/rust/src/generated/instructions/trim.rs +++ b/clients/rust/src/generated/instructions/trim.rs @@ -29,6 +29,7 @@ impl Trim { pub fn instruction(&self) -> solana_program::instruction::Instruction { self.instruction_with_remaining_accounts(&[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::vec_init_then_push)] pub fn instruction_with_remaining_accounts( &self, @@ -273,6 +274,7 @@ impl<'a, 'b> TrimCpi<'a, 'b> { ) -> solana_program::entrypoint::ProgramResult { self.invoke_signed_with_remaining_accounts(signers_seeds, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::clone_on_copy)] #[allow(clippy::vec_init_then_push)] pub fn invoke_signed_with_remaining_accounts( diff --git a/clients/rust/src/generated/instructions/write.rs b/clients/rust/src/generated/instructions/write.rs index da20750..73968b8 100644 --- a/clients/rust/src/generated/instructions/write.rs +++ b/clients/rust/src/generated/instructions/write.rs @@ -25,6 +25,7 @@ impl Write { ) -> solana_program::instruction::Instruction { self.instruction_with_remaining_accounts(args, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::vec_init_then_push)] pub fn instruction_with_remaining_accounts( &self, @@ -207,6 +208,7 @@ impl<'a, 'b> WriteCpi<'a, 'b> { ) -> solana_program::entrypoint::ProgramResult { self.invoke_signed_with_remaining_accounts(signers_seeds, &[]) } + #[allow(clippy::arithmetic_side_effects)] #[allow(clippy::clone_on_copy)] #[allow(clippy::vec_init_then_push)] pub fn invoke_signed_with_remaining_accounts( diff --git a/clients/rust/tests/create.rs b/clients/rust/tests/create.rs deleted file mode 100644 index 09d3faa..0000000 --- a/clients/rust/tests/create.rs +++ /dev/null @@ -1,51 +0,0 @@ -#![cfg(feature = "test-sbf")] - -use borsh::BorshDeserialize; -use solana_program_test::{tokio, ProgramTest}; -use solana_sdk::{signature::Signer, transaction::Transaction}; -use spl_program_metadata_client::{accounts::Counter, instructions::CreateBuilder}; - -#[tokio::test] -async fn create() { - let mut context = ProgramTest::new( - "spl_program_metadata", - spl_program_metadata_client::ID, - None, - ) - .start_with_context() - .await; - - // Given a PDA derived from the payer's public key. - - let address = Counter::find_pda(&context.payer.pubkey()).0; - - let ix = CreateBuilder::new() - .counter(address) - .authority(context.payer.pubkey()) - .payer(context.payer.pubkey()) - .instruction(); - - // When we create a new counter. - - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&context.payer.pubkey()), - &[&context.payer], - context.last_blockhash, - ); - context.banks_client.process_transaction(tx).await.unwrap(); - - // Then an account was created with the correct data. - - let account = context.banks_client.get_account(address).await.unwrap(); - - assert!(account.is_some()); - - let account = account.unwrap(); - assert_eq!(account.data.len(), Counter::LEN); - - let mut account_data = account.data.as_ref(); - let counter = Counter::deserialize(&mut account_data).unwrap(); - assert_eq!(counter.authority, context.payer.pubkey()); - assert_eq!(counter.value, 0); -} diff --git a/package.json b/package.json index cbdb482..009e7a3 100644 --- a/package.json +++ b/package.json @@ -23,10 +23,10 @@ "clients:rust:test": "zx ./scripts/client/test-rust.mjs" }, "devDependencies": { - "@codama/renderers-js": "^1.2.7", - "@codama/renderers-rust": "^1.0.16", + "@codama/renderers-js": "^1.2.10", + "@codama/renderers-rust": "^1.0.19", "@iarna/toml": "^2.2.5", - "codama": "^1.2.8", + "codama": "^1.2.11", "typescript": "^5.5.2", "zx": "^7.2.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 03275f1..524ae4d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,17 +9,17 @@ importers: .: devDependencies: '@codama/renderers-js': - specifier: ^1.2.7 - version: 1.2.7(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + specifier: ^1.2.10 + version: 1.2.10(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) '@codama/renderers-rust': - specifier: ^1.0.16 - version: 1.0.16(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + specifier: ^1.0.19 + version: 1.0.19(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) '@iarna/toml': specifier: ^2.2.5 version: 2.2.5 codama: - specifier: ^1.2.8 - version: 1.2.8(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + specifier: ^1.2.11 + version: 1.2.11(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) typescript: specifier: ^5.5.2 version: 5.7.3 @@ -29,45 +29,45 @@ importers: packages: - '@codama/cli@1.0.7': - resolution: {integrity: sha512-qA+cDhTnx3r4Ds9JAIduGTzaEJjjCSVj+Bt2mm1hEW1hrI4hymAxW+BeLfFehzqjggdTVM3UIrTwkXAkhNJfEw==} + '@codama/cli@1.0.10': + resolution: {integrity: sha512-zKfQZYIqu834fno5ra6H/rlqFlNWNJ5tU5spxxVBOwECX3oUZc5+ED9Vu6cOP/FRgs6FI24/d603P6iSz0vuuA==} - '@codama/errors@1.2.8': - resolution: {integrity: sha512-TVPf7oJpbHtxdu52ruftJX+DlTNWi7D65tasysqs7mfRKoiZKzmkatr5hqidBz/M9WzCddUeFAHL9ZiW6g9Ccg==} + '@codama/errors@1.2.11': + resolution: {integrity: sha512-npkIj4bqLMENt2HPtxzLitaduwtl/kaQkW1lFJJdJR7Fu1rD0R4jQkiysqvzMggviOFMnR2/ANutXxKy3NaqQA==} hasBin: true - '@codama/node-types@1.2.8': - resolution: {integrity: sha512-PEvPLMN3QGJvkwsQ7R9DmAtdazQXN0RD9WYlmHyeiR4nathV0qy9nZGFDoRh5nbNfPkbeLTgL5o3zAoeeRP6GQ==} + '@codama/node-types@1.2.11': + resolution: {integrity: sha512-4yUA2uYwC/VmtyiRZe+89mWJ3BiN9D6mckiYgvpyOHTNtQ0y35CQpPloJzb0hiRcWIuVaOmV+AWqZrZn5wbzkg==} - '@codama/nodes-from-anchor@1.1.8': - resolution: {integrity: sha512-eaoGrcMMc5yr1XPnv1H3hPw6cCh0e6BRmmuzOBOIDG4PR2gVm415RnBkfQOX2JqRTX7wKLv8Y1EIZV4IgVxkvw==} + '@codama/nodes-from-anchor@1.1.11': + resolution: {integrity: sha512-OpBGlmZnHhbOhHfJ8uKcUP5/ZESjVGV/xyxB5XDRHyBFzUOuxGheAm1/fC9M7K5pNtxEaOk8Ouq9U72cvAK0Xw==} - '@codama/nodes@1.2.8': - resolution: {integrity: sha512-tCi7KErG2ChQr5n3Nj3dwciFmUo3O8RQ+S4Qv23w1zvYLaGwhEvdg3KRtgCGEI0wr9uvm2QtTBM670kdLntZiQ==} + '@codama/nodes@1.2.11': + resolution: {integrity: sha512-+cJrFHYcNMwjgfChgY3ujbUNu8dmsokcbq5UGzuS5CCSJ8g7t3SIc07tTj/VJwZnKrClCSiKl12chP7Q0Vc2Rw==} - '@codama/renderers-core@1.0.10': - resolution: {integrity: sha512-7NwoyP2j1cZKgHCrd1RRn891gtxpZeiXNSP3aCFdVsRPW8dDNUL1sJ1SNOF9ILHfNP77clCBtL3eoZIFdeNQAg==} + '@codama/renderers-core@1.0.13': + resolution: {integrity: sha512-1/IDgYlsKi1CZCJ6imyiIk/BJDYNKzUnwfD0m/HwLOhzyKZwn0OAbMMQuKkBgcclmzD/izxmHxYHJvAJZSBl+w==} - '@codama/renderers-js-umi@1.1.9': - resolution: {integrity: sha512-rYrm1u3zqqHfYtLnnYmhU+4KXYCqmGJxQP+eiyHIDwxcALzH6y8Ng2zEz3YRGNLXqdlwCB4bx1lJOCjfbRZiwA==} + '@codama/renderers-js-umi@1.1.12': + resolution: {integrity: sha512-Ne3hdMBPDdfXgXTjFoxeSSoOLP44ecCryG/H0t2okNau3IB6NO3DN13xn4xtC/l3JO6bdjxggyPg8QZEw8lc5g==} - '@codama/renderers-js@1.2.7': - resolution: {integrity: sha512-xzWK7tdPneNhbPAMeh5B4ddXjMfkNtTbDDRJ81jNvGv8WRPCvA97c0zMeTskHY+W/C+GlbsSNGMuL4Ga8bEmSA==} + '@codama/renderers-js@1.2.10': + resolution: {integrity: sha512-rGlrmP5Rs90taX2IDKjHskDXhfVFMajfnCq1RFNg4/2XoEtWeXPkhQTWVUgn0q9tBAcvQCWyea2IfjGjjk5XMA==} - '@codama/renderers-rust@1.0.16': - resolution: {integrity: sha512-pFHwHN6X4Yuk26Yfh+VT9Ps1i/QEjuK3EoT8BpsCTATOk6ntJNqyD5aQngG2lE4KWx3uQrCYYbQEAN4vG6v+EA==} + '@codama/renderers-rust@1.0.19': + resolution: {integrity: sha512-ur2oQsMZ0P/g0DXY4tcw6Hznsq8ax1n968lfUNnxMHNBYr3zdhfJRBvzsF7RtcYkEvengOafQn1N5AlsNv1GBA==} - '@codama/renderers@1.0.16': - resolution: {integrity: sha512-Mj3k1BJ7Rg9BlaCNCvhWY+FRmgLnislwatA6t9zHiReSeukrOFmSW9KKPpWHXm4+i1ueZFKmLeFzGPEt927WBA==} + '@codama/renderers@1.0.19': + resolution: {integrity: sha512-gzc+dOVyzIkPjEEZiEcQLAHS+7hJL9hU4x5ZiMJfemLLapk/wIg7fH1s5alw3oDh6HosZouVtnAYp1OOukH88A==} - '@codama/validators@1.2.8': - resolution: {integrity: sha512-cGyYgV+zhPzhT3RHBKgDLueeOvSTo3ry9QEliPv90+sL6Q9ecKj4Ut9QVxjmwvdv67rNAZq5JBl+GC8SYcDhPg==} + '@codama/validators@1.2.11': + resolution: {integrity: sha512-67j+GEIZqq1Qh8eZe63Dnh21zzeVoJQbj56uek8VYLevgt9qfO8hdI9D/XGg7xM+o2fKa9g3NlwO5jOSG+1oLQ==} - '@codama/visitors-core@1.2.8': - resolution: {integrity: sha512-sYmZT2Z6Goacgr/HrAhjLSGtu2Udcal10tEfYN8ZJBXs34PGPu0oWOC8kFx7CxvmAvt/6mw8NhKIPtg/UaIKHw==} + '@codama/visitors-core@1.2.11': + resolution: {integrity: sha512-+hf5NT7DzxxVus+z3mVVrE53hW60E83ao64Ya3zyVFa+vLCUnAcYgrpL8I6UU391QymgDa0NfYJXedgjqWkfGw==} - '@codama/visitors@1.2.8': - resolution: {integrity: sha512-LbcTyzTUEJfGRbCTuQIAVR9X5bLdZ1oD7GAuw5kxaq63+H6JHAbigaKwaq9uvr/OXMT4U/2GcWgKfX1oGKXg/g==} + '@codama/visitors@1.2.11': + resolution: {integrity: sha512-UxqVUcXFJFdCdpkKXiEmHRaLhIJIyAQijmt1hMb1LoWnPe2yavkuVdo5cPuJqZ/lImu4+LDVZz7Tk7l3iZG8uw==} '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} @@ -88,26 +88,20 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@solana/codecs-core@2.0.0': - resolution: {integrity: sha512-qCG+3hDU5Pm8V6joJjR4j4Zv9md1z0RaecniNDIkEglnxmOUODnmPLWbtOjnDylfItyuZeDihK8hkewdj8cUtw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5' - '@solana/codecs-core@2.0.0-rc.4': resolution: {integrity: sha512-JIrTSps032mSE3wBxW3bXOqWfoy4CMy1CX/XeVCijyh5kLVxZTSDIdRTYdePdL1yzaOZF1Xysvt1DhOUgBdM+A==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5' - '@solana/codecs-data-structures@2.0.0': - resolution: {integrity: sha512-N98Y4jsrC/XeOgqrfsGqcOFIaOoMsKdAxOmy5oqVaEN67YoGSLNC9ROnqamOAOrsZdicTWx9/YLKFmQi9DPh1A==} + '@solana/codecs-core@2.1.0': + resolution: {integrity: sha512-SR7pKtmJBg2mhmkel2NeHA1pz06QeQXdMv8WJoIR9m8F/hw80K/612uaYbwTt2nkK0jg/Qn/rNSd7EcJ4SBGjw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5' - '@solana/codecs-numbers@2.0.0': - resolution: {integrity: sha512-r66i7VzJO1MZkQWZIAI6jjJOFVpnq0+FIabo2Z2ZDtrArFus/SbSEv543yCLeD2tdR/G/p+1+P5On10qF50Y1Q==} + '@solana/codecs-data-structures@2.1.0': + resolution: {integrity: sha512-oDF5ek54kirqJ09q8k/qEpobBiWOhd3CkkGOTyfjsmTF/IGIigNbdYIakxV3+vudBeaNBw08y0XdBYI4JL/nqA==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5' @@ -118,11 +112,10 @@ packages: peerDependencies: typescript: '>=5' - '@solana/codecs-strings@2.0.0': - resolution: {integrity: sha512-dNqeCypsvaHcjW86H0gYgAZGGkKVBeKVeh7WXlOZ9kno7PeQ2wNkpccyzDfuzaIsKv+HZUD3v/eo86GCvnKazQ==} + '@solana/codecs-numbers@2.1.0': + resolution: {integrity: sha512-XMu4yw5iCgQnMKsxSWPPOrGgtaohmupN3eyAtYv3K3C/MJEc5V90h74k5B1GUCiHvcrdUDO9RclNjD9lgbjFag==} engines: {node: '>=20.18.0'} peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5' '@solana/codecs-strings@2.0.0-rc.4': @@ -132,16 +125,16 @@ packages: fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5' - '@solana/codecs@2.0.0': - resolution: {integrity: sha512-xneIG5ppE6WIGaZCK7JTys0uLhzlnEJUdBO8nRVIyerwH6aqCfb0fGe7q5WNNYAVDRSxC0Pc1TDe1hpdx3KWmQ==} + '@solana/codecs-strings@2.1.0': + resolution: {integrity: sha512-O/eJFLzFrHomcCR1Y5QbIqoPo7iaJaWNnIeskB4mVhVjLyjlJS4WtBP2NBRzM9uJXaXyOxxKroqqO9zFsHOpvQ==} engines: {node: '>=20.18.0'} peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5' - '@solana/errors@2.0.0': - resolution: {integrity: sha512-IHlaPFSy4lvYco1oHJ3X8DbchWwAwJaL/4wZKnF1ugwZ0g0re8wbABrqNOe/jyZ84VU9Z14PYM8W9oDAebdJbw==} + '@solana/codecs@2.1.0': + resolution: {integrity: sha512-C0TnfrpbTg7zoIFYfM65ofeL2AWEz80OsD6mjVdcTKpb1Uj7XuBuNLss3dMnatPQaL7RagD9VLA5/WfYayyteQ==} engines: {node: '>=20.18.0'} - hasBin: true peerDependencies: typescript: '>=5' @@ -152,8 +145,15 @@ packages: peerDependencies: typescript: '>=5' - '@solana/options@2.0.0': - resolution: {integrity: sha512-OVc4KnYosB8oAukQ/htgrxXSxlUP6gUu5Aau6d/BgEkPQzWd/Pr+w91VWw3i3zZuu2SGpedbyh05RoJBe/hSXA==} + '@solana/errors@2.1.0': + resolution: {integrity: sha512-l+GxAv0Ar4d3c3PlZdA9G++wFYZREEbbRyAFP8+n8HSg0vudCuzogh/13io6hYuUhG/9Ve8ARZNamhV7UScKNw==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5' + + '@solana/options@2.1.0': + resolution: {integrity: sha512-T/vJCr8qnwK6HxriOPXCrx31IpA9ZYecxuOzQ3G74kIayED4spmpXp6PLtRYR/fo2LZ6UcgHN0qSgONnvwEweg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5' @@ -202,8 +202,8 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - codama@1.2.8: - resolution: {integrity: sha512-0OWQTK4Bx8mgnkudbWoVqhC98iS0py3vNRJHmWVCQ63PSfszgb+DC/9jCkQZMijFQtdUtUcstAYQBHPM5J0exg==} + codama@1.2.11: + resolution: {integrity: sha512-mb5KYgsc8tH8t+MKy0jQBmCrySgRRxt/eGDbmuidLsORck925f6qZihkM64czARQ47AjY8nJg1URwg0RGdCjsg==} hasBin: true commander@12.1.0: @@ -497,16 +497,16 @@ packages: snapshots: - '@codama/cli@1.0.7(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@codama/cli@1.0.10(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': dependencies: - '@codama/nodes': 1.2.8 - '@codama/nodes-from-anchor': 1.1.8(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@codama/renderers': 1.0.16(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@codama/renderers-js': 1.2.7(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@codama/renderers-js-umi': 1.1.9(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@codama/renderers-rust': 1.0.16(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@codama/visitors': 1.2.8 - '@codama/visitors-core': 1.2.8 + '@codama/nodes': 1.2.11 + '@codama/nodes-from-anchor': 1.1.11(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@codama/renderers': 1.0.19(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@codama/renderers-js': 1.2.10(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@codama/renderers-js-umi': 1.1.12(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@codama/renderers-rust': 1.0.19(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@codama/visitors': 1.2.11 + '@codama/visitors-core': 1.2.11 commander: 13.1.0 picocolors: 1.1.1 prompts: 2.4.2 @@ -515,43 +515,43 @@ snapshots: - fastestsmallesttextencoderdecoder - typescript - '@codama/errors@1.2.8': + '@codama/errors@1.2.11': dependencies: - '@codama/node-types': 1.2.8 + '@codama/node-types': 1.2.11 chalk: 5.4.1 commander: 13.1.0 - '@codama/node-types@1.2.8': {} + '@codama/node-types@1.2.11': {} - '@codama/nodes-from-anchor@1.1.8(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@codama/nodes-from-anchor@1.1.11(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': dependencies: - '@codama/errors': 1.2.8 - '@codama/nodes': 1.2.8 - '@codama/visitors': 1.2.8 + '@codama/errors': 1.2.11 + '@codama/nodes': 1.2.11 + '@codama/visitors': 1.2.11 '@noble/hashes': 1.7.1 - '@solana/codecs': 2.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/codecs': 2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - '@codama/nodes@1.2.8': + '@codama/nodes@1.2.11': dependencies: - '@codama/errors': 1.2.8 - '@codama/node-types': 1.2.8 + '@codama/errors': 1.2.11 + '@codama/node-types': 1.2.11 - '@codama/renderers-core@1.0.10': + '@codama/renderers-core@1.0.13': dependencies: - '@codama/errors': 1.2.8 - '@codama/nodes': 1.2.8 - '@codama/visitors-core': 1.2.8 + '@codama/errors': 1.2.11 + '@codama/nodes': 1.2.11 + '@codama/visitors-core': 1.2.11 - '@codama/renderers-js-umi@1.1.9(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@codama/renderers-js-umi@1.1.12(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': dependencies: - '@codama/errors': 1.2.8 - '@codama/nodes': 1.2.8 - '@codama/renderers-core': 1.0.10 - '@codama/validators': 1.2.8 - '@codama/visitors-core': 1.2.8 + '@codama/errors': 1.2.11 + '@codama/nodes': 1.2.11 + '@codama/renderers-core': 1.0.13 + '@codama/validators': 1.2.11 + '@codama/visitors-core': 1.2.11 '@solana/codecs-strings': 2.0.0-rc.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) nunjucks: 3.2.4 prettier: 3.5.3 @@ -560,13 +560,13 @@ snapshots: - fastestsmallesttextencoderdecoder - typescript - '@codama/renderers-js@1.2.7(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@codama/renderers-js@1.2.10(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': dependencies: - '@codama/errors': 1.2.8 - '@codama/nodes': 1.2.8 - '@codama/nodes-from-anchor': 1.1.8(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@codama/renderers-core': 1.0.10 - '@codama/visitors-core': 1.2.8 + '@codama/errors': 1.2.11 + '@codama/nodes': 1.2.11 + '@codama/nodes-from-anchor': 1.1.11(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@codama/renderers-core': 1.0.13 + '@codama/visitors-core': 1.2.11 '@solana/codecs-strings': 2.0.0-rc.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) nunjucks: 3.2.4 prettier: 3.5.3 @@ -575,12 +575,12 @@ snapshots: - fastestsmallesttextencoderdecoder - typescript - '@codama/renderers-rust@1.0.16(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@codama/renderers-rust@1.0.19(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': dependencies: - '@codama/errors': 1.2.8 - '@codama/nodes': 1.2.8 - '@codama/renderers-core': 1.0.10 - '@codama/visitors-core': 1.2.8 + '@codama/errors': 1.2.11 + '@codama/nodes': 1.2.11 + '@codama/renderers-core': 1.0.13 + '@codama/visitors-core': 1.2.11 '@solana/codecs-strings': 2.0.0-rc.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) nunjucks: 3.2.4 transitivePeerDependencies: @@ -588,33 +588,33 @@ snapshots: - fastestsmallesttextencoderdecoder - typescript - '@codama/renderers@1.0.16(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@codama/renderers@1.0.19(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': dependencies: - '@codama/renderers-js': 1.2.7(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@codama/renderers-js-umi': 1.1.9(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@codama/renderers-rust': 1.0.16(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@codama/renderers-js': 1.2.10(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@codama/renderers-js-umi': 1.1.12(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@codama/renderers-rust': 1.0.19(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) transitivePeerDependencies: - chokidar - fastestsmallesttextencoderdecoder - typescript - '@codama/validators@1.2.8': + '@codama/validators@1.2.11': dependencies: - '@codama/errors': 1.2.8 - '@codama/nodes': 1.2.8 - '@codama/visitors-core': 1.2.8 + '@codama/errors': 1.2.11 + '@codama/nodes': 1.2.11 + '@codama/visitors-core': 1.2.11 - '@codama/visitors-core@1.2.8': + '@codama/visitors-core@1.2.11': dependencies: - '@codama/errors': 1.2.8 - '@codama/nodes': 1.2.8 + '@codama/errors': 1.2.11 + '@codama/nodes': 1.2.11 json-stable-stringify: 1.2.1 - '@codama/visitors@1.2.8': + '@codama/visitors@1.2.11': dependencies: - '@codama/errors': 1.2.8 - '@codama/nodes': 1.2.8 - '@codama/visitors-core': 1.2.8 + '@codama/errors': 1.2.11 + '@codama/nodes': 1.2.11 + '@codama/visitors-core': 1.2.11 '@iarna/toml@2.2.5': {} @@ -632,27 +632,21 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.18.0 - '@solana/codecs-core@2.0.0(typescript@5.7.3)': - dependencies: - '@solana/errors': 2.0.0(typescript@5.7.3) - typescript: 5.7.3 - '@solana/codecs-core@2.0.0-rc.4(typescript@5.7.3)': dependencies: '@solana/errors': 2.0.0-rc.4(typescript@5.7.3) typescript: 5.7.3 - '@solana/codecs-data-structures@2.0.0(typescript@5.7.3)': + '@solana/codecs-core@2.1.0(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 2.0.0(typescript@5.7.3) - '@solana/codecs-numbers': 2.0.0(typescript@5.7.3) - '@solana/errors': 2.0.0(typescript@5.7.3) + '@solana/errors': 2.1.0(typescript@5.7.3) typescript: 5.7.3 - '@solana/codecs-numbers@2.0.0(typescript@5.7.3)': + '@solana/codecs-data-structures@2.1.0(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 2.0.0(typescript@5.7.3) - '@solana/errors': 2.0.0(typescript@5.7.3) + '@solana/codecs-core': 2.1.0(typescript@5.7.3) + '@solana/codecs-numbers': 2.1.0(typescript@5.7.3) + '@solana/errors': 2.1.0(typescript@5.7.3) typescript: 5.7.3 '@solana/codecs-numbers@2.0.0-rc.4(typescript@5.7.3)': @@ -661,12 +655,10 @@ snapshots: '@solana/errors': 2.0.0-rc.4(typescript@5.7.3) typescript: 5.7.3 - '@solana/codecs-strings@2.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/codecs-numbers@2.1.0(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 2.0.0(typescript@5.7.3) - '@solana/codecs-numbers': 2.0.0(typescript@5.7.3) - '@solana/errors': 2.0.0(typescript@5.7.3) - fastestsmallesttextencoderdecoder: 1.0.22 + '@solana/codecs-core': 2.1.0(typescript@5.7.3) + '@solana/errors': 2.1.0(typescript@5.7.3) typescript: 5.7.3 '@solana/codecs-strings@2.0.0-rc.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': @@ -677,36 +669,44 @@ snapshots: fastestsmallesttextencoderdecoder: 1.0.22 typescript: 5.7.3 - '@solana/codecs@2.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/codecs-strings@2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + dependencies: + '@solana/codecs-core': 2.1.0(typescript@5.7.3) + '@solana/codecs-numbers': 2.1.0(typescript@5.7.3) + '@solana/errors': 2.1.0(typescript@5.7.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.7.3 + + '@solana/codecs@2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 2.0.0(typescript@5.7.3) - '@solana/codecs-data-structures': 2.0.0(typescript@5.7.3) - '@solana/codecs-numbers': 2.0.0(typescript@5.7.3) - '@solana/codecs-strings': 2.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/options': 2.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/codecs-core': 2.1.0(typescript@5.7.3) + '@solana/codecs-data-structures': 2.1.0(typescript@5.7.3) + '@solana/codecs-numbers': 2.1.0(typescript@5.7.3) + '@solana/codecs-strings': 2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/options': 2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/errors@2.0.0(typescript@5.7.3)': + '@solana/errors@2.0.0-rc.4(typescript@5.7.3)': dependencies: chalk: 5.4.1 commander: 12.1.0 typescript: 5.7.3 - '@solana/errors@2.0.0-rc.4(typescript@5.7.3)': + '@solana/errors@2.1.0(typescript@5.7.3)': dependencies: chalk: 5.4.1 - commander: 12.1.0 + commander: 13.1.0 typescript: 5.7.3 - '@solana/options@2.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/options@2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 2.0.0(typescript@5.7.3) - '@solana/codecs-data-structures': 2.0.0(typescript@5.7.3) - '@solana/codecs-numbers': 2.0.0(typescript@5.7.3) - '@solana/codecs-strings': 2.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 2.0.0(typescript@5.7.3) + '@solana/codecs-core': 2.1.0(typescript@5.7.3) + '@solana/codecs-data-structures': 2.1.0(typescript@5.7.3) + '@solana/codecs-numbers': 2.1.0(typescript@5.7.3) + '@solana/codecs-strings': 2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/errors': 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder @@ -757,13 +757,13 @@ snapshots: chalk@5.4.1: {} - codama@1.2.8(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3): + codama@1.2.11(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3): dependencies: - '@codama/cli': 1.0.7(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@codama/errors': 1.2.8 - '@codama/nodes': 1.2.8 - '@codama/validators': 1.2.8 - '@codama/visitors': 1.2.8 + '@codama/cli': 1.0.10(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@codama/errors': 1.2.11 + '@codama/nodes': 1.2.11 + '@codama/validators': 1.2.11 + '@codama/visitors': 1.2.11 transitivePeerDependencies: - chokidar - fastestsmallesttextencoderdecoder diff --git a/program/Cargo.toml b/program/Cargo.toml index 4061a89..6ce82ee 100644 --- a/program/Cargo.toml +++ b/program/Cargo.toml @@ -6,6 +6,10 @@ readme = "./README.md" license-file = "../LICENSE" publish = false +[lints.rust.unexpected_cfgs] +level = "warn" +check-cfg = ['cfg(target_os, values("solana"))'] + [package.metadata.solana] program-id = "ProgM6JCCvbYkfKqJYHePx4xxSUSqJp7rh8Lyv7nk7S" program-dependencies = [] @@ -16,9 +20,9 @@ account-dependencies = [] crate-type = ["cdylib", "lib"] [dependencies] -pinocchio = "0.7.0" -pinocchio-pubkey = "0.2.2" -pinocchio-system = "0.2.1" +pinocchio = "0.8" +pinocchio-pubkey = "0.2" +pinocchio-system = "0.2" [dev-dependencies] mollusk-svm = "0.1" diff --git a/program/src/entrypoint.rs b/program/src/entrypoint.rs index 8f1cb0f..93908cb 100644 --- a/program/src/entrypoint.rs +++ b/program/src/entrypoint.rs @@ -1,5 +1,3 @@ -#[cfg(feature = "logging")] -use pinocchio::msg; use pinocchio::{ account_info::AccountInfo, default_panic_handler, no_allocator, program_entrypoint, program_error::ProgramError, pubkey::Pubkey, ProgramResult, @@ -29,67 +27,67 @@ fn process_instruction( return Err(ProgramError::InvalidInstructionData); }; - match ProgramMetadataInstruction::try_from(instruction)? { + match ProgramMetadataInstruction::try_from(*instruction)? { // 0 - Write ProgramMetadataInstruction::Write => { #[cfg(feature = "logging")] - msg!("Instruction: Write"); + pinocchio::msg!("Instruction: Write"); write(accounts, data) } // 1 - Initialize ProgramMetadataInstruction::Initialize => { #[cfg(feature = "logging")] - msg!("Instruction: Initialize"); + pinocchio::msg!("Instruction: Initialize"); initialize(accounts, data) } // 2 - SetAuthority ProgramMetadataInstruction::SetAuthority => { #[cfg(feature = "logging")] - msg!("Instruction: SetAuthority"); + pinocchio::msg!("Instruction: SetAuthority"); set_authority(accounts, data) } // 3 - SetData ProgramMetadataInstruction::SetData => { #[cfg(feature = "logging")] - msg!("Instruction: SetData"); + pinocchio::msg!("Instruction: SetData"); set_data(accounts, data) } // 4 - SetImmutable ProgramMetadataInstruction::SetImmutable => { #[cfg(feature = "logging")] - msg!("Instruction: SetImmutable"); + pinocchio::msg!("Instruction: SetImmutable"); set_immutable(accounts) } // 5 - Trim ProgramMetadataInstruction::Trim => { #[cfg(feature = "logging")] - msg!("Instruction: Trim"); + pinocchio::msg!("Instruction: Trim"); trim(accounts) } // 6 - Close ProgramMetadataInstruction::Close => { #[cfg(feature = "logging")] - msg!("Instruction: Close"); + pinocchio::msg!("Instruction: Close"); close(accounts) } // 7 - Allocate ProgramMetadataInstruction::Allocate => { #[cfg(feature = "logging")] - msg!("Instruction: Allocate"); + pinocchio::msg!("Instruction: Allocate"); allocate(accounts, data) } // 8 - Extend ProgramMetadataInstruction::Extend => { #[cfg(feature = "logging")] - msg!("Instruction: Extend"); + pinocchio::msg!("Instruction: Extend"); extend(accounts, data) } diff --git a/program/src/instruction.rs b/program/src/instruction.rs index f7debef..eed4573 100644 --- a/program/src/instruction.rs +++ b/program/src/instruction.rs @@ -235,11 +235,11 @@ pub enum ProgramMetadataInstruction { Extend, } -impl TryFrom<&u8> for ProgramMetadataInstruction { +impl TryFrom for ProgramMetadataInstruction { type Error = ProgramError; - fn try_from(value: &u8) -> Result { - match *value { + fn try_from(value: u8) -> Result { + match value { 0 => Ok(ProgramMetadataInstruction::Write), 1 => Ok(ProgramMetadataInstruction::Initialize), 2 => Ok(ProgramMetadataInstruction::SetAuthority), diff --git a/program/src/processor/allocate.rs b/program/src/processor/allocate.rs index 8f7b613..4065635 100644 --- a/program/src/processor/allocate.rs +++ b/program/src/processor/allocate.rs @@ -118,7 +118,7 @@ pub fn allocate(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramRes // buffer account to the program (the runtime only allows assigning // zeroed accounts, so there is no need to check the contents of the // account). - if buffer.owner() != &crate::ID { + if !buffer.is_owned_by(&crate::ID) { Assign { account: buffer, owner: &crate::ID, diff --git a/program/src/processor/close.rs b/program/src/processor/close.rs index a605048..ebc3678 100644 --- a/program/src/processor/close.rs +++ b/program/src/processor/close.rs @@ -4,31 +4,37 @@ use crate::state::{buffer::Buffer, AccountDiscriminator}; use super::{validate_authority, validate_metadata}; -/// Closes a program-owned account. -/// -/// ## Validation -/// The following validation checks are performed: -/// -/// - [implicit] The `account` to close is owned by the Program Metadata program. Implicitly checked by closing to the account. +/// Processor for the [`Close`](`crate::instruction::ProgramMetadataInstruction::Close`) +/// instruction. pub fn close(accounts: &[AccountInfo]) -> ProgramResult { + // Access accounts. + let [account, authority, program, program_data, destination] = accounts else { return Err(ProgramError::NotEnoughAccountKeys); }; + // Accounts validation. + // + // Note that program owned and writable checks are done implicitly by writing + // to the account. + + // authority + // - must be a signer + if !authority.is_signer() { return Err(ProgramError::MissingRequiredSignature); } + // account + // - must have data + // - authority must match (if not a keypair buffer) + let account_data = if account.data_is_empty() { return Err(ProgramError::UninitializedAccount); } else { unsafe { account.borrow_data_unchecked() } }; - // Accounts validation. - // - account: program owned is implicitly checked since we are writing - // to the account - // We only need to validate the authority if it is not a keypair buffer, // since we already validated that the authority is a signer. if account.key() != authority.key() { @@ -45,11 +51,16 @@ pub fn close(accounts: &[AccountInfo]) -> ProgramResult { } } - // Move the lamports to the destination account. + // Move the lamports to the destination account and close the account. + + // SAFETY: There are no active borrows to accounts' lamports. unsafe { let account_lamports = account.borrow_mut_lamports_unchecked(); let destination_lamports = destination.borrow_mut_lamports_unchecked(); - *destination_lamports += *account_lamports; + + *destination_lamports = destination_lamports + .checked_add(*account_lamports) + .ok_or(ProgramError::ArithmeticOverflow)?; *account_lamports = 0; } diff --git a/program/src/processor/extend.rs b/program/src/processor/extend.rs index b1b497e..32277ed 100644 --- a/program/src/processor/extend.rs +++ b/program/src/processor/extend.rs @@ -5,7 +5,7 @@ use crate::state::{buffer::Buffer, AccountDiscriminator}; use super::{validate_authority, validate_metadata}; -/// Processor for the [`Allocate`](`crate::instruction::ProgramMetadataInstruction::Allocate`) +/// Processor for the [`Extend`](`crate::instruction::ProgramMetadataInstruction::Extend`) /// instruction. pub fn extend(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramResult { // Validates the instruction data. diff --git a/program/src/processor/initialize.rs b/program/src/processor/initialize.rs index 9761b8c..f149c98 100644 --- a/program/src/processor/initialize.rs +++ b/program/src/processor/initialize.rs @@ -4,7 +4,7 @@ use pinocchio::{ memory::sol_memcpy, program_error::ProgramError, pubkey::{find_program_address, Pubkey}, - ProgramResult, + seeds, ProgramResult, }; use pinocchio_system::instructions::{Allocate, Assign}; @@ -19,30 +19,6 @@ use super::is_program_authority; /// Processor for the [`Initialize`](`crate::instruction::ProgramMetadataInstruction::Initialize`) /// instruction. -/// -/// Account validations performed by this instruction: -/// -/// authority -/// * `[e]` signer check -/// * `[e]` program authority check -/// -/// metadata -/// * `[e]` metadata PDA derivation -/// * `[i]` must be owned by the program (implicit check on account write) -/// -/// - [explicit] The instruction data must be at least `Initialize::LEN` bytes long. -/// - [explicit] All instruction accounts must be provided. Optional accounts must be set to `crate::ID`. -/// - [explicit] The `authority` account must be a signer. -/// - [explicit] The `authority` account must either: -/// - be the program upgrade authority (for canonical metadata accounts) OR -/// - be included in the seeds used to derive the metadata account address (for non-canonical metadata accounts). -/// - [explicit] The `metadata` account must not already be initialized — i.e. it must either: -/// - be empty. In which case, the remaining instruction data is used as the metadata account data. OR -/// - be a pre-allocated buffer (i.e. `discriminator = 1`). In which case, no remaining instruction data is allowed -/// as the data must already be written to the account, after the header. -/// - [explicit] The `program` and `program_data` accounts must pass the `is_program_authority` checks. -/// - [implicit] The `metadata` account must be owned by the Program Metadata program. Implicitly checked by writing to the account. -/// - [implicit] The `metadata` account must be pre-funded when passing extra instruction data. Implicitly checked by writing to the account. pub fn initialize(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramResult { // Validates the instruction data. @@ -50,7 +26,7 @@ pub fn initialize(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramR return Err(ProgramError::InvalidInstructionData); } else { let (args, remaining_data) = instruction_data.split_at(Initialize::LEN); - // SAFE: `instruction_data` length is checked above. + // SAFETY: `instruction_data` length is checked above. (unsafe { Initialize::load_unchecked(args) }, remaining_data) }; @@ -61,12 +37,30 @@ pub fn initialize(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramR return Err(ProgramError::NotEnoughAccountKeys); }; + // Account validation. + // + // Note that program owned and writable checks are done implicitly by writing + // to the account. + + // authority + // - must be a signer + // - must either be the program upgrade authority (for canonical metadata accounts) + // OR be included in the seeds used to derive the metadata account address (for + // non-canonical metadata accounts) + if !authority.is_signer() { return Err(ProgramError::MissingRequiredSignature); } let canonical: bool = is_program_authority(program, program_data, authority.key())?; + // metadata + // - must be a PDA derived from the program ID and the seed + // - must not already be initialized — i.e. it must either be empty, in which case + // the remaining instruction data is used as the metadata account data; OR be a + // pre-allocated buffer (i.e. `discriminator = 1`), in which case, no remaining + // instruction data is allowed as the data must already be written to the account + let seeds: &[&[u8]] = if canonical { &[program.key(), args.seed.as_ref()] } else { @@ -86,13 +80,15 @@ pub fn initialize(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramR let data_length = match discriminator { Some(AccountDiscriminator::Empty) => { - // An account with an `Empty` discriminator means some "zero" account was provided. - // However, the initialize instruction only supports accounts with no data or pre-allocated - // buffer (meaning the account should have use the `allocate` and `write` instructions first). + // An account with an `Empty` discriminator means some "zero" account was + // provided. However, the initialize instruction only supports accounts with + // no data or pre-allocated buffer (meaning the account should have use the + // `allocate` and `write` instructions first). return Err(ProgramError::InvalidAccountData); } Some(AccountDiscriminator::Buffer) => { - // When using a pre-allocated buffer, no remaining instruction data is allowed. + // When using a pre-allocated buffer, no remaining instruction data + // is allowed. if !remaining_data.is_empty() { return Err(ProgramError::InvalidAccountData); } @@ -114,19 +110,15 @@ pub fn initialize(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramR let signer_bump = &[bump]; let signer_seeds: &[Seed] = if canonical { // canonical - &[ - Seed::from(program.key()), - Seed::from(args.seed.as_ref()), - Seed::from(signer_bump), - ] + &seeds!(program.key(), args.seed.as_ref(), signer_bump) } else { // non-canonical - &[ - Seed::from(program.key()), - Seed::from(authority.key()), - Seed::from(args.seed.as_ref()), - Seed::from(signer_bump), - ] + &seeds!( + program.key(), + authority.key(), + args.seed.as_ref(), + signer_bump + ) }; let signer = &[Signer::from(signer_seeds)]; @@ -135,17 +127,24 @@ pub fn initialize(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramR space: (Header::LEN + remaining_data.len()) as u64, } .invoke_signed(signer)?; + Assign { account: metadata, owner: &crate::ID, } .invoke_signed(signer)?; + // SAFETY: scoped mutable borrow of `metadata` account data. The data is + // guaranteed to be allocated and assigned to the program. let metadata_account_data = unsafe { metadata.borrow_mut_data_unchecked() }; + // Copy the instruction remaining data to the metadata account. + // + // SAFETY: `metadata` account has been allocated and assigned to the program + // and the length of the remaining data was checked. unsafe { sol_memcpy( - &mut metadata_account_data[Header::LEN..], + metadata_account_data.get_unchecked_mut(Header::LEN..), remaining_data, remaining_data.len(), ); @@ -157,8 +156,9 @@ pub fn initialize(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramR // Initialize the metadata account. - let metadata_account_data = unsafe { metadata.borrow_mut_data_unchecked() }; - let header = unsafe { Header::from_bytes_mut_unchecked(metadata_account_data) }; + // SAFETY: there are no other active borrows to `metadata` account data and + // the account discriminator has been validated. + let header = unsafe { Header::from_bytes_mut_unchecked(metadata.borrow_mut_data_unchecked()) }; header.discriminator = AccountDiscriminator::Metadata as u8; header.program = *program.key(); @@ -182,6 +182,7 @@ pub fn initialize(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramR Ok(()) } +/// The instruction data for the `Initialize` instruction. struct Initialize { pub seed: [u8; 16], pub encoding: u8, @@ -196,6 +197,7 @@ impl Initialize { /// # Safety /// /// The `bytes` length is validated on the processor. + #[inline(always)] pub(crate) unsafe fn load_unchecked(bytes: &[u8]) -> &Self { &*(bytes.as_ptr() as *const Self) } diff --git a/program/src/processor/mod.rs b/program/src/processor/mod.rs index 0f08115..cb4e197 100644 --- a/program/src/processor/mod.rs +++ b/program/src/processor/mod.rs @@ -52,7 +52,7 @@ fn is_program_authority( ) -> Result { // For BPFv1 and BPF Loader v2 programs, there is no program data associated. In this case, // the keypair used to deploy the program must be the authority and sign the transaction. - if program.owner() != &BPF_LOADER_UPGRABABLE_ID { + if !program.is_owned_by(&BPF_LOADER_UPGRABABLE_ID) { return Ok(program.executable() && program.key() == authority); } @@ -131,10 +131,10 @@ fn validate_metadata(metadata: &AccountInfo) -> Result<&Header, ProgramError> { /// /// The following validation checks are performed: /// -/// - `[e]` The `authority` account must be a signer. -/// - `[e]` The `authority` account must match the authority set on the `metadata` -/// account OR it must be the program upgrade authority if the `metadata` account -/// is canonical (see `is_program_authority`). +/// - `authority` account must be a signer. +/// - `authority` account must match the authority set on the `metadata` +/// account OR it must be the program upgrade authority if the `metadata` +/// account is canonical (see `is_program_authority`). #[inline(always)] fn validate_authority( account: &T, diff --git a/program/src/processor/set_data.rs b/program/src/processor/set_data.rs index 7419504..fa61b61 100644 --- a/program/src/processor/set_data.rs +++ b/program/src/processor/set_data.rs @@ -11,28 +11,48 @@ use super::{validate_authority, validate_metadata}; /// Processor for the [`SetData`](`crate::instruction::ProgramMetadataInstruction::SetData`) /// instruction. pub fn set_data(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramResult { - // Parse instruction data. + // Validates the instruction data. + if instruction_data.len() < SetData::LEN { return Err(ProgramError::InvalidInstructionData); } - let args = unsafe { SetData::load_unchecked(&instruction_data[..SetData::LEN]) }; - let optional_data = - instruction_data[SetData::LEN..] - .split_first() - .map( - |(data_source, remaining_data)| match remaining_data.is_empty() { - true => (data_source, None), - false => (data_source, Some(remaining_data)), - }, - ); + // SAFETY: The length of the instruction data is validated above to + // be at least `SetData::LEN`. + let args = unsafe { SetData::load_unchecked(instruction_data.get_unchecked(..SetData::LEN)) }; + + // SAFETY: The length of the instruction data is validated above to + // be at least `SetData::LEN` + let optional_data = unsafe { instruction_data.get_unchecked(SetData::LEN..) } + .split_first() + .map( + |(data_source, remaining_data)| match remaining_data.is_empty() { + true => (data_source, None), + false => (data_source, Some(remaining_data)), + }, + ); // Access accounts. + let [metadata, authority, buffer, program, program_data, _remaining @ ..] = accounts else { return Err(ProgramError::NotEnoughAccountKeys); }; - // Validate metadata and authority. + // Account validation. + // + // Note that program owned and writable checks are done implicitly by writing + // to the account. + + // metadata + // - must be initialized + // - must be mutable + let header = validate_metadata(metadata)?; + + // authority + // - must be a signer + // - must match the authority set on the `metadata` account OR it must be the + // program upgrade authority if the `metadata` account is canonical + validate_authority(header, authority, program, program_data)?; // Get data from buffer or remaining instruction data, if any. @@ -51,42 +71,70 @@ pub fn set_data(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramRes _ => return Err(ProgramError::InvalidInstructionData), }; - // Update header. + // Update header and data (if needed). + + if let Some(data) = update_header(metadata, args, data)? { + // Realloc the metadata account if necessary. + metadata.realloc(Header::LEN + data.len(), false)?; + + // SAFETY: There are no other active borrows to the `metadata` + // account data and the account has been reallocated to accommodate + // the new data. + unsafe { + sol_memcpy( + metadata + .borrow_mut_data_unchecked() + .get_unchecked_mut(Header::LEN..), + data, + data.len(), + ); + } + } + + Ok(()) +} + +/// Updates the metadata header with the provided arguments and data. +#[inline(always)] +fn update_header<'a>( + metadata: &AccountInfo, + args: &SetData, + data: Option<(&'a u8, &'a [u8])>, +) -> Result, ProgramError> { + // SAFETY: There are no other active borrows to the `metadata` account data. let metadata_account_data = unsafe { metadata.borrow_mut_data_unchecked() }; + // SAFETY: `metadata` is validated to be initialized and mutable. let header = unsafe { Header::from_bytes_mut_unchecked(metadata_account_data) }; + header.encoding = Encoding::try_from(args.encoding)? as u8; header.compression = Compression::try_from(args.compression)? as u8; header.format = Format::try_from(args.format)? as u8; // Update data. + if let Some((data_source, data)) = data { // Adjust the data source and length in the header. - let data_length = data.len(); header.data_source = { let data_source = DataSource::try_from(*data_source)?; - data_source.validate_data_length(data_length)?; + data_source.validate_data_length(data.len())?; data_source as u8 }; - header.data_length = (data_length as u32).to_le_bytes(); - - // Realloc the metdata account if necessary. - metadata.realloc(Header::LEN + data_length, false)?; + header.data_length = (data.len() as u32).to_le_bytes(); - // Copy the new data to the metadata account. - unsafe { - sol_memcpy(&mut metadata_account_data[Header::LEN..], data, data_length); - } + Ok(Some(data)) + } else { + Ok(None) } - - Ok(()) } +/// The instruction data for the `SetData` instruction. struct SetData { pub encoding: u8, pub compression: u8, pub format: u8, - // data_source: u8, - // remaining_data: &[u8], + // optional data: + // - `u8`: data_source + // - `&[u8]`: remaining data } impl SetData { @@ -95,6 +143,7 @@ impl SetData { /// # Safety /// /// The `bytes` length is validated on the processor. + #[inline(always)] pub(crate) unsafe fn load_unchecked(bytes: &[u8]) -> &Self { &*(bytes.as_ptr() as *const Self) } diff --git a/program/src/processor/set_immutable.rs b/program/src/processor/set_immutable.rs index 08e1463..42e8523 100644 --- a/program/src/processor/set_immutable.rs +++ b/program/src/processor/set_immutable.rs @@ -4,23 +4,37 @@ use crate::state::header::Header; use super::{validate_authority, validate_metadata}; -/// Sets the metadata account as immutable. -/// -/// ## Validation -/// The following validation checks are performed: -/// -/// - [implicit] The `metadata` account is owned by the Program Metadata program. Implicitly checked by writing to the account. +/// Processor for the [`SetImmutable`](`crate::instruction::ProgramMetadataInstruction::SetImmutable`) +/// instruction. pub fn set_immutable(accounts: &[AccountInfo]) -> ProgramResult { + // Access accounts. + let [metadata, authority, program, program_data] = accounts else { return Err(ProgramError::NotEnoughAccountKeys); }; - // Accounts validation is done in the `validate_authority` function. + // Account validation. + // + // Note that program owned and writable checks are done implicitly by writing + // to the account. + + // metadata + // - must be initialized + // - must be mutable + let header = validate_metadata(metadata)?; + + // authority + // - must be a signer + // - must match the authority set on the `metadata` account OR it must be the + // program upgrade authority if the `metadata` account is canonical + validate_authority(header, authority, program, program_data)?; // Make the metadata account immutable. + // SAFETY: There are no active borrows of the `metadata` account data and the + // account has been validated. let header = unsafe { Header::from_bytes_mut_unchecked(metadata.borrow_mut_data_unchecked()) }; if header.mutable() { diff --git a/program/src/processor/trim.rs b/program/src/processor/trim.rs index 8b6ebd4..70b85d0 100644 --- a/program/src/processor/trim.rs +++ b/program/src/processor/trim.rs @@ -52,7 +52,7 @@ pub fn trim(accounts: &[AccountInfo]) -> ProgramResult { let minimum_balance = { // SAFETY: single immutable borrow of `rent_sysver` account data. - let rent = unsafe { Rent::from_bytes(rent_sysvar.borrow_data_unchecked()) }; + let rent = unsafe { Rent::from_bytes(rent_sysvar.borrow_data_unchecked())? }; rent.minimum_balance(length) }; diff --git a/program/src/processor/write.rs b/program/src/processor/write.rs index f3a3c1d..67ac1b8 100644 --- a/program/src/processor/write.rs +++ b/program/src/processor/write.rs @@ -72,7 +72,7 @@ pub fn write(accounts: &[AccountInfo], instruction_data: &[u8]) -> ProgramResult Ok(()) } -/// Instruction data expected by the [`Write`](`crate::instruction::ProgramMetadataInstruction::Write`). +/// Instruction data expected by the `Write` instruction. struct Write<'a> { /// Offset to write to. offset: &'a [u8; 4], @@ -93,7 +93,7 @@ impl Write<'_> { Ok(Write { offset: unsafe { &*(bytes.as_ptr() as *const [u8; 4]) }, - data: &bytes[4..], + data: unsafe { bytes.get_unchecked(4..) }, }) } diff --git a/program/src/state/buffer.rs b/program/src/state/buffer.rs index 9229215..1db7205 100644 --- a/program/src/state/buffer.rs +++ b/program/src/state/buffer.rs @@ -63,7 +63,7 @@ impl Buffer { /// 3. Borrow data: it must be allowed to borrow the account data. #[inline] pub fn from_account_info(account_info: &AccountInfo) -> Result, ProgramError> { - if account_info.owner() != &crate::ID { + if !account_info.is_owned_by(&crate::ID) { return Err(ProgramError::InvalidAccountOwner); } let data = account_info.try_borrow_data()?; diff --git a/program/src/state/data.rs b/program/src/state/data.rs index 73d27da..56c2015 100644 --- a/program/src/state/data.rs +++ b/program/src/state/data.rs @@ -35,22 +35,6 @@ impl<'a> Data<'a> { } }) } - - /// Return a `Data` from the given bytes. - /// - /// # Safety - /// - /// The caller must ensure that `bytes` contains a valid representation of `Data`. - pub(crate) unsafe fn from_bytes_unchecked( - data_source: DataSource, - bytes: &'a [u8], - ) -> Data<'a> { - match data_source { - DataSource::Direct => Data::Direct(DirectData(bytes)), - DataSource::Url => Data::Url(UrlData(core::str::from_utf8_unchecked(bytes))), - DataSource::External => Data::External(&*(bytes.as_ptr() as *const ExternalData)), - } - } } /// Type to represent inlined data. diff --git a/program/src/state/header.rs b/program/src/state/header.rs index 82191a0..98710d0 100644 --- a/program/src/state/header.rs +++ b/program/src/state/header.rs @@ -100,7 +100,7 @@ impl Header { /// 3. Borrow data: it must be allowed to borrow the account data. #[inline] pub fn from_account_info(account_info: &AccountInfo) -> Result, ProgramError> { - if account_info.owner() != &crate::ID { + if !account_info.is_owned_by(&crate::ID) { return Err(ProgramError::InvalidAccountOwner); } let data = account_info.try_borrow_data()?; diff --git a/program/src/state/mod.rs b/program/src/state/mod.rs index 07f698d..1656321 100644 --- a/program/src/state/mod.rs +++ b/program/src/state/mod.rs @@ -2,7 +2,11 @@ pub mod buffer; pub mod data; pub mod header; -use pinocchio::{program_error::ProgramError, pubkey::Pubkey, ProgramResult}; +use pinocchio::{ + program_error::ProgramError, + pubkey::{Pubkey, PUBKEY_BYTES}, + ProgramResult, +}; use data::{Data, ExternalData}; use header::Header; @@ -204,7 +208,7 @@ pub trait Zeroable: PartialEq + Sized { } impl Zeroable for Pubkey { - const ZERO: Self = [0u8; core::mem::size_of::()]; + const ZERO: Self = [0u8; PUBKEY_BYTES]; } impl Zeroable for u32 { diff --git a/program/tests/extend.rs b/program/tests/extend.rs index f4f6dd4..2d13bb7 100644 --- a/program/tests/extend.rs +++ b/program/tests/extend.rs @@ -81,7 +81,7 @@ fn test_extend_canonical() { } #[test] -fn test_allocate_non_canonical() { +fn test_extend_non_canonical() { let authority_key = Pubkey::new_unique(); let program_data_key = Pubkey::new_unique(); @@ -120,10 +120,6 @@ fn test_allocate_non_canonical() { Check::account(&buffer_key).space(Buffer::LEN).build(), // account discriminator Check::account(&buffer_key).data_slice(0, &[1]).build(), - // lamports - Check::account(&buffer_key) - .lamports(minimum_balance_for(Buffer::LEN)) - .build(), ], ), ( @@ -176,10 +172,6 @@ fn test_extend_buffer() { Check::account(&buffer_key).space(Buffer::LEN).build(), // account discriminator Check::account(&buffer_key).data_slice(0, &[1]).build(), - // lamports - Check::account(&buffer_key) - .lamports(minimum_balance_for(Buffer::LEN)) - .build(), ], ), (