diff --git a/CHANGELOG.md b/CHANGELOG.md index 96b5f251..ac5c44eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,20 @@ The minor version will be incremented upon a breaking change and the patch versi ### Breaking +## 2026-05-04 + +- richat-cli-v10.0.0 +- richat-client-v9.0.0 +- richat-filter-v9.0.0 +- richat-plugin-agave-v9.0.0 +- richat-proto-v9.0.0 +- richat-v11.0.0 +- richat-shared-v9.0.0 + +### Breaking + +- richat: upgrade to agave 4.0 ([#211](https://github.com/lamports-dev/richat/pull/211)) + ## 2026-04-30 - richat-v10.0.0 diff --git a/Cargo.lock b/Cargo.lock index d9f25e14..cb7bad45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,7 +24,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "generic-array", ] @@ -36,7 +36,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -66,41 +66,42 @@ dependencies = [ [[package]] name = "agave-feature-set" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78af1c611c18d4a20e0983f033bdd74eaa8f44cee0d3c10ee66873f2630a636" +checksum = "33e41538180f5ded6d08a69c75b4f48c4c6ba8098d7e790b3d694a6bc081fbc7" dependencies = [ "ahash", "solana-epoch-schedule", - "solana-hash 3.1.0", - "solana-pubkey 3.0.0", + "solana-hash", + "solana-keypair", + "solana-pubkey 4.2.0", "solana-sha256-hasher", "solana-svm-feature-set", ] [[package]] name = "agave-geyser-plugin-interface" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "097d75b08472b4fbeba26189fd8647f6ab746b56568cf74fbf1414ba9be20279" +checksum = "0b13c527405e04f1c9296d315916a4908ff6f733e733ff5b27a6bef1cf9bb3f2" dependencies = [ "log", "solana-clock", - "solana-hash 3.1.0", + "solana-hash", "solana-signature", - "solana-transaction", + "solana-transaction 3.1.0", "solana-transaction-status", "thiserror 2.0.18", ] [[package]] name = "agave-reserved-account-keys" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da12e13d0ae9df8bbedeb505e659d590d938da0becc506f6901eec6aefd0fe9f" +checksum = "5b4ca5cad691b655986da68c0bf4a13f116e3ff0a1df315b854d447338f95f21" dependencies = [ "agave-feature-set", - "solana-pubkey 3.0.0", + "solana-pubkey 4.2.0", "solana-sdk-ids", ] @@ -143,9 +144,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.21" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -158,15 +159,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] @@ -177,7 +178,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -188,14 +189,14 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "arrayref" @@ -239,7 +240,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", "synstructure", ] @@ -251,7 +252,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -262,7 +263,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -288,9 +289,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.16.2" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" +checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" dependencies = [ "aws-lc-sys", "zeroize", @@ -298,9 +299,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.39.1" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a25cf98105baa966497416dbd42565ce3a8cf8dbfd59803ec9ad46f3126399" +checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" dependencies = [ "cc", "cmake", @@ -310,9 +311,9 @@ dependencies = [ [[package]] name = "axum" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" dependencies = [ "axum-core", "bytes", @@ -393,28 +394,28 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "bitflags" -version = "2.10.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" [[package]] name = "blake3" -version = "1.8.3" +version = "1.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" +checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", - "cpufeatures", - "digest", + "cpufeatures 0.3.0", + "digest 0.11.3", ] [[package]] @@ -426,27 +427,37 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +dependencies = [ + "hybrid-array", +] + [[package]] name = "borsh" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" +checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" dependencies = [ "borsh-derive", + "bytes", "cfg_aliases", ] [[package]] name = "borsh-derive" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0686c856aa6aac0c4498f936d7d6a02df690f614c03e4d906d1018062b5c5e2c" +checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -460,9 +471,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.1" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bv" @@ -476,9 +487,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.24.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" dependencies = [ "bytemuck_derive", ] @@ -491,7 +502,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -524,7 +535,7 @@ checksum = "63585cdf8572aa7adf0e30a253f988f2b77233bfac1973d52efb6dd53a75920e" dependencies = [ "semver", "serde", - "toml", + "toml 0.9.12+spec-1.1.0", "url", ] @@ -536,9 +547,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.54" +version = "1.2.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583" +checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" dependencies = [ "find-msvc-tools", "jobserver", @@ -581,7 +592,7 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -617,7 +628,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "inout", ] @@ -634,9 +645,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.54" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", "clap_derive", @@ -644,9 +655,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.54" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ "anstream", "anstyle", @@ -656,36 +667,42 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "clap_lex" -version = "0.7.7" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "cmake" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" dependencies = [ "cc", ] +[[package]] +name = "cmov" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" + [[package]] name = "colorchoice" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" @@ -712,25 +729,24 @@ dependencies = [ [[package]] name = "console" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e45a4a8926227e4197636ba97a9fc9b00477e9f4bd711395687c5f0734bec4" +checksum = "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87" dependencies = [ "encode_unicode", "libc", - "once_cell", "unicode-width", "windows-sys 0.61.2", ] [[package]] name = "const-hex" -version = "1.17.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" +checksum = "20d9a563d167a9cce0f94153382b33cb6eded6dfabff03c69ad65a28ea1514e0" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "proptest", "serde_core", ] @@ -772,6 +788,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -783,9 +808,9 @@ dependencies = [ [[package]] name = "criterion" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d883447757bb0ee46f233e9dc22eb84d93a9508c9b868687b274fc431d886bf" +checksum = "950046b2aa2492f9a536f5f4f9a3de7b9e2476e575e05bd6c333371add4d98f3" dependencies = [ "alloca", "anes", @@ -808,9 +833,9 @@ dependencies = [ [[package]] name = "criterion-plot" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed943f81ea2faa8dcecbbfa50164acf95d555afec96a27871663b300e387b2e4" +checksum = "d8d80a2f4f5b554395e47b5d8305bc3d27813bacb73493eb1001e8f76dae29ea" dependencies = [ "cast", "itertools 0.13.0", @@ -876,6 +901,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +dependencies = [ + "hybrid-array", +] + [[package]] name = "ctr" version = "0.9.2" @@ -885,6 +919,15 @@ dependencies = [ "cipher", ] +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", +] + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -892,9 +935,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "curve25519-dalek-derive", - "digest", + "digest 0.10.7", "fiat-crypto", "rand_core 0.6.4", "rustc_version", @@ -911,7 +954,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -934,6 +977,16 @@ dependencies = [ "darling_macro 0.21.3", ] +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core 0.23.0", + "darling_macro 0.23.0", +] + [[package]] name = "darling_core" version = "0.20.11" @@ -945,7 +998,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -959,7 +1012,20 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.114", + "syn 2.0.117", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.117", ] [[package]] @@ -970,7 +1036,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -981,14 +1047,25 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.114", + "syn 2.0.117", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core 0.23.0", + "quote", + "syn 2.0.117", ] [[package]] name = "data-encoding" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" [[package]] name = "der" @@ -1016,9 +1093,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", ] @@ -1047,7 +1124,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -1057,7 +1134,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -1066,11 +1143,22 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "crypto-common", + "block-buffer 0.10.4", + "crypto-common 0.1.7", "subtle", ] +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.0", + "crypto-common 0.2.1", + "ctutils", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -1079,7 +1167,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -1106,6 +1194,7 @@ checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ "curve25519-dalek", "ed25519", + "rand_core 0.6.4", "serde", "sha2", "subtle", @@ -1126,9 +1215,9 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "env_filter" -version = "0.1.4" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" dependencies = [ "log", "regex", @@ -1136,9 +1225,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.8" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" dependencies = [ "anstream", "anstyle", @@ -1160,7 +1249,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "evmap" +version = "11.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8874945f036109c72242964c1174cf99434e30cfa45bf45fedc983f50046f8" +dependencies = [ + "hashbag", + "left-right", + "smallvec", ] [[package]] @@ -1177,9 +1277,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.3.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "fastwebsockets" @@ -1193,7 +1293,7 @@ dependencies = [ "hyper", "hyper-util", "pin-project", - "rand 0.8.5", + "rand 0.8.6", "sha1", "simdutf8", "thiserror 1.0.69", @@ -1215,18 +1315,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "find-msvc-tools" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" - -[[package]] -name = "five8" -version = "0.2.1" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75b8549488b4715defcb0d8a8a1c1c76a80661b5fa106b4ca0e7fce59d7d875" -dependencies = [ - "five8_core 0.1.2", -] +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "five8" @@ -1234,7 +1325,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23f76610e969fa1784327ded240f1e28a3fd9520c9cec93b636fcf62dd37f772" dependencies = [ - "five8_core 1.0.0", + "five8_core", ] [[package]] @@ -1243,15 +1334,9 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a0f1728185f277989ca573a402716ae0beaaea3f76a8ff87ef9dd8fb19436c5" dependencies = [ - "five8_core 1.0.0", + "five8_core", ] -[[package]] -name = "five8_core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2551bf44bc5f776c15044b9b94153a00198be06743e262afaaa61f11ac7523a5" - [[package]] name = "five8_core" version = "1.0.0" @@ -1272,9 +1357,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", @@ -1315,9 +1400,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -1330,9 +1415,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -1340,15 +1425,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -1357,38 +1442,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -1398,10 +1483,24 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] +[[package]] +name = "generator" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" +dependencies = [ + "cc", + "cfg-if", + "libc", + "log", + "rustversion", + "windows-link", + "windows-result", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1434,11 +1533,24 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] + [[package]] name = "git-version" version = "0.3.9" @@ -1456,7 +1568,7 @@ checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -1504,6 +1616,12 @@ dependencies = [ "byteorder", ] +[[package]] +name = "hashbag" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7040a10f52cba493ddb09926e15d10a9d8a28043708a405931fe4c6f19fac064" + [[package]] name = "hashbrown" version = "0.15.5" @@ -1522,6 +1640,12 @@ dependencies = [ "foldhash 0.2.0", ] +[[package]] +name = "hashbrown" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" + [[package]] name = "heck" version = "0.4.1" @@ -1540,16 +1664,16 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] name = "home" -version = "0.5.9" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1641,11 +1765,20 @@ dependencies = [ "serde", ] +[[package]] +name = "hybrid-array" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d46837a0ed51fe95bd3b05de33cd64a1ee88fc797477ca48446872504507c5" +dependencies = [ + "typenum", +] + [[package]] name = "hyper" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" dependencies = [ "atomic-waker", "bytes", @@ -1658,7 +1791,6 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "pin-utils", "smallvec", "tokio", "want", @@ -1666,19 +1798,18 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.7" +version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ "http 1.4.0", "hyper", "hyper-util", "rustls", - "rustls-pki-types", "tokio", "tokio-rustls", "tower-service", - "webpki-roots 1.0.5", + "webpki-roots 1.0.7", ] [[package]] @@ -1696,14 +1827,13 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64 0.22.1", "bytes", "futures-channel", - "futures-core", "futures-util", "http 1.4.0", "http-body", @@ -1720,12 +1850,13 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -1733,9 +1864,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", @@ -1746,9 +1877,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -1760,15 +1891,15 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] name = "icu_properties" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ "icu_collections", "icu_locale_core", @@ -1780,15 +1911,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] name = "icu_provider" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", @@ -1799,6 +1930,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -1818,9 +1955,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -1828,19 +1965,21 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.0", + "serde", + "serde_core", ] [[package]] name = "indicatif" -version = "0.18.3" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9375e112e4b463ec1b1c6c011953545c65a30164fbab5b581df32b3abf0dcb88" +checksum = "25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb" dependencies = [ "console", "portable-atomic", @@ -1860,15 +1999,15 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "iri-string" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" dependencies = [ "memchr", "serde", @@ -1918,15 +2057,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.18" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" +checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" dependencies = [ "jiff-static", "log", @@ -1937,13 +2076,13 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.18" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" +checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -1955,7 +2094,7 @@ dependencies = [ "cesu8", "cfg-if", "combine 4.6.7", - "jni-sys", + "jni-sys 0.3.1", "log", "thiserror 1.0.69", "walkdir", @@ -1964,9 +2103,31 @@ dependencies = [ [[package]] name = "jni-sys" -version = "0.3.0" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.117", +] [[package]] name = "jobserver" @@ -1980,23 +2141,24 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.85" +version = "0.3.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +checksum = "a1840c94c045fbcf8ba2812c95db44499f7c64910a912551aaaa541decebcacf" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] [[package]] name = "json5" -version = "0.4.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +checksum = "733a844dbd6fef128e98cb4487b887cb55454d92cd9994b1bafe004fabbe670c" dependencies = [ - "pest", - "pest_derive", "serde", + "ucd-trie", ] [[package]] @@ -2042,7 +2204,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -2051,11 +2213,28 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "left-right" +version = "0.11.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0c21e4c8ff95f487fb34e6f9182875f42c84cef966d29216bf115d9bba835a" +dependencies = [ + "crossbeam-utils", + "loom", + "slab", +] + [[package]] name = "libc" -version = "0.2.180" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libloading" @@ -2090,9 +2269,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.23" +version = "1.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" +checksum = "fc3a226e576f50782b3305c5ccf458698f92798987f551c6a02efe8276721e22" dependencies = [ "cc", "pkg-config", @@ -2107,15 +2286,15 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "lock_api" @@ -2132,6 +2311,19 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + [[package]] name = "lru-slab" version = "0.1.2" @@ -2171,9 +2363,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "merlin" @@ -2189,21 +2381,22 @@ dependencies = [ [[package]] name = "metrics" -version = "0.24.3" +version = "0.24.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5312e9ba3771cfa961b585728215e3d972c950a3eed9252aa093d6301277e8" +checksum = "ff56c2e7dce6bd462e3b8919986a617027481b1dcc703175b58cf9dd98a2f071" dependencies = [ - "ahash", "portable-atomic", + "rapidhash", ] [[package]] name = "metrics-exporter-prometheus" -version = "0.18.1" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3589659543c04c7dc5526ec858591015b87cd8746583b51b48ef4353f99dbcda" +checksum = "1db0d8f1fc9e62caebd0319e11eaec5822b0186c171568f0480b46a0137f9108" dependencies = [ "base64 0.22.1", + "evmap", "indexmap", "metrics", "metrics-util", @@ -2213,9 +2406,9 @@ dependencies = [ [[package]] name = "metrics-util" -version = "0.20.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdfb1365fea27e6dd9dc1dbc19f570198bc86914533ad639dae939635f096be4" +checksum = "9e56997f084e57b045edf17c3ed8ba7f9f779c670df8206dfd1c736f4c02dc4a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -2224,6 +2417,7 @@ dependencies = [ "quanta", "rand 0.9.4", "rand_xoshiro", + "rapidhash", "sketches-ddsketch", ] @@ -2251,9 +2445,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", "wasi", @@ -2288,7 +2482,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2303,9 +2497,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-derive" @@ -2315,7 +2509,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -2338,9 +2532,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" dependencies = [ "num_enum_derive", "rustversion", @@ -2348,14 +2542,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -2378,9 +2572,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "once_cell_polyfill" @@ -2439,13 +2633,19 @@ dependencies = [ "windows-link", ] +[[package]] +name = "pastey" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5a797f0e07bdf071d15742978fc3128ec6c22891c31a3a931513263904c982a" + [[package]] name = "pbkdf2" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -2465,63 +2665,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] -name = "pest" -version = "2.8.5" +name = "petgraph" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9eb05c21a464ea704b53158d358a31e6425db2f63a1a7312268b05fe2b75f7" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ - "memchr", - "ucd-trie", + "fixedbitset 0.4.2", + "indexmap", ] [[package]] -name = "pest_derive" -version = "2.8.5" +name = "petgraph" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f9dbced329c441fa79d80472764b1a2c7e57123553b8519b36663a2fb234ed" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bb96d5051a78f44f43c8f712d8e810adb0ebf923fc9ed2655a7f66f63ba8ee5" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.114", -] - -[[package]] -name = "pest_meta" -version = "2.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602113b5b5e8621770cfd490cfd90b9f84ab29bd2b0e49ad83eb6d186cef2365" -dependencies = [ - "pest", - "sha2", -] - -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset 0.4.2", - "indexmap", -] - -[[package]] -name = "petgraph" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ "fixedbitset 0.5.7", "hashbrown 0.15.5", @@ -2530,35 +2687,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkcs8" @@ -2572,9 +2723,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "plotters" @@ -2611,31 +2762,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug", "universal-hash", ] [[package]] name = "portable-atomic" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.4" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" dependencies = [ "portable-atomic", ] [[package]] name = "potential_utf" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "zerovec", ] @@ -2672,14 +2823,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ "toml_edit", ] @@ -2695,9 +2846,9 @@ dependencies = [ [[package]] name = "proptest" -version = "1.9.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" +checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bitflags", "num-traits", @@ -2767,7 +2918,7 @@ dependencies = [ "pulldown-cmark", "pulldown-cmark-to-cmark", "regex", - "syn 2.0.114", + "syn 2.0.117", "tempfile", ] @@ -2794,7 +2945,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -2890,9 +3041,9 @@ checksum = "95067976aca6421a523e491fce939a3e65249bac4b977adee0ee9771568e8aa3" [[package]] name = "pulldown-cmark" -version = "0.13.0" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8bbe1a966bd2f362681a44f6edce3c2310ac21e4d5067a6e7ec396297a6ea0" +checksum = "7c3a14896dfa883796f1cb410461aef38810ea05f2b2c33c5aded3649095fdad" dependencies = [ "bitflags", "memchr", @@ -2991,9 +3142,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.44" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -3004,11 +3155,17 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "rand" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "libc", "rand_chacha 0.3.1", @@ -3081,6 +3238,15 @@ dependencies = [ "rand_core 0.9.5", ] +[[package]] +name = "rapidhash" +version = "4.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e48930979c155e2f33aa36ab3119b5ee81332beb6482199a8ecd6029b80b59" +dependencies = [ + "rustversion", +] + [[package]] name = "raw-cpuid" version = "11.6.0" @@ -3092,9 +3258,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" dependencies = [ "either", "rayon-core", @@ -3135,9 +3301,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -3147,9 +3313,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -3158,9 +3324,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" @@ -3197,7 +3363,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 1.0.5", + "webpki-roots 1.0.7", ] [[package]] @@ -3217,7 +3383,7 @@ dependencies = [ [[package]] name = "richat" -version = "10.0.0" +version = "11.0.0" dependencies = [ "affinity-linux", "agave-reserved-account-keys", @@ -3252,18 +3418,21 @@ dependencies = [ "rustls", "serde", "serde_json", - "signal-hook 0.4.3", + "signal-hook 0.4.4", "smallvec", - "solana-account", + "solana-account 3.4.0", + "solana-account 4.3.0", "solana-account-decoder", "solana-clock", "solana-commitment-config", - "solana-message", + "solana-message 3.1.0", + "solana-message 4.1.1", "solana-nohash-hasher", - "solana-pubkey 3.0.0", + "solana-pubkey 4.2.0", "solana-rpc-client-api", "solana-signature", - "solana-transaction", + "solana-transaction 3.1.0", + "solana-transaction 4.1.1", "solana-transaction-error", "solana-transaction-status", "solana-version", @@ -3274,7 +3443,7 @@ dependencies = [ "tokio-rustls", "tokio-util", "tonic", - "tonic-build 0.14.2", + "tonic-build 0.14.5", "tonic-prost", "tracing", "vergen", @@ -3288,24 +3457,22 @@ dependencies = [ "agave-geyser-plugin-interface", "criterion", "prost 0.11.9", - "prost 0.14.3", - "prost-types 0.14.3", "richat-filter", "richat-plugin-agave", "richat-proto", "solana-clock", - "solana-hash 3.1.0", - "solana-message", - "solana-pubkey 3.0.0", + "solana-hash", + "solana-message 3.1.0", + "solana-pubkey 4.2.0", "solana-signature", "solana-storage-proto", - "solana-transaction", + "solana-transaction 3.1.0", "solana-transaction-status", ] [[package]] name = "richat-cli" -version = "9.0.2" +version = "10.0.0" dependencies = [ "agave-geyser-plugin-interface", "anyhow", @@ -3327,13 +3494,13 @@ dependencies = [ "solana-account-decoder", "solana-clock", "solana-commitment-config", - "solana-hash 3.1.0", - "solana-message", - "solana-pubkey 3.0.0", + "solana-hash", + "solana-message 3.1.0", + "solana-pubkey 4.2.0", "solana-pubsub-client", "solana-rpc-client-api", "solana-signature", - "solana-transaction", + "solana-transaction 3.1.0", "solana-transaction-status", "tikv-jemallocator", "tokio", @@ -3344,7 +3511,7 @@ dependencies = [ [[package]] name = "richat-client" -version = "8.1.1" +version = "9.0.0" dependencies = [ "anyhow", "bytes", @@ -3364,15 +3531,15 @@ dependencies = [ "thiserror 2.0.18", "tokio", "tonic", - "tonic-build 0.14.2", + "tonic-build 0.14.5", "tonic-prost", "tracing", - "webpki-roots 1.0.5", + "webpki-roots 1.0.7", ] [[package]] name = "richat-filter" -version = "8.1.0" +version = "9.0.0" dependencies = [ "arrayvec", "base64 0.22.1", @@ -3385,10 +3552,10 @@ dependencies = [ "richat-shared", "serde", "smallvec", - "solana-account", + "solana-account 4.3.0", "solana-clock", "solana-commitment-config", - "solana-pubkey 3.0.0", + "solana-pubkey 4.2.0", "solana-signature", "solana-transaction-status", "spl-token-2022-interface", @@ -3411,7 +3578,7 @@ dependencies = [ [[package]] name = "richat-plugin-agave" -version = "8.1.1" +version = "9.0.0" dependencies = [ "agave-geyser-plugin-interface", "anyhow", @@ -3435,10 +3602,10 @@ dependencies = [ "solana-account-decoder", "solana-clock", "solana-logger", - "solana-message", - "solana-pubkey 3.0.0", + "solana-message 3.1.0", + "solana-pubkey 4.2.0", "solana-signature", - "solana-transaction", + "solana-transaction 3.1.0", "solana-transaction-context", "solana-transaction-error", "solana-transaction-status", @@ -3449,25 +3616,39 @@ dependencies = [ [[package]] name = "richat-proto" -version = "8.0.0" +version = "9.0.0" dependencies = [ "anyhow", + "bincode", "cargo-lock", "prost 0.14.3", "protoc-bin-vendored", + "solana-account 4.3.0", + "solana-account-decoder", + "solana-clock", + "solana-hash", + "solana-message 3.1.0", + "solana-message 4.1.1", + "solana-pubkey 4.2.0", + "solana-signature", + "solana-transaction 3.1.0", + "solana-transaction 4.1.1", + "solana-transaction-context", + "solana-transaction-error", + "solana-transaction-status", "tonic-prost-build", "yellowstone-grpc-proto", ] [[package]] name = "richat-shared" -version = "8.0.1" +version = "9.0.0" dependencies = [ "affinity-linux", "anyhow", "base64 0.22.1", "bs58", - "five8 1.0.0", + "five8", "futures", "hostname", "http-body-util", @@ -3493,15 +3674,15 @@ dependencies = [ "serde_yaml", "socket2", "solana-clock", - "solana-pubkey 3.0.0", + "solana-pubkey 4.2.0", "solana-rpc-client-api", "solana-signature", "thiserror 2.0.18", "tokio", "tokio-util", - "toml", + "toml 1.1.2+spec-1.1.0", "tonic", - "tonic-build 0.14.2", + "tonic-build 0.14.5", "tonic-prost", "tracing", "tracing-subscriber", @@ -3539,9 +3720,9 @@ checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" [[package]] name = "rustc_version" @@ -3576,22 +3757,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys 0.11.0", - "windows-sys 0.59.0", + "linux-raw-sys 0.12.1", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.36" +version = "0.23.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ "aws-lc-rs", "log", @@ -3626,9 +3807,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" dependencies = [ "web-time", "zeroize", @@ -3652,7 +3833,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3681,9 +3862,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "same-file" @@ -3696,13 +3877,19 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -3711,9 +3898,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "3.5.1" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ "bitflags", "core-foundation", @@ -3724,9 +3911,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.15.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -3734,9 +3921,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" dependencies = [ "serde", "serde_core", @@ -3788,7 +3975,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -3806,9 +3993,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ "serde_core", ] @@ -3827,9 +4014,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.16.1" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" +checksum = "f05839ce67618e14a09b286535c0d9c94e85ef25469b0e13cb4f844e5593eb19" dependencies = [ "serde_core", "serde_with_macros", @@ -3837,14 +4024,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.16.1" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" +checksum = "cf2ebbe86054f9b45bc3881e865683ccfaccce97b9b4cb53f3039d67f355a334" dependencies = [ - "darling 0.21.3", + "darling 0.23.0", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -3867,8 +4054,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", ] [[package]] @@ -3878,17 +4065,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", ] +[[package]] +name = "sha2-const-stable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f179d4e11094a893b82fff208f74d448a7512f99f5a0acbd5c679b705f83ed9" + [[package]] name = "sha3" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" dependencies = [ - "digest", + "digest 0.10.7", "keccak", ] @@ -3919,9 +4112,9 @@ dependencies = [ [[package]] name = "signal-hook" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b57709da74f9ff9f4a27dce9526eec25ca8407c45a7887243b031a58935fb8e" +checksum = "b2a0c28ca5908dbdbcd52e6fdaa00358ab88637f8ab33e1f188dd510eb44b53d" dependencies = [ "libc", "signal-hook-registry", @@ -3948,9 +4141,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" [[package]] name = "simdutf8" @@ -3960,21 +4153,21 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "sketches-ddsketch" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" +checksum = "0c6f73aeb92d671e0cc4dca167e59b2deb6387c375391bc99ee743f326994a2b" [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" @@ -3984,19 +4177,19 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "solana-account" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60e0ac2a81ae17e1b3570deb50242ab4cfde50b848b898f57288b6271cc7b71f" +checksum = "efc0ed36decb689413b9da5d57f2be49eea5bebb3cf7897015167b0c4336e731" dependencies = [ "bincode", "serde", @@ -4005,16 +4198,29 @@ dependencies = [ "solana-account-info", "solana-clock", "solana-instruction-error", - "solana-pubkey 4.0.0", + "solana-pubkey 4.2.0", "solana-sdk-ids", "solana-sysvar", ] +[[package]] +name = "solana-account" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87c1b95bd432efb92837bc38001365e5acb5c0175b199bc447b08a8c320ecf6c" +dependencies = [ + "solana-account-info", + "solana-clock", + "solana-instruction-error", + "solana-pubkey 4.2.0", + "solana-sdk-ids", +] + [[package]] name = "solana-account-decoder" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8464b3fc2a2be746bac737762d0641b36ac6abd8011d42ab39fbac347f7f35c4" +checksum = "5b46a77a786c876cba3faff781288ae910723433fe90090d002fbacb7fbfaa4f" dependencies = [ "Inflector", "base64 0.22.1", @@ -4023,7 +4229,7 @@ dependencies = [ "bv", "serde", "serde_json", - "solana-account", + "solana-account 3.4.0", "solana-account-decoder-client-types", "solana-address-lookup-table-interface", "solana-clock", @@ -4035,8 +4241,8 @@ dependencies = [ "solana-nonce", "solana-program-option", "solana-program-pack", - "solana-pubkey 3.0.0", - "solana-rent", + "solana-pubkey 4.2.0", + "solana-rent 3.1.0", "solana-sdk-ids", "solana-slot-hashes", "solana-slot-history", @@ -4054,26 +4260,26 @@ dependencies = [ [[package]] name = "solana-account-decoder-client-types" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19c4d25af582526effd2ddb30a6d8d1272ec31ad77dbaa7f83d37dc3d8093867" +checksum = "724476642226b22fb672c90c05c4a5b6a07a7c66ad89eb54ed92244511e88581" dependencies = [ "base64 0.22.1", "bs58", "serde", "serde_json", - "solana-account", - "solana-pubkey 3.0.0", + "solana-account 3.4.0", + "solana-pubkey 4.2.0", "zstd", ] [[package]] name = "solana-account-info" -version = "3.1.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc3397241392f5756925029acaa8515dc70fcbe3d8059d4885d7d6533baf64fd" +checksum = "a9cf16495d9eb53e3d04e72366a33bb1c20c24e78c171d8b8f5978357b63ae95" dependencies = [ - "solana-address 2.0.0", + "solana-address 2.6.0", "solana-program-error", "solana-program-memory", ] @@ -4084,35 +4290,38 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2ecac8e1b7f74c2baa9e774c42817e3e75b20787134b76cc4d45e8a604488f5" dependencies = [ - "solana-address 2.0.0", + "solana-address 2.6.0", ] [[package]] name = "solana-address" -version = "2.0.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e37320fd2945c5d654b2c6210624a52d66c3f1f73b653ed211ab91a703b35bdd" +checksum = "f1384b52c435a750cc9c538760fc7bb472fd78e65a9900a2d07312c5bb335b72" dependencies = [ "borsh", "bytemuck", "bytemuck_derive", "curve25519-dalek", - "five8 1.0.0", + "five8", "five8_const", "serde", "serde_derive", + "sha2-const-stable", "solana-atomic-u64", - "solana-define-syscall 4.0.1", + "solana-define-syscall 5.1.0", + "solana-nullable", "solana-program-error", "solana-sanitize", "solana-sha256-hasher", + "wincode", ] [[package]] name = "solana-address-lookup-table-interface" -version = "3.0.1" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e8df0b083c10ce32490410f3795016b1b5d9b4d094658c0a5e496753645b7cd" +checksum = "115b4f773acc4f3f3cb986b0d335e9845c0368c82b0940410935bc11ae065578" dependencies = [ "bincode", "bytemuck", @@ -4121,34 +4330,34 @@ dependencies = [ "solana-clock", "solana-instruction", "solana-instruction-error", - "solana-pubkey 4.0.0", + "solana-pubkey 4.2.0", "solana-sdk-ids", "solana-slot-hashes", ] [[package]] name = "solana-atomic-u64" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a933ff1e50aff72d02173cfcd7511bd8540b027ee720b75f353f594f834216d0" +checksum = "085db4906d89324cef2a30840d59eaecf3d4231c560ec7c9f6614a93c652f501" dependencies = [ "parking_lot", ] [[package]] name = "solana-borsh" -version = "3.0.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc402b16657abbfa9991cd5cbfac5a11d809f7e7d28d3bb291baeb088b39060e" +checksum = "c04abbae16f57178a163125805637b8a076175bb5c0002fb04f4792bea901cf7" dependencies = [ "borsh", ] [[package]] name = "solana-clock" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb62e9381182459a4520b5fe7fb22d423cae736239a6427fc398a88743d0ed59" +checksum = "95cf11109c3b6115cc510f1e31f06fdd52f504271bc24ef5f1249fbbcae5f9f3" dependencies = [ "serde", "serde_derive", @@ -4159,9 +4368,9 @@ dependencies = [ [[package]] name = "solana-commitment-config" -version = "3.1.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e41a3917076a8b5375809078ae3a6fb76a53e364b596ef8c4265e7f410876f3" +checksum = "1517aa49dcfa9cb793ef90e7aac81346d62ca4a546bb1a754030a033e3972e1c" dependencies = [ "serde", "serde_derive", @@ -4176,12 +4385,12 @@ dependencies = [ "bincode", "serde", "serde_derive", - "solana-account", + "solana-account 3.4.0", "solana-instruction", "solana-pubkey 3.0.0", "solana-sdk-ids", "solana-short-vec", - "solana-system-interface", + "solana-system-interface 2.0.0", ] [[package]] @@ -4194,15 +4403,15 @@ dependencies = [ "solana-define-syscall 4.0.1", "solana-instruction", "solana-program-error", - "solana-pubkey 4.0.0", + "solana-pubkey 4.2.0", "solana-stable-layout", ] [[package]] name = "solana-curve25519" -version = "3.1.7" +version = "3.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6d1e80bc1dec29e07019e96eeb7d72aa5ff70780a9ae700d7dd101692456739" +checksum = "5aff7432cdf2ec6a44ac06b4d64d2ee006f6c0066d6456e032a7fe25be40cd5c" dependencies = [ "bytemuck", "bytemuck_derive", @@ -4224,6 +4433,12 @@ version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57e5b1c0bc1d4a4d10c88a4100499d954c09d3fecfae4912c1a074dff68b1738" +[[package]] +name = "solana-define-syscall" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e14a4f604117f379840956a8fc8695e4c84f5b0ebed192f31f60d9b85d581d" + [[package]] name = "solana-derivation-path" version = "3.0.0" @@ -4237,13 +4452,13 @@ dependencies = [ [[package]] name = "solana-epoch-rewards" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b319a4ed70390af911090c020571f0ff1f4ec432522d05ab89f5c08080381995" +checksum = "f5e7b0ba210593ba8ddd39d6d234d81795d1671cebf3026baa10d5dc23ac42f0" dependencies = [ "serde", "serde_derive", - "solana-hash 3.1.0", + "solana-hash", "solana-sdk-ids", "solana-sdk-macro", "solana-sysvar-id", @@ -4251,9 +4466,9 @@ dependencies = [ [[package]] name = "solana-epoch-schedule" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5481e72cc4d52c169db73e4c0cd16de8bc943078aac587ec4817a75cc6388f" +checksum = "9ce264b7b42322325947c4136a09460bf5c73d9aa8262c9b0a2064be63ba8639" dependencies = [ "serde", "serde_derive", @@ -4264,9 +4479,9 @@ dependencies = [ [[package]] name = "solana-fee-calculator" -version = "3.0.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a73cc03ca4bed871ca174558108835f8323e85917bb38b9c81c7af2ab853efe" +checksum = "57e8add96b5741573e9f7529c4bb7719cfcfa999c3847a68cdfaef0cb6adf567" dependencies = [ "log", "serde", @@ -4275,23 +4490,13 @@ dependencies = [ [[package]] name = "solana-hash" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "337c246447142f660f778cf6cb582beba8e28deb05b3b24bfb9ffd7c562e5f41" -dependencies = [ - "solana-hash 4.0.1", -] - -[[package]] -name = "solana-hash" -version = "4.0.1" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5d48a6ee7b91fc7b998944ab026ed7b3e2fc8ee3bc58452644a86c2648152f" +checksum = "f1b113239362cee7093bfb250467138f079a2a03673181dc15bff6ccd677912d" dependencies = [ - "borsh", "bytemuck", "bytemuck_derive", - "five8 1.0.0", + "five8", "serde", "serde_derive", "solana-atomic-u64", @@ -4300,30 +4505,29 @@ dependencies = [ [[package]] name = "solana-inflation" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e92f37a14e7c660628752833250dd3dcd8e95309876aee751d7f8769a27947c6" +checksum = "f762559c5f962727efdcb03c61f5cf6c5364645695978fb145d25c88bbacdada" [[package]] name = "solana-instruction" -version = "3.1.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee1b699a2c1518028a9982e255e0eca10c44d90006542d9d7f9f40dbce3f7c78" +checksum = "37ebb0ffd19263051bc3f683fcc086134b8ff23af894dcb63f7563c7137b42f1" dependencies = [ "bincode", - "borsh", "serde", "serde_derive", - "solana-define-syscall 4.0.1", + "solana-define-syscall 5.1.0", "solana-instruction-error", - "solana-pubkey 4.0.0", + "solana-pubkey 4.2.0", ] [[package]] name = "solana-instruction-error" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04259e03c05faf38a8c24217b5cfe4c90572ae6184ab49cddb1584fdd756d3f" +checksum = "a0b188842592fdf6cb96f55263ae1bf11713ab5114401d1d5a881ed7cc41bef6" dependencies = [ "num-traits", "serde", @@ -4349,6 +4553,22 @@ dependencies = [ "solana-sysvar-id", ] +[[package]] +name = "solana-keypair" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "263d614c12aa267a3278703175fd6440552ca61bc960b5a02a4482720c53438b" +dependencies = [ + "ed25519-dalek", + "five8", + "five8_core", + "rand 0.9.4", + "solana-address 2.6.0", + "solana-seed-phrase", + "solana-signature", + "solana-signer", +] + [[package]] name = "solana-last-restart-slot" version = "3.0.0" @@ -4378,17 +4598,17 @@ dependencies = [ [[package]] name = "solana-loader-v3-interface" -version = "6.1.0" +version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee44c9b1328c5c712c68966fb8de07b47f3e7bac006e74ddd1bb053d3e46e5d" +checksum = "2e0538d4dbc9022e01616f1c58f2db98ece739c5d5ed4a2ef8737a953e76a2d4" dependencies = [ "serde", "serde_bytes", "serde_derive", "solana-instruction", - "solana-pubkey 3.0.0", + "solana-pubkey 4.2.0", "solana-sdk-ids", - "solana-system-interface", + "solana-system-interface 3.2.0", ] [[package]] @@ -4406,17 +4626,17 @@ dependencies = [ [[package]] name = "solana-message" -version = "3.0.1" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85666605c9fd727f865ed381665db0a8fc29f984a030ecc1e40f43bfb2541623" +checksum = "0448b1fd891c5f46491e5dc7d9986385ba3c852c340db2911dd29faa01d2b08d" dependencies = [ "bincode", "blake3", "lazy_static", "serde", "serde_derive", - "solana-address 1.1.0", - "solana-hash 3.1.0", + "solana-address 2.6.0", + "solana-hash", "solana-instruction", "solana-sanitize", "solana-sdk-ids", @@ -4424,13 +4644,28 @@ dependencies = [ "solana-transaction-error", ] +[[package]] +name = "solana-message" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a634d1db65a393d4e87ec49ef97c8dfb12201e2ba9e5faf87ff34e632f29e509" +dependencies = [ + "lazy_static", + "solana-address 2.6.0", + "solana-hash", + "solana-instruction", + "solana-sanitize", + "solana-sdk-ids", + "solana-transaction-error", +] + [[package]] name = "solana-msg" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "264275c556ea7e22b9d3f87d56305546a38d4eee8ec884f3b126236cb7dcbbb4" +checksum = "726b7cbbc6be6f1c6f29146ac824343b9415133eee8cce156452ad1db93f8008" dependencies = [ - "solana-define-syscall 3.0.0", + "solana-define-syscall 5.1.0", ] [[package]] @@ -4441,18 +4676,27 @@ checksum = "8b8a731ed60e89177c8a7ab05fe0f1511cedd3e70e773f288f9de33a9cfdc21e" [[package]] name = "solana-nonce" -version = "3.0.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abbdc6c8caf1c08db9f36a50967539d0f72b9f1d4aea04fec5430f532e5afadc" +checksum = "d95dbc9f2e33b6c10e231df15cb2a3bff9ea7eab6347f9e316fe75c97fd67bbb" dependencies = [ "serde", "serde_derive", "solana-fee-calculator", - "solana-hash 3.1.0", - "solana-pubkey 3.0.0", + "solana-hash", + "solana-pubkey 4.2.0", "solana-sha256-hasher", ] +[[package]] +name = "solana-nullable" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da028344c595c7416769ff648d206de7962571291a4cea24c38a60b6f40d53bb" +dependencies = [ + "bytemuck", +] + [[package]] name = "solana-program-entrypoint" version = "3.1.1" @@ -4462,14 +4706,14 @@ dependencies = [ "solana-account-info", "solana-define-syscall 4.0.1", "solana-program-error", - "solana-pubkey 4.0.0", + "solana-pubkey 4.2.0", ] [[package]] name = "solana-program-error" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1af32c995a7b692a915bb7414d5f8e838450cf7c70414e763d8abcae7b51f28" +checksum = "4f04fa578707b3612b095f0c8e19b66a1233f7c42ca8082fcb3b745afcc0add6" dependencies = [ "borsh", ] @@ -4485,15 +4729,15 @@ dependencies = [ [[package]] name = "solana-program-option" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e7b4ddb464f274deb4a497712664c3b612e3f5f82471d4e47710fc4ab1c3095" +checksum = "7a88006a9b8594088cec9027ab77caaaa258a2aaa2083d3f086c44b42e50aeab" [[package]] name = "solana-program-pack" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c169359de21f6034a63ebf96d6b380980307df17a8d371344ff04a883ec4e9d0" +checksum = "3d7701cb15b90667ae1c89ef4ac35a59c61e66ce58ddee13d729472af7f41d59" dependencies = [ "solana-program-error", ] @@ -4509,18 +4753,18 @@ dependencies = [ [[package]] name = "solana-pubkey" -version = "4.0.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6f7104d456b58e1418c21a8581e89810278d1190f70f27ece7fc0b2c9282a57" +checksum = "7db719574990de7e8b0f55a8593ac92a5ccb42c8ce67b3e4bf05b139d5d9ee71" dependencies = [ - "solana-address 2.0.0", + "solana-address 2.6.0", ] [[package]] name = "solana-pubsub-client" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13ee11014415fc24dcd1086566b17f20c2a78f6e5343c28368131948949eb499" +checksum = "9a996e62922602d7a3c9abe85879994025f2ca2004e909709d30fb182325a21d" dependencies = [ "crossbeam-channel", "futures-util", @@ -4531,7 +4775,7 @@ dependencies = [ "serde_json", "solana-account-decoder-client-types", "solana-clock", - "solana-pubkey 3.0.0", + "solana-pubkey 4.2.0", "solana-rpc-client-types", "solana-signature", "thiserror 2.0.18", @@ -4555,11 +4799,20 @@ dependencies = [ "solana-sysvar-id", ] +[[package]] +name = "solana-rent" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9809b081e99bc142ce803bcd7ee18306759ce3b30a96a9da3f6f41c45e50ef0" +dependencies = [ + "solana-sdk-macro", +] + [[package]] name = "solana-reward-info" -version = "3.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82be7946105c2ee6be9f9ee7bd18a068b558389221d29efa92b906476102bfcc" +checksum = "d8f4c5c5b5599e640c15ead65be499d60f6ee62a5ba7aa7e23f5b0537046ed49" dependencies = [ "serde", "serde_derive", @@ -4567,9 +4820,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d934907c81013f8e561177045340702f957c840abb74a4f16e2b04bc10d4cd50" +checksum = "b8a3c68bbeae45d991900fa7020ddd4a974cf2c428b28b18be0300e8526c204b" dependencies = [ "anyhow", "jsonrpc-core", @@ -4588,24 +4841,24 @@ dependencies = [ [[package]] name = "solana-rpc-client-types" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "169b1197c7a242357478d0a88ed5c3e698cfd6ed0436d2eb710cfea79d1b0b92" +checksum = "174c6e2de935b0c1cf30b007a02f1e1ae4ea62f3b8101502023b372325428757" dependencies = [ "base64 0.22.1", "bs58", "semver", "serde", "serde_json", - "solana-account", + "solana-account 3.4.0", "solana-account-decoder-client-types", - "solana-address 1.1.0", + "solana-address 2.6.0", "solana-clock", "solana-commitment-config", "solana-fee-calculator", "solana-inflation", "solana-reward-info", - "solana-transaction", + "solana-transaction 3.1.0", "solana-transaction-error", "solana-transaction-status-client-types", "solana-version", @@ -4621,9 +4874,9 @@ checksum = "dcf09694a0fc14e5ffb18f9b7b7c0f15ecb6eac5b5610bf76a1853459d19daf9" [[package]] name = "solana-sbpf" -version = "0.13.1" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15b079e08471a9dbfe1e48b2c7439c85aa2a055cbd54eddd8bd257b0a7dbb29" +checksum = "733b3657a0fab205102b799dbe17f85d3972cf984232c1b0b108fa6ba438e382" dependencies = [ "byteorder", "combine 3.8.1", @@ -4639,19 +4892,19 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "def234c1956ff616d46c9dd953f251fa7096ddbaa6d52b165218de97882b7280" dependencies = [ - "solana-address 2.0.0", + "solana-address 2.6.0", ] [[package]] name = "solana-sdk-macro" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6430000e97083460b71d9fbadc52a2ab2f88f53b3a4c5e58c5ae3640a0e8c00" +checksum = "8765316242300c48242d84a41614cb3388229ec353ba464f6fe62a733e41806f" dependencies = [ "bs58", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -4685,21 +4938,21 @@ dependencies = [ [[package]] name = "solana-serde-varint" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5174c57d5ff3c1995f274d17156964664566e2cde18a07bba1586d35a70d3b" +checksum = "950e5b83e839dc0f92c66afc124bb8f40e89bc90f0579e8ec5499296d27f54e3" dependencies = [ "serde", ] [[package]] name = "solana-serialize-utils" -version = "3.1.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e41dd8feea239516c623a02f0a81c2367f4b604d7965237fed0751aeec33ed" +checksum = "5d7cc401931d178472358e6b78dc72d031dc08f752d7410f0e8bd259dd6f02fa" dependencies = [ "solana-instruction-error", - "solana-pubkey 3.0.0", + "solana-pubkey 4.2.0", "solana-sanitize", ] @@ -4711,30 +4964,31 @@ checksum = "db7dc3011ea4c0334aaaa7e7128cb390ecf546b28d412e9bf2064680f57f588f" dependencies = [ "sha2", "solana-define-syscall 4.0.1", - "solana-hash 4.0.1", + "solana-hash", ] [[package]] name = "solana-short-vec" -version = "3.1.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79fb1809a32cfcf7d9c47b7070a92fa17cdb620ab5829e9a8a9ff9d138a7a175" +checksum = "2bb8cc883fc7b8ce4a7814cb1441b48c06437049ec11847005cf63bcfa85c546" dependencies = [ "serde_core", ] [[package]] name = "solana-signature" -version = "3.1.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb8057cc0e9f7b5e89883d49de6f407df655bb6f3a71d0b7baf9986a2218fd9" +checksum = "e7a73c6e97cc2108be0adf6a6ea326434f8398df9d7eed81da2a4548b69e971c" dependencies = [ "ed25519-dalek", - "five8 0.2.1", + "five8", "serde", "serde-big-array", "serde_derive", "solana-sanitize", + "wincode", ] [[package]] @@ -4750,13 +5004,13 @@ dependencies = [ [[package]] name = "solana-slot-hashes" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80a293f952293281443c04f4d96afd9d547721923d596e92b4377ed2360f1746" +checksum = "2585f70191623887329dfb5078da3a00e15e3980ea67f42c2e10b07028419f43" dependencies = [ "serde", "serde_derive", - "solana-hash 3.1.0", + "solana-hash", "solana-sdk-ids", "solana-sysvar-id", ] @@ -4776,12 +5030,12 @@ dependencies = [ [[package]] name = "solana-stable-layout" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1da74507795b6e8fb60b7c7306c0c36e2c315805d16eaaf479452661234685ac" +checksum = "c9f6a291ba063a37780af29e7db14bdd3dc447584d8ba5b3fc4b88e2bbc982fa" dependencies = [ "solana-instruction", - "solana-pubkey 3.0.0", + "solana-pubkey 4.2.0", ] [[package]] @@ -4798,16 +5052,16 @@ dependencies = [ "solana-instruction", "solana-program-error", "solana-pubkey 3.0.0", - "solana-system-interface", + "solana-system-interface 2.0.0", "solana-sysvar", "solana-sysvar-id", ] [[package]] name = "solana-storage-proto" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cec12e75747b78ef0822cd6953eade5d3935dce843c71666e7fe65ae1cbe1cd" +checksum = "87bd43d90ee4f6d4f873bc52857b579f9469e2d9161e59b36a9cf8faf2e63a42" dependencies = [ "bincode", "bs58", @@ -4815,13 +5069,13 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-hash 3.1.0", + "solana-hash", "solana-instruction", - "solana-message", - "solana-pubkey 3.0.0", + "solana-message 3.1.0", + "solana-pubkey 4.2.0", "solana-serde", "solana-signature", - "solana-transaction", + "solana-transaction 3.1.0", "solana-transaction-context", "solana-transaction-error", "solana-transaction-status", @@ -4830,9 +5084,9 @@ dependencies = [ [[package]] name = "solana-svm-feature-set" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91a5fd5b82b7abe74f286179380469ea577f56a9d986a6071ed75b6276b42c64" +checksum = "3ada78631678a5a5139d6491bb8729143192c6afd30945dd8cddd974b174d7f7" [[package]] name = "solana-system-interface" @@ -4849,6 +5103,21 @@ dependencies = [ "solana-pubkey 3.0.0", ] +[[package]] +name = "solana-system-interface" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55b54965bf0b76fa8e2b35376583efddd4d916618cfe595bf48c7d7b55a9e628" +dependencies = [ + "num-traits", + "serde", + "serde_derive", + "solana-address 2.6.0", + "solana-instruction", + "solana-msg", + "solana-program-error", +] + [[package]] name = "solana-sysvar" version = "3.1.1" @@ -4866,14 +5135,14 @@ dependencies = [ "solana-epoch-rewards", "solana-epoch-schedule", "solana-fee-calculator", - "solana-hash 4.0.1", + "solana-hash", "solana-instruction", "solana-last-restart-slot", "solana-program-entrypoint", "solana-program-error", "solana-program-memory", - "solana-pubkey 4.0.0", - "solana-rent", + "solana-pubkey 4.2.0", + "solana-rent 3.1.0", "solana-sdk-ids", "solana-sdk-macro", "solana-slot-hashes", @@ -4887,24 +5156,24 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17358d1e9a13e5b9c2264d301102126cf11a47fd394cdf3dec174fe7bc96e1de" dependencies = [ - "solana-address 2.0.0", + "solana-address 2.6.0", "solana-sdk-ids", ] [[package]] name = "solana-transaction" -version = "3.0.2" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ceb2efbf427a91b884709ffac4dac29117752ce1e37e9ae04977e450aa0bb76" +checksum = "96697cff5075a028265324255efed226099f6d761ca67342b230d09f72cc48d2" dependencies = [ "bincode", "serde", "serde_derive", - "solana-address 2.0.0", - "solana-hash 4.0.1", + "solana-address 2.6.0", + "solana-hash", "solana-instruction", "solana-instruction-error", - "solana-message", + "solana-message 3.1.0", "solana-sanitize", "solana-sdk-ids", "solana-short-vec", @@ -4913,28 +5182,45 @@ dependencies = [ "solana-transaction-error", ] +[[package]] +name = "solana-transaction" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a98253cefd62dea714b67926d3d918c3b9f7d66993f1f2322ac7549ea991dc3e" +dependencies = [ + "solana-address 2.6.0", + "solana-hash", + "solana-instruction", + "solana-instruction-error", + "solana-message 4.1.1", + "solana-sanitize", + "solana-sdk-ids", + "solana-signature", + "solana-transaction-error", +] + [[package]] name = "solana-transaction-context" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cc4d1cd3ae46f1e93740cc6faa7fed82d921cbe9a82f93b103a323cbd432b12" +checksum = "9ee065d9e0a7d374c012d541083b1e72832a7f016ac2ab493f535d07fa89c26d" dependencies = [ "bincode", "serde", - "solana-account", + "solana-account 3.4.0", "solana-instruction", "solana-instructions-sysvar", - "solana-pubkey 3.0.0", - "solana-rent", + "solana-pubkey 4.2.0", + "solana-rent 3.1.0", "solana-sbpf", "solana-sdk-ids", ] [[package]] name = "solana-transaction-error" -version = "3.0.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4222065402340d7e6aec9dc3e54d22992ddcf923d91edcd815443c2bfca3144a" +checksum = "4a2165ad25b694c654d5395fc7a049452a192376e4c96a7fad05580f6ba5ba1c" dependencies = [ "serde", "serde_derive", @@ -4944,9 +5230,9 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b55b56dbd62b33fee7f6bc84d256d807ff0a3808d14d6d7f27d1fa82bf4ecbe" +checksum = "404b5057815311b17d79ebff956d366562d68a09d75313d0b64c5a71c4cafa7c" dependencies = [ "Inflector", "agave-reserved-account-keys", @@ -4960,19 +5246,19 @@ dependencies = [ "solana-account-decoder", "solana-address-lookup-table-interface", "solana-clock", - "solana-hash 3.1.0", + "solana-hash", "solana-instruction", "solana-loader-v2-interface", "solana-loader-v3-interface", - "solana-message", + "solana-message 3.1.0", "solana-program-option", - "solana-pubkey 3.0.0", + "solana-pubkey 4.2.0", "solana-reward-info", "solana-sdk-ids", "solana-signature", "solana-stake-interface", - "solana-system-interface", - "solana-transaction", + "solana-system-interface 3.2.0", + "solana-transaction 3.1.0", "solana-transaction-error", "solana-transaction-status-client-types", "solana-vote-interface", @@ -4987,9 +5273,9 @@ dependencies = [ [[package]] name = "solana-transaction-status-client-types" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc89888b2e96c03339c388447134bd64ac6d5a30d9286f74b82593129b702a93" +checksum = "14125d6b1dffa49b12adea3b763eff35ab83ad2aaff27dacee6ea2c9068a3256" dependencies = [ "base64 0.22.1", "bincode", @@ -4999,11 +5285,11 @@ dependencies = [ "solana-account-decoder-client-types", "solana-commitment-config", "solana-instruction", - "solana-message", - "solana-pubkey 3.0.0", + "solana-message 3.1.0", + "solana-pubkey 4.2.0", "solana-reward-info", "solana-signature", - "solana-transaction", + "solana-transaction 3.1.0", "solana-transaction-context", "solana-transaction-error", "thiserror 2.0.18", @@ -5011,12 +5297,12 @@ dependencies = [ [[package]] name = "solana-version" -version = "3.1.7" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f496e1623d5e687c1a65bc4fcd17cab819998232863ee038749d625857c04888" +checksum = "05a72745825b1cf786bfd14024a0f52e15b5b95c7eb58152af6608804cd0fa95" dependencies = [ "agave-feature-set", - "rand 0.8.5", + "rand 0.9.4", "semver", "serde", "solana-sanitize", @@ -5025,9 +5311,9 @@ dependencies = [ [[package]] name = "solana-vote-interface" -version = "4.0.4" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6e123e16bfdd7a81d71b4c4699e0b29580b619f4cd2ef5b6aae1eb85e8979f" +checksum = "d444ce30b6b4f9c281ba06061ea96638d063b53c2171b1e41ba02ebff79ed28f" dependencies = [ "bincode", "cfg_eval", @@ -5037,16 +5323,27 @@ dependencies = [ "serde_derive", "serde_with", "solana-clock", - "solana-hash 3.1.0", + "solana-hash", "solana-instruction", "solana-instruction-error", - "solana-pubkey 3.0.0", - "solana-rent", + "solana-pubkey 4.2.0", + "solana-rent 4.2.0", "solana-sdk-ids", "solana-serde-varint", "solana-serialize-utils", "solana-short-vec", - "solana-system-interface", + "solana-system-interface 3.2.0", +] + +[[package]] +name = "solana-zero-copy" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5a91404c7de468dd80658cdb5d894ec803d1092ea6e2bfdf84eee6f07559c0d" +dependencies = [ + "borsh", + "bytemuck", + "bytemuck_derive", ] [[package]] @@ -5067,7 +5364,7 @@ dependencies = [ "merlin", "num-derive", "num-traits", - "rand 0.8.5", + "rand 0.8.6", "serde", "serde_derive", "serde_json", @@ -5109,9 +5406,9 @@ dependencies = [ [[package]] name = "spl-discriminator" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d48cc11459e265d5b501534144266620289720b4c44522a47bc6b63cd295d2f3" +checksum = "e597c5ff9ed7c74a54dbc47bae2f06e4db8c98f4356ad280200dc11878266db1" dependencies = [ "bytemuck", "solana-program-error", @@ -5127,7 +5424,7 @@ checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ "quote", "spl-discriminator-syn", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -5139,7 +5436,7 @@ dependencies = [ "proc-macro2", "quote", "sha2", - "syn 2.0.114", + "syn 2.0.117", "thiserror 1.0.69", ] @@ -5165,9 +5462,9 @@ dependencies = [ [[package]] name = "spl-pod" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1233fdecd7461611d69bb87bc2e95af742df47291975d21232a0be8217da9de" +checksum = "2f9c6e142cdf1e7e77f480053ec9f0ce989890768ddf91f619b50f39d1b456f5" dependencies = [ "borsh", "bytemuck", @@ -5178,6 +5475,7 @@ dependencies = [ "solana-program-error", "solana-program-option", "solana-pubkey 3.0.0", + "solana-zero-copy", "solana-zk-sdk", "thiserror 2.0.18", ] @@ -5243,19 +5541,20 @@ dependencies = [ [[package]] name = "spl-token-group-interface" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "452d0f758af20caaa10d9a6f7608232e000d4c74462f248540b3d2ddfa419776" +checksum = "841cbd6f2322d02719be4da1affedbe6495b1048b7b985ec9796032564026e22" dependencies = [ "bytemuck", "num-derive", "num-traits", "num_enum", + "solana-address 2.6.0", "solana-instruction", + "solana-nullable", "solana-program-error", - "solana-pubkey 3.0.0", + "solana-zero-copy", "spl-discriminator", - "spl-pod", "thiserror 2.0.18", ] @@ -5300,19 +5599,18 @@ dependencies = [ [[package]] name = "spl-type-length-value" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca20a1a19f4507a98ca4b28ff5ed54cac9b9d34ed27863e2bde50a3238f9a6ac" +checksum = "2504631748c48d2a937414d64a12dcac4588d34bd07d355d648619c189d29435" dependencies = [ "bytemuck", "num-derive", "num-traits", "num_enum", "solana-account-info", - "solana-msg", "solana-program-error", + "solana-zero-copy", "spl-discriminator", - "spl-pod", "thiserror 2.0.18", ] @@ -5347,9 +5645,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.114" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -5373,20 +5671,20 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "tempfile" -version = "3.24.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.2", "once_cell", - "rustix 1.1.3", - "windows-sys 0.59.0", + "rustix 1.1.4", + "windows-sys 0.61.2", ] [[package]] @@ -5415,7 +5713,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -5426,7 +5724,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -5460,9 +5758,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", @@ -5470,22 +5768,22 @@ dependencies = [ "num-conv", "num_threads", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -5493,9 +5791,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "zerovec", @@ -5513,9 +5811,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -5528,9 +5826,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.49.0" +version = "1.52.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +checksum = "110a78583f19d5cdb2c5ccf321d1290344e71313c6c37d43520d386027d18386" dependencies = [ "bytes", "libc", @@ -5545,13 +5843,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -5606,17 +5904,32 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.11+spec-1.1.0" +version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ "indexmap", "serde_core", "serde_spanned", - "toml_datetime", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", - "winnow", + "winnow 0.7.15", +] + +[[package]] +name = "toml" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +dependencies = [ + "indexmap", + "serde_core", + "serde_spanned", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.2", ] [[package]] @@ -5628,38 +5941,47 @@ dependencies = [ "serde_core", ] +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" -version = "0.23.10+spec-1.0.0" +version = "0.25.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" dependencies = [ "indexmap", - "toml_datetime", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow", + "winnow 1.0.2", ] [[package]] name = "toml_parser" -version = "1.0.6+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow", + "winnow 1.0.2", ] [[package]] name = "toml_writer" -version = "1.0.6+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "tonic" -version = "0.14.2" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb7613188ce9f7df5bfe185db26c5814347d110db17920415cf2fbcad85e7203" +checksum = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec" dependencies = [ "async-trait", "axum", @@ -5703,21 +6025,21 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.14.2" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40aaccc9f9eccf2cd82ebc111adc13030d23e887244bc9cfa5d1d636049de3" +checksum = "1882ac3bf5ef12877d7ed57aad87e75154c11931c2ba7e6cde5e22d63522c734" dependencies = [ "prettyplease 0.2.37", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "tonic-prost" -version = "0.14.2" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66bd50ad6ce1252d87ef024b3d64fe4c3cf54a86fb9ef4c631fdd0ded7aeaa67" +checksum = "a55376a0bbaa4975a3f10d009ad763d8f4108f067c7c2e74f3001fb49778d309" dependencies = [ "bytes", "prost 0.14.3", @@ -5726,18 +6048,18 @@ dependencies = [ [[package]] name = "tonic-prost-build" -version = "0.14.2" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a16cba4043dc3ff43fcb3f96b4c5c154c64cbd18ca8dce2ab2c6a451d058a2" +checksum = "f3144df636917574672e93d0f56d7edec49f90305749c668df5101751bb8f95a" dependencies = [ "prettyplease 0.2.37", "proc-macro2", "prost-build 0.14.3", "prost-types 0.14.3", "quote", - "syn 2.0.114", + "syn 2.0.117", "tempfile", - "tonic-build 0.14.2", + "tonic-build 0.14.5", ] [[package]] @@ -5809,7 +6131,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -5845,9 +6167,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.22" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "matchers", "nu-ansi-term", @@ -5892,9 +6214,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "ucd-trie" @@ -5916,9 +6238,9 @@ checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-width" @@ -5926,6 +6248,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "unit-prefix" version = "0.5.2" @@ -5938,7 +6266,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "subtle", ] @@ -6017,9 +6345,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vergen" -version = "9.0.2" +version = "9.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f25fc8f8f05df455c7941e87f093ad22522a9ff33d7a027774815acf6f0639" +checksum = "b849a1f6d8639e8de261e81ee0fc881e3e3620db1af9f2e0da015d4382ceaf75" dependencies = [ "anyhow", "derive_builder", @@ -6031,9 +6359,9 @@ dependencies = [ [[package]] name = "vergen-lib" -version = "0.1.6" +version = "9.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" +checksum = "b34a29ba7e9c59e62f229ae1932fb1b8fb8a6fdcc99215a641913f5f5a59a569" dependencies = [ "anyhow", "derive_builder", @@ -6079,18 +6407,27 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.2+wasi-0.2.9" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen 0.51.0", ] [[package]] name = "wasm-bindgen" -version = "0.2.108" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +checksum = "df52b6d9b87e0c74c9edfa1eb2d9bf85e5d63515474513aa50fa181b3c4f5db1" dependencies = [ "cfg-if", "once_cell", @@ -6101,23 +6438,19 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.58" +version = "0.4.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" +checksum = "af934872acec734c2d80e6617bbb5ff4f12b052dd8e6332b0817bce889516084" dependencies = [ - "cfg-if", - "futures-util", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.108" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +checksum = "78b1041f495fb322e64aca85f5756b2172e35cd459376e67f2a6c9dffcedb103" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6125,31 +6458,65 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.108" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +checksum = "9dcd0ff20416988a18ac686d4d4d0f6aae9ebf08a389ff5d29012b05af2a1b41" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.108" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +checksum = "49757b3c82ebf16c57d69365a142940b384176c24df52a087fb748e2085359ea" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + [[package]] name = "web-sys" -version = "0.3.85" +version = "0.3.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" +checksum = "2eadbac71025cd7b0834f20d1fe8472e8495821b4e9801eb0a60bd1f19827602" dependencies = [ "js-sys", "wasm-bindgen", @@ -6167,9 +6534,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36a29fc0408b113f68cf32637857ab740edfafdf460c326cd2afaa2d84cc05dc" +checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" dependencies = [ "rustls-pki-types", ] @@ -6180,14 +6547,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.5", + "webpki-roots 1.0.7", ] [[package]] name = "webpki-roots" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12bed680863276c63889429bfd6cab3b99943659923822de1c8a39c49e4d722c" +checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" dependencies = [ "rustls-pki-types", ] @@ -6226,7 +6593,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6235,12 +6602,46 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "wincode" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c754f1fc41250f2f742a27ba0fcc9f73df1dec23f6878490770855d43c322d" +dependencies = [ + "pastey", + "proc-macro2", + "quote", + "thiserror 2.0.18", + "wincode-derive", +] + +[[package]] +name = "wincode-derive" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e070787599c7c067b89598cd3eda440cca1b69eda9e0ff7c725fc8679ce9eb4" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.45.0" @@ -6474,9 +6875,15 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.14" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" + +[[package]] +name = "winnow" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" dependencies = [ "memchr", ] @@ -6486,18 +6893,106 @@ name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap", + "prettyplease 0.2.37", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease 0.2.37", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "writeable" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "x509-parser" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3e137310115a65136898d2079f003ce33331a6c4b0d51f1531d1be082b6425" +checksum = "d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202" dependencies = [ "asn1-rs", "data-encoding", @@ -6522,45 +7017,24 @@ dependencies = [ [[package]] name = "yellowstone-grpc-proto" -version = "11.0.0" +version = "12.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc56c7739daf7410bf6ef04ce71ce9b9a22483ef73b78a873815f87e9a8d1d2f" +checksum = "acdd7a11b9c4c36114101f4a1002344d2fd947cb5b30e5725ee41197e2b3555a" dependencies = [ - "agave-geyser-plugin-interface", "anyhow", - "base64 0.22.1", - "bincode", - "bs58", - "bytes", "prost 0.14.3", "prost-types 0.14.3", "protoc-bin-vendored", - "serde", - "smallvec", - "solana-account", - "solana-account-decoder", - "solana-clock", - "solana-hash 4.0.1", - "solana-message", - "solana-pubkey 4.0.0", - "solana-signature", - "solana-transaction", - "solana-transaction-context", - "solana-transaction-error", - "solana-transaction-status", - "spl-token-2022-interface", - "thiserror 2.0.18", "tonic", - "tonic-build 0.14.2", "tonic-prost", "tonic-prost-build", ] [[package]] name = "yoke" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -6569,54 +7043,54 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.33" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.33" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", "synstructure", ] @@ -6637,14 +7111,14 @@ checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "zerotrie" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", @@ -6653,9 +7127,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "yoke", "zerofrom", @@ -6664,20 +7138,20 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "zmij" -version = "1.0.16" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfcd145825aace48cff44a8844de64bf75feec3080e0aa5cdbde72961ae51a65" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "zstd" diff --git a/Cargo.toml b/Cargo.toml index f1f5b291..ef49b1ec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,8 +23,8 @@ publish = false [workspace.dependencies] affinity-linux = "1.0.0" -agave-geyser-plugin-interface = "~3.1.0" -agave-reserved-account-keys = "~3.1.0" +agave-geyser-plugin-interface = "~4.0.0-rc.0" # agave repo +agave-reserved-account-keys = "~4.0.0-rc.0" # agave repo anyhow = "1.0.62" arrayvec = "0.7.6" base64 = "0.22.1" @@ -49,7 +49,7 @@ humantime-serde = "1.1.1" hyper = "1.4.1" hyper-util = "0.1.7" indicatif = "0.18.0" -json5 = "0.4.1" +json5 = "1.3.1" jsonrpc-core = "18.0.0" jsonrpsee-types = "0.26.0" kanal = "0.1.1" @@ -68,12 +68,12 @@ rayon = "1.10.0" rcgen = "0.14.0" regex = "1.11.1" richat-benches = { path = "benches", version = "1.0.0" } -richat-client = { path = "client", version = "8.1.1" } -richat-filter = { path = "filter", version = "8.1.0" } +richat-client = { path = "client", version = "9.0.0" } +richat-filter = { path = "filter", version = "9.0.0" } richat-metrics = { path = "metrics", version = "1.0.1" } -richat-plugin-agave = { path = "plugin-agave", version = "8.1.1" } -richat-proto = { path = "proto", version = "8.0.0" } -richat-shared = { path = "shared", version = "8.0.1", default-features = false } +richat-plugin-agave = { path = "plugin-agave", version = "9.0.0" } +richat-proto = { path = "proto", version = "9.0.0" } +richat-shared = { path = "shared", version = "9.0.0", default-features = false } rocksdb = "0.24.0" rustls = { version = "0.23.36", default-features = false } rustls-native-certs = "0.8.3" @@ -84,32 +84,35 @@ serde_yaml = "0.9.33" signal-hook = "0.4.3" smallvec = "1.13.2" socket2 = "0.6.0" -solana-account = "3.0.0" -solana-account-decoder = "~3.1.0" -solana-clock = "3.0.0" -solana-commitment-config = "3.0.0" -solana-hash = "3.0.0" +solana-account = "4.3.0" +solana-account-decoder = "~4.0.0-rc.0" # agave repo +solana-account-v3 = { package = "solana-account", version = "3.4.0" } +solana-clock = "3.0.1" +solana-commitment-config = "3.1.1" +solana-hash = "4.3.0" solana-logger = "3.0.0" -solana-message = "3.0.0" +solana-message = "4.1.1" +solana-message-v3 = { package = "solana-message", version = "3.1.0" } solana-nohash-hasher = "0.2.1" -solana-pubkey = "3.0.0" -solana-pubsub-client = "~3.1.0" -solana-rpc-client-api = "~3.1.0" -solana-signature = "3.1.0" -solana-storage-proto = "~3.1.0" -solana-transaction = "3.0.0" -solana-transaction-context = "~3.1.0" -solana-transaction-error = "3.0.0" -solana-transaction-status = "~3.1.0" -solana-version = "~3.1.0" -spl-token-2022-interface = "2.0.0" +solana-pubkey = "4.2.0" +solana-pubsub-client = "~4.0.0-rc.0" # agave repo +solana-rpc-client-api = "~4.0.0-rc.0" # agave repo +solana-signature = "3.4.0" +solana-storage-proto = "~4.0.0-rc.0" # agave repo +solana-transaction = "4.1.1" +solana-transaction-context = "~4.0.0-rc.0" # agave repo +solana-transaction-error = "3.2.0" +solana-transaction-v3 = { package = "solana-transaction", version = "3.1.0" } +solana-transaction-status = "~4.0.0-rc.0" # agave repo +solana-version = "~4.0.0-rc.0" # agave repo +spl-token-2022-interface = "2.1.0" thiserror = "2.0.7" tikv-jemallocator = { version = "0.6.0", features = ["unprefixed_malloc_on_supported_platforms"] } tokio = "1.42.0" tokio-rustls = "0.26.1" tokio-tungstenite = "0.28.0" tokio-util = "0.7.16" -toml = "0.9.11" +toml = "1.1.2" tonic = "0.14.1" tonic-build = "0.14.1" tonic-prost = "0.14.1" @@ -118,7 +121,7 @@ tracing = "0.1.41" tracing-subscriber = "0.3.19" vergen = "9.0.2" webpki-roots = "1.0.1" -yellowstone-grpc-proto = "11.0.0" +yellowstone-grpc-proto = "12.3.0" zstd = "0.13.3" [workspace.lints.clippy] diff --git a/benches/Cargo.toml b/benches/Cargo.toml index f2a04629..1d1df3b2 100644 --- a/benches/Cargo.toml +++ b/benches/Cargo.toml @@ -27,20 +27,18 @@ prost_011 = { workspace = true } richat-proto = { workspace = true } solana-clock = { workspace = true } solana-hash = { workspace = true } -solana-message = { workspace = true } +solana-message-v3 = { workspace = true } solana-pubkey = { workspace = true } solana-signature = { workspace = true } solana-storage-proto = { workspace = true, features = ["agave-unstable-api"] } -solana-transaction = { workspace = true, features = ["dev-context-only-utils"] } solana-transaction-status = { workspace = true } +solana-transaction-v3 = { workspace = true, features = ["dev-context-only-utils"] } [dev-dependencies] criterion = { workspace = true } -prost = { workspace = true } -prost-types = { workspace = true } richat-filter = { workspace = true } richat-plugin-agave = { workspace = true } -richat-proto = { workspace = true, features = ["yellowstone-grpc-plugin"] } +richat-proto = { workspace = true } [lints] workspace = true diff --git a/benches/benches/encode-geyser/account.rs b/benches/benches/encode-geyser/account.rs index a10b2bb6..9243c85c 100644 --- a/benches/benches/encode-geyser/account.rs +++ b/benches/benches/encode-geyser/account.rs @@ -1,16 +1,7 @@ use { criterion::Criterion, - prost::Message, - prost_types::Timestamp, richat_benches::fixtures::generate_accounts, richat_plugin_agave::protobuf::{ProtobufEncoder, ProtobufMessage}, - richat_proto::plugin::{ - filter::{ - FilterAccountsDataSlice, - message::{FilteredUpdate, FilteredUpdateFilters, FilteredUpdateOneof}, - }, - message::MessageAccount, - }, std::{hint::black_box, time::SystemTime}, }; @@ -22,26 +13,6 @@ pub fn bench_encode_accounts(criterion: &mut Criterion) { .map(|acc| acc.to_replica()) .collect::>(); - let grpc_replicas = accounts_replica - .iter() - .cloned() - .map(|account| { - ( - account, - FilterAccountsDataSlice::new(&[], usize::MAX).unwrap(), - ) - }) - .collect::>(); - let grpc_messages = grpc_replicas - .iter() - .map(|((slot, account), data_slice)| { - ( - MessageAccount::from_geyser(account, *slot, false), - data_slice.clone(), - ) - }) - .collect::>(); - criterion .benchmark_group("encode_accounts") .bench_with_input("richat/prost", &accounts_replica, |criterion, accounts| { @@ -73,44 +44,5 @@ pub fn bench_encode_accounts(criterion: &mut Criterion) { } }) }) - }) - .bench_with_input( - "dragons-mouth/encoding-only", - &grpc_messages, - |criterion, grpc_messages| { - let created_at = Timestamp::from(SystemTime::now()); - criterion.iter(|| { - #[allow(clippy::unit_arg)] - black_box({ - for (message, data_slice) in grpc_messages { - let update = FilteredUpdate { - filters: FilteredUpdateFilters::new(), - message: FilteredUpdateOneof::account(message, data_slice.clone()), - created_at, - }; - update.encode_to_vec(); - } - }) - }); - }, - ) - .bench_with_input( - "dragons-mouth/full-pipeline", - &grpc_replicas, - |criterion, grpc_replicas| { - let created_at = Timestamp::from(SystemTime::now()); - criterion.iter(|| { - #[allow(clippy::unit_arg)] - black_box(for ((slot, account), data_slice) in grpc_replicas { - let message = MessageAccount::from_geyser(account, *slot, false); - let update = FilteredUpdate { - filters: FilteredUpdateFilters::new(), - message: FilteredUpdateOneof::account(&message, data_slice.clone()), - created_at, - }; - update.encode_to_vec(); - }) - }); - }, - ); + }); } diff --git a/benches/benches/encode-geyser/block_meta.rs b/benches/benches/encode-geyser/block_meta.rs index 2f6723d8..96cb3a4f 100644 --- a/benches/benches/encode-geyser/block_meta.rs +++ b/benches/benches/encode-geyser/block_meta.rs @@ -1,14 +1,8 @@ use { - criterion::{BatchSize, Criterion}, - prost::Message, - prost_types::Timestamp, + criterion::Criterion, richat_benches::fixtures::generate_block_metas, richat_plugin_agave::protobuf::{ProtobufEncoder, ProtobufMessage}, - richat_proto::plugin::{ - filter::message::{FilteredUpdate, FilteredUpdateFilters, FilteredUpdateOneof}, - message::MessageBlockMeta, - }, - std::{hint::black_box, sync::Arc, time::SystemTime}, + std::{hint::black_box, time::SystemTime}, }; pub fn bench_encode_block_metas(criterion: &mut Criterion) { @@ -19,12 +13,6 @@ pub fn bench_encode_block_metas(criterion: &mut Criterion) { .map(|b| b.to_replica()) .collect::>(); - let blocks_meta_grpc = blocks_meta_replica - .iter() - .map(MessageBlockMeta::from_geyser) - .map(Arc::new) - .collect::>(); - criterion .benchmark_group("encode_block_meta") .bench_with_input( @@ -58,48 +46,5 @@ pub fn bench_encode_block_metas(criterion: &mut Criterion) { }) }) }, - ) - .bench_with_input( - "dragons-mouth/encoding-only", - &blocks_meta_grpc, - |criterion, messages| { - let created_at = Timestamp::from(SystemTime::now()); - criterion.iter_batched( - || messages.to_owned(), - |messages| { - #[allow(clippy::unit_arg)] - black_box({ - for message in messages { - let update = FilteredUpdate { - filters: FilteredUpdateFilters::new(), - message: FilteredUpdateOneof::block_meta(message), - created_at, - }; - update.encode_to_vec(); - } - }) - }, - BatchSize::LargeInput, - ); - }, - ) - .bench_with_input( - "dragons-mouth/full-pipeline", - &blocks_meta_replica, - |criterion, block_metas| { - let created_at = Timestamp::from(SystemTime::now()); - criterion.iter(|| { - #[allow(clippy::unit_arg)] - black_box(for blockinfo in block_metas { - let message = MessageBlockMeta::from_geyser(blockinfo); - let update = FilteredUpdate { - filters: FilteredUpdateFilters::new(), - message: FilteredUpdateOneof::block_meta(Arc::new(message)), - created_at, - }; - update.encode_to_vec(); - }) - }); - }, ); } diff --git a/benches/benches/encode-geyser/entry.rs b/benches/benches/encode-geyser/entry.rs index b1ecaaf7..4de46cd9 100644 --- a/benches/benches/encode-geyser/entry.rs +++ b/benches/benches/encode-geyser/entry.rs @@ -1,14 +1,8 @@ use { - criterion::{BatchSize, Criterion}, - prost::Message, - prost_types::Timestamp, + criterion::Criterion, richat_benches::fixtures::generate_entries, richat_plugin_agave::protobuf::{ProtobufEncoder, ProtobufMessage}, - richat_proto::plugin::{ - filter::message::{FilteredUpdate, FilteredUpdateFilters, FilteredUpdateOneof}, - message::MessageEntry, - }, - std::{hint::black_box, sync::Arc, time::SystemTime}, + std::{hint::black_box, time::SystemTime}, }; pub fn bench_encode_entries(criterion: &mut Criterion) { @@ -16,12 +10,6 @@ pub fn bench_encode_entries(criterion: &mut Criterion) { let entries_replica = entries.iter().map(|e| e.to_replica()).collect::>(); - let entries_grpc = entries_replica - .iter() - .map(MessageEntry::from_geyser) - .map(Arc::new) - .collect::>(); - criterion .benchmark_group("encode_entry") .bench_with_input("richat/prost", &entries_replica, |criterion, entries| { @@ -47,50 +35,5 @@ pub fn bench_encode_entries(criterion: &mut Criterion) { } }) }); - }) - .bench_with_input( - "dragons-mouth/encoding-only", - &entries_grpc, - |criterion, entry_messages| { - let created_at = Timestamp::from(SystemTime::now()); - criterion.iter_batched( - || entry_messages.to_owned(), - |entry_messages| { - #[allow(clippy::unit_arg)] - black_box({ - for message in entry_messages { - let update = FilteredUpdate { - filters: FilteredUpdateFilters::new(), - message: FilteredUpdateOneof::entry(message), - created_at, - }; - update.encode_to_vec(); - } - }) - }, - BatchSize::LargeInput, - ); - }, - ) - .bench_with_input( - "dragons-mouth/full-pipeline", - &entries_replica, - |criterion, entries| { - let created_at = Timestamp::from(SystemTime::now()); - criterion.iter(|| { - #[allow(clippy::unit_arg)] - black_box({ - for entry in entries { - let message = MessageEntry::from_geyser(entry); - let update = FilteredUpdate { - filters: FilteredUpdateFilters::new(), - message: FilteredUpdateOneof::entry(Arc::new(message)), - created_at, - }; - update.encode_to_vec(); - } - }) - }); - }, - ); + }); } diff --git a/benches/benches/encode-geyser/slot.rs b/benches/benches/encode-geyser/slot.rs index 6c4a75dc..cd354729 100644 --- a/benches/benches/encode-geyser/slot.rs +++ b/benches/benches/encode-geyser/slot.rs @@ -1,13 +1,7 @@ use { criterion::Criterion, - prost::Message, - prost_types::Timestamp, richat_benches::fixtures::generate_slots, richat_plugin_agave::protobuf::{ProtobufEncoder, ProtobufMessage}, - richat_proto::plugin::{ - filter::message::{FilteredUpdate, FilteredUpdateFilters, FilteredUpdateOneof}, - message::MessageSlot, - }, std::{hint::black_box, time::SystemTime}, }; @@ -49,26 +43,5 @@ pub fn bench_encode_slot(criterion: &mut Criterion) { } }) }); - }) - .bench_with_input( - "dragons-mouth/full-pipeline", - &slots_replica, - |criterion, slots| { - let created_at = Timestamp::from(SystemTime::now()); - criterion.iter(|| { - #[allow(clippy::unit_arg)] - black_box({ - for (slot, parent, status) in slots { - let message = MessageSlot::from_geyser(*slot, *parent, status); - let update = FilteredUpdate { - filters: FilteredUpdateFilters::new(), - message: FilteredUpdateOneof::slot(message), - created_at, - }; - update.encode_to_vec(); - } - }) - }); - }, - ); + }); } diff --git a/benches/benches/encode-geyser/transaction.rs b/benches/benches/encode-geyser/transaction.rs index dac516ae..b279430e 100644 --- a/benches/benches/encode-geyser/transaction.rs +++ b/benches/benches/encode-geyser/transaction.rs @@ -1,13 +1,7 @@ use { criterion::Criterion, - prost::Message, - prost_types::Timestamp, richat_benches::fixtures::generate_transactions, richat_plugin_agave::protobuf::{ProtobufEncoder, ProtobufMessage}, - richat_proto::plugin::{ - filter::message::{FilteredUpdate, FilteredUpdateFilters, FilteredUpdateOneof}, - message::MessageTransaction, - }, std::{hint::black_box, time::SystemTime}, }; @@ -19,11 +13,6 @@ pub fn bench_encode_transactions(criterion: &mut Criterion) { .map(|tx| tx.to_replica()) .collect::>(); - let transactions_grpc = transactions_replica - .iter() - .map(|(slot, transaction)| MessageTransaction::from_geyser(transaction, *slot)) - .collect::>(); - criterion .benchmark_group("encode_transaction") .bench_with_input( @@ -63,46 +52,5 @@ pub fn bench_encode_transactions(criterion: &mut Criterion) { }) }); }, - ) - .bench_with_input( - "dragons-mouth/encoding-only", - &transactions_grpc, - |criterion, transaction_messages| { - let created_at = Timestamp::from(SystemTime::now()); - criterion.iter(|| { - #[allow(clippy::unit_arg)] - black_box({ - for message in transaction_messages { - let update = FilteredUpdate { - filters: FilteredUpdateFilters::new(), - message: FilteredUpdateOneof::transaction(message), - created_at, - }; - update.encode_to_vec(); - } - }) - }); - }, - ) - .bench_with_input( - "dragons-mouth/full-pipeline", - &transactions_replica, - |criterion, transactions| { - let created_at = Timestamp::from(SystemTime::now()); - criterion.iter(|| { - #[allow(clippy::unit_arg)] - black_box({ - for (slot, transaction) in transactions { - let message = MessageTransaction::from_geyser(transaction, *slot); - let update = FilteredUpdate { - filters: FilteredUpdateFilters::new(), - message: FilteredUpdateOneof::transaction(&message), - created_at, - }; - update.encode_to_vec(); - } - }) - }); - }, ); } diff --git a/benches/src/lib.rs b/benches/src/lib.rs index ae5f92bd..1bb960e0 100644 --- a/benches/src/lib.rs +++ b/benches/src/lib.rs @@ -15,17 +15,17 @@ pub mod fixtures { }, solana_clock::Slot, solana_hash::{HASH_BYTES, Hash}, - solana_message::{SimpleAddressLoader, v0::LoadedAddresses}, + solana_message_v3::{SimpleAddressLoader, v0::LoadedAddresses}, solana_pubkey::Pubkey, solana_signature::Signature, solana_storage_proto::convert::generated, - solana_transaction::{ - sanitized::{MessageHash, SanitizedTransaction}, - versioned::VersionedTransaction, - }, solana_transaction_status::{ ConfirmedBlock, RewardsAndNumPartitions, TransactionStatusMeta, }, + solana_transaction_v3::{ + sanitized::{MessageHash, SanitizedTransaction}, + versioned::VersionedTransaction, + }, std::{collections::HashSet, fs}, }; @@ -68,7 +68,7 @@ pub mod fixtures { } impl GeneratedAccount { - pub fn to_replica(&self) -> (Slot, ReplicaAccountInfoV3) { + pub fn to_replica(&self) -> (Slot, ReplicaAccountInfoV3<'_>) { let replica = ReplicaAccountInfoV3 { pubkey: self.pubkey.as_ref(), lamports: self.lamports, @@ -180,7 +180,7 @@ pub mod fixtures { } impl GeneratedBlockMeta { - pub fn to_replica(&self) -> ReplicaBlockInfoV4 { + pub fn to_replica(&self) -> ReplicaBlockInfoV4<'_> { ReplicaBlockInfoV4 { parent_slot: self.block.parent_slot, slot: self.slot, @@ -393,7 +393,9 @@ pub mod fixtures { transaction: Some(SubscribeUpdateTransactionInfo { signature: self.signature.as_ref().to_vec(), is_vote: self.is_vote, - transaction: Some(convert_to::create_transaction(&self.versioned_transaction)), + transaction: Some(convert_to::create_status_transaction( + &self.versioned_transaction, + )), meta: Some(convert_to::create_transaction_meta( &self.transaction_status_meta, )), diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 1f36ff40..351a4e84 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "richat-cli" -version = "9.0.2" +version = "10.0.0" authors = { workspace = true } edition = { workspace = true } description = "Richat Cli Tool" @@ -32,13 +32,13 @@ solana-account-decoder = { workspace = true } solana-clock = { workspace = true } solana-commitment-config = { workspace = true } solana-hash = { workspace = true } -solana-message = { workspace = true } +solana-message-v3 = { workspace = true } solana-pubkey = { workspace = true } solana-pubsub-client = { workspace = true } solana-rpc-client-api = { workspace = true } solana-signature = { workspace = true } -solana-transaction = { workspace = true, features = ["dev-context-only-utils"] } solana-transaction-status = { workspace = true } +solana-transaction-v3 = { workspace = true, features = ["dev-context-only-utils"] } tikv-jemallocator = { workspace = true } tokio = { workspace = true } tokio-tungstenite = { workspace = true, features = ["rustls"] } diff --git a/cli/src/stream_richat.rs b/cli/src/stream_richat.rs index f57ad4d7..0153b90f 100644 --- a/cli/src/stream_richat.rs +++ b/cli/src/stream_richat.rs @@ -25,8 +25,9 @@ use { }, richat_shared::transports::{grpc::ConfigGrpcServer, quic::ConfigQuicServer}, solana_clock::Slot, - solana_message::{LegacyMessage, Message, SanitizedMessage}, - solana_transaction::sanitized::SanitizedTransaction, + solana_message_v3::{LegacyMessage, Message, SanitizedMessage}, + solana_transaction_status::TransactionWithStatusMeta, + solana_transaction_v3::sanitized::SanitizedTransaction, std::{collections::HashSet, net::SocketAddr, path::PathBuf, sync::Arc, time::Duration}, tonic::service::Interceptor, tracing::info, @@ -405,26 +406,28 @@ fn convert_prost_to_raw(msg: &SubscribeUpdate) -> anyhow::Result> transaction: Some(tx), slot, })) => { - let value = tx - .transaction - .clone() - .ok_or(anyhow::anyhow!("no tx message"))?; - let versioned_transaction = - convert_from::create_tx_versioned(value).map_err(|error| anyhow::anyhow!(error))?; - - let value = tx.meta.clone().ok_or(anyhow::anyhow!("no meta message"))?; - let transaction_status_meta = - convert_from::create_tx_meta(value).map_err(|error| anyhow::anyhow!(error))?; + let tx_with_meta = match convert_from::create_tx_with_meta(tx.clone()) + .map_err(|error| anyhow::anyhow!(error))? + { + TransactionWithStatusMeta::Complete(tx_with_meta) => tx_with_meta, + TransactionWithStatusMeta::MissingMetadata(_) => { + anyhow::bail!("missing transaction metadata") + } + }; + let versioned_transaction = tx_with_meta.transaction; + let transaction_status_meta = tx_with_meta.meta; + let signature = tx + .signature + .as_slice() + .try_into() + .context("failed to create signature")?; + let message_hash = versioned_transaction.message.hash(); let msg = ProtobufMessage::Transaction { slot: *slot, transaction: &ReplicaTransactionInfoV3 { - signature: &tx - .signature - .as_slice() - .try_into() - .context("failed to create signature")?, - message_hash: &versioned_transaction.message.hash(), + signature: &signature, + message_hash: &message_hash, is_vote: tx.is_vote, transaction: &versioned_transaction, transaction_status_meta: &transaction_status_meta, diff --git a/cli/src/track.rs b/cli/src/track.rs index 581f3c0c..21a4d7f8 100644 --- a/cli/src/track.rs +++ b/cli/src/track.rs @@ -137,10 +137,10 @@ impl ConfigSource { } } - if let UpdateOneof::Slot(SubscribeUpdateSlot { slot, status, .. }) = update { - if status == CommitmentLevel::Finalized as i32 { - storage.clear(slot); - } + if let UpdateOneof::Slot(SubscribeUpdateSlot { slot, status, .. }) = update + && status == CommitmentLevel::Finalized as i32 + { + storage.clear(slot); } } } diff --git a/client/Cargo.toml b/client/Cargo.toml index 47fc10e9..22b0ec0c 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "richat-client" -version = "8.1.1" +version = "9.0.0" authors = { workspace = true } edition = { workspace = true } description = "Richat Client Library" diff --git a/filter/Cargo.toml b/filter/Cargo.toml index 65c9d008..0bd0e875 100644 --- a/filter/Cargo.toml +++ b/filter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "richat-filter" -version = "8.1.0" +version = "9.0.0" authors = { workspace = true } edition = { workspace = true } description = "Richat Filters" diff --git a/filter/src/filter.rs b/filter/src/filter.rs index 496dad37..6071ed7e 100644 --- a/filter/src/filter.rs +++ b/filter/src/filter.rs @@ -409,16 +409,16 @@ impl FilterAccounts { return None; } - if let Some(filters) = &filter.filters { - if !filters.is_match(msg_lamports, msg_data) { - return None; - } + if let Some(filters) = &filter.filters + && !filters.is_match(msg_lamports, msg_data) + { + return None; } - if let Some(nonempty_txn_signature) = filter.nonempty_txn_signature { - if nonempty_txn_signature != msg_nonempty_txn_signature { - return None; - } + if let Some(nonempty_txn_signature) = filter.nonempty_txn_signature + && nonempty_txn_signature != msg_nonempty_txn_signature + { + return None; } Some(name.as_ref()) @@ -538,22 +538,22 @@ impl FilterTransactions { .filters .iter() .filter_map(|(name, filter)| { - if let Some(is_vote) = filter.vote { - if is_vote != msg_vote { - return None; - } + if let Some(is_vote) = filter.vote + && is_vote != msg_vote + { + return None; } - if let Some(is_failed) = filter.failed { - if is_failed != msg_failed { - return None; - } + if let Some(is_failed) = filter.failed + && is_failed != msg_failed + { + return None; } - if let Some(signature) = &filter.signature { - if signature.as_ref() != msg_signature { - return None; - } + if let Some(signature) = &filter.signature + && signature.as_ref() != msg_signature + { + return None; } if !filter.account_include.is_empty() diff --git a/filter/src/message.rs b/filter/src/message.rs index 8be753df..d43782f5 100644 --- a/filter/src/message.rs +++ b/filter/src/message.rs @@ -574,7 +574,7 @@ impl MessageSlot { } } - pub fn size(&self) -> usize { + pub const fn size(&self) -> usize { match self { Self::Limited { buffer, .. } => buffer.len() + 64, Self::Prost { size, .. } => *size, @@ -660,7 +660,7 @@ impl MessageAccount { } } - pub fn size(&self) -> usize { + pub const fn size(&self) -> usize { match self { Self::Limited { buffer, .. } => buffer.len() + PUBKEY_BYTES * 2 + 86, Self::Prost { size, .. } => *size, @@ -1011,15 +1011,10 @@ impl MessageTransaction { pub fn as_versioned_transaction_with_status_meta( &self, ) -> Result { - Ok(VersionedTransactionWithStatusMeta { - transaction: convert_from::create_tx_versioned( - self.transaction()? - .transaction - .clone() - .ok_or("FieldNotDefined")?, - )?, - meta: convert_from::create_tx_meta(self.transaction_meta()?.clone())?, - }) + match convert_from::create_tx_with_meta(self.transaction()?.clone())? { + TransactionWithStatusMeta::Complete(tx) => Ok(tx), + TransactionWithStatusMeta::MissingMetadata(_) => Err("FieldNotDefined"), + } } pub const fn account_keys(&self) -> &HashSet { @@ -1069,7 +1064,7 @@ impl MessageEntry { } } - pub fn size(&self) -> usize { + pub const fn size(&self) -> usize { match self { Self::Limited { buffer, .. } => buffer.len() + 52, Self::Prost { size, .. } => *size, @@ -1133,7 +1128,7 @@ impl MessageBlockMeta { } } - pub fn size(&self) -> usize { + pub const fn size(&self) -> usize { match self { Self::Limited { buffer, .. } => buffer.len() * 2, Self::Prost { size, .. } => *size, diff --git a/plugin-agave/Cargo.toml b/plugin-agave/Cargo.toml index 786b0c5e..7c58d784 100644 --- a/plugin-agave/Cargo.toml +++ b/plugin-agave/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "richat-plugin-agave" -version = "8.1.1" +version = "9.0.0" authors = { workspace = true } edition = { workspace = true } description = "Richat Agave Geyser Plugin" @@ -38,13 +38,13 @@ smallvec = { workspace = true } solana-account-decoder = { workspace = true } solana-clock = { workspace = true } solana-logger = { workspace = true } -solana-message = { workspace = true } +solana-message-v3 = { workspace = true } solana-pubkey = { workspace = true } solana-signature = { workspace = true } -solana-transaction = { workspace = true } solana-transaction-context = { workspace = true } solana-transaction-error = { workspace = true } solana-transaction-status = { workspace = true } +solana-transaction-v3 = { workspace = true } tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } tokio-util = { workspace = true } diff --git a/plugin-agave/src/protobuf/encoding/transaction.rs b/plugin-agave/src/protobuf/encoding/transaction.rs index e909da96..afb1a7fa 100644 --- a/plugin-agave/src/protobuf/encoding/transaction.rs +++ b/plugin-agave/src/protobuf/encoding/transaction.rs @@ -8,18 +8,18 @@ use { }, solana_account_decoder::parse_token::UiTokenAmount, solana_clock::Slot, - solana_message::{ + solana_message_v3::{ MessageHeader, VersionedMessage, compiled_instruction::CompiledInstruction, v0::MessageAddressTableLookup, }, solana_pubkey::{PUBKEY_BYTES, Pubkey}, solana_signature::{SIGNATURE_BYTES, Signature}, - solana_transaction::versioned::VersionedTransaction, - solana_transaction_context::TransactionReturnData, + solana_transaction_context::transaction::TransactionReturnData, solana_transaction_error::TransactionError, solana_transaction_status::{ InnerInstruction, InnerInstructions, TransactionStatusMeta, TransactionTokenBalance, }, + solana_transaction_v3::versioned::VersionedTransaction, std::{cell::RefCell, marker::PhantomData, ops::Deref}, }; diff --git a/plugin-agave/src/protobuf/message.rs b/plugin-agave/src/protobuf/message.rs index 54d5df93..91c07d17 100644 --- a/plugin-agave/src/protobuf/message.rs +++ b/plugin-agave/src/protobuf/message.rs @@ -126,7 +126,7 @@ impl ProtobufMessage<'_> { transaction: Some(SubscribeUpdateTransactionInfo { signature: transaction.signature.as_ref().to_vec(), is_vote: transaction.is_vote, - transaction: Some(convert_to::create_transaction( + transaction: Some(convert_to::create_status_transaction( transaction.transaction, )), meta: Some(convert_to::create_transaction_meta( diff --git a/proto/Cargo.toml b/proto/Cargo.toml index 5b049325..af6d9060 100644 --- a/proto/Cargo.toml +++ b/proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "richat-proto" -version = "8.0.0" +version = "9.0.0" authors = { workspace = true } edition = { workspace = true } description = "Richat Proto" @@ -11,7 +11,21 @@ keywords = { workspace = true } publish = true [dependencies] +bincode = { workspace = true } prost = { workspace = true } +solana-account = { workspace = true } +solana-account-decoder = { workspace = true, features = ["agave-unstable-api"] } +solana-clock = { workspace = true } +solana-hash = { workspace = true } +solana-message = { workspace = true } +solana-message-v3 = { workspace = true } +solana-pubkey = { workspace = true } +solana-signature = { workspace = true } +solana-transaction = { workspace = true } +solana-transaction-context = { workspace = true, features = ["agave-unstable-api"] } +solana-transaction-error = { workspace = true } +solana-transaction-v3 = { workspace = true } +solana-transaction-status = { workspace = true, features = ["agave-unstable-api"] } yellowstone-grpc-proto = { workspace = true } [build-dependencies] @@ -20,9 +34,5 @@ cargo-lock = { workspace = true } protoc-bin-vendored = { workspace = true } tonic-prost-build = { workspace = true } -[features] -default = [] -yellowstone-grpc-plugin = ["yellowstone-grpc-proto/plugin"] - [lints] workspace = true diff --git a/proto/src/convert_from.rs b/proto/src/convert_from.rs new file mode 100644 index 00000000..086adb49 --- /dev/null +++ b/proto/src/convert_from.rs @@ -0,0 +1,449 @@ +use { + solana_account::Account, + solana_account_decoder::parse_token::UiTokenAmount, + solana_hash::{HASH_BYTES, Hash}, + solana_message::{ + Message, MessageHeader, VersionedMessage, + compiled_instruction::CompiledInstruction, + v0::{LoadedAddresses, Message as MessageV0, MessageAddressTableLookup}, + }, + solana_message_v3::{ + Message as StatusMessage, MessageHeader as StatusMessageHeader, + VersionedMessage as StatusVersionedMessage, + compiled_instruction::CompiledInstruction as StatusCompiledInstruction, + v0::{ + LoadedAddresses as StatusLoadedAddresses, Message as StatusMessageV0, + MessageAddressTableLookup as StatusMessageAddressTableLookup, + }, + }, + solana_pubkey::Pubkey, + solana_signature::Signature, + solana_transaction::versioned::VersionedTransaction, + solana_transaction_context::transaction::TransactionReturnData, + solana_transaction_error::TransactionError, + solana_transaction_status::{ + ConfirmedBlock, InnerInstruction, InnerInstructions, Reward, RewardType, + RewardsAndNumPartitions, TransactionStatusMeta, TransactionTokenBalance, + TransactionWithStatusMeta, VersionedTransactionWithStatusMeta, + }, + solana_transaction_v3::versioned::VersionedTransaction as StatusVersionedTransaction, + yellowstone_grpc_proto::prelude as proto, +}; + +type CreateResult = Result; + +pub fn create_block(block: proto::SubscribeUpdateBlock) -> CreateResult { + let mut transactions = vec![]; + for tx in block.transactions { + transactions.push(create_tx_with_meta(tx)?); + } + + let block_rewards = block.rewards.ok_or("failed to get rewards")?; + let mut rewards = vec![]; + for reward in block_rewards.rewards { + rewards.push(create_reward(reward)?); + } + + Ok(ConfirmedBlock { + previous_blockhash: block.parent_blockhash, + blockhash: block.blockhash, + parent_slot: block.parent_slot, + transactions, + rewards, + num_partitions: block_rewards.num_partitions.map(|msg| msg.num_partitions), + block_time: Some( + block + .block_time + .map(|wrapper| wrapper.timestamp) + .ok_or("failed to get block_time")?, + ), + block_height: Some( + block + .block_height + .map(|wrapper| wrapper.block_height) + .ok_or("failed to get block_height")?, + ), + }) +} + +pub fn create_tx_with_meta( + tx: proto::SubscribeUpdateTransactionInfo, +) -> CreateResult { + let meta = tx.meta.ok_or("failed to get transaction meta")?; + let tx = tx + .transaction + .ok_or("failed to get transaction transaction")?; + + Ok(TransactionWithStatusMeta::Complete( + VersionedTransactionWithStatusMeta { + transaction: create_status_tx_versioned(tx)?, + meta: create_tx_meta(meta)?, + }, + )) +} + +fn create_status_tx_versioned(tx: proto::Transaction) -> CreateResult { + let mut signatures = Vec::with_capacity(tx.signatures.len()); + for signature in tx.signatures { + signatures.push(match Signature::try_from(signature.as_slice()) { + Ok(signature) => signature, + Err(_error) => return Err("failed to parse Signature"), + }); + } + + Ok(StatusVersionedTransaction { + signatures, + message: create_status_message(tx.message.ok_or("failed to get message")?)?, + }) +} + +fn create_status_message(message: proto::Message) -> CreateResult { + let header = message.header.ok_or("failed to get MessageHeader")?; + let header = StatusMessageHeader { + num_required_signatures: header + .num_required_signatures + .try_into() + .map_err(|_| "failed to parse num_required_signatures")?, + num_readonly_signed_accounts: header + .num_readonly_signed_accounts + .try_into() + .map_err(|_| "failed to parse num_readonly_signed_accounts")?, + num_readonly_unsigned_accounts: header + .num_readonly_unsigned_accounts + .try_into() + .map_err(|_| "failed to parse num_readonly_unsigned_accounts")?, + }; + + if message.recent_blockhash.len() != HASH_BYTES { + return Err("failed to parse hash"); + } + + Ok(if message.versioned { + let mut address_table_lookups = Vec::with_capacity(message.address_table_lookups.len()); + for table in message.address_table_lookups { + address_table_lookups.push(StatusMessageAddressTableLookup { + account_key: Pubkey::try_from(table.account_key.as_slice()) + .map_err(|_| "failed to parse Pubkey")?, + writable_indexes: table.writable_indexes, + readonly_indexes: table.readonly_indexes, + }); + } + + StatusVersionedMessage::V0(StatusMessageV0 { + header, + account_keys: create_pubkey_vec(message.account_keys)?, + recent_blockhash: Hash::new_from_array( + <[u8; HASH_BYTES]>::try_from(message.recent_blockhash.as_slice()).unwrap(), + ), + instructions: create_status_message_instructions(message.instructions)?, + address_table_lookups, + }) + } else { + StatusVersionedMessage::Legacy(StatusMessage { + header, + account_keys: create_pubkey_vec(message.account_keys)?, + recent_blockhash: Hash::new_from_array( + <[u8; HASH_BYTES]>::try_from(message.recent_blockhash.as_slice()).unwrap(), + ), + instructions: create_status_message_instructions(message.instructions)?, + }) + }) +} + +fn create_status_message_instructions( + ixs: Vec, +) -> CreateResult> { + ixs.into_iter() + .map(|ix| { + Ok(StatusCompiledInstruction { + program_id_index: ix + .program_id_index + .try_into() + .map_err(|_| "failed to decode CompiledInstruction.program_id_index)")?, + accounts: ix.accounts, + data: ix.data, + }) + }) + .collect() +} + +pub fn create_tx_versioned(tx: proto::Transaction) -> CreateResult { + let mut signatures = Vec::with_capacity(tx.signatures.len()); + for signature in tx.signatures { + signatures.push(match Signature::try_from(signature.as_slice()) { + Ok(signature) => signature, + Err(_error) => return Err("failed to parse Signature"), + }); + } + + Ok(VersionedTransaction { + signatures, + message: create_message(tx.message.ok_or("failed to get message")?)?, + }) +} + +pub fn create_message(message: proto::Message) -> CreateResult { + let header = message.header.ok_or("failed to get MessageHeader")?; + let header = MessageHeader { + num_required_signatures: header + .num_required_signatures + .try_into() + .map_err(|_| "failed to parse num_required_signatures")?, + num_readonly_signed_accounts: header + .num_readonly_signed_accounts + .try_into() + .map_err(|_| "failed to parse num_readonly_signed_accounts")?, + num_readonly_unsigned_accounts: header + .num_readonly_unsigned_accounts + .try_into() + .map_err(|_| "failed to parse num_readonly_unsigned_accounts")?, + }; + + if message.recent_blockhash.len() != HASH_BYTES { + return Err("failed to parse hash"); + } + + Ok(if message.versioned { + let mut address_table_lookups = Vec::with_capacity(message.address_table_lookups.len()); + for table in message.address_table_lookups { + address_table_lookups.push(MessageAddressTableLookup { + account_key: Pubkey::try_from(table.account_key.as_slice()) + .map_err(|_| "failed to parse Pubkey")?, + writable_indexes: table.writable_indexes, + readonly_indexes: table.readonly_indexes, + }); + } + + VersionedMessage::V0(MessageV0 { + header, + account_keys: create_pubkey_vec(message.account_keys)?, + recent_blockhash: Hash::new_from_array( + <[u8; HASH_BYTES]>::try_from(message.recent_blockhash.as_slice()).unwrap(), + ), + instructions: create_message_instructions(message.instructions)?, + address_table_lookups, + }) + } else { + VersionedMessage::Legacy(Message { + header, + account_keys: create_pubkey_vec(message.account_keys)?, + recent_blockhash: Hash::new_from_array( + <[u8; HASH_BYTES]>::try_from(message.recent_blockhash.as_slice()).unwrap(), + ), + instructions: create_message_instructions(message.instructions)?, + }) + }) +} + +pub fn create_message_instructions( + ixs: Vec, +) -> CreateResult> { + ixs.into_iter().map(create_message_instruction).collect() +} + +pub fn create_message_instruction( + ix: proto::CompiledInstruction, +) -> CreateResult { + Ok(CompiledInstruction { + program_id_index: ix + .program_id_index + .try_into() + .map_err(|_| "failed to decode CompiledInstruction.program_id_index)")?, + accounts: ix.accounts, + data: ix.data, + }) +} + +pub fn create_tx_meta(meta: proto::TransactionStatusMeta) -> CreateResult { + let meta_status = match create_tx_error(meta.err.as_ref())? { + Some(err) => Err(err), + None => Ok(()), + }; + let meta_rewards = meta + .rewards + .into_iter() + .map(create_reward) + .collect::, _>>()?; + + Ok(TransactionStatusMeta { + status: meta_status, + fee: meta.fee, + pre_balances: meta.pre_balances, + post_balances: meta.post_balances, + inner_instructions: Some(create_meta_inner_instructions(meta.inner_instructions)?), + log_messages: Some(meta.log_messages), + pre_token_balances: Some(create_token_balances(meta.pre_token_balances)?), + post_token_balances: Some(create_token_balances(meta.post_token_balances)?), + rewards: Some(meta_rewards), + loaded_addresses: StatusLoadedAddresses { + writable: create_pubkey_vec(meta.loaded_writable_addresses)?, + readonly: create_pubkey_vec(meta.loaded_readonly_addresses)?, + }, + return_data: if meta.return_data_none { + None + } else { + let data = meta.return_data.ok_or("failed to get return_data")?; + Some(TransactionReturnData { + program_id: Pubkey::try_from(data.program_id.as_slice()) + .map_err(|_| "failed to parse program_id")?, + data: data.data, + }) + }, + compute_units_consumed: meta.compute_units_consumed, + cost_units: meta.cost_units, + }) +} + +pub fn create_tx_error( + err: Option<&proto::TransactionError>, +) -> CreateResult> { + err.map(|err| bincode::deserialize::(&err.err)) + .transpose() + .map_err(|_| "failed to decode TransactionError") +} + +pub fn create_meta_inner_instructions( + ixs: Vec, +) -> CreateResult> { + ixs.into_iter().map(create_meta_inner_instruction).collect() +} + +pub fn create_meta_inner_instruction( + ix: proto::InnerInstructions, +) -> CreateResult { + let mut instructions = vec![]; + for ix in ix.instructions { + instructions.push(InnerInstruction { + instruction: StatusCompiledInstruction { + program_id_index: ix + .program_id_index + .try_into() + .map_err(|_| "failed to decode CompiledInstruction.program_id_index)")?, + accounts: ix.accounts, + data: ix.data, + }, + stack_height: ix.stack_height, + }); + } + Ok(InnerInstructions { + index: ix + .index + .try_into() + .map_err(|_| "failed to decode InnerInstructions.index")?, + instructions, + }) +} + +pub fn create_rewards_obj(rewards: proto::Rewards) -> CreateResult { + Ok(RewardsAndNumPartitions { + rewards: rewards + .rewards + .into_iter() + .map(create_reward) + .collect::>()?, + num_partitions: rewards.num_partitions.map(|wrapper| wrapper.num_partitions), + }) +} + +pub fn create_reward(reward: proto::Reward) -> CreateResult { + Ok(Reward { + pubkey: reward.pubkey, + lamports: reward.lamports, + post_balance: reward.post_balance, + reward_type: match proto::RewardType::try_from(reward.reward_type) + .map_err(|_| "failed to parse reward_type")? + { + proto::RewardType::Unspecified => None, + proto::RewardType::Fee => Some(RewardType::Fee), + proto::RewardType::Rent => Some(RewardType::Rent), + proto::RewardType::Staking => Some(RewardType::Staking), + proto::RewardType::Voting => Some(RewardType::Voting), + }, + commission: if reward.commission.is_empty() { + None + } else { + Some( + reward + .commission + .parse() + .map_err(|_| "failed to parse reward commission")?, + ) + }, + commission_bps: if reward.commission_bps.is_empty() { + None + } else { + Some( + reward + .commission_bps + .parse() + .map_err(|_| "failed to parse reward commission_bps")?, + ) + }, + }) +} + +pub fn create_token_balances( + balances: Vec, +) -> CreateResult> { + let mut vec = Vec::with_capacity(balances.len()); + for balance in balances { + let ui_amount = balance + .ui_token_amount + .ok_or("failed to get ui_token_amount")?; + vec.push(TransactionTokenBalance { + account_index: balance + .account_index + .try_into() + .map_err(|_| "failed to parse account_index")?, + mint: balance.mint, + ui_token_amount: UiTokenAmount { + ui_amount: Some(ui_amount.ui_amount), + decimals: ui_amount + .decimals + .try_into() + .map_err(|_| "failed to parse decimals")?, + amount: ui_amount.amount, + ui_amount_string: ui_amount.ui_amount_string, + }, + owner: balance.owner, + program_id: balance.program_id, + }); + } + Ok(vec) +} + +pub fn create_loaded_addresses( + writable: Vec>, + readonly: Vec>, +) -> CreateResult { + Ok(LoadedAddresses { + writable: create_pubkey_vec(writable)?, + readonly: create_pubkey_vec(readonly)?, + }) +} + +pub fn create_pubkey_vec(pubkeys: Vec>) -> CreateResult> { + pubkeys + .iter() + .map(|pubkey| create_pubkey(pubkey.as_slice())) + .collect() +} + +pub fn create_pubkey(pubkey: &[u8]) -> CreateResult { + Pubkey::try_from(pubkey).map_err(|_| "failed to parse Pubkey") +} + +pub fn create_account( + mut account: proto::SubscribeUpdateAccountInfo, +) -> CreateResult<(Pubkey, Account)> { + let pubkey = create_pubkey(&account.pubkey)?; + let account_data = std::mem::take(&mut account.data); + let account = Account { + lamports: account.lamports, + data: account_data, + owner: create_pubkey(&account.owner)?, + executable: account.executable, + rent_epoch: account.rent_epoch, + }; + Ok((pubkey, account)) +} diff --git a/proto/src/convert_to.rs b/proto/src/convert_to.rs new file mode 100644 index 00000000..bb03e33b --- /dev/null +++ b/proto/src/convert_to.rs @@ -0,0 +1,320 @@ +use { + solana_clock::UnixTimestamp, + solana_message::{ + MessageHeader, VersionedMessage, compiled_instruction::CompiledInstruction, + v0::MessageAddressTableLookup, + }, + solana_message_v3::{ + MessageHeader as StatusMessageHeader, VersionedMessage as StatusVersionedMessage, + compiled_instruction::CompiledInstruction as StatusCompiledInstruction, + v0::MessageAddressTableLookup as StatusMessageAddressTableLookup, + }, + solana_pubkey::Pubkey, + solana_signature::Signature, + solana_transaction::versioned::VersionedTransaction, + solana_transaction_context::transaction::TransactionReturnData, + solana_transaction_error::TransactionError, + solana_transaction_status::{ + InnerInstruction, InnerInstructions, Reward, RewardType, TransactionStatusMeta, + TransactionTokenBalance, + }, + solana_transaction_v3::versioned::VersionedTransaction as StatusVersionedTransaction, + yellowstone_grpc_proto::prelude as proto, +}; + +pub fn create_transaction(tx: &VersionedTransaction) -> proto::Transaction { + proto::Transaction { + signatures: tx + .signatures + .iter() + .map(|signature| signature.as_ref().into()) + .collect(), + message: Some(create_message(&tx.message)), + } +} + +pub fn create_status_transaction(tx: &StatusVersionedTransaction) -> proto::Transaction { + proto::Transaction { + signatures: tx + .signatures + .iter() + .map(|signature| >::as_ref(signature).into()) + .collect(), + message: Some(match &tx.message { + StatusVersionedMessage::Legacy(message) => proto::Message { + header: Some(create_status_header(&message.header)), + account_keys: create_pubkeys(&message.account_keys), + recent_blockhash: message.recent_blockhash.to_bytes().into(), + instructions: create_status_instructions(&message.instructions), + versioned: false, + address_table_lookups: vec![], + }, + StatusVersionedMessage::V0(message) => proto::Message { + header: Some(create_status_header(&message.header)), + account_keys: create_pubkeys(&message.account_keys), + recent_blockhash: message.recent_blockhash.to_bytes().into(), + instructions: create_status_instructions(&message.instructions), + versioned: true, + address_table_lookups: create_status_lookups(&message.address_table_lookups), + }, + }), + } +} + +pub fn create_message(message: &VersionedMessage) -> proto::Message { + match message { + VersionedMessage::Legacy(message) => proto::Message { + header: Some(create_header(&message.header)), + account_keys: create_pubkeys(&message.account_keys), + recent_blockhash: message.recent_blockhash.to_bytes().into(), + instructions: create_instructions(&message.instructions), + versioned: false, + address_table_lookups: vec![], + }, + VersionedMessage::V0(message) => proto::Message { + header: Some(create_header(&message.header)), + account_keys: create_pubkeys(&message.account_keys), + recent_blockhash: message.recent_blockhash.to_bytes().into(), + instructions: create_instructions(&message.instructions), + versioned: true, + address_table_lookups: create_lookups(&message.address_table_lookups), + }, + VersionedMessage::V1(_) => unimplemented!("V1 transaction messages are not supported"), + } +} + +pub const fn create_status_header(header: &StatusMessageHeader) -> proto::MessageHeader { + proto::MessageHeader { + num_required_signatures: header.num_required_signatures as u32, + num_readonly_signed_accounts: header.num_readonly_signed_accounts as u32, + num_readonly_unsigned_accounts: header.num_readonly_unsigned_accounts as u32, + } +} + +pub const fn create_header(header: &MessageHeader) -> proto::MessageHeader { + proto::MessageHeader { + num_required_signatures: header.num_required_signatures as u32, + num_readonly_signed_accounts: header.num_readonly_signed_accounts as u32, + num_readonly_unsigned_accounts: header.num_readonly_unsigned_accounts as u32, + } +} + +pub fn create_pubkeys>(pubkeys: &[T]) -> Vec> { + pubkeys.iter().map(|key| key.as_ref().into()).collect() +} + +pub fn create_instructions(ixs: &[CompiledInstruction]) -> Vec { + ixs.iter().map(create_instruction).collect() +} + +fn create_status_instructions( + ixs: &[StatusCompiledInstruction], +) -> Vec { + ixs.iter() + .map(|ix| proto::CompiledInstruction { + program_id_index: ix.program_id_index as u32, + accounts: ix.accounts.clone(), + data: ix.data.clone(), + }) + .collect() +} + +pub fn create_instruction(ix: &CompiledInstruction) -> proto::CompiledInstruction { + proto::CompiledInstruction { + program_id_index: ix.program_id_index as u32, + accounts: ix.accounts.clone(), + data: ix.data.clone(), + } +} + +pub fn create_lookups( + lookups: &[MessageAddressTableLookup], +) -> Vec { + lookups.iter().map(create_lookup).collect() +} + +fn create_status_lookups( + lookups: &[StatusMessageAddressTableLookup], +) -> Vec { + lookups + .iter() + .map(|lookup| proto::MessageAddressTableLookup { + account_key: lookup.account_key.as_ref().into(), + writable_indexes: lookup.writable_indexes.clone(), + readonly_indexes: lookup.readonly_indexes.clone(), + }) + .collect() +} + +pub fn create_lookup(lookup: &MessageAddressTableLookup) -> proto::MessageAddressTableLookup { + proto::MessageAddressTableLookup { + account_key: >::as_ref(&lookup.account_key).into(), + writable_indexes: lookup.writable_indexes.clone(), + readonly_indexes: lookup.readonly_indexes.clone(), + } +} + +pub fn create_transaction_meta(meta: &TransactionStatusMeta) -> proto::TransactionStatusMeta { + let TransactionStatusMeta { + status, + fee, + pre_balances, + post_balances, + inner_instructions, + log_messages, + pre_token_balances, + post_token_balances, + rewards, + loaded_addresses, + return_data, + compute_units_consumed, + cost_units, + } = meta; + let err = create_transaction_error(status); + let inner_instructions_none = inner_instructions.is_none(); + let inner_instructions = inner_instructions + .as_deref() + .map(create_inner_instructions_vec) + .unwrap_or_default(); + let log_messages_none = log_messages.is_none(); + let log_messages = log_messages.clone().unwrap_or_default(); + let pre_token_balances = pre_token_balances + .as_deref() + .map(create_token_balances) + .unwrap_or_default(); + let post_token_balances = post_token_balances + .as_deref() + .map(create_token_balances) + .unwrap_or_default(); + let rewards = rewards.as_deref().map(create_rewards).unwrap_or_default(); + let loaded_writable_addresses = create_pubkeys(&loaded_addresses.writable); + let loaded_readonly_addresses = create_pubkeys(&loaded_addresses.readonly); + + proto::TransactionStatusMeta { + err, + fee: *fee, + pre_balances: pre_balances.clone(), + post_balances: post_balances.clone(), + inner_instructions, + inner_instructions_none, + log_messages, + log_messages_none, + pre_token_balances, + post_token_balances, + rewards, + loaded_writable_addresses, + loaded_readonly_addresses, + return_data: return_data.as_ref().map(create_return_data), + return_data_none: return_data.is_none(), + compute_units_consumed: *compute_units_consumed, + cost_units: *cost_units, + } +} + +pub fn create_transaction_error( + status: &Result<(), TransactionError>, +) -> Option { + match status { + Ok(()) => None, + Err(err) => Some(proto::TransactionError { + err: bincode::serialize(&err).expect("transaction error to serialize to bytes"), + }), + } +} + +pub fn create_inner_instructions_vec(ixs: &[InnerInstructions]) -> Vec { + ixs.iter().map(create_inner_instructions).collect() +} + +pub fn create_inner_instructions(instructions: &InnerInstructions) -> proto::InnerInstructions { + proto::InnerInstructions { + index: instructions.index as u32, + instructions: create_inner_instruction_vec(&instructions.instructions), + } +} + +pub fn create_inner_instruction_vec(ixs: &[InnerInstruction]) -> Vec { + ixs.iter().map(create_inner_instruction).collect() +} + +pub fn create_inner_instruction(instruction: &InnerInstruction) -> proto::InnerInstruction { + proto::InnerInstruction { + program_id_index: instruction.instruction.program_id_index as u32, + accounts: instruction.instruction.accounts.clone(), + data: instruction.instruction.data.clone(), + stack_height: instruction.stack_height, + } +} + +pub fn create_token_balances(balances: &[TransactionTokenBalance]) -> Vec { + balances.iter().map(create_token_balance).collect() +} + +pub fn create_token_balance(balance: &TransactionTokenBalance) -> proto::TokenBalance { + proto::TokenBalance { + account_index: balance.account_index as u32, + mint: balance.mint.clone(), + ui_token_amount: Some(proto::UiTokenAmount { + ui_amount: balance.ui_token_amount.ui_amount.unwrap_or_default(), + decimals: balance.ui_token_amount.decimals as u32, + amount: balance.ui_token_amount.amount.clone(), + ui_amount_string: balance.ui_token_amount.ui_amount_string.clone(), + }), + owner: balance.owner.clone(), + program_id: balance.program_id.clone(), + } +} + +pub fn create_rewards_obj(rewards: &[Reward], num_partitions: Option) -> proto::Rewards { + proto::Rewards { + rewards: create_rewards(rewards), + num_partitions: num_partitions.map(create_num_partitions), + } +} + +pub fn create_rewards(rewards: &[Reward]) -> Vec { + rewards.iter().map(create_reward).collect() +} + +pub fn create_reward(reward: &Reward) -> proto::Reward { + proto::Reward { + pubkey: reward.pubkey.clone(), + lamports: reward.lamports, + post_balance: reward.post_balance, + reward_type: create_reward_type(reward.reward_type) as i32, + commission: reward.commission.map(|c| c.to_string()).unwrap_or_default(), + commission_bps: reward + .commission_bps + .map(|c| c.to_string()) + .unwrap_or_default(), + } +} + +pub const fn create_reward_type(reward_type: Option) -> proto::RewardType { + match reward_type { + None => proto::RewardType::Unspecified, + Some(RewardType::Fee) => proto::RewardType::Fee, + Some(RewardType::Rent) => proto::RewardType::Rent, + Some(RewardType::Staking) => proto::RewardType::Staking, + Some(RewardType::Voting) => proto::RewardType::Voting, + } +} + +pub const fn create_num_partitions(num_partitions: u64) -> proto::NumPartitions { + proto::NumPartitions { num_partitions } +} + +pub fn create_return_data(return_data: &TransactionReturnData) -> proto::ReturnData { + proto::ReturnData { + program_id: return_data.program_id.to_bytes().into(), + data: return_data.data.clone(), + } +} + +pub const fn create_block_height(block_height: u64) -> proto::BlockHeight { + proto::BlockHeight { block_height } +} + +pub const fn create_timestamp(timestamp: UnixTimestamp) -> proto::UnixTimestamp { + proto::UnixTimestamp { timestamp } +} diff --git a/proto/src/lib.rs b/proto/src/lib.rs index 2156133d..79e83b53 100644 --- a/proto/src/lib.rs +++ b/proto/src/lib.rs @@ -1,8 +1,9 @@ -#[cfg(feature = "yellowstone-grpc-plugin")] -pub use yellowstone_grpc_proto::plugin; -pub use yellowstone_grpc_proto::{convert_from, convert_to, geyser, solana}; +pub use yellowstone_grpc_proto::{geyser, solana}; pub mod richat { #![allow(clippy::missing_const_for_fn)] include!(concat!(env!("OUT_DIR"), "/richat.rs")); } + +pub mod convert_from; +pub mod convert_to; diff --git a/richat/Cargo.toml b/richat/Cargo.toml index eb0c1c5a..cd7d7dca 100644 --- a/richat/Cargo.toml +++ b/richat/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "richat" -version = "10.0.0" +version = "11.0.0" authors = { workspace = true } edition = { workspace = true } description = "Richat App" @@ -46,9 +46,11 @@ signal-hook = { workspace = true } smallvec = { workspace = true } solana-account = { workspace = true } solana-account-decoder = { workspace = true } +solana-account-v3 = { workspace = true } solana-clock = { workspace = true } solana-commitment-config = { workspace = true } solana-message = { workspace = true } +solana-message-v3 = { workspace = true } solana-nohash-hasher = { workspace = true } solana-pubkey = { workspace = true } solana-rpc-client-api = { workspace = true } @@ -56,6 +58,7 @@ solana-signature = { workspace = true } solana-transaction = { workspace = true } solana-transaction-error = { workspace = true } solana-transaction-status = { workspace = true } +solana-transaction-v3 = { workspace = true } solana-version = { workspace = true } spl-token-2022-interface = { workspace = true } thiserror = { workspace = true } diff --git a/richat/src/channel.rs b/richat/src/channel.rs index 1a03dd30..651d2d52 100644 --- a/richat/src/channel.rs +++ b/richat/src/channel.rs @@ -639,10 +639,10 @@ impl Sender { let block_message = slot_info.get_block_message(&message); for message in [Some(message), block_message].into_iter().flatten() { - if let Some(messages) = &mut replay.messages { - if !messages.insert(message.get_id(self.hasher.build_hasher())) { - continue; - } + if let Some(messages) = &mut replay.messages + && !messages.insert(message.get_id(self.hasher.build_hasher())) + { + continue; } // update metrics, push messages to confirmed / finalized @@ -683,11 +683,11 @@ impl Sender { // push messages to confirmed if msg.status() == SlotStatus::SlotConfirmed { self.slot_confirmed = slot; - if let Some(shared) = self.confirmed.as_mut() { - if let Some(slot_info) = self.slots.get(&slot) { - for message in slot_info.get_messages_cloned() { - shared.push(slot, message, None); - } + if let Some(shared) = self.confirmed.as_mut() + && let Some(slot_info) = self.slots.get(&slot) + { + for message in slot_info.get_messages_cloned() { + shared.push(slot, message, None); } } } @@ -697,38 +697,38 @@ impl Sender { clean_after_finalized = true; self.slot_finalized = slot; self.global_replay_from_slot.store(slot + 1); - if let Some(shared) = self.finalized.as_mut() { - if let Some(mut slot_info) = self.slots.remove(&slot) { - for message in slot_info.get_messages_owned() { - shared.push(slot, message, None); - } + if let Some(shared) = self.finalized.as_mut() + && let Some(mut slot_info) = self.slots.remove(&slot) + { + for message in slot_info.get_messages_owned() { + shared.push(slot, message, None); } } } } else { // push to confirmed (if we received SlotStatus or message after it) - if slot <= self.slot_confirmed { - if let Some(shared) = self.confirmed.as_mut() { - shared.push(slot, message.clone(), None); - } + if slot <= self.slot_confirmed + && let Some(shared) = self.confirmed.as_mut() + { + shared.push(slot, message.clone(), None); } } // push to storage let mut replay_index = None; - if let Some(storage) = &self.storage { - if !matches!(&message, ParsedMessage::Block(_)) { - storage.push_message( - slot_init, - slot, - slot_index_head, - self.index, - message.clone(), - ); - slot_init = false; - replay_index = Some(self.index); - self.index += 1; - } + if let Some(storage) = &self.storage + && !matches!(&message, ParsedMessage::Block(_)) + { + storage.push_message( + slot_init, + slot, + slot_index_head, + self.index, + message.clone(), + ); + slot_init = false; + replay_index = Some(self.index); + self.index += 1; } // push to processed @@ -754,16 +754,16 @@ impl Sender { } } while replay_lock.len() > self.storage_max_slots { - if let Some((slot, _replay)) = replay_lock.pop_first() { - if let Some(storage) = &self.storage { - let until = replay_lock - .values() - .take(300) - .map(|replay| replay.head) - .min(); - - storage.trim_messages(slot, until); - } + if let Some((slot, _replay)) = replay_lock.pop_first() + && let Some(storage) = &self.storage + { + let until = replay_lock + .values() + .take(300) + .map(|replay| replay.head) + .min(); + + storage.trim_messages(slot, until); } } } @@ -1173,13 +1173,13 @@ impl SlotInfo { fn get_block_message(&mut self, message: &ParsedMessage) -> Option { // mark as landed - if let ParsedMessage::Slot(message) = message { - if matches!( + if let ParsedMessage::Slot(message) = message + && matches!( message.status(), SlotStatus::SlotConfirmed | SlotStatus::SlotFinalized - ) { - self.landed = true; - } + ) + { + self.landed = true; } // report error if block already created @@ -1247,38 +1247,37 @@ impl SlotInfo { } // attempt to create Block - if let Some(block_meta) = &self.block_meta { - if block_meta.executed_transaction_count() as usize == self.transactions_count - && block_meta.entries_count() as usize == self.entries_count - { - self.block_created = true; - - let accounts = self - .messages - .iter() - .filter_map(|item| item.as_ref().and_then(|item| item.get_account())) - .collect(); - let transactions = self - .messages - .iter() - .filter_map(|item| item.as_ref().and_then(|item| item.get_transaction())) - .collect(); - let entries = self - .messages - .iter() - .filter_map(|item| item.as_ref().and_then(|item| item.get_entry())) - .collect(); - let block = ParsedMessage::Block(Arc::new(Message::unchecked_create_block( - accounts, - transactions, - entries, - Arc::clone(block_meta), - block_meta.created_at(), - ))); - self.messages.push(Some(block.clone())); - - return Some(block); - } + if let Some(block_meta) = &self.block_meta + && block_meta.executed_transaction_count() as usize == self.transactions_count + && block_meta.entries_count() as usize == self.entries_count + { + self.block_created = true; + + let accounts = self + .messages + .iter() + .filter_map(|item| item.as_ref().and_then(|item| item.get_account())) + .collect(); + let transactions = self + .messages + .iter() + .filter_map(|item| item.as_ref().and_then(|item| item.get_transaction())) + .collect(); + let entries = self + .messages + .iter() + .filter_map(|item| item.as_ref().and_then(|item| item.get_entry())) + .collect(); + let block = ParsedMessage::Block(Arc::new(Message::unchecked_create_block( + accounts, + transactions, + entries, + Arc::clone(block_meta), + block_meta.created_at(), + ))); + self.messages.push(Some(block.clone())); + + return Some(block); } None diff --git a/richat/src/pubsub/filter.rs b/richat/src/pubsub/filter.rs index 055073c7..c8ff69f5 100644 --- a/richat/src/pubsub/filter.rs +++ b/richat/src/pubsub/filter.rs @@ -37,22 +37,22 @@ impl Hash for TransactionFilter { impl TransactionFilter { pub fn matches(&self, message: &MessageTransaction) -> bool { - if let Some(vote) = self.vote { - if vote != message.vote() { - return false; - } + if let Some(vote) = self.vote + && vote != message.vote() + { + return false; } - if let Some(failed) = self.failed { - if failed != message.failed() { - return false; - } + if let Some(failed) = self.failed + && failed != message.failed() + { + return false; } - if let Some(filter_signature) = &self.signature { - if filter_signature.as_ref() != message.signature_ref() { - return false; - } + if let Some(filter_signature) = &self.signature + && filter_signature.as_ref() != message.signature_ref() + { + return false; } if !self.account_include.is_empty() diff --git a/richat/src/pubsub/notification.rs b/richat/src/pubsub/notification.rs index aaabc501..dd69ee94 100644 --- a/richat/src/pubsub/notification.rs +++ b/richat/src/pubsub/notification.rs @@ -10,9 +10,8 @@ use { richat_shared::five8::signature_encode, serde::Serialize, solana_clock::Slot, - solana_message::{VersionedMessage, v0::LoadedMessage}, + solana_message_v3::{VersionedMessage, v0::LoadedMessage}, solana_rpc_client_api::response::{Response as RpcResponse, RpcResponseContext}, - solana_transaction::versioned::TransactionVersion, solana_transaction_status::{ BlockEncodingOptions, EncodeError, EncodedTransaction, EncodedTransactionWithStatusMeta, TransactionDetails, TransactionStatusMeta, UiAccountsList, UiConfirmedBlock, @@ -20,6 +19,7 @@ use { option_serializer::OptionSerializer, parse_accounts::{parse_legacy_message_accounts, parse_v0_message_accounts}, }, + solana_transaction_v3::versioned::TransactionVersion, std::{ collections::VecDeque, sync::{Arc, Weak}, diff --git a/richat/src/pubsub/server.rs b/richat/src/pubsub/server.rs index 52279d0d..57d49a49 100644 --- a/richat/src/pubsub/server.rs +++ b/richat/src/pubsub/server.rs @@ -311,7 +311,7 @@ impl PubSubServer { let version = solana_version::Version::default(); Ok(serde_json::to_value(&RpcVersionInfo { solana_core: version.to_string(), - feature_set: Some(version.feature_set), + feature_set: Some(version.feature_set()), }) .expect("json serialization never fail")) }, @@ -383,15 +383,15 @@ impl PubSubServer { }, message = notifications.recv() => match message { Ok(notification) if subscriptions.contains_key(¬ification.subscription_id) => { - if notification.is_final { - if let Some(method) = subscriptions.remove(¬ification.subscription_id) { - gauge!( - metrics::PUBSUB_SUBSCRIPTIONS_TOTAL, - "x_subscription_id" => Arc::clone(&x_subscription_id), - "method" => method.as_str() - ) - .decrement(1); - } + if notification.is_final + && let Some(method) = subscriptions.remove(¬ification.subscription_id) + { + gauge!( + metrics::PUBSUB_SUBSCRIPTIONS_TOTAL, + "x_subscription_id" => Arc::clone(&x_subscription_id), + "method" => method.as_str() + ) + .decrement(1); } match notification.json.upgrade() { diff --git a/richat/src/pubsub/solana.rs b/richat/src/pubsub/solana.rs index 496e42a5..c88eb7ad 100644 --- a/richat/src/pubsub/solana.rs +++ b/richat/src/pubsub/solana.rs @@ -514,13 +514,13 @@ impl SubscribeConfig { message.account_keys().iter().any(|key| key == pubkey) } }; - if filtered { - if let (Ok(error), Ok(tx_meta)) = ( + if filtered + && let (Ok(error), Ok(tx_meta)) = ( convert_from::create_tx_error(message.error().as_ref()), message.transaction_meta(), - ) { - return Some((error, tx_meta.log_messages.clone())); - } + ) + { + return Some((error, tx_meta.log_messages.clone())); } } None @@ -632,12 +632,12 @@ fn param_filters( if let Err(error) = filter.verify() { return Err(invalid_params(error.to_string())); } - if let RpcFilterType::Memcmp(memcmp) = &mut filter { - if let Err(error) = memcmp.convert_to_raw_bytes() { - return Err(invalid_params(format!( - "Invalid Request: failed to decode memcmp filter: {error}" - ))); - } + if let RpcFilterType::Memcmp(memcmp) = &mut filter + && let Err(error) = memcmp.convert_to_raw_bytes() + { + return Err(invalid_params(format!( + "Invalid Request: failed to decode memcmp filter: {error}" + ))); } verified_filters.push(filter); } @@ -657,14 +657,14 @@ where } fn expect_no_params(params: Option>) -> Result<(), ErrorObjectOwned> { - if let Some(params) = params { - if params.get().trim() != "[]" { - return Err(ErrorObject::owned( - ErrorCode::InvalidParams.code(), - "Invalid parameters: No parameters were expected", - Some(format!("{params:?}")), - )); - } + if let Some(params) = params + && params.get().trim() != "[]" + { + return Err(ErrorObject::owned( + ErrorCode::InvalidParams.code(), + "Invalid parameters: No parameters were expected", + Some(format!("{params:?}")), + )); } Ok(()) diff --git a/richat/src/pubsub/tracker.rs b/richat/src/pubsub/tracker.rs index 317fd782..ff1786f2 100644 --- a/richat/src/pubsub/tracker.rs +++ b/richat/src/pubsub/tracker.rs @@ -17,13 +17,15 @@ use { ThreadPoolBuilder, iter::{IntoParallelIterator, ParallelIterator}, }, - richat_filter::message::{MessageSlot, MessageTransaction}, + richat_filter::message::{MessageAccount, MessageSlot, MessageTransaction}, richat_proto::{convert_from, geyser::SlotStatus}, richat_shared::five8::{pubkey_encode, signature_encode}, solana_account_decoder::encode_ui_account, + solana_account_v3::ReadableAccount as StatusReadableAccount, solana_clock::Slot, solana_commitment_config::CommitmentLevel, solana_nohash_hasher::IntMap, + solana_pubkey::Pubkey, solana_rpc_client_api::response::{ ProcessedSignatureResult, RpcKeyedAccount, RpcLogsResponse, RpcSignatureResult, SlotInfo, SlotTransactionStats, SlotUpdate, @@ -39,6 +41,30 @@ use { tokio::sync::oneshot, }; +struct UiReadableAccount<'a>(&'a MessageAccount); + +impl StatusReadableAccount for UiReadableAccount<'_> { + fn lamports(&self) -> u64 { + solana_account::ReadableAccount::lamports(self.0) + } + + fn data(&self) -> &[u8] { + solana_account::ReadableAccount::data(self.0) + } + + fn owner(&self) -> &Pubkey { + solana_account::ReadableAccount::owner(self.0) + } + + fn executable(&self) -> bool { + solana_account::ReadableAccount::executable(self.0) + } + + fn rent_epoch(&self) -> u64 { + solana_account::ReadableAccount::rent_epoch(self.0) + } +} + #[allow(clippy::large_enum_variant)] #[derive(Debug)] pub enum ClientRequest { @@ -154,24 +180,18 @@ impl Subscriptions { signature, commitment, } = &config + && let Some((slot, err)) = signatures.get(signature, commitment.commitment) { - if let Some((slot, err)) = signatures.get(signature, commitment.commitment) { - is_final = true; - let json = RpcNotification::serialize_with_context( - "signatureNotification", - subscription_id, - slot, - RpcSignatureResult::ProcessedSignature(ProcessedSignatureResult { - err: err.map(Into::into), - }), - ); - notifications.push( - subscription_id, - SubscribeMethod::Signature, - is_final, - json, - ); - } + is_final = true; + let json = RpcNotification::serialize_with_context( + "signatureNotification", + subscription_id, + slot, + RpcSignatureResult::ProcessedSignature(ProcessedSignatureResult { + err: err.map(Into::into), + }), + ); + notifications.push(subscription_id, SubscribeMethod::Signature, is_final, json); } if !is_final { @@ -365,10 +385,10 @@ pub fn subscriptions_worker( if let Some(message) = receiver.try_recv(commitment, *head)? { *head += 1; // ignore Slot messages for any commitment except processed - if commitment != CommitmentLevel::Processed { - if let ParsedMessage::Slot(_) = &message { - continue; - } + if commitment != CommitmentLevel::Processed + && let ParsedMessage::Slot(_) = &message + { + continue; } messages.push(message); } else { @@ -376,8 +396,8 @@ pub fn subscriptions_worker( } } for message in messages.iter() { - if commitment == CommitmentLevel::Processed { - if let Some((message, stats)) = match &message { + if commitment == CommitmentLevel::Processed + && let Some((message, stats)) = match &message { ParsedMessage::Slot(message) if message.status() == SlotStatus::SlotProcessed => { @@ -437,9 +457,9 @@ pub fn subscriptions_worker( ) } _ => None, - } { - messages_extra.push((message, stats)); } + { + messages_extra.push((message, stats)); } for method in SubscribeMethod::get_message_methods(message) { @@ -484,7 +504,7 @@ pub fn subscriptions_worker( message.slot(), encode_ui_account( message.pubkey(), - message.as_ref(), + &UiReadableAccount(message.as_ref()), encoding, None, data_slice, @@ -505,7 +525,7 @@ pub fn subscriptions_worker( pubkey: pubkey_encode(&(*message.pubkey()).to_bytes()), // TODO: use `.as_bytes()` from 2.2 account: encode_ui_account( message.pubkey(), - message.as_ref(), + &UiReadableAccount(message.as_ref()), encoding, None, data_slice, diff --git a/richat/src/storage/mod.rs b/richat/src/storage/mod.rs index 852c44fc..5729cb69 100644 --- a/richat/src/storage/mod.rs +++ b/richat/src/storage/mod.rs @@ -404,10 +404,10 @@ impl ReplayQueue { fn pop_next(queue: &Mutex, prev_request: Option) -> Option { let mut locked = mutex_lock(queue); - if locked.len > 0 { - if let Some(request) = prev_request { - locked.requests.push_back(request); - } + if locked.len > 0 + && let Some(request) = prev_request + { + locked.requests.push_back(request); } locked.requests.pop_front() } diff --git a/richat/src/storage/segments.rs b/richat/src/storage/segments.rs index 9cfdb797..496928c1 100644 --- a/richat/src/storage/segments.rs +++ b/richat/src/storage/segments.rs @@ -303,10 +303,10 @@ impl PendingChunkMeta { first_index: head, }); } - if let ParsedMessage::Slot(message) = message { - if message.status() == SlotStatus::SlotFinalized { - self.pending_finalized.insert(slot); - } + if let ParsedMessage::Slot(message) = message + && message.status() == SlotStatus::SlotFinalized + { + self.pending_finalized.insert(slot); } self.record_count += 1; @@ -785,12 +785,12 @@ impl SegmentWriter { let mut updated_slots = Vec::with_capacity(pending_finalized.len()); for slot in pending_finalized { - if let Some(meta) = catalog.slots.get(slot) { - if !new_slots.iter().any(|new_meta| new_meta.slot == *slot) { - let mut meta = *meta; - meta.finalized = true; - updated_slots.push(meta); - } + if let Some(meta) = catalog.slots.get(slot) + && !new_slots.iter().any(|new_meta| new_meta.slot == *slot) + { + let mut meta = *meta; + meta.finalized = true; + updated_slots.push(meta); } } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index e32c3c1f..07701953 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "1.86.0" # agave v3.0 +channel = "1.93.1" # agave v4.0 components = ["clippy", "rustfmt"] targets = [] profile = "minimal" diff --git a/shared/Cargo.toml b/shared/Cargo.toml index 2e13ae52..5d08c2d5 100644 --- a/shared/Cargo.toml +++ b/shared/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "richat-shared" -version = "8.0.1" +version = "9.0.0" authors = { workspace = true } edition = { workspace = true } description = "Richat Shared code" diff --git a/shared/src/config.rs b/shared/src/config.rs index b078346e..6cf7501d 100644 --- a/shared/src/config.rs +++ b/shared/src/config.rs @@ -358,22 +358,21 @@ pub fn parse_taskset(taskset: &str) -> Result, String> { let mut vec = set.into_iter().collect::>(); vec.sort(); - if !vec.is_empty() { - if let Some(cores) = affinity_linux::get_thread_affinity() + if !vec.is_empty() + && let Some(cores) = affinity_linux::get_thread_affinity() .map_err(|error| format!("failed to get allowed cpus: {error:?}"))? - { - let mut cores = cores.into_iter().collect::>(); - cores.sort(); - - for core in vec.iter_mut() { - if let Some(actual_core) = cores.get(*core) { - *core = *actual_core; - } else { - return Err(format!( - "we don't have core {core}, available cores: {:?}", - (0..cores.len()).collect::>() - )); - } + { + let mut cores = cores.into_iter().collect::>(); + cores.sort(); + + for core in vec.iter_mut() { + if let Some(actual_core) = cores.get(*core) { + *core = *actual_core; + } else { + return Err(format!( + "we don't have core {core}, available cores: {:?}", + (0..cores.len()).collect::>() + )); } } } diff --git a/shared/src/transports/quic.rs b/shared/src/transports/quic.rs index d3c9704b..4c07f8a2 100644 --- a/shared/src/transports/quic.rs +++ b/shared/src/transports/quic.rs @@ -255,26 +255,26 @@ impl QuicServer { let mut next_message: Option = None; let mut set = JoinSet::new(); loop { - if msg_id - msg_ids.first().copied().unwrap_or(msg_id) < max_backlog { - if let Some(message) = next_message.take() { - if let Some(mut stream) = streams.pop_front() { - msg_ids.insert(msg_id); - set.spawn(async move { - WriteVectored::new( - &mut stream, - &mut [ - IoSlice::new(&msg_id.to_be_bytes()), - IoSlice::new(&(message.len() as u64).to_be_bytes()), - IoSlice::new(&message), - ], - ) - .await?; - Ok::<_, ConnectionError>((msg_id, stream)) - }); - msg_id += 1; - } else { - next_message = Some(message); - } + if msg_id - msg_ids.first().copied().unwrap_or(msg_id) < max_backlog + && let Some(message) = next_message.take() + { + if let Some(mut stream) = streams.pop_front() { + msg_ids.insert(msg_id); + set.spawn(async move { + WriteVectored::new( + &mut stream, + &mut [ + IoSlice::new(&msg_id.to_be_bytes()), + IoSlice::new(&(message.len() as u64).to_be_bytes()), + IoSlice::new(&message), + ], + ) + .await?; + Ok::<_, ConnectionError>((msg_id, stream)) + }); + msg_id += 1; + } else { + next_message = Some(message); } } @@ -371,21 +371,21 @@ impl QuicServer { } = Message::decode(buf.as_slice())?; // verify access token - if !x_tokens.is_empty() { - if let Some(error) = match x_token { + if !x_tokens.is_empty() + && let Some(error) = match x_token { Some(x_token) if !x_tokens.contains(&x_token) => { Some(QuicSubscribeResponseError::XTokenInvalid as i32) } None => Some(QuicSubscribeResponseError::XTokenRequired as i32), _ => None, - } { - let msg = QuicSubscribeResponse { - error: Some(error), - version, - ..Default::default() - }; - return Ok((send, msg, None)); } + { + let msg = QuicSubscribeResponse { + error: Some(error), + version, + ..Default::default() + }; + return Ok((send, msg, None)); } // validate number of streams