From 34082dae226525c811fb00f5f5ac17753a1d7787 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Tue, 29 Oct 2024 16:15:23 +0000 Subject: [PATCH 01/18] slashing: add duplicate block proof verification --- Cargo.lock | 2622 +++++++++-------- Cargo.toml | 1 + slashing/README.md | 0 slashing/program/Cargo.toml | 44 + slashing/program/program-id.md | 1 + slashing/program/src/duplicate_block_proof.rs | 830 ++++++ slashing/program/src/entrypoint.rs | 14 + slashing/program/src/error.rs | 67 + slashing/program/src/instruction.rs | 146 + slashing/program/src/lib.rs | 16 + slashing/program/src/processor.rs | 68 + slashing/program/src/shred.rs | 567 ++++ slashing/program/src/state.rs | 77 + .../program/tests/duplicate_block_proof.rs | 375 +++ 14 files changed, 3600 insertions(+), 1228 deletions(-) create mode 100644 slashing/README.md create mode 100644 slashing/program/Cargo.toml create mode 100644 slashing/program/program-id.md create mode 100644 slashing/program/src/duplicate_block_proof.rs create mode 100644 slashing/program/src/entrypoint.rs create mode 100644 slashing/program/src/error.rs create mode 100644 slashing/program/src/instruction.rs create mode 100644 slashing/program/src/lib.rs create mode 100644 slashing/program/src/processor.rs create mode 100644 slashing/program/src/shred.rs create mode 100644 slashing/program/src/state.rs create mode 100644 slashing/program/tests/duplicate_block_proof.rs diff --git a/Cargo.lock b/Cargo.lock index 75ef8f54db7..05bdcc744b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,19 +14,13 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "adler2" version = "2.0.0" @@ -40,7 +34,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -71,21 +65,21 @@ dependencies = [ [[package]] name = "agave-geyser-plugin-interface" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9291468d48d46cfe92d7807990e19c6ee9a07b05a75cda5e118f48597e079391" +checksum = "cc887155df02ede1681894dfb0e0faa64eb13e82d58c99098d7402fce84c0f79" dependencies = [ "log", "solana-sdk", "solana-transaction-status", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "agave-transaction-view" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a249374d6349eeb31348a849666f3d47cacb18e0e05454fbd11a1fc69fae8e7e" +checksum = "b61f7e5b7ba82d8e2ba3f21feb3824ac4066fcf1308be45379e40777cef7ab16" dependencies = [ "solana-sdk", "solana-svm-transaction", @@ -97,7 +91,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.15", "once_cell", "version_check", ] @@ -109,7 +103,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if 1.0.0", - "getrandom 0.2.10", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -117,42 +111,33 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - -[[package]] -name = "aho-corasick" -version = "1.0.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "alloc-no-stdlib" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] name = "alloc-stdlib" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697ed7edc0f1711de49ce108c541623a0af97c6c60b2f6e2b65229847ac843c2" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ "alloc-no-stdlib", ] [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" [[package]] name = "android-tzdata" @@ -180,9 +165,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -195,43 +180,43 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.2" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.1" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.91" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" [[package]] name = "approx" @@ -253,7 +238,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -267,9 +252,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.5.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] name = "ark-bn254" @@ -326,7 +311,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -339,7 +324,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -375,7 +360,7 @@ checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -408,9 +393,9 @@ checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" [[package]] name = "asn1-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ "asn1-rs-derive", "asn1-rs-impl", @@ -418,7 +403,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror 1.0.68", + "thiserror 1.0.69", "time", ] @@ -430,8 +415,8 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", - "synstructure", + "syn 1.0.109", + "synstructure 0.12.6", ] [[package]] @@ -442,7 +427,7 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -452,10 +437,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1835b7f27878de8525dc71410b5a31cdcc5f230aed5ba5df968e09c201b23d" dependencies = [ "anstyle", - "bstr 1.6.0", + "bstr", "doc-comment", "libc", - "predicates 3.0.3", + "predicates 3.1.2", "predicates-core", "predicates-tree", "wait-timeout", @@ -474,15 +459,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ "concurrent-queue", - "event-listener 2.5.2", + "event-listener 2.5.3", "futures-core", ] [[package]] name = "async-compression" -version = "0.4.4" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f658e2baef915ba0f26f1f7c42bfb8e12f532a01f449a090ded75ae7a07e9ba2" +checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" dependencies = [ "brotli", "flate2", @@ -505,23 +490,24 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.3" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", + "pin-project-lite", ] [[package]] name = "async-stream-impl" -version = "0.3.3" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.89", ] [[package]] @@ -532,7 +518,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -548,15 +534,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "autotools" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8138adefca3e5d2e73bfba83bd6eeaf904b26a7ac1b4a19892cfe16cc7e1701" +checksum = "ef941527c41b0fc0dd48511a8154cd5fc7e29200a0ff8b7203c5d777dbc795cf" dependencies = [ "cc", ] @@ -613,7 +599,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ "futures-core", - "getrandom 0.2.10", + "getrandom 0.2.15", "instant", "pin-project-lite", "rand 0.8.5", @@ -622,17 +608,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if 1.0.0", "libc", - "miniz_oxide 0.7.1", + "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -643,9 +629,9 @@ checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" @@ -682,9 +668,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.69.4" +version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ "bitflags 2.6.0", "cexpr", @@ -697,14 +683,14 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "bit-set" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ "bit-vec", ] @@ -753,25 +739,13 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -dependencies = [ - "block-padding", - "byte-tools", - "byteorder", - "generic-array 0.12.4", -] - [[package]] name = "block-buffer" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -780,25 +754,16 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "block-padding" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" -dependencies = [ - "byte-tools", + "generic-array", ] [[package]] name = "borsh" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +checksum = "115e54d64eb62cdebad391c19efc9dce4981c690c85a33a12199d99bb9546fee" dependencies = [ - "borsh-derive 0.10.3", + "borsh-derive 0.10.4", "hashbrown 0.13.2", ] @@ -814,15 +779,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +checksum = "831213f80d9423998dd696e2c5345aba6be7a0bd8cd19e31c5243e13df1cef89" dependencies = [ "borsh-derive-internal", "borsh-schema-derive-internal", "proc-macro-crate 0.1.5", "proc-macro2", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -832,39 +797,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" dependencies = [ "once_cell", - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "borsh-derive-internal" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +checksum = "65d6ba50644c98714aa2a70d13d7df3cd75cd2b523a2b452bf010443800976b3" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "borsh-schema-derive-internal" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +checksum = "276691d96f063427be83e6692b86148e488ebba9f48f77788724ca027ba3b6d4" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "brotli" -version = "3.3.4" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -873,9 +838,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.2" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -892,29 +857,20 @@ dependencies = [ [[package]] name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "memchr", -] - -[[package]] -name = "bstr" -version = "1.6.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05" +checksum = "1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22" dependencies = [ "memchr", - "regex-automata 0.3.0", + "regex-automata", "serde", ] [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bv" @@ -926,12 +882,6 @@ dependencies = [ "serde", ] -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - [[package]] name = "bytemuck" version = "1.20.0" @@ -949,7 +899,7 @@ checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -992,7 +942,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" dependencies = [ "libc", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -1009,16 +959,16 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 1.0.107", + "syn 1.0.109", "tempfile", "toml", ] [[package]] name = "cc" -version = "1.1.31" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ "jobserver", "libc", @@ -1066,7 +1016,7 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1112,13 +1062,13 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.3.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cc00842eed744b858222c4c9faf7243aafc6d33f92f96935263ef4d8a41ce21" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", - "libloading", + "libloading 0.8.5", ] [[package]] @@ -1132,7 +1082,7 @@ dependencies = [ "bitflags 1.3.2", "strsim 0.8.0", "textwrap 0.11.0", - "unicode-width", + "unicode-width 0.1.14", "vec_map", ] @@ -1150,29 +1100,29 @@ dependencies = [ "once_cell", "strsim 0.10.0", "termcolor", - "textwrap 0.16.0", + "textwrap 0.16.1", ] [[package]] name = "clap" -version = "4.4.8" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2275f18819641850fa26c89acc84d465c1bf91ce57bc2748b28c420473352f64" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" dependencies = [ "clap_builder", - "clap_derive 4.4.7", + "clap_derive 4.5.18", ] [[package]] name = "clap_builder" -version = "4.4.8" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07cdf1b148b25c1e1f7a42225e30a0d99a615cd4637eae7365548dd4529b95bc" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" dependencies = [ "anstream", "anstyle", - "clap_lex 0.6.0", - "strsim 0.10.0", + "clap_lex 0.7.3", + "strsim 0.11.1", ] [[package]] @@ -1185,19 +1135,19 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "clap_derive" -version = "4.4.7" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1211,25 +1161,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "combine" @@ -1272,7 +1212,7 @@ dependencies = [ "encode_unicode", "lazy_static", "libc", - "unicode-width", + "unicode-width 0.1.14", "windows-sys 0.52.0", ] @@ -1298,9 +1238,9 @@ dependencies = [ [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "convert_case" @@ -1310,9 +1250,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -1320,9 +1260,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core_affinity" @@ -1338,18 +1278,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.3.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if 1.0.0", ] @@ -1365,33 +1305,28 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if 1.0.0", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.5" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "cfg-if 1.0.0", "crossbeam-utils", - "lazy_static", - "memoffset 0.6.5", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -1405,7 +1340,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core 0.6.4", "typenum", ] @@ -1416,7 +1351,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.7", + "generic-array", "subtle", ] @@ -1468,58 +1403,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", -] - -[[package]] -name = "cxx" -version = "1.0.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b7d4e43b25d3c994662706a1d4fcfc32aaa6afd287502c111b237093bb23f3a" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f8829ddc213e2c1368e51a2564c552b65a8cb6a28f31e576270ac81d5e5827" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 1.0.107", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e72537424b474af1460806647c41d4b6d35d09ef7fe031c5c2fa5766047cc56a" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "309e4fb93eed90e1e14bea0da16b209f81813ba9fc7830c20ed151dd7bc0a4d7" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.107", + "syn 2.0.89", ] [[package]] name = "darling" -version = "0.20.3" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ "darling_core", "darling_macro", @@ -1527,27 +1418,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.3" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 2.0.87", + "strsim 0.11.1", + "syn 2.0.89", ] [[package]] name = "darling_macro" -version = "0.20.3" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1560,21 +1451,21 @@ dependencies = [ "hashbrown 0.14.5", "lock_api", "once_cell", - "parking_lot_core 0.9.9", + "parking_lot_core 0.9.10", "rayon", ] [[package]] name = "data-encoding" -version = "2.3.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "der-parser" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ "asn1-rs", "displaydoc", @@ -1608,31 +1499,31 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "derive_arbitrary" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d475dfebcb4854d596b17b09f477616f80f17a550517f2b3615d8c205d5c802b" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 1.0.107", + "syn 2.0.89", ] [[package]] @@ -1653,22 +1544,13 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - [[package]] name = "digest" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -1714,13 +1596,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.3" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.89", ] [[package]] @@ -1743,7 +1625,7 @@ checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1766,9 +1648,9 @@ checksum = "abe71d579d1812060163dff96056261deb5bf6729b100fa2e36a68b9649ba3d3" [[package]] name = "ed25519" -version = "1.3.0" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e1069e39f1454367eb2de793ed062fac4c35c2934b76a81d90dd9abcd28816" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" dependencies = [ "signature", ] @@ -1801,21 +1683,21 @@ dependencies = [ [[package]] name = "educe" -version = "0.4.18" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f86b50932a01e7ec5c06160492ab660fb19b6bb2a7878030dd6cd68d21df9d4d" +checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "either" -version = "1.9.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encode_unicode" @@ -1825,9 +1707,9 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "encoding_rs" -version = "0.8.30" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if 1.0.0", ] @@ -1843,26 +1725,26 @@ dependencies = [ [[package]] name = "enum-iterator-derive" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cdc46ec28bd728e67540c528013c6a10eb69a02eb31078a1bda695438cbfb8" +checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "enum-ordinalize" -version = "3.1.10" +version = "3.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b166c9e378360dd5a6666a9604bb4f54ae0cac39023ffbac425e917a2a04fef" +checksum = "1bf1fa3f06bbff1ea5b1a9c7b14aa992a39657db60a2759457328d7e058f49ee" dependencies = [ "num-bigint 0.4.6", "num-traits", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.89", ] [[package]] @@ -1874,7 +1756,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1898,9 +1780,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1908,12 +1790,9 @@ dependencies = [ [[package]] name = "escape8259" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4911e3666fcd7826997b4745c8224295a6f3072f1418c3067b97a67557ee" -dependencies = [ - "rustversion", -] +checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" [[package]] name = "etcd-client" @@ -1933,9 +1812,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" @@ -1958,12 +1837,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" - [[package]] name = "fast-math" version = "0.1.1" @@ -1975,9 +1848,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" [[package]] name = "feature-probe" @@ -1993,14 +1866,14 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" -version = "0.2.15" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.2.10", - "winapi 0.3.9", + "libredox", + "windows-sys 0.59.0", ] [[package]] @@ -2020,9 +1893,9 @@ checksum = "94474d15a76982be62ca8a39570dccce148d98c238ebb7408b0a21b2c4bdddc4" [[package]] name = "fixedbitset" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flash_loan_receiver" @@ -2035,12 +1908,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.34" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", - "miniz_oxide 0.8.0", + "miniz_oxide", ] [[package]] @@ -2157,7 +2030,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -2197,15 +2070,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -2242,9 +2106,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -2255,27 +2119,27 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.8" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ - "aho-corasick 0.7.18", - "bstr 0.2.17", - "fnv", + "aho-corasick", + "bstr", "log", - "regex", + "regex-automata", + "regex-syntax", ] [[package]] @@ -2309,7 +2173,7 @@ dependencies = [ "futures-timer", "no-std-compat", "nonzero_ext", - "parking_lot 0.12.0", + "parking_lot 0.12.3", "portable-atomic", "quanta", "rand 0.8.5", @@ -2332,7 +2196,7 @@ dependencies = [ "indexmap 2.6.0", "slab", "tokio", - "tokio-util 0.7.1", + "tokio-util 0.7.12", "tracing", ] @@ -2375,24 +2239,23 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "headers" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cff78e5788be1e0ab65b04d306b2ed5092c815ec97ec70f4ebd5aee158aa55d" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64 0.13.0", - "bitflags 1.3.2", + "base64 0.21.7", "bytes", "headers-core", "http", "httpdate", "mime", - "sha-1 0.10.0", + "sha1", ] [[package]] @@ -2491,10 +2354,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.7", + "generic-array", "hmac 0.8.1", ] +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "honggfuzz" version = "0.5.56" @@ -2503,7 +2375,7 @@ checksum = "7c76b6234c13c9ea73946d1379d33186151148e0da231506b964b44f3d023505" dependencies = [ "arbitrary", "lazy_static", - "memmap2 0.9.4", + "memmap2 0.9.5", "rustc_version", ] @@ -2520,9 +2392,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -2531,15 +2403,15 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -2591,9 +2463,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http", @@ -2630,26 +2502,143 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.51" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi 0.3.9", + "windows-core", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ - "cxx", - "cxx-build", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", ] [[package]] @@ -2671,12 +2660,23 @@ dependencies = [ [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -2703,18 +2703,18 @@ dependencies = [ [[package]] name = "include_dir" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" dependencies = [ "include_dir_macros", ] [[package]] name = "include_dir_macros" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" dependencies = [ "proc-macro2", "quote", @@ -2744,22 +2744,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.2", "rayon", "serde", ] [[package]] name = "indicatif" -version = "0.17.8" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281" dependencies = [ "console", - "instant", "number_prefix", "portable-atomic", - "unicode-width", + "unicode-width 0.2.0", + "web-time", ] [[package]] @@ -2768,23 +2768,23 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "ipnet" -version = "2.3.1" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is_terminal_polyfill" @@ -2812,9 +2812,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jni" @@ -2826,7 +2826,7 @@ dependencies = [ "combine 4.6.7", "jni-sys", "log", - "thiserror 1.0.68", + "thiserror 1.0.69", "walkdir", ] @@ -2915,7 +2915,7 @@ dependencies = [ "proc-macro-crate 0.1.5", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -2963,15 +2963,15 @@ dependencies = [ "log", "tokio", "tokio-stream", - "tokio-util 0.6.9", + "tokio-util 0.6.10", "unicase", ] [[package]] name = "keccak" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ "cpufeatures", ] @@ -3009,9 +3009,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.161" +version = "0.2.165" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "fcb4d3d38eab6c5239a362fa8bae48c03baf980a6e7079f063942d563ef3533e" [[package]] name = "libloading" @@ -3023,12 +3023,33 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if 1.0.0", + "windows-targets 0.52.6", +] + [[package]] name = "libm" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall 0.5.7", +] + [[package]] name = "librocksdb-sys" version = "0.16.0+8.10.0" @@ -3100,15 +3121,15 @@ checksum = "5297962ef19edda4ce33aaa484386e0a5b3d7f2f4e037cbeee00503ef6b29d33" dependencies = [ "anstream", "anstyle", - "clap 4.4.8", + "clap 4.5.21", "escape8259", ] [[package]] name = "libz-sys" -version = "1.1.5" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f35facd4a5673cb5a48822be2be1d4236c1c99cb4113cab7061ac720d5bf859" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "pkg-config", @@ -3124,16 +3145,7 @@ dependencies = [ "ark-bn254", "ark-ff", "num-bigint 0.4.6", - "thiserror 1.0.68", -] - -[[package]] -name = "link-cplusplus" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" -dependencies = [ - "cc", + "thiserror 1.0.69", ] [[package]] @@ -3142,11 +3154,17 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -3186,12 +3204,6 @@ dependencies = [ "libc", ] -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - [[package]] name = "matches" version = "0.1.10" @@ -3200,15 +3212,15 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matchit" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" @@ -3221,27 +3233,18 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" dependencies = [ "libc", ] [[package]] name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] @@ -3260,15 +3263,15 @@ dependencies = [ [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", @@ -3280,20 +3283,11 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2687e6cf9c00f48e9284cf9fd15f2ef341d03cc7743abf9df4c5f07fdee50b18" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" +[[package]] +name = "minimal-lexical" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" @@ -3306,9 +3300,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi 0.3.9", "libc", @@ -3340,7 +3334,7 @@ dependencies = [ "cfg-if 1.0.0", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -3361,7 +3355,7 @@ checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -3372,11 +3366,10 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "native-tls" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -3390,9 +3383,9 @@ dependencies = [ [[package]] name = "net2" -version = "0.2.37" +version = "0.2.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" +checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac" dependencies = [ "cfg-if 0.1.10", "libc", @@ -3409,7 +3402,7 @@ dependencies = [ "cfg-if 1.0.0", "cfg_aliases", "libc", - "memoffset 0.9.0", + "memoffset", ] [[package]] @@ -3420,9 +3413,9 @@ checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" [[package]] name = "nom" -version = "7.1.1" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", @@ -3499,7 +3492,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3513,9 +3506,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.43" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", @@ -3569,10 +3562,10 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3583,45 +3576,39 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.32.1" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "oid-registry" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d4bda43fd1b844cbc6e6e54b5444e2b1bc7838bce59ad205902cccbb26d6761" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ "asn1-rs", ] [[package]] name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "opaque-debug" -version = "0.2.3" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ "bitflags 2.6.0", "cfg-if 1.0.0", @@ -3634,13 +3621,13 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.89", ] [[package]] @@ -3651,18 +3638,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.3.1+3.3.1" +version = "300.4.1+3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7259953d42a81bf137fbbd73bd30a8e1914d6dce43c2b90ed575783a22608b91" +checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -3687,14 +3674,14 @@ dependencies = [ "percent-encoding 2.3.1", "pin-project", "rand 0.8.5", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "os_str_bytes" -version = "6.3.0" +version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" [[package]] name = "parking" @@ -3710,51 +3697,51 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", ] [[package]] name = "parking_lot" -version = "0.12.0" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", - "parking_lot_core 0.9.9", + "parking_lot_core 0.9.10", ] [[package]] name = "parking_lot_core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall 0.2.10", + "redox_syscall 0.2.16", "smallvec", "winapi 0.3.9", ] [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.4.1", + "redox_syscall 0.5.7", "smallvec", - "windows-targets 0.48.0", + "windows-targets 0.52.6", ] [[package]] name = "paste" -version = "1.0.12" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pbkdf2" @@ -3780,7 +3767,7 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ - "base64 0.13.0", + "base64 0.13.1", ] [[package]] @@ -3806,18 +3793,20 @@ dependencies = [ [[package]] name = "pest" -version = "2.1.3" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ + "memchr", + "thiserror 1.0.69", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.1.0" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" dependencies = [ "pest", "pest_generator", @@ -3825,63 +3814,63 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.1.3" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" +checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.89", ] [[package]] name = "pest_meta" -version = "2.1.3" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" +checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" dependencies = [ - "maplit", + "once_cell", "pest", - "sha-1 0.8.2", + "sha2 0.10.8", ] [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 1.9.3", + "indexmap 2.6.0", ] [[package]] name = "pin-project" -version = "1.1.0" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.0" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -3891,9 +3880,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.24" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "polyval" @@ -3903,15 +3892,15 @@ checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "opaque-debug 0.3.0", + "opaque-debug", "universal-hash", ] [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -3921,9 +3910,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.15" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "predicates" @@ -3941,27 +3933,26 @@ dependencies = [ [[package]] name = "predicates" -version = "3.0.3" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9" +checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" dependencies = [ "anstyle", "difflib", - "itertools 0.10.5", "predicates-core", ] [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" [[package]] name = "predicates-tree" -version = "1.0.5" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d86de6de25020a36c6d3643a86d9a6a9f552107c0559c60ea03551b5e16c032" +checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" dependencies = [ "predicates-core", "termtree", @@ -3975,12 +3966,12 @@ checksum = "c6fa0831dd7cc608c38a5e323422a0077678fa5744aa2be4ad91c4ece8eec8d5" [[package]] name = "prettyplease" -version = "0.1.9" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b83ec2d0af5c5c556257ff52c9f98934e243b9fd39604bfb2a9b75ec2e97f18" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -4003,9 +3994,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ "toml_edit", ] @@ -4019,7 +4010,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", "version_check", ] @@ -4036,9 +4027,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -4090,7 +4081,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 1.0.107", + "syn 1.0.109", "tempfile", "which", ] @@ -4105,7 +4096,7 @@ dependencies = [ "itertools 0.10.5", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -4143,7 +4134,7 @@ checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -4169,9 +4160,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quinn" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ "bytes", "pin-project-lite", @@ -4180,34 +4171,37 @@ dependencies = [ "rustc-hash 2.0.0", "rustls 0.23.18", "socket2", - "thiserror 1.0.68", + "thiserror 2.0.3", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", + "getrandom 0.2.15", "rand 0.8.5", - "ring 0.17.3", + "ring", "rustc-hash 2.0.0", "rustls 0.23.18", + "rustls-pki-types", "rustls-platform-verifier", "slab", - "thiserror 1.0.68", + "thiserror 2.0.3", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e346e016eacfff12233c243718197ca12f148c84e1e84268a896699b41c71780" +checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" dependencies = [ "cfg_aliases", "libc", @@ -4219,9 +4213,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.35" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -4285,7 +4279,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.15", ] [[package]] @@ -4356,30 +4350,31 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.0" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.10", - "redox_syscall 0.2.10", + "getrandom 0.2.15", + "libredox", + "thiserror 1.0.69", ] [[package]] @@ -4394,7 +4389,7 @@ dependencies = [ "lru", "parking_lot 0.11.2", "smallvec", - "spin 0.9.2", + "spin", ] [[package]] @@ -4403,25 +4398,19 @@ version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ - "aho-corasick 1.0.2", + "aho-corasick", "memchr", - "regex-automata 0.4.8", + "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa250384981ea14565685dea16a9ccc4d1c541a13f82b9c168572264d1df8c56" - -[[package]] -name = "regex-automata" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ - "aho-corasick 1.0.2", + "aho-corasick", "memchr", "regex-syntax", ] @@ -4460,7 +4449,7 @@ dependencies = [ "percent-encoding 2.3.1", "pin-project-lite", "rustls 0.21.12", - "rustls-pemfile 1.0.1", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", @@ -4469,13 +4458,13 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls", - "tokio-util 0.7.1", + "tokio-util 0.7.12", "tower-service", - "url 2.5.2", + "url 2.5.4", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 0.25.2", + "webpki-roots 0.25.4", "winreg", ] @@ -4491,36 +4480,22 @@ dependencies = [ "reqwest", "serde", "task-local-extensions", - "thiserror 1.0.68", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi 0.3.9", + "thiserror 1.0.69", ] [[package]] name = "ring" -version = "0.17.3" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babe80d5c16becf6594aa32ad2be8fe08498e7ae60b77de8df700e67f191d7e" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", - "getrandom 0.2.10", + "cfg-if 1.0.0", + "getrandom 0.2.15", "libc", - "spin 0.9.2", - "untrusted 0.9.0", - "windows-sys 0.48.0", + "spin", + "untrusted", + "windows-sys 0.52.0", ] [[package]] @@ -4561,19 +4536,19 @@ dependencies = [ [[package]] name = "rtoolbox" -version = "0.0.1" +version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" +checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" dependencies = [ "libc", - "winapi 0.3.9", + "windows-sys 0.48.0", ] [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -4589,9 +4564,9 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] @@ -4607,9 +4582,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.39" +version = "0.38.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375116bee2be9ed569afe2154ea6a99dfdffd257f533f187498c2a8f5feaf4ee" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" dependencies = [ "bitflags 2.6.0", "errno", @@ -4625,7 +4600,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.17.3", + "ring", "rustls-webpki 0.101.7", "sct", ] @@ -4637,7 +4612,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c9cc1d47e243d655ace55ed38201c19ae02c148ae56412ab8750e8f0166ab7f" dependencies = [ "once_cell", - "ring 0.17.3", + "ring", "rustls-pki-types", "rustls-webpki 0.102.8", "subtle", @@ -4659,11 +4634,11 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.13.0", + "base64 0.21.7", ] [[package]] @@ -4680,12 +4655,15 @@ name = "rustls-pki-types" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +dependencies = [ + "web-time", +] [[package]] name = "rustls-platform-verifier" -version = "0.3.4" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" +checksum = "a4c7dc240fec5517e6c4eab3310438636cfe6391dfc345ba013109909a90d136" dependencies = [ "core-foundation", "core-foundation-sys", @@ -4698,8 +4676,8 @@ dependencies = [ "rustls-webpki 0.102.8", "security-framework", "security-framework-sys", - "webpki-roots 0.26.6", - "winapi 0.3.9", + "webpki-root-certs", + "windows-sys 0.52.0", ] [[package]] @@ -4714,8 +4692,8 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.3", - "untrusted 0.9.0", + "ring", + "untrusted", ] [[package]] @@ -4724,16 +4702,16 @@ version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ - "ring 0.17.3", + "ring", "rustls-pki-types", - "untrusted 0.9.0", + "untrusted", ] [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "rusty-fork" @@ -4749,9 +4727,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.9" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -4764,21 +4742,20 @@ dependencies = [ [[package]] name = "scc" -version = "2.1.0" +version = "2.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec96560eea317a9cc4e0bb1f6a2c93c09a19b8c4fc5cb3fcc0ec1c094cd783e2" +checksum = "66b202022bb57c049555430e11fc22fea12909276a80a4c3d368da36ac1d88ed" dependencies = [ "sdd", ] [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "lazy_static", - "winapi 0.3.9", + "windows-sys 0.59.0", ] [[package]] @@ -4787,12 +4764,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scratch" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" - [[package]] name = "scroll" version = "0.11.0" @@ -4801,27 +4772,27 @@ checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", + "ring", + "untrusted", ] [[package]] name = "sdd" -version = "0.2.0" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84345e4c9bd703274a082fb80caaa99b7612be48dfaa1dd9266577ec412309d" +checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95" [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -4831,9 +4802,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", @@ -4851,7 +4822,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5c67b6f14ecc5b86c66fa63d76b5092352678545a8a3cdae80aef5128371910" dependencies = [ - "parking_lot 0.12.0", + "parking_lot 0.12.3", ] [[package]] @@ -4880,7 +4851,7 @@ checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -4934,7 +4905,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -4959,7 +4930,7 @@ dependencies = [ "futures 0.3.31", "log", "once_cell", - "parking_lot 0.12.0", + "parking_lot 0.12.3", "scc", "serial_test_derive", ] @@ -4972,19 +4943,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", -] - -[[package]] -name = "sha-1" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", + "syn 2.0.89", ] [[package]] @@ -4997,18 +4956,7 @@ dependencies = [ "cfg-if 1.0.0", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "sha-1" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" -dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.10.7", + "opaque-debug", ] [[package]] @@ -5032,7 +4980,7 @@ dependencies = [ "cfg-if 1.0.0", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.0", + "opaque-debug", ] [[package]] @@ -5075,7 +5023,7 @@ dependencies = [ "quote", "shank_macro_impl", "shank_render", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -5088,7 +5036,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -5104,9 +5052,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -5125,18 +5073,18 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] [[package]] name = "signature" -version = "1.4.0" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" [[package]] name = "simpl" @@ -5162,9 +5110,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -5181,7 +5129,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95b6ff8c21c74ce7744643a7cddbb02579a44f1f77e4316bff1ddb741aca8ac9" dependencies = [ - "base64 0.13.0", + "base64 0.13.1", "log", "openssl", "serde", @@ -5207,20 +5155,20 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" dependencies = [ - "base64 0.13.0", + "base64 0.13.1", "bytes", "futures 0.3.31", "httparse", "log", "rand 0.8.5", - "sha-1 0.9.8", + "sha-1", ] [[package]] name = "solana-account" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730219420b206253977b8cc8fd7846ffe021ab2e2c718e70db420efbd2775547" +checksum = "57cb0cf41b565741b350665918b1000324991029cbb56dd31f1bce75a509310b" dependencies = [ "bincode", "serde", @@ -5232,9 +5180,9 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14e5b1c167335942b659d077552607f79b2eca3472e40eeed97a2c55838b84ef" +checksum = "375453711ca64576a635a72f70a43629c7e11eacd6d817b47720844718643d29" dependencies = [ "Inflector", "base64 0.22.1", @@ -5252,15 +5200,15 @@ dependencies = [ "spl-token-2022 4.0.0", "spl-token-group-interface 0.3.0", "spl-token-metadata-interface 0.4.0", - "thiserror 1.0.68", + "thiserror 1.0.69", "zstd", ] [[package]] name = "solana-account-decoder-client-types" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee0750d2f106ecbee6d4508b6e2029e6946cb5f67288bf002b5a62f9f451c43" +checksum = "84543236b7579c4adfe16114516175b4314909dbad98f0aac0cb523dff8befd9" dependencies = [ "base64 0.22.1", "bs58", @@ -5274,9 +5222,9 @@ dependencies = [ [[package]] name = "solana-account-info" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6abe81cfc4a75f71a510c6856b03a7d8525e416af3c69d55daef62e6078b8d40" +checksum = "31e085851110dc6a38f55a78c238cf005e239ada61450a88713995022f7bbaf7" dependencies = [ "bincode", "serde", @@ -5287,9 +5235,9 @@ dependencies = [ [[package]] name = "solana-accounts-db" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fecc332ad4edd98ed63e5a46d990ecaf6fe4abd2bf9795c15474a64534ced6" +checksum = "6166298d12d0c0a711531da1654f18976d26a8dd0f99ad7d392abf077407440b" dependencies = [ "ahash 0.8.11", "bincode", @@ -5328,14 +5276,14 @@ dependencies = [ "static_assertions", "tar", "tempfile", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-address-lookup-table-program" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cf79a76f2878982b9781dfd0831d58ee15eb905be65406ccf7370c3ecd69c52" +checksum = "aca234458aad20fe6598bf96144a6aefa1140a4f17efa1cc08b9655ee9bd02bf" dependencies = [ "bincode", "bytemuck", @@ -5347,23 +5295,23 @@ dependencies = [ "solana-program", "solana-program-runtime", "solana-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-atomic-u64" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391b795afcdcad39ddc6c938d64b789d036cdfe00d9dc5ff83024cf2da9f066f" +checksum = "c1cfea2176602dcad41dc19578bcb82f8ad7c57a0ec4a51b5dcc91fce0dbe16d" dependencies = [ - "parking_lot 0.12.0", + "parking_lot 0.12.3", ] [[package]] name = "solana-banks-client" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f857fb6590467d433f40eee507666ca496ec67907e50b7d530b6c04f6541875" +checksum = "d3648c9d6c8b90282ca2394fab9fd1cbf1a730fea785eb87be7b95262bf3ff18" dependencies = [ "borsh 1.5.3", "futures 0.3.31", @@ -5371,16 +5319,16 @@ dependencies = [ "solana-program", "solana-sdk", "tarpc", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "tokio-serde", ] [[package]] name = "solana-banks-interface" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20052d231bb9ac3268dc61a713e3915d6c95fc942f9a5c15ca3a81a3fcd9cc12" +checksum = "fa9bf04f7944d3d0b98cb95bb9eb0e8e154179ea0043ef74c8b4d8490f226ad3" dependencies = [ "serde", "serde_derive", @@ -5390,9 +5338,9 @@ dependencies = [ [[package]] name = "solana-banks-server" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10db60e4bf077b870a7e75f8596bf3790d079b3762e9b4edc032475077007d0b" +checksum = "831d55f8f40dd1ea567bad08ecc7a7e97254ee216685dc4feee5dabe5d306bf3" dependencies = [ "bincode", "crossbeam-channel", @@ -5411,9 +5359,9 @@ dependencies = [ [[package]] name = "solana-bincode" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e85cb5961c356345a61378163fd9057011b35540f8bcdd8d8a09cb10117264f" +checksum = "d3023f6d059845d3879307b6cd76f47155dfe39b3842820aaed59599bcc0d996" dependencies = [ "bincode", "serde", @@ -5422,9 +5370,9 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cdcc35537b23cd3376eb2ea7753d958f6ce64f69318b00dc137817c0b49411" +checksum = "e074b19f814bbfb8d409938543542f00532f49edcbf604461f2c11a5ed0fc724" dependencies = [ "bv", "fnv", @@ -5438,9 +5386,9 @@ dependencies = [ [[package]] name = "solana-bn254" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39c4030db26ad618f7e18fb5284df19fd52a68e092a1ca58db857108c4cc777" +checksum = "0206e710f6146b416042fecf325b37b0418b91e5d6926e87cb879da908236075" dependencies = [ "ark-bn254", "ark-ec", @@ -5448,24 +5396,24 @@ dependencies = [ "ark-serialize", "bytemuck", "solana-program", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-borsh" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d526f3525ab22a3ada3f9a1d642664dafac00dc9208326b701a2045514eb04" +checksum = "1b9d146d0c485d8a2e363aa9b47f3e6b127d1603e1cafc12b4b958f25afd3082" dependencies = [ - "borsh 0.10.3", + "borsh 0.10.4", "borsh 1.5.3", ] [[package]] name = "solana-bpf-loader-program" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142e0407f8428a1d2a33154d1d3d1c134ad257651ddff0811c17a6ee840def36" +checksum = "0a3fe016beb94808f71fd0e16a3904b5416621e82f3c677f8a997dcb6955fcd1" dependencies = [ "bincode", "byteorder", @@ -5485,14 +5433,14 @@ dependencies = [ "solana-timings", "solana-type-overrides", "solana_rbpf", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-bucket-map" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66eb348939fcfea6e40eed61bca06a1c631f8cb70f1801a5b14021bddefe93eb" +checksum = "d138dd06e3be7a5bba2df28be8bedb9320a80480d18f33c147bf78e01ef520fd" dependencies = [ "bv", "bytemuck", @@ -5509,9 +5457,9 @@ dependencies = [ [[package]] name = "solana-builtins-default-costs" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854270e266040355f5fd5b67c91855bc36cebf1d3f325eb54d8b1b0ca385f74b" +checksum = "02dda21c775c0d2b56971500f74abd3e617f04df51aee4445f13e9d99d792e07" dependencies = [ "ahash 0.8.11", "lazy_static", @@ -5529,9 +5477,9 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1709e1b0aefc8062fca29a4fde8d35f39ee95586e77cc6360e9bfc50a094c44f" +checksum = "6322dfd706fbec52a6ab56aa9c55a84046dab62ac661b4fef29723de3af8445d" dependencies = [ "chrono", "clap 2.34.0", @@ -5539,17 +5487,17 @@ dependencies = [ "solana-derivation-path", "solana-remote-wallet", "solana-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", "tiny-bip39", "uriparse", - "url 2.5.2", + "url 2.5.4", ] [[package]] name = "solana-clap-v3-utils" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9682fa05e9e8bcd49340567c000b20e4f094db530ef7912d74ea12706448814" +checksum = "47de1ca1b8c239917f6a16b2e46e85551d80ef303c4331e2262ef73cc2f65f32" dependencies = [ "chrono", "clap 3.2.25", @@ -5558,17 +5506,17 @@ dependencies = [ "solana-remote-wallet", "solana-sdk", "solana-zk-token-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", "tiny-bip39", "uriparse", - "url 2.5.2", + "url 2.5.4", ] [[package]] name = "solana-cli-config" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384fda0ddf3099eab0f702b326663f499e84731e8584fd7d0c6d8bab03bead79" +checksum = "5564b3e831cb69cbb338bb86ebf8f5cfbfabf08e82fd0b03e8face45ffd18352" dependencies = [ "dirs-next", "lazy_static", @@ -5577,14 +5525,14 @@ dependencies = [ "serde_yaml", "solana-clap-utils", "solana-sdk", - "url 2.5.2", + "url 2.5.4", ] [[package]] name = "solana-cli-output" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b82ae7fc5a012ad5bc4077a235ea5b26145fab50ca05b550e792a50bdd6d77a9" +checksum = "1bc5554028c58cf1d46b87aab06e509cbe8831a45a72d089d97a433e316b3fa2" dependencies = [ "Inflector", "base64 0.22.1", @@ -5609,9 +5557,9 @@ dependencies = [ [[package]] name = "solana-client" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9a40b8e9e11604e8c05e8b5fcdb89359235db47d1aae84dcba0fc98e95dd0c" +checksum = "017cdda1e882ec268e8e5b9f2e8401161f5ef0b37991cd696111f40137c3bff5" dependencies = [ "async-trait", "bincode", @@ -5635,35 +5583,36 @@ dependencies = [ "solana-thin-client", "solana-tpu-client", "solana-udp-client", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", ] [[package]] name = "solana-clock" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7848171e53fa528efd41dd4b3ab919f47b851f8bb4a827d63ff95678f08737fc" +checksum = "6f7b4b20b02b938d791e537a08b82044d985a7764d289d7b405b762bc006cd61" dependencies = [ "serde", "serde_derive", "solana-sdk-macro", + "solana-sysvar-id", ] [[package]] name = "solana-compute-budget" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebf2f023f471bd1195b7f420e13ffc2422592dd48e71104b4901300b49ac493e" +checksum = "690be515649dc4b0e41efc11d86bf15064ed306bea78b288f72dfe6beab5657b" dependencies = [ "solana-sdk", ] [[package]] name = "solana-compute-budget-program" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73eddf023f02a56daa838818e30894b874368a741782457468eeefdfce2f7f53" +checksum = "64a9aa950f4b632e2781c871e9f675766e0ef0198880186f232ec6bfa9286fb3" dependencies = [ "solana-program-runtime", "solana-sdk", @@ -5671,9 +5620,9 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a035a01970ebbf40a244b3b79af533329ac8d48d80b0b98e166e23e35aa88171" +checksum = "5cf0a83665e3852e56645a4ec45f3f60e0417ae143629c341dccdae543dd2b29" dependencies = [ "bincode", "chrono", @@ -5687,9 +5636,9 @@ dependencies = [ [[package]] name = "solana-connection-cache" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f45dd2a6d5d55ed951781486231d0d2ee9ff7047fdafaed01ee021e236319d0" +checksum = "9e63d1225dc1d6282184a038882d19d35b7eebb673eb04d65ec9de124bfb250d" dependencies = [ "async-trait", "bincode", @@ -5702,15 +5651,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", ] [[package]] name = "solana-core" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d499325db220d9442530d625addc20defe35c41a2e349a9ffb8f3bf20e7a9b7" +checksum = "4903759ccf49a1036596f0657ce6c68d1a44b1fedb6b7ebfd0769d173f5ac082" dependencies = [ "ahash 0.8.11", "anyhow", @@ -5787,16 +5736,16 @@ dependencies = [ "sys-info", "sysctl", "tempfile", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "trees", ] [[package]] name = "solana-cost-model" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "448128561bb950bce19cdbbdc1780955a52ef25f1984c9c13b35b4b9cdc548c4" +checksum = "29c3cd8fd1ab7681152f491d3ad9e8461c6e3731bc3cd52fca0c8fd33bfd672f" dependencies = [ "ahash 0.8.11", "lazy_static", @@ -5813,9 +5762,9 @@ dependencies = [ [[package]] name = "solana-cpi" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25c536ad0ce25d84a64f48dedcb773e764827e0ef781eda41fa1fa35f5d64b38" +checksum = "d70d2d4fa6f1ecadc5293100f0a46e9a60abd63e2c2966f22c363b0972155395" dependencies = [ "solana-account-info", "solana-define-syscall", @@ -5827,37 +5776,37 @@ dependencies = [ [[package]] name = "solana-curve25519" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f934d38b6f2a940fb1e1d8eaa17a14ffd3773b37be9fb29fa4bcec1bac5e4591" +checksum = "957e8f3986a544442d6c16ab747897a9f1f6c37b5c5c6d7aa352c64fb06e93d2" dependencies = [ "bytemuck", "bytemuck_derive", "curve25519-dalek 4.1.3", "solana-program", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-decode-error" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a431f532d030098e81d120877f2dddbd3dd90bea5b259198a6aae4ff6456c3" +checksum = "987e69c94af8de7094a304e79a35643f9d02956845b16924403c08dcdc60f54a" dependencies = [ "num-traits", ] [[package]] name = "solana-define-syscall" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7062ae1de58e294d3bee5fd2c89efc155b7f7383ddce4cb88345dfafaaabc5bd" +checksum = "debfb6b4d3b263112fd001e6102cba148674807ef9c6cd7a80c3883137881032" [[package]] name = "solana-derivation-path" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12080d9bf8eecd559c6f40b5aaf9e47f7f28f515218087f83f02e493b46d8388" +checksum = "9985ff15cae72e90dabfc50547b5edfb85e91deae64b0df650037dd770075384" dependencies = [ "derivation-path", "qstring", @@ -5866,9 +5815,9 @@ dependencies = [ [[package]] name = "solana-entry" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "151cbfd824285d3b6ab6391f85448f73364baca34a897184e26ad7c66165e3f0" +checksum = "99696dafd57ecaebe13bb21307e8360fed6f3c1033e25aa18b828e7c7ad4e57e" dependencies = [ "bincode", "crossbeam-channel", @@ -5888,20 +5837,21 @@ dependencies = [ [[package]] name = "solana-epoch-schedule" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65c4cf7d7c266d353169cf4feeada5e4bba3a55f33715535fa1ef49080eac3e0" +checksum = "6bf4eb069a4bb1c762fb59d1a3759bd496b2d275c3bb706e514c8cbafe02a24d" dependencies = [ "serde", "serde_derive", "solana-sdk-macro", + "solana-sysvar-id", ] [[package]] name = "solana-faucet" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "281c481c0efa41a7ddada5dbffabee9099a6b01e9d748b7135366df589f7415e" +checksum = "dc2f0b5176e1d43872a5c044de2dca1c48cabc6d3e7c1744acaad713dcf0f20b" dependencies = [ "bincode", "byteorder", @@ -5917,15 +5867,15 @@ dependencies = [ "solana-sdk", "solana-version", "spl-memo 5.0.0", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", ] [[package]] name = "solana-feature-set" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cebf45992982065a0b01b4e109bf039b2ebf6394b21672382fd951516d4c9b0" +checksum = "0c2296db31c609b7b88ad71c31e33fd541ad6e756fb40827ba0efecc7a647702" dependencies = [ "lazy_static", "solana-clock", @@ -5937,9 +5887,9 @@ dependencies = [ [[package]] name = "solana-fee" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833e9a34c8cb1271e360b240dce43065cc4419ad74fc7e807c4e30cf06ebca80" +checksum = "f908bcd9b053017e68ad685647979ad268f0dc8ec8995233cf3b55699197afeb" dependencies = [ "solana-sdk", "solana-svm-transaction", @@ -5947,9 +5897,9 @@ dependencies = [ [[package]] name = "solana-fee-calculator" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2befe056ece2eb5807298c2b569a35ee52f79df859bdd16a1f97869f8224a28" +checksum = "0db9a84d00a6186b8900913caac51b35ef69c484c1cdf2569bfea31798351c28" dependencies = [ "log", "serde", @@ -5958,16 +5908,16 @@ dependencies = [ [[package]] name = "solana-geyser-plugin-manager" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac089db04deff5826ad8469e0c934e77451315396ee30fde4d512d6b60f2cca" +checksum = "408e402c63ec551c9d04d156b500352c8f48c7020f8c42cc796885dd248e824b" dependencies = [ "agave-geyser-plugin-interface", "bs58", "crossbeam-channel", "json5", "jsonrpc-core", - "libloading", + "libloading 0.7.4", "log", "serde_json", "solana-accounts-db", @@ -5979,15 +5929,15 @@ dependencies = [ "solana-runtime", "solana-sdk", "solana-transaction-status", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", ] [[package]] name = "solana-gossip" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5849898b9a0a9b4dc9a200fa7b28d1c929bb89f8db4e8b5899d2d32277459ce" +checksum = "ceb02879b86dba6488d66f8326c757813fe2cce3ccb01cc50bd43c94ee620d25" dependencies = [ "assert_matches", "bincode", @@ -6031,14 +5981,14 @@ dependencies = [ "solana-vote", "solana-vote-program", "static_assertions", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-hash" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1807bc4e9e1d25271514167d5a1e698ce5a330bce547a368242dd63b355b5faa" +checksum = "dd4adcc124a76786a090639440387ccc68fbf9477103489de107b73d90ce60ba" dependencies = [ "borsh 1.5.3", "bs58", @@ -6054,9 +6004,9 @@ dependencies = [ [[package]] name = "solana-inflation" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a60b572cdf0ec8fcf5a53e5ba4e3e19814dd96c2b9c156d5828be68d0d2e7103" +checksum = "2139d4e67a310f3a4e09034ba0e1d567bf7419420254be0e87e1f74f2b7e9217" dependencies = [ "serde", "serde_derive", @@ -6064,9 +6014,9 @@ dependencies = [ [[package]] name = "solana-inline-spl" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24c9c6590e4eaf91efa887b2689b2941fe4b324bccd9a95f77853168f3d9a88" +checksum = "4964b5d6d5fb28a396be09655024b750117c041fff6ab8492ed89d3e87c2503e" dependencies = [ "bytemuck", "solana-pubkey", @@ -6074,13 +6024,13 @@ dependencies = [ [[package]] name = "solana-instruction" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfef689e06e5c7cb6206d4dc61ac77733de4f72d754e0d531393206abc27dbe4" +checksum = "19ece5fc0c0a4a12ec8b505dffbc5e48ab7897e2dec9b335c977456223e94963" dependencies = [ "bincode", "borsh 1.5.3", - "getrandom 0.2.10", + "getrandom 0.2.15", "js-sys", "num-traits", "serde", @@ -6092,20 +6042,21 @@ dependencies = [ [[package]] name = "solana-last-restart-slot" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3186feae497bdfd2e77bfa56caed38b1cb1b0f389506666e3331f0b9ae799cb" +checksum = "206b52fdd6eab6d3a190b50841288d534390b4528b1e63f984ced72b6d1c7a61" dependencies = [ "serde", "serde_derive", "solana-sdk-macro", + "solana-sysvar-id", ] [[package]] name = "solana-lattice-hash" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ec86f48a8694d55757922823823069a3652d2896f61f3ffc4b741646c166a62" +checksum = "1e2e8b83df59ff27eaabfdfd12535da692ffd0fbff2e2ece14a3cf4365ddd348" dependencies = [ "base64 0.22.1", "blake3", @@ -6115,9 +6066,9 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d181954a7e0ef3847ed2336adda1214cda401ac2c5557ebb63d700e409864881" +checksum = "03288c5aac8cdfd7805b4c5d00394863bd6bdafaaee71aa7aef2bc02dd48ca69" dependencies = [ "assert_matches", "bincode", @@ -6180,7 +6131,7 @@ dependencies = [ "strum_macros 0.24.3", "tar", "tempfile", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "tokio-stream", "trees", @@ -6188,9 +6139,9 @@ dependencies = [ [[package]] name = "solana-loader-v4-program" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94c6915a49e537925e934551dbce2db2357d555d257a311bbf5ba0810cb1017a" +checksum = "6df769dd4df73e3583527c9f3633917f3f341c0d655600b6435c893a2ecd8a1a" dependencies = [ "log", "solana-bpf-loader-program", @@ -6205,18 +6156,18 @@ dependencies = [ [[package]] name = "solana-log-collector" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b529f5736a6c0794a885dac2e091138d3db6d924335906f117a62b58b0d3b5dc" +checksum = "8b50c21c10fb956b42dfa9d651d7cd8f07955aa47e3a330e6ef4721270ae9fe2" dependencies = [ "log", ] [[package]] name = "solana-logger" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "367c5431bad14b10fbb62614b48720b746672558dba3244167ff7d251890c355" +checksum = "2b82e7089918666300a7399a1193b53a823f907f85a99f54a75b250f1996c196" dependencies = [ "env_logger", "lazy_static", @@ -6225,15 +6176,15 @@ dependencies = [ [[package]] name = "solana-measure" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b2047a2f588082b71080b060918f107c3330ae1505f759c3b2d74bae9d9c88" +checksum = "8af180d3301f722acc301aeb6fa05b14506e12da81fc898a03d9d1a06118742f" [[package]] name = "solana-merkle-tree" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75fa782e9cf2a846f09f96594db01e3005aeefb36ce53aebc41b050381e9989" +checksum = "fbfd0bb47c7f829169ee15edcc7ba0ed1cc932938bc74c7de10c7397c3c21488" dependencies = [ "fast-math", "solana-hash", @@ -6242,9 +6193,9 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6319c74238e8ed4f7159fd37c693a574ab8316d03b053103f9cc83dce13f1d5c" +checksum = "0ae5ad8e75694856959189de6ec503e9e24486e1596276197ad2bdf1c69c5e00" dependencies = [ "crossbeam-channel", "gethostname", @@ -6252,29 +6203,29 @@ dependencies = [ "log", "reqwest", "solana-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-msg" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f7551f85064bc7299d56dbd7126258b084a2d78d0325b1579324f818b405123" +checksum = "ec7a6f57e2e4ffe12cd4fee1e717c0f2ba6336ff2439cd5738d9843458a53da0" dependencies = [ "solana-define-syscall", ] [[package]] name = "solana-native-token" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0c4074f5fc67574dabd8f30fe6e51e290a812d88326b19b49c462058e23340" +checksum = "02dc51c820c41b965a94a00e0939fa2683652c3da6ab8eaaeee194c9a526fae9" [[package]] name = "solana-net-utils" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbac19474a4c4f91cb264c2fccead8a1a4f65384ce650b24360d9df5650e65bc" +checksum = "d71dee5927b0bb6fb8e7227bd930a11b622a8ceb863208a8a6c09464db87b9ca" dependencies = [ "bincode", "crossbeam-channel", @@ -6286,7 +6237,7 @@ dependencies = [ "socket2", "solana-sdk", "tokio", - "url 2.5.2", + "url 2.5.4", ] [[package]] @@ -6297,9 +6248,9 @@ checksum = "8b8a731ed60e89177c8a7ab05fe0f1511cedd3e70e773f288f9de33a9cfdc21e" [[package]] name = "solana-packet" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dafc2d84e57dbfe32583fe915962bd2ca3af6be496628a871db3c3d697b38d7" +checksum = "32ed935e9f2d99d2ec0944012b2f9b8afdee5af39a7693faeda68c6a77aa64d0" dependencies = [ "bincode", "bitflags 2.6.0", @@ -6311,9 +6262,9 @@ dependencies = [ [[package]] name = "solana-perf" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8299f1ba518f9888da8cafa861addc6ffdd639c689e3ce219ae08212c0dcd0e" +checksum = "8156dfa8f9f3a46e00323b85bcec38fea9f3508d6c2334dd14481b79adb10644" dependencies = [ "ahash 0.8.11", "bincode", @@ -6338,9 +6289,9 @@ dependencies = [ [[package]] name = "solana-poh" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c11f9be81af30870cfc5b782e46565f65685d75a6969052d5f8f063a3271c66c" +checksum = "9c868fc3189aacf5315eebaead51cef236c28f394f0ace24232b20263efe5d16" dependencies = [ "core_affinity", "crossbeam-channel", @@ -6351,26 +6302,26 @@ dependencies = [ "solana-metrics", "solana-runtime", "solana-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-poseidon" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f193a65f0db7fe5615c76c2814d6450a2e4cda61f786d5bf7a6b1ad0c179b947" +checksum = "82b5ba0b7efa0d373ad6b847b4ecb09d464541415459d941b736edb85f276c00" dependencies = [ "ark-bn254", "light-poseidon", "solana-define-syscall", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-precompile-error" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a30ab58b9e37cde4e5577282670f30df71b97b6b06dbdb420e9b84e57b831227" +checksum = "b44197151afc9e96260228ec173fefea84e7b52d1e14c3b6dbbe0df739e878a9" dependencies = [ "num-traits", "solana-decode-error", @@ -6378,15 +6329,15 @@ dependencies = [ [[package]] name = "solana-program" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9040decf2f295d35da22557eeab3768ab8dfca8aed9afe668663c8fa0e97d60e" +checksum = "3eee1043f1a069817b5a96dbade9e37566ff92d6663a747550b942520b2bb289" dependencies = [ "base64 0.22.1", "bincode", "bitflags 2.6.0", "blake3", - "borsh 0.10.3", + "borsh 0.10.4", "borsh 1.5.3", "bs58", "bv", @@ -6396,15 +6347,15 @@ dependencies = [ "console_log", "curve25519-dalek 4.1.3", "five8_const", - "getrandom 0.2.10", + "getrandom 0.2.15", "js-sys", "lazy_static", "log", - "memoffset 0.9.0", + "memoffset", "num-bigint 0.4.6", "num-derive", "num-traits", - "parking_lot 0.12.0", + "parking_lot 0.12.3", "rand 0.8.5", "serde", "serde_bytes", @@ -6443,16 +6394,17 @@ dependencies = [ "solana-slot-hashes", "solana-slot-history", "solana-stable-layout", + "solana-sysvar-id", "solana-transaction-error", - "thiserror 1.0.68", + "thiserror 1.0.69", "wasm-bindgen", ] [[package]] name = "solana-program-entrypoint" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eb90f3fa3e979b912451a404508f1f90bb6e5c1d7767625f622b20016fb9fde" +checksum = "5d51f5d76edb8b45d3d47874367a859905c57aee5ca483460d1cd7ecb94d09bf" dependencies = [ "solana-account-info", "solana-msg", @@ -6462,9 +6414,9 @@ dependencies = [ [[package]] name = "solana-program-error" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd089caeef26dd07bd12b7b67d45e92faddc2fc67a960f316df7ae4776a2f3d5" +checksum = "8672853ff2835c5ddf711b876711c89033f0fa72b48e427a8cff05268be790de" dependencies = [ "borsh 1.5.3", "num-traits", @@ -6478,9 +6430,9 @@ dependencies = [ [[package]] name = "solana-program-memory" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed4bc044dc2b49c323aeff04aec03c908a052e278c2edf2f7616f32fc0f1bcd9" +checksum = "203924f5631f04eb2a426bea7ceb3d10b92218735f5339af097897b6ae2d0a79" dependencies = [ "num-traits", "solana-define-syscall", @@ -6488,24 +6440,24 @@ dependencies = [ [[package]] name = "solana-program-option" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3babbdffd81994c043fc9a61458ce87496218825d6e9a303de643c0a53089b9a" +checksum = "ef419526ea1e1d80259f04c24f2cede67db2a18a42d34ca1c6c16784b97fd21b" [[package]] name = "solana-program-pack" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fb28439d23e1f505e59c7a14ed5012365ab7aa0f20dc7bda048e02ff231cf6" +checksum = "f4af037dcb6b4c1c7a6f609868502bc198c969ffbcf628a72b0cbb6948b8c490" dependencies = [ "solana-program-error", ] [[package]] name = "solana-program-runtime" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1de51df173401d50c0f4cf750f5070d7a4c82125a03c1aec9622dc041b0b54" +checksum = "4d8825aa258629bacbe5591c5e9ee720e213b073bc052879e2f16ecfc3db5bee" dependencies = [ "base64 0.22.1", "bincode", @@ -6528,14 +6480,14 @@ dependencies = [ "solana-type-overrides", "solana-vote", "solana_rbpf", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-program-test" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "974591eca853eafee8196a3445b81fd03ebd9b3e38a6dd7b6f22dc3414c32be6" +checksum = "cc9b9109d7af35ad6a0bec5e2cd3d385651db098c09223ee7ee46dc80e9d86f0" dependencies = [ "assert_matches", "async-trait", @@ -6563,24 +6515,24 @@ dependencies = [ "solana-timings", "solana-vote-program", "solana_rbpf", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", ] [[package]] name = "solana-pubkey" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bea3215775fcedf200d47590c7e2ce9a3a46bc2b7d3f77d0eae9c6edf0a39aec" +checksum = "2cc969903363ac8bb619009815083c86da1e78e136cf4e924fee2071042fe528" dependencies = [ - "borsh 0.10.3", + "borsh 0.10.4", "borsh 1.5.3", "bs58", "bytemuck", "bytemuck_derive", "curve25519-dalek 4.1.3", "five8_const", - "getrandom 0.2.10", + "getrandom 0.2.15", "js-sys", "num-traits", "rand 0.8.5", @@ -6596,9 +6548,9 @@ dependencies = [ [[package]] name = "solana-pubsub-client" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d28adf5ff89c19ef3cb24d0f484afa05852697881c2e4ef12aec190d61f76d8" +checksum = "0eb6f0746bea4f8b86270aae122d836db92d6dcbff8d4ead648fa754380a22a4" dependencies = [ "crossbeam-channel", "futures-util", @@ -6611,19 +6563,19 @@ dependencies = [ "solana-account-decoder", "solana-rpc-client-api", "solana-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "tokio-stream", "tokio-tungstenite", "tungstenite", - "url 2.5.2", + "url 2.5.4", ] [[package]] name = "solana-quic-client" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "259c6d420c0b7620557700f13fbbdb00afbb1b82274485c27ba30dd660ea921b" +checksum = "64883ab151e924627e65591315c1ed16e6a14c40c42d2fad2367ca5ff499afb6" dependencies = [ "async-lock", "async-trait", @@ -6641,15 +6593,15 @@ dependencies = [ "solana-rpc-client-api", "solana-sdk", "solana-streamer", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", ] [[package]] name = "solana-rayon-threadlimit" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c69806ad1a7b0986f750134e13e55d83919631d81a2328a588615740e14ed0a" +checksum = "9541d2fd9402ee8f8c310bb2c4ea7228f92971fb9d7009cf62d05617a0435eb3" dependencies = [ "lazy_static", "num_cpus", @@ -6657,9 +6609,9 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f36cf8ad0090276b5e9c73512df889b84092761ed733a26781b164c9e95f544" +checksum = "45dd9e9f68b6e57c85c1e636f30e661911f93a53ad14aae7ddf31b5748b8299c" dependencies = [ "console", "dialoguer", @@ -6667,31 +6619,32 @@ dependencies = [ "log", "num-derive", "num-traits", - "parking_lot 0.12.0", + "parking_lot 0.12.3", "qstring", "semver", "solana-derivation-path", "solana-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", "uriparse", ] [[package]] name = "solana-rent" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aab3f4a270196c38d62c3bb3c7a2f07732af2c772b50da49c9b1e2c9d2ace286" +checksum = "904df8e9692d80f8f86cbccbe11b59c7b6a3d9b945d84a8a73115e36c9e2f2cd" dependencies = [ "serde", "serde_derive", "solana-sdk-macro", + "solana-sysvar-id", ] [[package]] name = "solana-rpc" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e2cf5309990480e4d52e59850bbd8181e1e2c8d4321a44b1c6b89e05df2c44" +checksum = "67276f0e1dbb1d86f7362606b124b6d43618f01b23be8bf539b2e77bfc75f5db" dependencies = [ "base64 0.22.1", "bincode", @@ -6742,16 +6695,16 @@ dependencies = [ "spl-token 6.0.0", "spl-token-2022 4.0.0", "stream-cancel", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", - "tokio-util 0.7.1", + "tokio-util 0.7.12", ] [[package]] name = "solana-rpc-client" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b05822aceeb484074a72d82a1b289da9fc3383f9ba3f55ce4bfd003bf9d62e6" +checksum = "954970ebcae3ec33ec01ed329ca0ac3cb11242ec9f2b8ae96f30fa04c7db6822" dependencies = [ "async-trait", "base64 0.22.1", @@ -6776,9 +6729,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb9c6e64f01cfafef9b2d43d6adb02979bb22f579ec8ee88b77796259acce92e" +checksum = "26d646a25846f568fdd92b9422b09effbd4520bfd3efdeb2e338603e5ef5b413" dependencies = [ "anyhow", "base64 0.22.1", @@ -6795,25 +6748,25 @@ dependencies = [ "solana-sdk", "solana-transaction-status-client-types", "solana-version", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-rpc-client-nonce-utils" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f0ab2d1ca3769c5058c689b438d35eb1cb7d2a32fc4b2b7c16fe72fa187927c" +checksum = "f6dbd0182fb41999ebd736d5b6262df292c89ce64c900abe7effb3358dd5cc61" dependencies = [ "solana-rpc-client", "solana-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-runtime" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60f579df1ed24b2e7be5c99c2b97cb2a331823008129103b5b7753057ddf3cf7" +checksum = "a62f61ba4af4bc1fec468ef3b1d64c697d9cf76d31c0c639451e2de877b9511e" dependencies = [ "ahash 0.8.11", "aquamarine", @@ -6894,15 +6847,15 @@ dependencies = [ "symlink", "tar", "tempfile", - "thiserror 1.0.68", + "thiserror 1.0.69", "zstd", ] [[package]] name = "solana-runtime-transaction" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e1757d4473c7a2f462d2ce5f3cb5689145cfbde3a6b12161a49e497633ab85" +checksum = "7a4cab17d76efb82aa4e84d8023f023c7f8ca921be554d370af7346a493e580b" dependencies = [ "agave-transaction-view", "log", @@ -6911,20 +6864,20 @@ dependencies = [ "solana-pubkey", "solana-sdk", "solana-svm-transaction", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-sanitize" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "203b90994371db8cade8e885f74ec9f68ee02a32b25d514594158b2551a4e5ed" +checksum = "080d4769742f6468906e59f61c3f72d30059ba027cb8028d6cfbb5e4ce02082b" [[package]] name = "solana-sdk" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524604d94185c189616296e5b7da1014cc96d1e446bd2b26f247f00708b9225a" +checksum = "9c599e773875c0f78e4868a9b75027d9e9abfb1561c84ddc2db5f9dc9e06ddda" dependencies = [ "bincode", "bitflags 2.6.0", @@ -6975,36 +6928,51 @@ dependencies = [ "solana-sanitize", "solana-sdk-macro", "solana-secp256k1-recover", + "solana-secp256r1-program", "solana-serde-varint", "solana-short-vec", "solana-signature", "solana-transaction-error", - "thiserror 1.0.68", + "thiserror 1.0.69", "wasm-bindgen", ] [[package]] name = "solana-sdk-macro" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd2265b93dce9d3dcf9f395abf1a85b5e06e4da4aa60ca147620003ac3abc67" +checksum = "b446159601e9d157f21e50673fd5ad4d1d4ac599b3e5c715ab9dcd48e2334b2a" dependencies = [ "bs58", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "solana-secp256k1-recover" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2eef5a00a75648273c3fb6e3d85b0c8c02fcc1e36c4271664dcc39b6b128d41" +checksum = "f47faa50f6c257b852165da9771b89df3611620db17e9547ae6c19261ed5ac60" dependencies = [ "borsh 1.5.3", "libsecp256k1", "solana-define-syscall", - "thiserror 1.0.68", + "thiserror 1.0.69", +] + +[[package]] +name = "solana-secp256r1-program" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21ecb017f075447c509907096989bacf688ed2abbd333094caeabe59db63cd2" +dependencies = [ + "bytemuck", + "openssl", + "solana-feature-set", + "solana-instruction", + "solana-precompile-error", + "solana-pubkey", ] [[package]] @@ -7015,9 +6983,9 @@ checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] name = "solana-send-transaction-service" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dc6adaa31bdaab1e5f8932575e75160f4806553ab5e15e552c258dfe1d5594b" +checksum = "1534fcda68212ac7b032bae6858085c84452cb96663f3e7d68fbf5b11305adf2" dependencies = [ "crossbeam-channel", "log", @@ -7032,18 +7000,18 @@ dependencies = [ [[package]] name = "solana-serde-varint" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aeb51d3c20e2a61db0ef72617f3b8c9207a342a867af454a95f17add9f6c262" +checksum = "954f961bbea4d6c727b9d345827463b932b4b15772ca8b4e3b1ee1d1dd71c503" dependencies = [ "serde", ] [[package]] name = "solana-serialize-utils" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cfb0b57c6a431fb15ff33053caadb6c36aed4e1ce74bea9adfc459a710b3626" +checksum = "8cd562dab1702685450c786a22785141bd86b6bd26eb84594645da4802002c21" dependencies = [ "solana-instruction", "solana-pubkey", @@ -7052,9 +7020,9 @@ dependencies = [ [[package]] name = "solana-sha256-hasher" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd115f3a1136314b0183235080d29023530c3a0a5df60505fdb7ea620eff9fd6" +checksum = "215d1d82b57a61b973ac693a0e0a241ab3af87a133baf38879685b29bb16438d" dependencies = [ "sha2 0.10.8", "solana-define-syscall", @@ -7063,22 +7031,22 @@ dependencies = [ [[package]] name = "solana-short-vec" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08e55330b694db1139dcdf2a1ea7781abe8bd994dec2ab29e36abfd06e4e9274" +checksum = "ac2f7bd6150c630bb13e8822e58f18dcf0a487f5225e9d6b25e2a9333e81a067" dependencies = [ "serde", ] [[package]] name = "solana-signature" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ad9784d110f195a3a4fe423479d18f05b01a1c380a1430644a3b3038fdbe2f0" +checksum = "ec90fbb85f263f88d62667abf3cfd9928c4f9b8b62b81b9b4e46987501bcf696" dependencies = [ "bs58", "ed25519-dalek", - "generic-array 0.14.7", + "generic-array", "rand 0.8.5", "serde", "serde_derive", @@ -7087,31 +7055,33 @@ dependencies = [ [[package]] name = "solana-slot-hashes" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17d216c0ebf00e95acaf2b1e227e6cc900a5ce50fb81fa0743272851e88a788d" +checksum = "2c2a5eea7c7d98232935c446926a1d436507e481a7fb7dff6f7c2d5dd588c569" dependencies = [ "serde", "serde_derive", "solana-hash", + "solana-sysvar-id", ] [[package]] name = "solana-slot-history" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88cbcdf767891c6a40116a5ef8f7241000f074ece4ba80c8f00b4f62705fc8a4" +checksum = "bc4fedafbdd7587c2895dd1e6e129d9d32f4f86d41575bad8ae0f8b69afa472c" dependencies = [ "bv", "serde", "serde_derive", + "solana-sysvar-id", ] [[package]] name = "solana-stable-layout" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a5305ca88fb5deb219cd88f04e24f3a131769417d7fcb11a8da1126a8f98d23" +checksum = "e233a8a3df7a03190dc6d1612224157d016a0f1d59c690464da3efbb1cf4f394" dependencies = [ "solana-instruction", "solana-pubkey", @@ -7119,9 +7089,9 @@ dependencies = [ [[package]] name = "solana-stake-program" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8bb1a59fdd929becddfaed9ec33a1ca4db853f45ae85e14e4f4054a875fc41d" +checksum = "e4d4f60d3453dc4deac449c8008e383e492955207da9ae2f3cb691f7832e7e88" dependencies = [ "bincode", "log", @@ -7136,9 +7106,9 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd27a62abd1e8abab640ed77565fcbf10745e732fc016013f521f3a46193d07a" +checksum = "3e9f85a8aa3127b1bc29d764a89c2526004de37956238befb342aeade7d2fb24" dependencies = [ "backoff", "bincode", @@ -7162,7 +7132,7 @@ dependencies = [ "solana-sdk", "solana-storage-proto", "solana-transaction-status", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "tonic", "zstd", @@ -7170,9 +7140,9 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12335d3d506aa9a49ac0674c00a5ea3de2d617e77ced0611080a3c1cdd61ada5" +checksum = "30e97979e41fd0815426f37649a10d307e120b848458cf3c09ec4238fb02c100" dependencies = [ "bincode", "bs58", @@ -7187,9 +7157,9 @@ dependencies = [ [[package]] name = "solana-streamer" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff771524872781eca074e0ba221d72b07fa0800cc1a7ffa400a9eb3e125fb922" +checksum = "7566a425600e4b9001350fdeea6c300f170012eb77d5d31cb38b7fc2c3afbec7" dependencies = [ "async-channel", "bytes", @@ -7217,17 +7187,17 @@ dependencies = [ "solana-perf", "solana-sdk", "solana-transaction-metrics-tracker", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", - "tokio-util 0.7.1", + "tokio-util 0.7.12", "x509-parser", ] [[package]] name = "solana-svm" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f3b139a001effc93295b693437013f365785fab04dcf2fa679164af4206ec8" +checksum = "4eb9dd8c5a9b93d232cb7fe91024ac5834aaba635872ce3189340789f2b531a3" dependencies = [ "itertools 0.12.1", "log", @@ -7250,32 +7220,32 @@ dependencies = [ "solana-timings", "solana-type-overrides", "solana-vote", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-svm-rent-collector" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e7068d6cc69c730190c96b87b106afd42cde203cf56164106792778cd0aaeb" +checksum = "c31538e7f1dfa8e41c512aa415f055a50012bef409ba76fad265d22e4ab36684" dependencies = [ "solana-sdk", ] [[package]] name = "solana-svm-transaction" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38a8533576cb7beca4a44b976ac27df9865bbf8c4cbca2ee8f4f3469cdd8175f" +checksum = "4200ff4dce28883b35563a49ebaa13cb60c3e5e3328aceb7c23f742ec3c1af8c" dependencies = [ "solana-sdk", ] [[package]] name = "solana-system-program" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "242634cdc1eacaa83738cc100fdd583eb88f99cc2edcc900c8ebe57d77af51b1" +checksum = "57f5b94121cd959b406a4680780c04f3ddeec122865d80f1a5fb14741dda99c5" dependencies = [ "bincode", "log", @@ -7287,11 +7257,20 @@ dependencies = [ "solana-type-overrides", ] +[[package]] +name = "solana-sysvar-id" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aeae93327e408717b0e7812f11324d75297d48a330e3419eebd36ad7e14efe0" +dependencies = [ + "solana-pubkey", +] + [[package]] name = "solana-test-validator" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1ff3137ff403e0d6c7f04b0800448341e8b4c889eefb2a1cd52e31e71596e72" +checksum = "eac99cca67d5b426ed67598f1fff6c46a81f991803b0a52e7fd4c4673c1ad333" dependencies = [ "base64 0.22.1", "bincode", @@ -7322,9 +7301,9 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10314ae3e0889cf38140902862d2c2ea481895c82c19f51dc4457b7dfa3aa6d0" +checksum = "0541e0dd4e94ab27ab283ff388eeb8c8cf8a0bbe02b09384433140f1f944a4f5" dependencies = [ "bincode", "log", @@ -7337,9 +7316,9 @@ dependencies = [ [[package]] name = "solana-timings" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a8e2f926d488c1e2a65cbc05544dcb68cfa88deb4d50f89db5bfbda7ff2419" +checksum = "599a1e124baea46b2b290327395da6e8827fb0a61ac47ff3b7a699113e02c32b" dependencies = [ "eager", "enum-iterator", @@ -7348,9 +7327,9 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516cbed8800cd36fb3ecc9a65df1e76bf8251929aa32e9b10497e8d6612de605" +checksum = "b721ee14a533a8db53d018785b5f3f03263c126cb3960cadbc12001738bf9d28" dependencies = [ "async-trait", "bincode", @@ -7365,15 +7344,15 @@ dependencies = [ "solana-rpc-client", "solana-rpc-client-api", "solana-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", ] [[package]] name = "solana-transaction-error" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a4bea6d80b34fe6e785d19bf928fe103928d1f6c9935ec23bb6a9d4d7a33d2" +checksum = "fe272d53725e15e66449fac0987f162d41cefc2f985d293e5ac05f98f82528da" dependencies = [ "serde", "serde_derive", @@ -7383,9 +7362,9 @@ dependencies = [ [[package]] name = "solana-transaction-metrics-tracker" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0b668c986a83e6b2eb8f130039045b54abc37ee821853250755386d26c1c668" +checksum = "96846da9f272146ee992531e30fa5b1d3b339eee6b4f4ba78e933338bc42698a" dependencies = [ "base64 0.22.1", "bincode", @@ -7399,9 +7378,9 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3e8ed5bf2511c45b923de25482407c9a2eb56af73dba52c19db76df4dd35cba" +checksum = "ce3b3c45df2d152e54be63ff213535410512c12a61f9a0a807b40d8e4cb982fc" dependencies = [ "Inflector", "base64 0.22.1", @@ -7422,14 +7401,14 @@ dependencies = [ "spl-token-2022 4.0.0", "spl-token-group-interface 0.3.0", "spl-token-metadata-interface 0.4.0", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-transaction-status-client-types" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb35fb678fec581e9bdf6350d2c7f5829951a6280038fc06949b1589a9605e1" +checksum = "c2be74165813eeb798c755509d2fcd64bb4afbdab1973dafd6a10384a4851ed4" dependencies = [ "base64 0.22.1", "bincode", @@ -7440,14 +7419,14 @@ dependencies = [ "solana-account-decoder-client-types", "solana-sdk", "solana-signature", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-turbine" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf66a4e4cf0deed11e1d351fdce52e2a48058bd4b7ece4f5e1e1b435911460e0" +checksum = "441634fc55c92e08778f281d53bb899ccfcd40b1bff37237a7978966f94bbf05" dependencies = [ "bincode", "bytes", @@ -7479,15 +7458,15 @@ dependencies = [ "solana-sdk", "solana-streamer", "static_assertions", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", ] [[package]] name = "solana-type-overrides" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2066f25d460d63801f91436c2640aaba4f2dc95aa18fe1e76f7f2c063e981d4e" +checksum = "9041b231979c65651a46df4d5421791a9be73bdd4f99dbf873acf325d909f6d8" dependencies = [ "lazy_static", "rand 0.8.5", @@ -7495,24 +7474,24 @@ dependencies = [ [[package]] name = "solana-udp-client" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ec0cbc2d5e3379fafb2c1493f2358f07c09e76e2081c44e3a8c36da12fbd40" +checksum = "a824589762330e27948641afd210e71d48fd8499b725760a3d992d9a2f13fce5" dependencies = [ "async-trait", "solana-connection-cache", "solana-net-utils", "solana-sdk", "solana-streamer", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", ] [[package]] name = "solana-unified-scheduler-logic" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7b34042dc9a9731d47fc0ae1f5e0b4a393b0ad51b27b633df3d21771e4f12b" +checksum = "604c4188ee7a3a77800bf70ebd3f9b6d02aa1e3adc9216bb9fa65a1488c3f58d" dependencies = [ "assert_matches", "solana-sdk", @@ -7521,9 +7500,9 @@ dependencies = [ [[package]] name = "solana-unified-scheduler-pool" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "672e74caac59ba67407a9895bd34906edd9b4de1884ece54afb49607919ab957" +checksum = "6fc5bd8f0387a427024d1374f7cb6be2f255aa2d2934bf19c499c5017b5f1db7" dependencies = [ "assert_matches", "crossbeam-channel", @@ -7543,9 +7522,9 @@ dependencies = [ [[package]] name = "solana-version" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7310708b642fb83c04f44934509f4f149ffd69d0cd4cf76d9645c991177d7ea0" +checksum = "53ab2119a54857e457e238471779ab6e110457ef3fbf739931c809804dac1988" dependencies = [ "semver", "serde", @@ -7557,23 +7536,23 @@ dependencies = [ [[package]] name = "solana-vote" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab46788981765ee706094ca53ad8421aae0286a6b948e892fa7db88992a5373" +checksum = "2ecc5a694a4f7dd2fcf6e49df3cf4bbaef09617c15a802d92ec1e5ad2820c816" dependencies = [ "itertools 0.12.1", "log", "serde", "serde_derive", "solana-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-vote-program" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637cadc921725d1804a451ea7d2dff83310a12b75e0b6c83a8bb67ebc02d10f1" +checksum = "de615f1716c0903416ff0a80f593bade0135f12335ef86f59d6287b418fae40d" dependencies = [ "bincode", "log", @@ -7586,14 +7565,14 @@ dependencies = [ "solana-program", "solana-program-runtime", "solana-sdk", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "solana-wen-restart" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5c015db11fa341ee48fd17d573f27960d32e027606c7cd0586c07332923062" +checksum = "825ceb8711f3c9df22a24d6146357fa8751670dd0a34453fc38d98faf5ca178e" dependencies = [ "anyhow", "log", @@ -7614,9 +7593,9 @@ dependencies = [ [[package]] name = "solana-zk-elgamal-proof-program" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47f5ac026a972c9cbc6bd0f72f692f85ff9ceec961fc4bcb1f2550e6387e962c" +checksum = "f222634ebe7c48c596d281d2e097a768b4fab787d6026918247b1a9f8fcd2eac" dependencies = [ "bytemuck", "num-derive", @@ -7629,9 +7608,9 @@ dependencies = [ [[package]] name = "solana-zk-sdk" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18c2d96f65cb033f4dc16d3a1b085f8af0ea38012c514a8f65b9b6d75bc9339f" +checksum = "3861c1921163d384415a5204c0602d4bfa740148b98bf9f71ad00f413dc2de05" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -7654,16 +7633,16 @@ dependencies = [ "solana-program", "solana-sdk", "subtle", - "thiserror 1.0.68", + "thiserror 1.0.69", "wasm-bindgen", "zeroize", ] [[package]] name = "solana-zk-token-proof-program" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83029f0fac09633fc4463dd5a7d13959d1825dccf77889c6e617e2b1265fb2f1" +checksum = "4f1edd24aa9fae1cac67d5a8f8b3711cb49739e37ad9c250641b01d38080989e" dependencies = [ "bytemuck", "num-derive", @@ -7677,9 +7656,9 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed293089d8eebd6b5c1b53ee4ad6817889fea254274ddb34cb01ad35a2f817cb" +checksum = "d209c7b3dd10e70370ddeb7356385ce774bfa21428a5030e767288e0ea4cca1c" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -7703,7 +7682,7 @@ dependencies = [ "solana-program", "solana-sdk", "subtle", - "thiserror 1.0.68", + "thiserror 1.0.69", "zeroize", ] @@ -7721,21 +7700,15 @@ dependencies = [ "rand 0.8.5", "rustc-demangle", "scroll", - "thiserror 1.0.68", + "thiserror 1.0.69", "winapi 0.3.9", ] [[package]] name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spin" -version = "0.9.2" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "spinning_top" @@ -7759,7 +7732,7 @@ dependencies = [ "solana-program", "spl-token 6.0.0", "spl-token-2022 4.0.0", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -7854,7 +7827,7 @@ version = "0.2.0" dependencies = [ "quote", "spl-discriminator-syn 0.2.0", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -7865,7 +7838,7 @@ checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ "quote", "spl-discriminator-syn 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -7875,8 +7848,8 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.87", - "thiserror 1.0.68", + "syn 2.0.89", + "thiserror 1.0.69", ] [[package]] @@ -7888,8 +7861,8 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.87", - "thiserror 1.0.68", + "syn 2.0.89", + "thiserror 1.0.69", ] [[package]] @@ -8202,9 +8175,9 @@ dependencies = [ [[package]] name = "spl-pod" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6166a591d93af33afd75bbd8573c5fd95fb1213f1bf254f0508c89fdb5ee156" +checksum = "c704c88fc457fa649ba3aabe195c79d885c3f26709efaddc453c8de352c90b87" dependencies = [ "borsh 1.5.3", "bytemuck", @@ -8214,6 +8187,19 @@ dependencies = [ "spl-program-error 0.5.0", ] +[[package]] +name = "spl-pod" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00e38c99f09d58df06ca9a29fc0211786a4c34f4d099c1df27b1abaa206569a4" +dependencies = [ + "bytemuck", + "bytemuck_derive", + "solana-program", + "solana-zk-sdk", + "spl-program-error 0.5.0", +] + [[package]] name = "spl-pod" version = "0.5.0" @@ -8245,7 +8231,7 @@ dependencies = [ "num-traits", "solana-program", "spl-program-error-derive 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -8269,7 +8255,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -8281,7 +8267,21 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.87", + "syn 2.0.89", +] + +[[package]] +name = "spl-record" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a56a3aa73b4168e684d79f0b264bb73dba50b060eda71ed501e8f520875861f" +dependencies = [ + "bytemuck", + "num-derive", + "num-traits", + "solana-program", + "spl-pod 0.4.0", + "thiserror 1.0.69", ] [[package]] @@ -8371,6 +8371,33 @@ dependencies = [ "tokio", ] +[[package]] +name = "spl-slashing" +version = "0.1.0" +dependencies = [ + "bincode", + "bitflags 2.6.0", + "bytemuck", + "generic-array", + "num-derive", + "num-traits", + "num_enum", + "rand 0.8.5", + "serde", + "serde_bytes", + "serde_derive", + "serde_with", + "solana-client", + "solana-entry", + "solana-ledger", + "solana-program", + "solana-program-test", + "solana-sdk", + "spl-pod 0.5.0", + "spl-record 0.2.1", + "thiserror 1.0.69", +] + [[package]] name = "spl-stake-pool" version = "2.0.1" @@ -8433,7 +8460,7 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator 0.3.0", - "spl-pod 0.3.0", + "spl-pod 0.3.1", "spl-program-error 0.5.0", "spl-type-length-value 0.5.0", ] @@ -8476,7 +8503,7 @@ dependencies = [ "num-traits", "num_enum", "solana-program", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -8512,13 +8539,13 @@ dependencies = [ "solana-security-txt", "solana-zk-token-sdk", "spl-memo 5.0.0", - "spl-pod 0.3.0", + "spl-pod 0.3.1", "spl-token 6.0.0", "spl-token-group-interface 0.3.0", "spl-token-metadata-interface 0.4.0", "spl-transfer-hook-interface 0.7.0", "spl-type-length-value 0.5.0", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -8573,7 +8600,7 @@ dependencies = [ "spl-instruction-padding", "spl-memo 6.0.0", "spl-pod 0.5.0", - "spl-record", + "spl-record 0.3.0", "spl-tlv-account-resolution 0.9.0", "spl-token-2022 6.0.0", "spl-token-client", @@ -8644,7 +8671,7 @@ dependencies = [ "spl-associated-token-account-client", "spl-elgamal-registry", "spl-memo 6.0.0", - "spl-record", + "spl-record 0.3.0", "spl-token 7.0.0", "spl-token-2022 6.0.0", "spl-token-confidential-transfer-proof-extraction", @@ -8742,7 +8769,7 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator 0.3.0", - "spl-pod 0.3.0", + "spl-pod 0.3.1", "spl-program-error 0.5.0", ] @@ -8822,7 +8849,7 @@ dependencies = [ "borsh 1.5.3", "solana-program", "spl-discriminator 0.3.0", - "spl-pod 0.3.0", + "spl-pod 0.3.1", "spl-program-error 0.5.0", "spl-type-length-value 0.5.0", ] @@ -9035,7 +9062,7 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator 0.3.0", - "spl-pod 0.3.0", + "spl-pod 0.3.1", "spl-program-error 0.5.0", "spl-tlv-account-resolution 0.7.0", "spl-type-length-value 0.5.0", @@ -9075,7 +9102,7 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator 0.3.0", - "spl-pod 0.3.0", + "spl-pod 0.3.1", "spl-program-error 0.5.0", ] @@ -9102,7 +9129,7 @@ version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -9115,6 +9142,12 @@ dependencies = [ "spl-type-length-value 0.7.0", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stateless-asks" version = "0.1.0" @@ -9157,6 +9190,12 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "strum" version = "0.24.1" @@ -9182,7 +9221,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -9195,7 +9234,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -9212,9 +9251,9 @@ checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" [[package]] name = "syn" -version = "1.0.107" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -9223,9 +9262,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" dependencies = [ "proc-macro2", "quote", @@ -9246,10 +9285,21 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", "unicode-xid", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + [[package]] name = "sys-info" version = "0.9.1" @@ -9269,7 +9319,7 @@ dependencies = [ "bitflags 1.3.2", "byteorder", "libc", - "thiserror 1.0.68", + "thiserror 1.0.69", "walkdir", ] @@ -9296,9 +9346,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ff6c40d3aedb5e06b57c6f669ad17ab063dd1e63d977c6a88e7f4dfa4f04020" +checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" dependencies = [ "filetime", "libc", @@ -9321,10 +9371,10 @@ dependencies = [ "serde", "static_assertions", "tarpc-plugins", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "tokio-serde", - "tokio-util 0.6.9", + "tokio-util 0.6.10", "tracing", "tracing-opentelemetry", ] @@ -9337,7 +9387,7 @@ checksum = "0ee42b4e559f17bce0385ebf511a7beb67d5cc33c12c96b7f4e9789919d9c10f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -9364,18 +9414,18 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "termtree" -version = "0.2.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "test-case" @@ -9388,27 +9438,25 @@ dependencies = [ [[package]] name = "test-case-core" -version = "3.2.1" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c25e2cb8f5fcd7318157634e8838aa6f7e4715c96637f969fabaccd1ef5462" +checksum = "adcb7fd841cd518e279be3d5a3eb0636409487998a4aff22f3de87b81e88384f" dependencies = [ "cfg-if 1.0.0", - "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "test-case-macros" -version = "3.2.1" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37cfd7bbc88a0104e304229fba519bdc45501a30b760fb72240342f1289ad257" +checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" dependencies = [ - "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "test-case-core", ] @@ -9428,22 +9476,22 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "textwrap" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" +checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl 1.0.68", + "thiserror-impl 1.0.69", ] [[package]] @@ -9457,13 +9505,13 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -9474,15 +9522,16 @@ checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ + "cfg-if 1.0.0", "once_cell", ] @@ -9530,26 +9579,36 @@ dependencies = [ "rand 0.7.3", "rustc-hash 1.1.0", "sha2 0.9.9", - "thiserror 1.0.68", + "thiserror 1.0.69", "unicode-normalization", "wasm-bindgen", "zeroize", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" @@ -9561,7 +9620,7 @@ dependencies = [ "bytes", "libc", "mio", - "parking_lot 0.12.0", + "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", "socket2", @@ -9587,14 +9646,14 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "tokio-native-tls" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", @@ -9649,14 +9708,14 @@ dependencies = [ "tokio", "tokio-rustls", "tungstenite", - "webpki-roots 0.25.2", + "webpki-roots 0.25.4", ] [[package]] name = "tokio-util" -version = "0.6.9" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" +checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" dependencies = [ "bytes", "futures-core", @@ -9669,9 +9728,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.1" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -9679,29 +9738,28 @@ dependencies = [ "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "toml" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.21.1" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap 2.6.0", "toml_datetime", @@ -9729,7 +9787,7 @@ dependencies = [ "percent-encoding 2.3.1", "pin-project", "prost", - "rustls-pemfile 1.0.1", + "rustls-pemfile 1.0.4", "tokio", "tokio-rustls", "tokio-stream", @@ -9749,7 +9807,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -9766,7 +9824,7 @@ dependencies = [ "rand 0.8.5", "slab", "tokio", - "tokio-util 0.7.1", + "tokio-util 0.7.12", "tower-layer", "tower-service", "tracing", @@ -9774,15 +9832,15 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -9804,14 +9862,14 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -9832,9 +9890,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.7" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5312f325fe3588e277415f5a6cca1f4ccad0f248c4cd5a4bd33032d7286abc22" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "sharded-slab", "thread_local", @@ -9849,9 +9907,9 @@ checksum = "0de5f738ceab88e2491a94ddc33c3feeadfa95fedc60363ef110845df12f3878" [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" @@ -9868,23 +9926,23 @@ dependencies = [ "rand 0.8.5", "rustls 0.21.12", "sha1", - "thiserror 1.0.68", - "url 2.5.2", + "thiserror 1.0.69", + "url 2.5.4", "utf-8", "webpki-roots 0.24.0", ] [[package]] name = "typenum" -version = "1.15.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.3" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" @@ -9906,51 +9964,54 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicase" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" -version = "1.0.3" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "unicode-xid" -version = "0.2.2" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -9977,12 +10038,6 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - [[package]] name = "untrusted" version = "0.9.0" @@ -10012,12 +10067,12 @@ dependencies = [ [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna 1.0.3", "percent-encoding 2.3.1", ] @@ -10027,11 +10082,23 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "valuable" @@ -10059,9 +10126,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "void" @@ -10090,11 +10157,10 @@ dependencies = [ [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -10132,15 +10198,15 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.28" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -10166,7 +10232,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10179,47 +10245,58 @@ checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "web-sys" -version = "0.3.55" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] -name = "webpki-roots" -version = "0.24.0" +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ - "rustls-webpki 0.101.7", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "webpki-roots" -version = "0.25.2" +name = "webpki-root-certs" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "9cd5da49bdf1f30054cfe0b8ce2958b8fbeb67c4d82c8967a598af481bef255c" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "webpki-roots" -version = "0.26.6" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" dependencies = [ - "rustls-pki-types", + "rustls-webpki 0.101.7", ] +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "which" -version = "4.2.5" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ "either", - "lazy_static", - "libc", + "home", + "once_cell", + "rustix", ] [[package]] @@ -10252,11 +10329,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi 0.3.9", + "windows-sys 0.59.0", ] [[package]] @@ -10265,13 +10342,22 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", ] [[package]] @@ -10294,17 +10380,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -10325,9 +10411,9 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" @@ -10337,9 +10423,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" @@ -10349,9 +10435,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" @@ -10367,9 +10453,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" @@ -10379,9 +10465,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" @@ -10391,9 +10477,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" @@ -10403,9 +10489,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" @@ -10415,9 +10501,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.40" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] @@ -10432,6 +10518,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "x509-parser" version = "0.14.0" @@ -10439,14 +10537,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ "asn1-rs", - "base64 0.13.0", + "base64 0.13.1", "data-encoding", "der-parser", "lazy_static", "nom", "oid-registry", "rusticata-macros", - "thiserror 1.0.68", + "thiserror 1.0.69", "time", ] @@ -10461,24 +10559,70 @@ dependencies = [ "rustix", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure 0.13.1", +] + [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", + "synstructure 0.13.1", ] [[package]] @@ -10498,7 +10642,29 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 3aa974f74d1..df80da2c754 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,6 +50,7 @@ members = [ "shared-memory/program", "single-pool/cli", "single-pool/program", + "slashing/program", "stake-pool/cli", "stake-pool/program", "stateless-asks/program", diff --git a/slashing/README.md b/slashing/README.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/slashing/program/Cargo.toml b/slashing/program/Cargo.toml new file mode 100644 index 00000000000..1bba23d2cbf --- /dev/null +++ b/slashing/program/Cargo.toml @@ -0,0 +1,44 @@ +[package] +name = "spl-slashing" +version = "0.1.0" +description = "Solana Program Library Slashing" +authors = ["Solana Labs Maintainers "] +repository = "https://github.com/solana-labs/solana-program-library" +license = "Apache-2.0" +edition = "2021" + +[features] +no-entrypoint = [] +test-sbf = [] + +[dependencies] +bitflags = { version = "2.6.0", features = ["serde"] } +bytemuck = { version = "1.19.0", features = ["derive"] } +num_enum = "0.7.3" +generic-array = { version = "0.14.7", features = ["serde"], default-features = false } +bincode = "1.3.3" +num-derive = "0.4" +num-traits = "0.2" +solana-program = "2.0.3" +serde = "1.0.210" # must match the serde_derive version, see https://github.com/serde-rs/serde/issues/2584#issuecomment-1685252251 +serde_bytes = "0.11.15" +serde_derive = "1.0.210" # must match the serde version, see https://github.com/serde-rs/serde/issues/2584#issuecomment-1685252251 +serde_with = { version = "3.11.0", default-features = false } + +thiserror = "1.0" +spl-pod = { version = "0.5.0", path = "../../libraries/pod" } + +[dev-dependencies] +solana-program-test = "2.0.3" +solana-sdk = "2.0.3" +solana-ledger = "2.0.3" +solana-entry = "2.0.3" +solana-client = "2.0.3" +spl-record = "0.2.1" +rand = "0.8.5" + +[lib] +crate-type = ["cdylib", "lib"] + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] diff --git a/slashing/program/program-id.md b/slashing/program/program-id.md new file mode 100644 index 00000000000..116e8d6bcc1 --- /dev/null +++ b/slashing/program/program-id.md @@ -0,0 +1 @@ +S1ashing11111111111111111111111111111111111 diff --git a/slashing/program/src/duplicate_block_proof.rs b/slashing/program/src/duplicate_block_proof.rs new file mode 100644 index 00000000000..8000b51c6ff --- /dev/null +++ b/slashing/program/src/duplicate_block_proof.rs @@ -0,0 +1,830 @@ +use { + crate::{ + error::SlashingError, + shred::{Shred, ShredType}, + state::{ProofType, SlashingProofData}, + }, + serde_derive::{Deserialize, Serialize}, + solana_program::{clock::Slot, msg, pubkey::Pubkey}, +}; + +#[derive(Deserialize, Serialize)] +pub struct DuplicateBlockProofData { + #[serde(with = "serde_bytes")] + pub shred1: Vec, + #[serde(with = "serde_bytes")] + pub shred2: Vec, +} + +impl SlashingProofData for DuplicateBlockProofData { + const PROOF_TYPE: ProofType = ProofType::DuplicateBlockProof; + + fn verify_proof(self, slot: Slot, node_pubkey: Pubkey) -> Result<(), SlashingError> { + msg!( + "Verifying duplicate proof for {} slot {}", + node_pubkey, + slot + ); + // TODO: verify through instruction inspection that the shreds were sigverified + // earlier in this transaction. + // Ed25519 Singature verification is performed on the merkle root: + // node_pubkey.verify_strict(merkle_root, signature). + // We will verify that the pubkey merkle root and signature match the shred and + // that the verification was successful. + let shred1 = Shred::new_from_payload(self.shred1)?; + let shred2 = Shred::new_from_payload(self.shred2)?; + check_shreds(slot, &shred1, &shred2) + } +} + +/// Check that `shred1` and `shred2` indicate a valid duplicate proof +/// - Must be for the same slot `slot` +/// - Must be for the same shred version +/// - Must have a merkle root conflict, otherwise `shred1` and `shred2` must +/// have the same `shred_type` +/// - If `shred1` and `shred2` share the same index they must be not have +/// equal payloads excluding the retransmitter signature +/// - If `shred1` and `shred2` do not share the same index and are data +/// shreds verify that they indicate an index conflict. One of them must +/// be the LAST_SHRED_IN_SLOT, however the other shred must have a higher +/// index. +/// - If `shred1` and `shred2` do not share the same index and are coding +/// shreds verify that they have conflicting erasure metas +fn check_shreds(slot: Slot, shred1: &Shred, shred2: &Shred) -> Result<(), SlashingError> { + if shred1.slot()? != slot { + msg!( + "Invalid proof for different slots {} vs {}", + shred1.slot()?, + slot, + ); + return Err(SlashingError::SlotMismatch); + } + + if shred2.slot()? != slot { + msg!( + "Invalid proof for different slots {} vs {}", + shred1.slot()?, + slot, + ); + return Err(SlashingError::SlotMismatch); + } + + if shred1.version()? != shred2.version()? { + msg!( + "Invalid proof for different shred versions {} vs {}", + shred1.version()?, + shred2.version()?, + ); + return Err(SlashingError::InvalidShredVersion); + } + + // Merkle root conflict check + if shred1.fec_set_index()? == shred2.fec_set_index()? + && shred1.merkle_root()? != shred2.merkle_root()? + { + // Legacy shreds are discarded by validators and already filtered out + // above during proof deserialization, so any valid proof should have + // merkle roots. + msg!( + "Valid merkle root conflict for fec set {}, {:?} vs {:?}", + shred1.fec_set_index()?, + shred1.merkle_root()?, + shred2.merkle_root()? + ); + return Ok(()); + } + + // Overlapping fec set check + if shred1.shred_type() == ShredType::Code && shred1.fec_set_index()? < shred2.fec_set_index()? { + let next_fec_set_index = shred1.next_fec_set_index()?; + if next_fec_set_index > shred2.fec_set_index()? { + msg!( + "Valid overlapping fec set conflict. fec set {}'s next set is {} \ + however we observed a shred with fec set index {}", + shred1.fec_set_index()?, + next_fec_set_index, + shred2.fec_set_index()? + ); + return Ok(()); + } + } + + if shred2.shred_type() == ShredType::Code && shred1.fec_set_index()? > shred2.fec_set_index()? { + let next_fec_set_index = shred2.next_fec_set_index()?; + if next_fec_set_index > shred1.fec_set_index()? { + msg!( + "Valid overlapping fec set conflict. fec set {}'s next set is {} \ + however we observed a shred with fec set index {}", + shred2.fec_set_index()?, + next_fec_set_index, + shred1.fec_set_index()? + ); + return Ok(()); + } + } + + if shred1.shred_type() != shred2.shred_type() { + msg!( + "Invalid proof for different shred types {:?} vs {:?}", + shred1.shred_type(), + shred2.shred_type() + ); + return Err(SlashingError::ShredTypeMismatch); + } + + if shred1.index()? == shred2.index()? { + if shred1.is_shred_duplicate(shred2) { + msg!("Valid payload mismatch for shred index {}", shred1.index()?); + return Ok(()); + } + msg!( + "Invalid proof, payload matches for index {}", + shred1.index()? + ); + return Err(SlashingError::InvalidPayloadProof); + } + + if shred1.shred_type() == ShredType::Data { + if shred1.last_in_slot()? && shred2.index()? > shred1.index()? { + msg!( + "Valid last in slot conflict last index {} but shred with index {} is present", + shred1.index()?, + shred2.index()? + ); + return Ok(()); + } + if shred2.last_in_slot()? && shred1.index()? > shred2.index()? { + msg!( + "Valid last in slot conflict last index {} but shred with index {} is present", + shred2.index()?, + shred1.index()? + ); + return Ok(()); + } + msg!( + "Invalid proof, no last in shred conflict for data shreds {} and {}", + shred1.index()?, + shred2.index()? + ); + return Err(SlashingError::InvalidLastIndexConflict); + } + + if shred1.fec_set_index() == shred2.fec_set_index() + && !shred1.check_erasure_consistency(shred2)? + { + msg!( + "Valid erasure meta conflict in fec set {}, config {:?} vs {:?}", + shred1.fec_set_index()?, + shred1.erasure_meta()?, + shred2.erasure_meta()?, + ); + return Ok(()); + } + msg!( + "Invalid proof, no erasure meta conflict for coding shreds set {} idx {} and set {} idx {}", + shred1.fec_set_index()?, + shred1.index()?, + shred2.fec_set_index()?, + shred2.index()?, + ); + Err(SlashingError::InvalidErasureMetaConflict) +} + +#[cfg(test)] +mod tests { + use { + super::*, + crate::shred::{ + tests::{new_rand_coding_shreds, new_rand_data_shred, new_rand_shreds}, + SIZE_OF_SIGNATURE, + }, + rand::Rng, + solana_ledger::{ + blockstore_meta::DuplicateSlotProof as SolanaDuplicateSlotProof, + shred::{Shred as SolanaShred, Shredder}, + }, + solana_sdk::signature::{Keypair, Signature, Signer}, + std::sync::Arc, + }; + + fn generate_proof_data(shred1: &SolanaShred, shred2: &SolanaShred) -> DuplicateBlockProofData { + let duplicate_proof = SolanaDuplicateSlotProof { + shred1: shred1.payload().clone(), + shred2: shred2.payload().clone(), + }; + let data = bincode::serialize(&duplicate_proof).unwrap(); + bincode::deserialize(&data).unwrap() + } + + #[test] + fn test_legacy_shreds_invalid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let legacy_data_shred = + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, false, false); + let legacy_coding_shred = + new_rand_coding_shreds(&mut rng, next_shred_index, 5, &shredder, &leader, false)[0] + .clone(); + let data_shred = + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, false); + let coding_shred = + new_rand_coding_shreds(&mut rng, next_shred_index, 5, &shredder, &leader, true)[0] + .clone(); + + let test_cases = [ + (legacy_data_shred.clone(), legacy_data_shred.clone()), + (legacy_coding_shred.clone(), legacy_coding_shred.clone()), + (legacy_data_shred.clone(), legacy_coding_shred.clone()), + // Mix of legacy and merkle + (legacy_data_shred.clone(), data_shred.clone()), + (legacy_coding_shred.clone(), coding_shred.clone()), + (legacy_data_shred.clone(), coding_shred.clone()), + (data_shred.clone(), legacy_coding_shred.clone()), + ]; + for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { + let proof_data = generate_proof_data(shred1, shred2); + assert_eq!( + proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + SlashingError::LegacyShreds, + ); + } + } + + #[test] + fn test_slot_invalid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder_slot = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder_bad_slot = + Shredder::new(slot + 1, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let data_shred = new_rand_data_shred( + &mut rng, + next_shred_index, + &shredder_slot, + &leader, + true, + false, + ); + let data_shred_bad_slot = new_rand_data_shred( + &mut rng, + next_shred_index, + &shredder_bad_slot, + &leader, + true, + false, + ); + let coding_shred = + new_rand_coding_shreds(&mut rng, next_shred_index, 5, &shredder_slot, &leader, true)[0] + .clone(); + + let coding_shred_bad_slot = new_rand_coding_shreds( + &mut rng, + next_shred_index, + 5, + &shredder_bad_slot, + &leader, + true, + )[0] + .clone(); + + let test_cases = vec![ + (data_shred_bad_slot.clone(), data_shred_bad_slot.clone()), + (coding_shred_bad_slot.clone(), coding_shred_bad_slot.clone()), + (data_shred_bad_slot.clone(), coding_shred_bad_slot.clone()), + (data_shred.clone(), data_shred_bad_slot.clone()), + (coding_shred.clone(), coding_shred_bad_slot.clone()), + (data_shred.clone(), coding_shred_bad_slot.clone()), + (data_shred_bad_slot.clone(), coding_shred.clone()), + ]; + + for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { + let proof_data = generate_proof_data(shred1, shred2); + assert_eq!( + proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + SlashingError::SlotMismatch + ); + } + } + + #[test] + fn test_payload_proof_valid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let shred1 = + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); + let shred2 = + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); + let proof_data = generate_proof_data(&shred1, &shred2); + proof_data.verify_proof(slot, leader.pubkey()).unwrap(); + } + + #[test] + fn test_payload_proof_invalid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let data_shred = + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); + let coding_shreds = + new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader, true); + let test_cases = vec![ + // Same data_shred + (data_shred.clone(), data_shred), + // Same coding_shred + (coding_shreds[0].clone(), coding_shreds[0].clone()), + ]; + + for (shred1, shred2) in test_cases.into_iter() { + let proof_data = generate_proof_data(&shred1, &shred2); + assert_eq!( + proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + SlashingError::InvalidPayloadProof + ); + } + } + + #[test] + fn test_merkle_root_proof_valid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let (data_shreds, coding_shreds) = new_rand_shreds( + &mut rng, + next_shred_index, + next_shred_index, + 10, + true, /* merkle_variant */ + &shredder, + &leader, + false, + ); + + let (diff_data_shreds, diff_coding_shreds) = new_rand_shreds( + &mut rng, + next_shred_index, + next_shred_index, + 10, + true, /* merkle_variant */ + &shredder, + &leader, + false, + ); + + let test_cases = vec![ + (data_shreds[0].clone(), diff_data_shreds[1].clone()), + (coding_shreds[0].clone(), diff_coding_shreds[1].clone()), + (data_shreds[0].clone(), diff_coding_shreds[0].clone()), + (coding_shreds[0].clone(), diff_data_shreds[0].clone()), + ]; + + for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { + let proof_data = generate_proof_data(shred1, shred2); + proof_data.verify_proof(slot, leader.pubkey()).unwrap(); + } + } + + #[test] + fn test_merkle_root_proof_invalid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let (data_shreds, coding_shreds) = new_rand_shreds( + &mut rng, + next_shred_index, + next_shred_index, + 10, + true, + &shredder, + &leader, + true, + ); + + let (next_data_shreds, next_coding_shreds) = new_rand_shreds( + &mut rng, + next_shred_index + 33, + next_shred_index + 33, + 10, + true, + &shredder, + &leader, + true, + ); + + let test_cases = vec![ + // Same fec set same merkle root + (coding_shreds[0].clone(), data_shreds[0].clone()), + // Different FEC set different merkle root + (coding_shreds[0].clone(), next_data_shreds[0].clone()), + (next_coding_shreds[0].clone(), data_shreds[0].clone()), + ]; + + for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { + let proof_data = generate_proof_data(shred1, shred2); + assert_eq!( + proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + SlashingError::ShredTypeMismatch + ); + } + } + + #[test] + fn test_last_index_conflict_valid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let test_cases = vec![ + ( + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true), + new_rand_data_shred( + &mut rng, + // With Merkle shreds, last erasure batch is padded with + // empty data shreds. + next_shred_index + 30, + &shredder, + &leader, + true, + false, + ), + ), + ( + new_rand_data_shred( + &mut rng, + next_shred_index + 100, + &shredder, + &leader, + true, + true, + ), + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true), + ), + ]; + + for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { + let proof_data = generate_proof_data(shred1, shred2); + proof_data.verify_proof(slot, leader.pubkey()).unwrap(); + } + } + + #[test] + fn test_last_index_conflict_invalid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let test_cases = vec![ + ( + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, false), + new_rand_data_shred( + &mut rng, + next_shred_index + 1, + &shredder, + &leader, + true, + true, + ), + ), + ( + new_rand_data_shred( + &mut rng, + next_shred_index + 1, + &shredder, + &leader, + true, + true, + ), + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, false), + ), + ( + new_rand_data_shred( + &mut rng, + next_shred_index + 100, + &shredder, + &leader, + true, + false, + ), + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, false), + ), + ( + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, false), + new_rand_data_shred( + &mut rng, + next_shred_index + 100, + &shredder, + &leader, + true, + false, + ), + ), + ]; + + for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { + let proof_data = generate_proof_data(shred1, shred2); + assert_eq!( + proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + SlashingError::InvalidLastIndexConflict + ); + } + } + + #[test] + fn test_erasure_meta_conflict_valid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let coding_shreds = + new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader, true); + let coding_shreds_bigger = + new_rand_coding_shreds(&mut rng, next_shred_index, 13, &shredder, &leader, true); + let coding_shreds_smaller = + new_rand_coding_shreds(&mut rng, next_shred_index, 7, &shredder, &leader, true); + + // Same fec-set, different index, different erasure meta + let test_cases = vec![ + (coding_shreds[0].clone(), coding_shreds_bigger[1].clone()), + (coding_shreds[0].clone(), coding_shreds_smaller[1].clone()), + ]; + for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { + let proof_data = generate_proof_data(shred1, shred2); + proof_data.verify_proof(slot, leader.pubkey()).unwrap(); + } + } + + #[test] + fn test_erasure_meta_conflict_invalid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let coding_shreds = + new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader, true); + let coding_shreds_different_fec = new_rand_coding_shreds( + &mut rng, + next_shred_index + 100, + 10, + &shredder, + &leader, + true, + ); + let coding_shreds_different_fec_and_size = new_rand_coding_shreds( + &mut rng, + next_shred_index + 100, + 13, + &shredder, + &leader, + true, + ); + + let test_cases = vec![ + // Different index, different fec set, same erasure meta + ( + coding_shreds[0].clone(), + coding_shreds_different_fec[1].clone(), + ), + // Different index, different fec set, different erasure meta + ( + coding_shreds[0].clone(), + coding_shreds_different_fec_and_size[1].clone(), + ), + // Different index, same fec set, same erasure meta + (coding_shreds[0].clone(), coding_shreds[1].clone()), + ( + coding_shreds_different_fec[0].clone(), + coding_shreds_different_fec[1].clone(), + ), + ( + coding_shreds_different_fec_and_size[0].clone(), + coding_shreds_different_fec_and_size[1].clone(), + ), + ]; + + for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { + let proof_data = generate_proof_data(shred1, shred2); + assert_eq!( + proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + SlashingError::InvalidErasureMetaConflict + ); + } + } + + #[test] + fn test_shred_version_invalid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let (data_shreds, coding_shreds) = new_rand_shreds( + &mut rng, + next_shred_index, + next_shred_index, + 10, + true, + &shredder, + &leader, + true, + ); + + // Wrong shred version + let shredder = Shredder::new(slot, parent_slot, reference_tick, version + 1).unwrap(); + let (wrong_data_shreds, wrong_coding_shreds) = new_rand_shreds( + &mut rng, + next_shred_index, + next_shred_index, + 10, + true, + &shredder, + &leader, + true, + ); + let test_cases = vec![ + // One correct shred version, one wrong + (coding_shreds[0].clone(), wrong_coding_shreds[0].clone()), + (coding_shreds[0].clone(), wrong_data_shreds[0].clone()), + (data_shreds[0].clone(), wrong_coding_shreds[0].clone()), + (data_shreds[0].clone(), wrong_data_shreds[0].clone()), + ]; + + for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { + let proof_data = generate_proof_data(shred1, shred2); + assert_eq!( + proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + SlashingError::InvalidShredVersion + ); + } + } + + #[test] + fn test_retransmitter_signature_payload_proof_invalid() { + // TODO: change visbility of shred::layout::set_retransmitter_signature. + // Hardcode offsets for now; + const DATA_SHRED_OFFSET: usize = 1139; + const CODING_SHRED_OFFSET: usize = 1164; + + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let data_shred = + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); + let coding_shred = + new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader, true)[0] + .clone(); + + let mut data_shred_different_retransmitter_payload = data_shred.clone().into_payload(); + let buffer = data_shred_different_retransmitter_payload + .get_mut(DATA_SHRED_OFFSET..DATA_SHRED_OFFSET + SIZE_OF_SIGNATURE) + .unwrap(); + buffer.copy_from_slice(Signature::new_unique().as_ref()); + let data_shred_different_retransmitter = + SolanaShred::new_from_serialized_shred(data_shred_different_retransmitter_payload) + .unwrap(); + + let mut coding_shred_different_retransmitter_payload = coding_shred.clone().into_payload(); + let buffer = coding_shred_different_retransmitter_payload + .get_mut(CODING_SHRED_OFFSET..CODING_SHRED_OFFSET + SIZE_OF_SIGNATURE) + .unwrap(); + buffer.copy_from_slice(Signature::new_unique().as_ref()); + let coding_shred_different_retransmitter = + SolanaShred::new_from_serialized_shred(coding_shred_different_retransmitter_payload) + .unwrap(); + + let test_cases = vec![ + // Same data shred from different retransmitter + (data_shred, data_shred_different_retransmitter), + // Same coding shred from different retransmitter + (coding_shred, coding_shred_different_retransmitter), + ]; + for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { + let proof_data = generate_proof_data(shred1, shred2); + assert_eq!( + proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + SlashingError::InvalidPayloadProof + ); + } + } + + #[test] + fn test_overlapping_erasure_meta_proof_valid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let coding_shreds = + new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader, true); + let (data_shred_next, coding_shred_next) = new_rand_shreds( + &mut rng, + next_shred_index + 1, + next_shred_index + 33, + 10, + true, + &shredder, + &leader, + true, + ); + + // Fec set is overlapping + let test_cases = vec![ + (coding_shreds[0].clone(), coding_shred_next[0].clone()), + (coding_shreds[0].clone(), data_shred_next[0].clone()), + ( + coding_shreds[2].clone(), + coding_shred_next.last().unwrap().clone(), + ), + ( + coding_shreds[2].clone(), + data_shred_next.last().unwrap().clone(), + ), + ]; + for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { + let proof_data = generate_proof_data(shred1, shred2); + proof_data.verify_proof(slot, leader.pubkey()).unwrap(); + } + } + + #[test] + fn test_overlapping_erasure_meta_proof_invalid() { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let (data_shred, coding_shred) = new_rand_shreds( + &mut rng, + next_shred_index, + next_shred_index, + 10, + true, + &shredder, + &leader, + true, + ); + let next_shred_index = next_shred_index + data_shred.len() as u32; + let next_code_index = next_shred_index + coding_shred.len() as u32; + let (data_shred_next, coding_shred_next) = new_rand_shreds( + &mut rng, + next_shred_index, + next_code_index, + 10, + true, + &shredder, + &leader, + true, + ); + let test_cases = vec![ + ( + coding_shred[0].clone(), + data_shred_next[0].clone(), + SlashingError::ShredTypeMismatch, + ), + ( + coding_shred[0].clone(), + coding_shred_next[0].clone(), + SlashingError::InvalidErasureMetaConflict, + ), + ( + coding_shred[0].clone(), + data_shred_next.last().unwrap().clone(), + SlashingError::ShredTypeMismatch, + ), + ( + coding_shred[0].clone(), + coding_shred_next.last().unwrap().clone(), + SlashingError::InvalidErasureMetaConflict, + ), + ]; + + for (shred1, shred2, expected) in test_cases + .iter() + .flat_map(|(a, b, c)| [(a, b, c), (b, a, c)]) + { + let proof_data = generate_proof_data(shred1, shred2); + assert_eq!( + proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + *expected, + ); + } + } +} diff --git a/slashing/program/src/entrypoint.rs b/slashing/program/src/entrypoint.rs new file mode 100644 index 00000000000..62a02f2a465 --- /dev/null +++ b/slashing/program/src/entrypoint.rs @@ -0,0 +1,14 @@ +//! Program entrypoint + +#![cfg(all(target_os = "solana", not(feature = "no-entrypoint")))] + +use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult, pubkey::Pubkey}; + +solana_program::entrypoint!(process_instruction); +fn process_instruction( + program_id: &Pubkey, + accounts: &[AccountInfo], + instruction_data: &[u8], +) -> ProgramResult { + crate::processor::process_instruction(program_id, accounts, instruction_data) +} diff --git a/slashing/program/src/error.rs b/slashing/program/src/error.rs new file mode 100644 index 00000000000..a2f4bddd303 --- /dev/null +++ b/slashing/program/src/error.rs @@ -0,0 +1,67 @@ +//! Error types + +use { + num_derive::FromPrimitive, + solana_program::{decode_error::DecodeError, program_error::ProgramError}, + thiserror::Error, +}; + +/// Errors that may be returned by the program. +#[derive(Clone, Copy, Debug, Eq, Error, FromPrimitive, PartialEq)] +pub enum SlashingError { + /// Shred deserialization error + #[error("Deserialization error")] + DeserializationError, + + /// Invalid shred variant + #[error("Invalid shred variant")] + InvalidShredVariant, + + /// Invalid merkle shred + #[error("Invalid Merkle shred")] + InvalidMerkleShred, + + /// Invalid duplicate block payload proof + #[error("invalid duplicate shreds")] + InvalidPayloadProof, + + /// Invalid duplicate block erasure meta proof + #[error("invalid erasure meta conflict")] + InvalidErasureMetaConflict, + + /// Invalid duplicate block last index proof + #[error("invalid last index conflict")] + InvalidLastIndexConflict, + + /// Invalid shred version on duplicate block proof shreds + #[error("invalid shred version")] + InvalidShredVersion, + + /// Invalid signature on duplicate block proof shreds + #[error("invalid signature")] + InvalidSignature, + + /// Legacy shreds are not supported + #[error("Legacy shreds are not eligible for slashing")] + LegacyShreds, + + /// Invalid shred type on duplicate block proof shreds + #[error("shred type mismatch")] + ShredTypeMismatch, + + /// Invalid slot on duplicate block proof shreds + #[error("slot mismatch")] + SlotMismatch, +} + +impl From for ProgramError { + fn from(e: SlashingError) -> Self { + ProgramError::Custom(e as u32) + } +} + +impl DecodeError for SlashingError { + fn type_of() -> &'static str { + "Slashing Error" + } +} diff --git a/slashing/program/src/instruction.rs b/slashing/program/src/instruction.rs new file mode 100644 index 00000000000..bbb06b0dadc --- /dev/null +++ b/slashing/program/src/instruction.rs @@ -0,0 +1,146 @@ +//! Program instructions + +use { + crate::id, + solana_program::{ + clock::Slot, + instruction::{AccountMeta, Instruction}, + program_error::ProgramError, + pubkey::Pubkey, + }, + std::mem::size_of, +}; + +/// Instructions supported by the program +#[derive(Clone, Debug, PartialEq)] +pub enum SlashingInstruction { + /// Submit a slashable violation proof for `node_pubkey`, which indicates + /// that they submitted a duplicate block to the network + /// + /// + /// Accounts expected by this instruction: + /// 0. `[]` Proof account, must be previously initialized with the proof + /// data. + /// + /// We expect the proof account to be properly sized as to hold a duplicate + /// block proof. See [ProofType] for sizing requirements. + /// + /// Deserializing the proof account from `offset` should result in a + /// [DuplicateBlockProofData] + DuplicateBlockProof { + /// Offset into the proof account to begin reading, expressed as `u64` + offset: u64, + /// Slot for which the violation occured + slot: Slot, + /// Identity pubkey of the Node that signed the duplicate block + node_pubkey: Pubkey, + }, +} + +impl SlashingInstruction { + /// Unpacks a byte buffer into a [SlashingInstruction]. + pub fn unpack(input: &[u8]) -> Result { + const U64_BYTES: usize = 8; + + let (&tag, rest) = input + .split_first() + .ok_or(ProgramError::InvalidInstructionData)?; + Ok(match tag { + 0 => { + let offset = rest + .get(..U64_BYTES) + .and_then(|slice| slice.try_into().ok()) + .map(u64::from_le_bytes) + .ok_or(ProgramError::InvalidInstructionData)?; + let slot = rest + .get(U64_BYTES..2 * U64_BYTES) + .and_then(|slice| slice.try_into().ok()) + .map(u64::from_le_bytes) + .ok_or(ProgramError::InvalidInstructionData)?; + + let node_pubkey = rest + .get(2 * U64_BYTES..) + .and_then(|slice| slice.try_into().ok()) + .map(Pubkey::new_from_array) + .ok_or(ProgramError::InvalidInstructionData)?; + + Self::DuplicateBlockProof { + offset, + slot, + node_pubkey, + } + } + _ => return Err(ProgramError::InvalidInstructionData), + }) + } + + /// Packs a [SlashingInstruction] into a byte buffer. + pub fn pack(&self) -> Vec { + let mut buf = Vec::with_capacity(size_of::()); + match self { + Self::DuplicateBlockProof { + offset, + slot, + node_pubkey, + } => { + buf.push(0); + buf.extend_from_slice(&offset.to_le_bytes()); + buf.extend_from_slice(&slot.to_le_bytes()); + buf.extend_from_slice(&node_pubkey.to_bytes()); + } + }; + buf + } +} + +/// Create a `SlashingInstruction::DuplicateBlockProof` instruction +pub fn duplicate_block_proof( + proof_account: &Pubkey, + offset: u64, + slot: Slot, + node_pubkey: Pubkey, +) -> Instruction { + Instruction { + program_id: id(), + accounts: vec![AccountMeta::new_readonly(*proof_account, false)], + data: SlashingInstruction::DuplicateBlockProof { + offset, + slot, + node_pubkey, + } + .pack(), + } +} + +#[cfg(test)] +mod tests { + use {super::*, solana_program::program_error::ProgramError}; + + const TEST_BYTES: [u8; 8] = [42; 8]; + + #[test] + fn serialize_duplicate_block_proof() { + let offset = 34; + let slot = 42; + let node_pubkey = Pubkey::new_unique(); + let instruction = SlashingInstruction::DuplicateBlockProof { + offset, + slot, + node_pubkey, + }; + let mut expected = vec![0]; + expected.extend_from_slice(&offset.to_le_bytes()); + expected.extend_from_slice(&slot.to_le_bytes()); + expected.extend_from_slice(&node_pubkey.to_bytes()); + assert_eq!(instruction.pack(), expected); + assert_eq!(SlashingInstruction::unpack(&expected).unwrap(), instruction); + } + + #[test] + fn deserialize_invalid_instruction() { + let mut expected = vec![12]; + expected.extend_from_slice(&TEST_BYTES); + let err: ProgramError = SlashingInstruction::unpack(&expected).unwrap_err(); + assert_eq!(err, ProgramError::InvalidInstructionData); + } +} diff --git a/slashing/program/src/lib.rs b/slashing/program/src/lib.rs new file mode 100644 index 00000000000..4835032fdd8 --- /dev/null +++ b/slashing/program/src/lib.rs @@ -0,0 +1,16 @@ +//! Slashing program +#![deny(missing_docs)] + +mod duplicate_block_proof; +mod entrypoint; +pub mod error; +pub mod instruction; +pub mod processor; +mod shred; +pub mod state; + +// Export current SDK types for downstream users building with a different SDK +// version +pub use solana_program; + +solana_program::declare_id!("S1ashing11111111111111111111111111111111111"); diff --git a/slashing/program/src/processor.rs b/slashing/program/src/processor.rs new file mode 100644 index 00000000000..8c336b3459d --- /dev/null +++ b/slashing/program/src/processor.rs @@ -0,0 +1,68 @@ +//! Program state processor + +use { + crate::{ + duplicate_block_proof::DuplicateBlockProofData, error::SlashingError, + instruction::SlashingInstruction, state::SlashingProofData, + }, + serde::Deserialize, + solana_program::{ + account_info::{next_account_info, AccountInfo}, + clock::Slot, + entrypoint::ProgramResult, + msg, + program_error::ProgramError, + pubkey::Pubkey, + }, +}; + +fn verify_proof_data<'a, T>(slot: Slot, pubkey: Pubkey, proof_data: &'a [u8]) -> ProgramResult +where + T: SlashingProofData + Deserialize<'a>, +{ + if proof_data.len() < T::PROOF_TYPE.proof_account_length() { + return Err(ProgramError::InvalidAccountData); + } + let proof_data: T = + bincode::deserialize(proof_data).map_err(|_| SlashingError::DeserializationError)?; + + SlashingProofData::verify_proof(proof_data, slot, pubkey)?; + + // TODO: follow up PR will record this violation in context state account. just + // log for now. + msg!( + "{} committed a {} violation in slot {}. This incident will be recorded", + pubkey, + T::PROOF_TYPE.violation_str(), + slot + ); + Ok(()) +} + +/// Instruction processor +pub fn process_instruction( + _program_id: &Pubkey, + accounts: &[AccountInfo], + input: &[u8], +) -> ProgramResult { + let instruction = SlashingInstruction::unpack(input)?; + let account_info_iter = &mut accounts.iter(); + let proof_data_info = next_account_info(account_info_iter); + + match instruction { + SlashingInstruction::DuplicateBlockProof { + offset, + slot, + node_pubkey, + } => { + msg!( + "SlashingInstruction::DuplicateBlockProof {} {}", + slot, + node_pubkey + ); + let proof_data = &proof_data_info?.data.borrow()[offset as usize..]; + verify_proof_data::(slot, node_pubkey, proof_data)?; + Ok(()) + } + } +} diff --git a/slashing/program/src/shred.rs b/slashing/program/src/shred.rs new file mode 100644 index 00000000000..811950b6e27 --- /dev/null +++ b/slashing/program/src/shred.rs @@ -0,0 +1,567 @@ +//! Shred representation +use { + crate::error::SlashingError, + bitflags::bitflags, + generic_array::{typenum::U64, GenericArray}, + num_enum::{IntoPrimitive, TryFromPrimitive}, + serde_derive::Deserialize, + solana_program::{ + clock::Slot, + hash::{hashv, Hash}, + }, +}; + +pub(crate) const SIZE_OF_SIGNATURE: usize = 64; +const SIZE_OF_SHRED_VARIANT: usize = 1; +const SIZE_OF_SLOT: usize = 8; +const SIZE_OF_INDEX: usize = 4; +const SIZE_OF_VERSION: usize = 2; +const SIZE_OF_FEC_SET_INDEX: usize = 4; +const SIZE_OF_PARENT_OFFSET: usize = 2; +const SIZE_OF_NUM_DATA_SHREDS: usize = 2; +const SIZE_OF_NUM_CODING_SHREDS: usize = 2; +const SIZE_OF_POSITION: usize = 2; + +const SIZE_OF_MERKLE_ROOT: usize = 32; +const SIZE_OF_MERKLE_PROOF_ENTRY: usize = 20; + +const OFFSET_OF_SHRED_VARIANT: usize = SIZE_OF_SIGNATURE; +const OFFSET_OF_SLOT: usize = SIZE_OF_SIGNATURE + SIZE_OF_SHRED_VARIANT; +const OFFSET_OF_INDEX: usize = OFFSET_OF_SLOT + SIZE_OF_SLOT; +const OFFSET_OF_VERSION: usize = OFFSET_OF_INDEX + SIZE_OF_INDEX; +const OFFSET_OF_FEC_SET_INDEX: usize = OFFSET_OF_VERSION + SIZE_OF_VERSION; + +const OFFSET_OF_DATA_PARENT_OFFSET: usize = OFFSET_OF_FEC_SET_INDEX + SIZE_OF_FEC_SET_INDEX; +const OFFSET_OF_DATA_SHRED_FLAGS: usize = OFFSET_OF_DATA_PARENT_OFFSET + SIZE_OF_PARENT_OFFSET; + +const OFFSET_OF_CODING_NUM_DATA_SHREDS: usize = OFFSET_OF_FEC_SET_INDEX + SIZE_OF_FEC_SET_INDEX; +const OFFSET_OF_CODING_NUM_CODING_SHREDS: usize = + OFFSET_OF_CODING_NUM_DATA_SHREDS + SIZE_OF_NUM_DATA_SHREDS; +const OFFSET_OF_CODING_POSITION: usize = + OFFSET_OF_CODING_NUM_CODING_SHREDS + SIZE_OF_NUM_CODING_SHREDS; + +type MerkleProofEntry = [u8; 20]; +const MERKLE_HASH_PREFIX_LEAF: &[u8] = b"\x00SOLANA_MERKLE_SHREDS_LEAF"; +const MERKLE_HASH_PREFIX_NODE: &[u8] = b"\x01SOLANA_MERKLE_SHREDS_NODE"; + +#[repr(transparent)] +#[derive(Clone, Copy, Default, Eq, PartialEq, Ord, PartialOrd, Hash, Deserialize)] +pub(crate) struct Signature(GenericArray); + +bitflags! { + #[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Deserialize)] + pub struct ShredFlags:u8 { + const SHRED_TICK_REFERENCE_MASK = 0b0011_1111; + const DATA_COMPLETE_SHRED = 0b0100_0000; + const LAST_SHRED_IN_SLOT = 0b1100_0000; + } +} + +#[repr(u8)] +#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, IntoPrimitive, TryFromPrimitive)] +pub(crate) enum ShredType { + Data = 0b1010_0101, + Code = 0b0101_1010, +} + +#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] +enum ShredVariant { + LegacyCode, + LegacyData, + MerkleCode { + proof_size: u8, + chained: bool, + resigned: bool, + }, + MerkleData { + proof_size: u8, + chained: bool, + resigned: bool, + }, +} + +#[derive(Clone, Debug, Eq, Hash, PartialEq)] +pub(crate) struct ErasureMeta { + num_data_shreds: usize, + num_coding_shreds: usize, + first_coding_index: u32, +} + +#[derive(Clone, PartialEq, Eq)] +pub(crate) struct Shred { + shred_type: ShredType, + proof_size: u8, + chained: bool, + resigned: bool, + payload: Vec, +} + +impl Shred { + const SIZE_OF_CODING_PAYLOAD: usize = 1228; + const SIZE_OF_DATA_PAYLOAD: usize = + Self::SIZE_OF_CODING_PAYLOAD - Self::SIZE_OF_CODING_HEADERS + SIZE_OF_SIGNATURE; + const SIZE_OF_CODING_HEADERS: usize = 89; + const SIZE_OF_DATA_HEADERS: usize = 88; + + pub(crate) fn new_from_payload(payload: Vec) -> Result { + match Self::get_shred_variant(&payload)? { + ShredVariant::LegacyCode | ShredVariant::LegacyData => Err(SlashingError::LegacyShreds), + ShredVariant::MerkleCode { + proof_size, + chained, + resigned, + } => Ok(Self { + shred_type: ShredType::Code, + proof_size, + chained, + resigned, + payload, + }), + ShredVariant::MerkleData { + proof_size, + chained, + resigned, + } => Ok(Self { + shred_type: ShredType::Data, + proof_size, + chained, + resigned, + payload, + }), + } + } + + fn get_bytes( + &self, + ) -> Result<[u8; SIZE], SlashingError> { + let end_index: usize = OFFSET + .checked_add(SIZE) + .ok_or(SlashingError::DeserializationError)?; + <[u8; SIZE]>::try_from( + self.payload + .get(OFFSET..end_index) + .ok_or(SlashingError::DeserializationError)?, + ) + .map_err(|_| SlashingError::DeserializationError) + } + + fn get_shred_variant(payload: &[u8]) -> Result { + let Some(&shred_variant) = payload.get(OFFSET_OF_SHRED_VARIANT) else { + return Err(SlashingError::DeserializationError); + }; + ShredVariant::try_from(shred_variant).map_err(|_| SlashingError::InvalidShredVariant) + } + + pub(crate) fn slot(&self) -> Result { + self.get_bytes::() + .map(Slot::from_le_bytes) + } + + pub(crate) fn index(&self) -> Result { + self.get_bytes::() + .map(u32::from_le_bytes) + } + + pub(crate) fn version(&self) -> Result { + self.get_bytes::() + .map(u16::from_le_bytes) + } + + pub(crate) fn fec_set_index(&self) -> Result { + self.get_bytes::() + .map(u32::from_le_bytes) + } + + pub(crate) fn shred_type(&self) -> ShredType { + self.shred_type + } + + pub(crate) fn last_in_slot(&self) -> Result { + debug_assert!(self.shred_type == ShredType::Data); + let Some(&flags) = self.payload.get(OFFSET_OF_DATA_SHRED_FLAGS) else { + return Err(SlashingError::DeserializationError); + }; + + let flags: ShredFlags = + bincode::deserialize(&[flags]).map_err(|_| SlashingError::InvalidShredVariant)?; + Ok(flags.contains(ShredFlags::LAST_SHRED_IN_SLOT)) + } + + fn num_data_shreds(&self) -> Result { + debug_assert!(self.shred_type == ShredType::Code); + self.get_bytes::() + .map(u16::from_le_bytes) + .map(usize::from) + } + + fn num_coding_shreds(&self) -> Result { + debug_assert!(self.shred_type == ShredType::Code); + self.get_bytes::() + .map(u16::from_le_bytes) + .map(usize::from) + } + + fn position(&self) -> Result { + debug_assert!(self.shred_type == ShredType::Code); + self.get_bytes::() + .map(u16::from_le_bytes) + .map(usize::from) + } + + pub(crate) fn next_fec_set_index(&self) -> Result { + debug_assert!(self.shred_type == ShredType::Code); + let num_data = u32::try_from(self.num_data_shreds()?) + .map_err(|_| SlashingError::DeserializationError)?; + self.fec_set_index()? + .checked_add(num_data) + .ok_or(SlashingError::DeserializationError) + } + + pub(crate) fn erasure_meta(&self) -> Result { + debug_assert!(self.shred_type == ShredType::Code); + let num_data_shreds = self.num_data_shreds()?; + let num_coding_shreds = self.num_coding_shreds()?; + let first_coding_index = self + .index()? + .checked_sub( + u32::try_from(self.position()?).map_err(|_| SlashingError::DeserializationError)?, + ) + .ok_or(SlashingError::DeserializationError)?; + Ok(ErasureMeta { + num_data_shreds, + num_coding_shreds, + first_coding_index, + }) + } + + fn erasure_batch_index(&self) -> Result { + match self.shred_type { + ShredType::Data => self + .index()? + .checked_sub(self.fec_set_index()?) + .and_then(|x| usize::try_from(x).ok()) + .ok_or(SlashingError::DeserializationError), + ShredType::Code => self + .num_data_shreds()? + .checked_add(self.position()?) + .ok_or(SlashingError::DeserializationError), + } + } + + pub(crate) fn merkle_root(&self) -> Result { + let (proof_offset, proof_size) = self.get_proof_offset_and_size()?; + let proof_end = proof_offset + .checked_add(proof_size) + .ok_or(SlashingError::DeserializationError)?; + let index = self.erasure_batch_index()?; + + let proof = self + .payload + .get(proof_offset..proof_end) + .ok_or(SlashingError::InvalidMerkleShred)? + .chunks(SIZE_OF_MERKLE_PROOF_ENTRY) + .map(<&MerkleProofEntry>::try_from) + .map(Result::unwrap); + let node = self + .payload + .get(SIZE_OF_SIGNATURE..proof_offset) + .ok_or(SlashingError::InvalidMerkleShred)?; + let node = hashv(&[MERKLE_HASH_PREFIX_LEAF, node]); + + Self::get_merkle_root(index, node, proof) + } + + fn get_proof_offset_and_size(&self) -> Result<(usize, usize), SlashingError> { + let (header_size, payload_size) = match self.shred_type { + ShredType::Code => (Self::SIZE_OF_CODING_HEADERS, Self::SIZE_OF_CODING_PAYLOAD), + ShredType::Data => (Self::SIZE_OF_DATA_HEADERS, Self::SIZE_OF_DATA_PAYLOAD), + }; + let proof_size = usize::from(self.proof_size) + .checked_mul(SIZE_OF_MERKLE_PROOF_ENTRY) + .ok_or(SlashingError::DeserializationError)?; + let bytes_past_end = header_size + .checked_add(if self.chained { SIZE_OF_MERKLE_ROOT } else { 0 }) + .and_then(|x| x.checked_add(proof_size)) + .and_then(|x| x.checked_add(if self.resigned { SIZE_OF_SIGNATURE } else { 0 })) + .ok_or(SlashingError::DeserializationError)?; + + let capacity = payload_size + .checked_sub(bytes_past_end) + .ok_or(SlashingError::DeserializationError)?; + let proof_offset = header_size + .checked_add(capacity) + .and_then(|x| x.checked_add(if self.chained { SIZE_OF_MERKLE_ROOT } else { 0 })) + .ok_or(SlashingError::DeserializationError)?; + Ok((proof_offset, proof_size)) + } + + // Obtains parent's hash by joining two sibiling nodes in merkle tree. + fn join_nodes, T: AsRef<[u8]>>(node: S, other: T) -> Hash { + let node = &node.as_ref()[..SIZE_OF_MERKLE_PROOF_ENTRY]; + let other = &other.as_ref()[..SIZE_OF_MERKLE_PROOF_ENTRY]; + hashv(&[MERKLE_HASH_PREFIX_NODE, node, other]) + } + + // Recovers root of the merkle tree from a leaf node + // at the given index and the respective proof. + fn get_merkle_root<'a, I>(index: usize, node: Hash, proof: I) -> Result + where + I: IntoIterator, + { + let (index, root) = proof + .into_iter() + .fold((index, node), |(index, node), other| { + let parent = if index % 2 == 0 { + Self::join_nodes(node, other) + } else { + Self::join_nodes(other, node) + }; + (index >> 1, parent) + }); + (index == 0) + .then_some(root) + .ok_or(SlashingError::InvalidMerkleShred) + } + + /// Returns true if the other shred has the same (slot, index, + /// shred-type), but different payload. + /// Retransmitter's signature is ignored when comparing payloads. + pub(crate) fn is_shred_duplicate(&self, other: &Shred) -> bool { + if (self.slot(), self.index(), self.shred_type()) + != (other.slot(), other.index(), other.shred_type()) + { + return false; + } + fn get_payload(shred: &Shred) -> &[u8] { + let Ok((proof_offset, proof_size)) = shred.get_proof_offset_and_size() else { + return &shred.payload; + }; + if !shred.resigned { + return &shred.payload; + } + let Some(offset) = proof_offset.checked_add(proof_size) else { + return &shred.payload; + }; + shred + .payload + .get(..offset) + .unwrap_or_else(|| &shred.payload) + } + get_payload(self) != get_payload(other) + } + + /// Returns true if the erasure metas of the other shred matches ours. + /// Assumes that other shred has the same fec set index as ours. + pub(crate) fn check_erasure_consistency(&self, other: &Shred) -> Result { + debug_assert!(self.fec_set_index() == other.fec_set_index()); + debug_assert!(self.shred_type == ShredType::Code); + debug_assert!(other.shred_type == ShredType::Code); + Ok(self.erasure_meta()? == other.erasure_meta()?) + } +} + +impl TryFrom for ShredVariant { + type Error = SlashingError; + fn try_from(shred_variant: u8) -> Result { + if shred_variant == u8::from(ShredType::Code) { + Ok(ShredVariant::LegacyCode) + } else if shred_variant == u8::from(ShredType::Data) { + Ok(ShredVariant::LegacyData) + } else { + let proof_size = shred_variant & 0x0F; + match shred_variant & 0xF0 { + 0x40 => Ok(ShredVariant::MerkleCode { + proof_size, + chained: false, + resigned: false, + }), + 0x60 => Ok(ShredVariant::MerkleCode { + proof_size, + chained: true, + resigned: false, + }), + 0x70 => Ok(ShredVariant::MerkleCode { + proof_size, + chained: true, + resigned: true, + }), + 0x80 => Ok(ShredVariant::MerkleData { + proof_size, + chained: false, + resigned: false, + }), + 0x90 => Ok(ShredVariant::MerkleData { + proof_size, + chained: true, + resigned: false, + }), + 0xb0 => Ok(ShredVariant::MerkleData { + proof_size, + chained: true, + resigned: true, + }), + _ => Err(SlashingError::InvalidShredVariant), + } + } + } +} + +#[cfg(test)] +pub(crate) mod tests { + use { + super::Shred, + crate::shred::ShredType, + rand::Rng, + solana_entry::entry::Entry, + solana_ledger::shred::{ + ProcessShredsStats, ReedSolomonCache, Shred as SolanaShred, Shredder, + }, + solana_sdk::{hash::Hash, pubkey::Pubkey, signature::Keypair, system_transaction}, + std::sync::Arc, + }; + + pub(crate) fn new_rand_data_shred( + rng: &mut R, + next_shred_index: u32, + shredder: &Shredder, + keypair: &Keypair, + merkle_variant: bool, + is_last_in_slot: bool, + ) -> SolanaShred { + let (mut data_shreds, _) = new_rand_shreds( + rng, + next_shred_index, + next_shred_index, + 5, + merkle_variant, + shredder, + keypair, + is_last_in_slot, + ); + data_shreds.pop().unwrap() + } + + pub(crate) fn new_rand_coding_shreds( + rng: &mut R, + next_shred_index: u32, + num_entries: usize, + shredder: &Shredder, + keypair: &Keypair, + merkle_variant: bool, + ) -> Vec { + let (_, coding_shreds) = new_rand_shreds( + rng, + next_shred_index, + next_shred_index, + num_entries, + merkle_variant, + shredder, + keypair, + true, + ); + coding_shreds + } + + #[allow(clippy::too_many_arguments)] + pub(crate) fn new_rand_shreds( + rng: &mut R, + next_shred_index: u32, + next_code_index: u32, + num_entries: usize, + merkle_variant: bool, + shredder: &Shredder, + keypair: &Keypair, + is_last_in_slot: bool, + ) -> (Vec, Vec) { + let entries: Vec<_> = std::iter::repeat_with(|| { + let tx = system_transaction::transfer( + &Keypair::new(), // from + &Pubkey::new_unique(), // to + rng.gen(), // lamports + Hash::new_unique(), // recent blockhash + ); + Entry::new( + &Hash::new_unique(), // prev_hash + 1, // num_hashes, + vec![tx], // transactions + ) + }) + .take(num_entries) + .collect(); + shredder.entries_to_shreds( + keypair, + &entries, + is_last_in_slot, + // chained_merkle_root + Some(Hash::new_from_array(rng.gen())), + next_shred_index, + next_code_index, // next_code_index + merkle_variant, + &ReedSolomonCache::default(), + &mut ProcessShredsStats::default(), + ) + } + + #[test] + fn test_solana_shred_parity() { + // Verify that the deserialization functions match solana shred format + for _ in 0..300 { + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let slot = rng.gen_range(1..u64::MAX); + let parent_slot = slot - 1; + let reference_tick = 0; + let version = rng.gen_range(0..u16::MAX); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..671); + let next_code_index = rng.gen_range(0..781); + let is_last_in_slot = rng.gen_bool(0.5); + let (data_solana_shreds, coding_solana_shreds) = new_rand_shreds( + &mut rng, + next_shred_index, + next_code_index, + 10, + true, + &shredder, + &leader, + is_last_in_slot, + ); + + for solana_shred in data_solana_shreds + .into_iter() + .chain(coding_solana_shreds.into_iter()) + { + let payload = solana_shred.payload().clone(); + let shred = Shred::new_from_payload(payload).unwrap(); + + assert_eq!(shred.slot().unwrap(), solana_shred.slot()); + assert_eq!(shred.index().unwrap(), solana_shred.index()); + assert_eq!(shred.version().unwrap(), solana_shred.version()); + assert_eq!( + u8::from(shred.shred_type()), + u8::from(solana_shred.shred_type()) + ); + if shred.shred_type() == ShredType::Data { + assert_eq!(shred.last_in_slot().unwrap(), solana_shred.last_in_slot()); + } else { + let erasure_meta = shred.erasure_meta().unwrap(); + assert_eq!( + erasure_meta.num_data_shreds, + shred.num_data_shreds().unwrap() + ); + assert_eq!( + erasure_meta.num_coding_shreds, + shred.num_coding_shreds().unwrap() + ); + // We cannot verify first_coding_index until visibility is + // changed in agave + } + assert_eq!( + shred.merkle_root().unwrap(), + solana_shred.merkle_root().unwrap() + ); + assert_eq!(&shred.payload, solana_shred.payload()); + } + } + } +} diff --git a/slashing/program/src/state.rs b/slashing/program/src/state.rs new file mode 100644 index 00000000000..fbcfccf28b7 --- /dev/null +++ b/slashing/program/src/state.rs @@ -0,0 +1,77 @@ +//! Program state +use { + crate::{duplicate_block_proof::DuplicateBlockProofData, error::SlashingError}, + solana_program::{clock::Slot, pubkey::Pubkey}, +}; + +const PACKET_DATA_SIZE: usize = 1232; + +/// Types of slashing proofs +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum ProofType { + /// Invalid proof type + InvalidType, + /// Proof consisting of 2 shreds signed by the leader indicating the leader + /// submitted a duplicate block. + DuplicateBlockProof, +} + +impl ProofType { + /// Size of the proof account to create in order to hold the proof data + /// header and contents + pub const fn proof_account_length(&self) -> usize { + match self { + Self::InvalidType => panic!("Cannot determine size of invalid proof type"), + Self::DuplicateBlockProof => { + // Duplicate block proof consists of 2 shreds that can be `PACKET_DATA_SIZE` + std::mem::size_of::().saturating_add(2 * PACKET_DATA_SIZE) + } + } + } + + /// Display string for this proof type's violation + pub fn violation_str(&self) -> &str { + match self { + Self::InvalidType => "invalid", + Self::DuplicateBlockProof => "duplicate block", + } + } +} + +impl From for u8 { + fn from(value: ProofType) -> Self { + match value { + ProofType::InvalidType => 0, + ProofType::DuplicateBlockProof => 1, + } + } +} + +impl From for ProofType { + fn from(value: u8) -> Self { + match value { + 1 => Self::DuplicateBlockProof, + _ => Self::InvalidType, + } + } +} + +/// Trait that proof accounts must satisfy in order to verify via the slashing +/// program +pub trait SlashingProofData { + /// The type of proof this data represents + const PROOF_TYPE: ProofType; + + /// Verification logic for this type of proof data + fn verify_proof(self, slot: Slot, pubkey: Pubkey) -> Result<(), SlashingError>; +} + +#[cfg(test)] +mod tests { + use crate::state::PACKET_DATA_SIZE; + + #[test] + fn test_packet_size_parity() { + assert_eq!(PACKET_DATA_SIZE, solana_sdk::packet::PACKET_DATA_SIZE); + } +} diff --git a/slashing/program/tests/duplicate_block_proof.rs b/slashing/program/tests/duplicate_block_proof.rs new file mode 100644 index 00000000000..29923616423 --- /dev/null +++ b/slashing/program/tests/duplicate_block_proof.rs @@ -0,0 +1,375 @@ +#![cfg(feature = "test-sbf")] + +use { + rand::Rng, + solana_entry::entry::Entry, + solana_ledger::{ + blockstore_meta::{DuplicateSlotProof, ErasureMeta}, + shred::{ProcessShredsStats, ReedSolomonCache, Shred, Shredder}, + }, + solana_program::pubkey::Pubkey, + solana_program_test::*, + solana_sdk::{ + decode_error::DecodeError, + hash::Hash, + instruction::InstructionError, + rent::Rent, + signature::{Keypair, Signer}, + system_instruction, system_transaction, + transaction::{Transaction, TransactionError}, + }, + spl_pod::bytemuck::pod_get_packed_len, + spl_record::{instruction as record, state::RecordData}, + spl_slashing::{ + error::SlashingError, id, instruction, processor::process_instruction, state::ProofType, + }, + std::sync::Arc, +}; + +fn program_test() -> ProgramTest { + let mut program_test = ProgramTest::new("spl_slashing", id(), processor!(process_instruction)); + program_test.add_program( + "spl_record", + spl_record::id(), + processor!(spl_record::processor::process_instruction), + ); + program_test +} + +async fn initialize_duplicate_proof_account( + context: &mut ProgramTestContext, + authority: &Keypair, + account: &Keypair, +) { + let account_length = ProofType::DuplicateBlockProof + .proof_account_length() + .saturating_add(pod_get_packed_len::()); + println!("Creating account of size {account_length}"); + let transaction = Transaction::new_signed_with_payer( + &[ + system_instruction::create_account( + &context.payer.pubkey(), + &account.pubkey(), + 1.max(Rent::default().minimum_balance(account_length)), + account_length as u64, + &spl_record::id(), + ), + record::initialize(&account.pubkey(), &authority.pubkey()), + ], + Some(&context.payer.pubkey()), + &[&context.payer, account], + context.last_blockhash, + ); + context + .banks_client + .process_transaction(transaction) + .await + .unwrap(); +} + +async fn write_proof( + context: &mut ProgramTestContext, + authority: &Keypair, + account: &Keypair, + proof: &[u8], +) { + let mut offset = 0; + let proof_len = proof.len(); + let chunk_size = 800; + println!("Writing a proof of size {proof_len}"); + while offset < proof_len { + let end = std::cmp::min(offset.checked_add(chunk_size).unwrap(), proof_len); + let transaction = Transaction::new_signed_with_payer( + &[record::write( + &account.pubkey(), + &authority.pubkey(), + offset as u64, + &proof[offset..end], + )], + Some(&context.payer.pubkey()), + &[&context.payer, authority], + context.last_blockhash, + ); + context + .banks_client + .process_transaction(transaction) + .await + .unwrap(); + + offset = offset.checked_add(chunk_size).unwrap(); + } +} + +pub fn new_rand_data_shred( + rng: &mut R, + next_shred_index: u32, + shredder: &Shredder, + keypair: &Keypair, + is_last_in_slot: bool, +) -> Shred { + let (mut data_shreds, _) = new_rand_shreds( + rng, + next_shred_index, + next_shred_index, + 5, + shredder, + keypair, + is_last_in_slot, + ); + data_shreds.pop().unwrap() +} + +pub(crate) fn new_rand_coding_shreds( + rng: &mut R, + next_shred_index: u32, + num_entries: usize, + shredder: &Shredder, + keypair: &Keypair, +) -> Vec { + let (_, coding_shreds) = new_rand_shreds( + rng, + next_shred_index, + next_shred_index, + num_entries, + shredder, + keypair, + true, + ); + coding_shreds +} + +pub(crate) fn new_rand_shreds( + rng: &mut R, + next_shred_index: u32, + next_code_index: u32, + num_entries: usize, + shredder: &Shredder, + keypair: &Keypair, + is_last_in_slot: bool, +) -> (Vec, Vec) { + let entries: Vec<_> = std::iter::repeat_with(|| { + let tx = system_transaction::transfer( + &Keypair::new(), // from + &Pubkey::new_unique(), // to + rng.gen(), // lamports + Hash::new_unique(), // recent blockhash + ); + Entry::new( + &Hash::new_unique(), // prev_hash + 1, // num_hashes, + vec![tx], // transactions + ) + }) + .take(num_entries) + .collect(); + shredder.entries_to_shreds( + keypair, + &entries, + is_last_in_slot, + // chained_merkle_root + Some(Hash::new_from_array(rng.gen())), + next_shred_index, + next_code_index, // next_code_index + true, // merkle_variant + &ReedSolomonCache::default(), + &mut ProcessShredsStats::default(), + ) +} + +#[tokio::test] +async fn valid_proof_data() { + let mut context = program_test().start_with_context().await; + + let authority = Keypair::new(); + let account = Keypair::new(); + + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let shred1 = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true); + let shred2 = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true); + + assert_ne!( + shred1.merkle_root().unwrap(), + shred2.merkle_root().unwrap(), + "Expecting merkle root conflict", + ); + + let duplicate_proof = DuplicateSlotProof { + shred1: shred1.into_payload(), + shred2: shred2.into_payload(), + }; + let data = bincode::serialize(&duplicate_proof).unwrap(); + + initialize_duplicate_proof_account(&mut context, &authority, &account).await; + write_proof(&mut context, &authority, &account, &data).await; + + let transaction = Transaction::new_signed_with_payer( + &[instruction::duplicate_block_proof( + &account.pubkey(), + RecordData::WRITABLE_START_INDEX as u64, + slot, + leader.pubkey(), + )], + Some(&context.payer.pubkey()), + &[&context.payer], + context.last_blockhash, + ); + context + .banks_client + .process_transaction(transaction) + .await + .unwrap(); +} + +#[tokio::test] +async fn valid_proof_coding() { + let mut context = program_test().start_with_context().await; + + let authority = Keypair::new(); + let account = Keypair::new(); + + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let shred1 = + new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader)[0].clone(); + let shred2 = + new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader)[1].clone(); + + assert!( + ErasureMeta::check_erasure_consistency(&shred1, &shred2), + "Expected erasure consistency failure", + ); + + let duplicate_proof = DuplicateSlotProof { + shred1: shred1.into_payload(), + shred2: shred2.into_payload(), + }; + let data = bincode::serialize(&duplicate_proof).unwrap(); + + initialize_duplicate_proof_account(&mut context, &authority, &account).await; + write_proof(&mut context, &authority, &account, &data).await; + + let transaction = Transaction::new_signed_with_payer( + &[instruction::duplicate_block_proof( + &account.pubkey(), + RecordData::WRITABLE_START_INDEX as u64, + slot, + leader.pubkey(), + )], + Some(&context.payer.pubkey()), + &[&context.payer], + context.last_blockhash, + ); + context + .banks_client + .process_transaction(transaction) + .await + .unwrap(); +} + +#[tokio::test] +async fn invalid_proof_data() { + let mut context = program_test().start_with_context().await; + + let authority = Keypair::new(); + let account = Keypair::new(); + + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let shred1 = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true); + let shred2 = shred1.clone(); + + let duplicate_proof = DuplicateSlotProof { + shred1: shred1.into_payload(), + shred2: shred2.into_payload(), + }; + let data = bincode::serialize(&duplicate_proof).unwrap(); + + initialize_duplicate_proof_account(&mut context, &authority, &account).await; + write_proof(&mut context, &authority, &account, &data).await; + + let transaction = Transaction::new_signed_with_payer( + &[instruction::duplicate_block_proof( + &account.pubkey(), + RecordData::WRITABLE_START_INDEX as u64, + slot, + leader.pubkey(), + )], + Some(&context.payer.pubkey()), + &[&context.payer], + context.last_blockhash, + ); + let err = context + .banks_client + .process_transaction(transaction) + .await + .unwrap_err() + .unwrap(); + let TransactionError::InstructionError(0, InstructionError::Custom(code)) = err else { + panic!("Invalid error {err:?}"); + }; + let err: SlashingError = SlashingError::decode_custom_error_to_enum(code).unwrap(); + assert_eq!(err, SlashingError::InvalidPayloadProof); +} + +#[tokio::test] +async fn invalid_proof_coding() { + let mut context = program_test().start_with_context().await; + + let authority = Keypair::new(); + let account = Keypair::new(); + + let mut rng = rand::thread_rng(); + let leader = Arc::new(Keypair::new()); + let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let coding_shreds = new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader); + let shred1 = coding_shreds[0].clone(); + let shred2 = coding_shreds[1].clone(); + + assert!( + ErasureMeta::check_erasure_consistency(&shred1, &shred2), + "Expecting no erasure conflict" + ); + let duplicate_proof = DuplicateSlotProof { + shred1: shred1.into_payload(), + shred2: shred2.into_payload(), + }; + let data = bincode::serialize(&duplicate_proof).unwrap(); + + initialize_duplicate_proof_account(&mut context, &authority, &account).await; + write_proof(&mut context, &authority, &account, &data).await; + + let transaction = Transaction::new_signed_with_payer( + &[instruction::duplicate_block_proof( + &account.pubkey(), + RecordData::WRITABLE_START_INDEX as u64, + slot, + leader.pubkey(), + )], + Some(&context.payer.pubkey()), + &[&context.payer], + context.last_blockhash, + ); + let err = context + .banks_client + .process_transaction(transaction) + .await + .unwrap_err() + .unwrap(); + let TransactionError::InstructionError(0, InstructionError::Custom(code)) = err else { + panic!("Invalid error {err:?}"); + }; + let err: SlashingError = SlashingError::decode_custom_error_to_enum(code).unwrap(); + assert_eq!(err, SlashingError::InvalidErasureMetaConflict); +} From 84926d89d905aba1885a1644cb2c325a840d2c29 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 20 Nov 2024 22:13:57 +0000 Subject: [PATCH 02/18] pr feedback: use local record dep --- slashing/program/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slashing/program/Cargo.toml b/slashing/program/Cargo.toml index 1bba23d2cbf..15ed491a9c7 100644 --- a/slashing/program/Cargo.toml +++ b/slashing/program/Cargo.toml @@ -34,7 +34,7 @@ solana-sdk = "2.0.3" solana-ledger = "2.0.3" solana-entry = "2.0.3" solana-client = "2.0.3" -spl-record = "0.2.1" +spl-record = { version = "0.3.0", path = "../../record/program" } rand = "0.8.5" [lib] From 4eed0b89245d859d212959ea479652f777b8fc68 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 20 Nov 2024 22:38:31 +0000 Subject: [PATCH 03/18] pr feedback: update to v2.1 crates --- Cargo.lock | 33 +++------------------------------ slashing/program/Cargo.toml | 12 ++++++------ 2 files changed, 9 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 05bdcc744b5..cdf34f0fe52 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8187,19 +8187,6 @@ dependencies = [ "spl-program-error 0.5.0", ] -[[package]] -name = "spl-pod" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e38c99f09d58df06ca9a29fc0211786a4c34f4d099c1df27b1abaa206569a4" -dependencies = [ - "bytemuck", - "bytemuck_derive", - "solana-program", - "solana-zk-sdk", - "spl-program-error 0.5.0", -] - [[package]] name = "spl-pod" version = "0.5.0" @@ -8270,20 +8257,6 @@ dependencies = [ "syn 2.0.89", ] -[[package]] -name = "spl-record" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a56a3aa73b4168e684d79f0b264bb73dba50b060eda71ed501e8f520875861f" -dependencies = [ - "bytemuck", - "num-derive", - "num-traits", - "solana-program", - "spl-pod 0.4.0", - "thiserror 1.0.69", -] - [[package]] name = "spl-record" version = "0.3.0" @@ -8394,7 +8367,7 @@ dependencies = [ "solana-program-test", "solana-sdk", "spl-pod 0.5.0", - "spl-record 0.2.1", + "spl-record", "thiserror 1.0.69", ] @@ -8600,7 +8573,7 @@ dependencies = [ "spl-instruction-padding", "spl-memo 6.0.0", "spl-pod 0.5.0", - "spl-record 0.3.0", + "spl-record", "spl-tlv-account-resolution 0.9.0", "spl-token-2022 6.0.0", "spl-token-client", @@ -8671,7 +8644,7 @@ dependencies = [ "spl-associated-token-account-client", "spl-elgamal-registry", "spl-memo 6.0.0", - "spl-record 0.3.0", + "spl-record", "spl-token 7.0.0", "spl-token-2022 6.0.0", "spl-token-confidential-transfer-proof-extraction", diff --git a/slashing/program/Cargo.toml b/slashing/program/Cargo.toml index 15ed491a9c7..042c57d6666 100644 --- a/slashing/program/Cargo.toml +++ b/slashing/program/Cargo.toml @@ -19,7 +19,7 @@ generic-array = { version = "0.14.7", features = ["serde"], default-features = f bincode = "1.3.3" num-derive = "0.4" num-traits = "0.2" -solana-program = "2.0.3" +solana-program = "2.1.0" serde = "1.0.210" # must match the serde_derive version, see https://github.com/serde-rs/serde/issues/2584#issuecomment-1685252251 serde_bytes = "0.11.15" serde_derive = "1.0.210" # must match the serde version, see https://github.com/serde-rs/serde/issues/2584#issuecomment-1685252251 @@ -29,11 +29,11 @@ thiserror = "1.0" spl-pod = { version = "0.5.0", path = "../../libraries/pod" } [dev-dependencies] -solana-program-test = "2.0.3" -solana-sdk = "2.0.3" -solana-ledger = "2.0.3" -solana-entry = "2.0.3" -solana-client = "2.0.3" +solana-program-test = "2.1.0" +solana-sdk = "2.1.0" +solana-ledger = "2.1.0" +solana-entry = "2.1.0" +solana-client = "2.1.0" spl-record = { version = "0.3.0", path = "../../record/program" } rand = "0.8.5" From 75d229bf9843e3a80f3e31d48de7fb05ee5c7276 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 20 Nov 2024 22:49:05 +0000 Subject: [PATCH 04/18] pr feedback: rename errors for consistency --- slashing/program/src/error.rs | 16 +++++++-------- slashing/program/src/processor.rs | 2 +- slashing/program/src/shred.rs | 33 ++++++++++++++++--------------- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/slashing/program/src/error.rs b/slashing/program/src/error.rs index a2f4bddd303..8859366fe2d 100644 --- a/slashing/program/src/error.rs +++ b/slashing/program/src/error.rs @@ -11,7 +11,7 @@ use { pub enum SlashingError { /// Shred deserialization error #[error("Deserialization error")] - DeserializationError, + ShredDeserializationError, /// Invalid shred variant #[error("Invalid shred variant")] @@ -22,23 +22,23 @@ pub enum SlashingError { InvalidMerkleShred, /// Invalid duplicate block payload proof - #[error("invalid duplicate shreds")] + #[error("Invalid payload proof")] InvalidPayloadProof, /// Invalid duplicate block erasure meta proof - #[error("invalid erasure meta conflict")] + #[error("Invalid erasure meta conflict")] InvalidErasureMetaConflict, /// Invalid duplicate block last index proof - #[error("invalid last index conflict")] + #[error("Invalid last index conflict")] InvalidLastIndexConflict, /// Invalid shred version on duplicate block proof shreds - #[error("invalid shred version")] + #[error("Invalid shred version")] InvalidShredVersion, /// Invalid signature on duplicate block proof shreds - #[error("invalid signature")] + #[error("Invalid signature")] InvalidSignature, /// Legacy shreds are not supported @@ -46,11 +46,11 @@ pub enum SlashingError { LegacyShreds, /// Invalid shred type on duplicate block proof shreds - #[error("shred type mismatch")] + #[error("Shred type mismatch")] ShredTypeMismatch, /// Invalid slot on duplicate block proof shreds - #[error("slot mismatch")] + #[error("Slot mismatch")] SlotMismatch, } diff --git a/slashing/program/src/processor.rs b/slashing/program/src/processor.rs index 8c336b3459d..6c3c0c1624f 100644 --- a/slashing/program/src/processor.rs +++ b/slashing/program/src/processor.rs @@ -24,7 +24,7 @@ where return Err(ProgramError::InvalidAccountData); } let proof_data: T = - bincode::deserialize(proof_data).map_err(|_| SlashingError::DeserializationError)?; + bincode::deserialize(proof_data).map_err(|_| SlashingError::ShredDeserializationError)?; SlashingProofData::verify_proof(proof_data, slot, pubkey)?; diff --git a/slashing/program/src/shred.rs b/slashing/program/src/shred.rs index 811950b6e27..03f50f10104 100644 --- a/slashing/program/src/shred.rs +++ b/slashing/program/src/shred.rs @@ -136,18 +136,18 @@ impl Shred { ) -> Result<[u8; SIZE], SlashingError> { let end_index: usize = OFFSET .checked_add(SIZE) - .ok_or(SlashingError::DeserializationError)?; + .ok_or(SlashingError::ShredDeserializationError)?; <[u8; SIZE]>::try_from( self.payload .get(OFFSET..end_index) - .ok_or(SlashingError::DeserializationError)?, + .ok_or(SlashingError::ShredDeserializationError)?, ) - .map_err(|_| SlashingError::DeserializationError) + .map_err(|_| SlashingError::ShredDeserializationError) } fn get_shred_variant(payload: &[u8]) -> Result { let Some(&shred_variant) = payload.get(OFFSET_OF_SHRED_VARIANT) else { - return Err(SlashingError::DeserializationError); + return Err(SlashingError::ShredDeserializationError); }; ShredVariant::try_from(shred_variant).map_err(|_| SlashingError::InvalidShredVariant) } @@ -179,7 +179,7 @@ impl Shred { pub(crate) fn last_in_slot(&self) -> Result { debug_assert!(self.shred_type == ShredType::Data); let Some(&flags) = self.payload.get(OFFSET_OF_DATA_SHRED_FLAGS) else { - return Err(SlashingError::DeserializationError); + return Err(SlashingError::ShredDeserializationError); }; let flags: ShredFlags = @@ -211,10 +211,10 @@ impl Shred { pub(crate) fn next_fec_set_index(&self) -> Result { debug_assert!(self.shred_type == ShredType::Code); let num_data = u32::try_from(self.num_data_shreds()?) - .map_err(|_| SlashingError::DeserializationError)?; + .map_err(|_| SlashingError::ShredDeserializationError)?; self.fec_set_index()? .checked_add(num_data) - .ok_or(SlashingError::DeserializationError) + .ok_or(SlashingError::ShredDeserializationError) } pub(crate) fn erasure_meta(&self) -> Result { @@ -224,9 +224,10 @@ impl Shred { let first_coding_index = self .index()? .checked_sub( - u32::try_from(self.position()?).map_err(|_| SlashingError::DeserializationError)?, + u32::try_from(self.position()?) + .map_err(|_| SlashingError::ShredDeserializationError)?, ) - .ok_or(SlashingError::DeserializationError)?; + .ok_or(SlashingError::ShredDeserializationError)?; Ok(ErasureMeta { num_data_shreds, num_coding_shreds, @@ -240,11 +241,11 @@ impl Shred { .index()? .checked_sub(self.fec_set_index()?) .and_then(|x| usize::try_from(x).ok()) - .ok_or(SlashingError::DeserializationError), + .ok_or(SlashingError::ShredDeserializationError), ShredType::Code => self .num_data_shreds()? .checked_add(self.position()?) - .ok_or(SlashingError::DeserializationError), + .ok_or(SlashingError::ShredDeserializationError), } } @@ -252,7 +253,7 @@ impl Shred { let (proof_offset, proof_size) = self.get_proof_offset_and_size()?; let proof_end = proof_offset .checked_add(proof_size) - .ok_or(SlashingError::DeserializationError)?; + .ok_or(SlashingError::ShredDeserializationError)?; let index = self.erasure_batch_index()?; let proof = self @@ -278,20 +279,20 @@ impl Shred { }; let proof_size = usize::from(self.proof_size) .checked_mul(SIZE_OF_MERKLE_PROOF_ENTRY) - .ok_or(SlashingError::DeserializationError)?; + .ok_or(SlashingError::ShredDeserializationError)?; let bytes_past_end = header_size .checked_add(if self.chained { SIZE_OF_MERKLE_ROOT } else { 0 }) .and_then(|x| x.checked_add(proof_size)) .and_then(|x| x.checked_add(if self.resigned { SIZE_OF_SIGNATURE } else { 0 })) - .ok_or(SlashingError::DeserializationError)?; + .ok_or(SlashingError::ShredDeserializationError)?; let capacity = payload_size .checked_sub(bytes_past_end) - .ok_or(SlashingError::DeserializationError)?; + .ok_or(SlashingError::ShredDeserializationError)?; let proof_offset = header_size .checked_add(capacity) .and_then(|x| x.checked_add(if self.chained { SIZE_OF_MERKLE_ROOT } else { 0 })) - .ok_or(SlashingError::DeserializationError)?; + .ok_or(SlashingError::ShredDeserializationError)?; Ok((proof_offset, proof_size)) } From 063c6b79c5934cf5c1b184dacf3135e994cf3b97 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 20 Nov 2024 22:55:33 +0000 Subject: [PATCH 05/18] pr feedback: do not log pubkey --- slashing/program/src/duplicate_block_proof.rs | 7 +------ slashing/program/src/processor.rs | 3 +-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/slashing/program/src/duplicate_block_proof.rs b/slashing/program/src/duplicate_block_proof.rs index 8000b51c6ff..21a4e35dee3 100644 --- a/slashing/program/src/duplicate_block_proof.rs +++ b/slashing/program/src/duplicate_block_proof.rs @@ -19,12 +19,7 @@ pub struct DuplicateBlockProofData { impl SlashingProofData for DuplicateBlockProofData { const PROOF_TYPE: ProofType = ProofType::DuplicateBlockProof; - fn verify_proof(self, slot: Slot, node_pubkey: Pubkey) -> Result<(), SlashingError> { - msg!( - "Verifying duplicate proof for {} slot {}", - node_pubkey, - slot - ); + fn verify_proof(self, slot: Slot, _node_pubkey: Pubkey) -> Result<(), SlashingError> { // TODO: verify through instruction inspection that the shreds were sigverified // earlier in this transaction. // Ed25519 Singature verification is performed on the merkle root: diff --git a/slashing/program/src/processor.rs b/slashing/program/src/processor.rs index 6c3c0c1624f..462716c4b57 100644 --- a/slashing/program/src/processor.rs +++ b/slashing/program/src/processor.rs @@ -31,8 +31,7 @@ where // TODO: follow up PR will record this violation in context state account. just // log for now. msg!( - "{} committed a {} violation in slot {}. This incident will be recorded", - pubkey, + "{} violation verified in slot {}. This incident will be recorded", T::PROOF_TYPE.violation_str(), slot ); From 10f4c2f0e4dfdd0613d5ae1498954c92e1657ffb Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 20 Nov 2024 23:04:42 +0000 Subject: [PATCH 06/18] pass along workspace lints --- slashing/program/Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/slashing/program/Cargo.toml b/slashing/program/Cargo.toml index 042c57d6666..721e10140bf 100644 --- a/slashing/program/Cargo.toml +++ b/slashing/program/Cargo.toml @@ -42,3 +42,6 @@ crate-type = ["cdylib", "lib"] [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] + +[lints] +workspace = true From 7e1874fca08502b5b2b457f4dcbcd95ef8d009c1 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Fri, 22 Nov 2024 17:20:00 +0000 Subject: [PATCH 07/18] pr feedback: use zerocopy for instruction data --- slashing/program/src/duplicate_block_proof.rs | 30 ++-- slashing/program/src/error.rs | 12 +- slashing/program/src/instruction.rs | 154 +++++++++--------- slashing/program/src/processor.rs | 35 ++-- slashing/program/src/state.rs | 2 +- 5 files changed, 118 insertions(+), 115 deletions(-) diff --git a/slashing/program/src/duplicate_block_proof.rs b/slashing/program/src/duplicate_block_proof.rs index 21a4e35dee3..b00c4f8b597 100644 --- a/slashing/program/src/duplicate_block_proof.rs +++ b/slashing/program/src/duplicate_block_proof.rs @@ -19,7 +19,7 @@ pub struct DuplicateBlockProofData { impl SlashingProofData for DuplicateBlockProofData { const PROOF_TYPE: ProofType = ProofType::DuplicateBlockProof; - fn verify_proof(self, slot: Slot, _node_pubkey: Pubkey) -> Result<(), SlashingError> { + fn verify_proof(self, slot: Slot, _node_pubkey: &Pubkey) -> Result<(), SlashingError> { // TODO: verify through instruction inspection that the shreds were sigverified // earlier in this transaction. // Ed25519 Singature verification is performed on the merkle root: @@ -242,7 +242,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), SlashingError::LegacyShreds, ); } @@ -300,7 +300,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), SlashingError::SlotMismatch ); } @@ -318,7 +318,7 @@ mod tests { let shred2 = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); let proof_data = generate_proof_data(&shred1, &shred2); - proof_data.verify_proof(slot, leader.pubkey()).unwrap(); + proof_data.verify_proof(slot, &leader.pubkey()).unwrap(); } #[test] @@ -342,7 +342,7 @@ mod tests { for (shred1, shred2) in test_cases.into_iter() { let proof_data = generate_proof_data(&shred1, &shred2); assert_eq!( - proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), SlashingError::InvalidPayloadProof ); } @@ -386,7 +386,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); - proof_data.verify_proof(slot, leader.pubkey()).unwrap(); + proof_data.verify_proof(slot, &leader.pubkey()).unwrap(); } } @@ -430,7 +430,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), SlashingError::ShredTypeMismatch ); } @@ -472,7 +472,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); - proof_data.verify_proof(slot, leader.pubkey()).unwrap(); + proof_data.verify_proof(slot, &leader.pubkey()).unwrap(); } } @@ -533,7 +533,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), SlashingError::InvalidLastIndexConflict ); } @@ -560,7 +560,7 @@ mod tests { ]; for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); - proof_data.verify_proof(slot, leader.pubkey()).unwrap(); + proof_data.verify_proof(slot, &leader.pubkey()).unwrap(); } } @@ -616,7 +616,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), SlashingError::InvalidErasureMetaConflict ); } @@ -663,7 +663,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), SlashingError::InvalidShredVersion ); } @@ -714,7 +714,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), SlashingError::InvalidPayloadProof ); } @@ -755,7 +755,7 @@ mod tests { ]; for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); - proof_data.verify_proof(slot, leader.pubkey()).unwrap(); + proof_data.verify_proof(slot, &leader.pubkey()).unwrap(); } } @@ -817,7 +817,7 @@ mod tests { { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, leader.pubkey()).unwrap_err(), + proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), *expected, ); } diff --git a/slashing/program/src/error.rs b/slashing/program/src/error.rs index 8859366fe2d..65eacd53a68 100644 --- a/slashing/program/src/error.rs +++ b/slashing/program/src/error.rs @@ -9,10 +9,6 @@ use { /// Errors that may be returned by the program. #[derive(Clone, Copy, Debug, Eq, Error, FromPrimitive, PartialEq)] pub enum SlashingError { - /// Shred deserialization error - #[error("Deserialization error")] - ShredDeserializationError, - /// Invalid shred variant #[error("Invalid shred variant")] InvalidShredVariant, @@ -29,6 +25,10 @@ pub enum SlashingError { #[error("Invalid erasure meta conflict")] InvalidErasureMetaConflict, + /// Invalid instruction + #[error("Invalid instruction")] + InvalidInstruction, + /// Invalid duplicate block last index proof #[error("Invalid last index conflict")] InvalidLastIndexConflict, @@ -45,6 +45,10 @@ pub enum SlashingError { #[error("Legacy shreds are not eligible for slashing")] LegacyShreds, + /// Shred deserialization error + #[error("Deserialization error")] + ShredDeserializationError, + /// Invalid shred type on duplicate block proof shreds #[error("Shred type mismatch")] ShredTypeMismatch, diff --git a/slashing/program/src/instruction.rs b/slashing/program/src/instruction.rs index bbb06b0dadc..d31eacf9a8e 100644 --- a/slashing/program/src/instruction.rs +++ b/slashing/program/src/instruction.rs @@ -1,18 +1,24 @@ //! Program instructions use { - crate::id, + crate::{error::SlashingError, id}, + bytemuck::{Pod, Zeroable}, + num_enum::{IntoPrimitive, TryFromPrimitive}, solana_program::{ clock::Slot, instruction::{AccountMeta, Instruction}, program_error::ProgramError, pubkey::Pubkey, }, - std::mem::size_of, + spl_pod::{ + bytemuck::{pod_from_bytes, pod_get_packed_len}, + primitives::PodU64, + }, }; /// Instructions supported by the program -#[derive(Clone, Debug, PartialEq)] +#[repr(u8)] +#[derive(Clone, Copy, Debug, PartialEq, TryFromPrimitive, IntoPrimitive)] pub enum SlashingInstruction { /// Submit a slashable violation proof for `node_pubkey`, which indicates /// that they submitted a duplicate block to the network @@ -27,69 +33,56 @@ pub enum SlashingInstruction { /// /// Deserializing the proof account from `offset` should result in a /// [DuplicateBlockProofData] - DuplicateBlockProof { - /// Offset into the proof account to begin reading, expressed as `u64` - offset: u64, - /// Slot for which the violation occured - slot: Slot, - /// Identity pubkey of the Node that signed the duplicate block - node_pubkey: Pubkey, - }, + /// + /// Data expected by this instruction: + /// DuplicateBlockProofInstructionData + DuplicateBlockProof, } -impl SlashingInstruction { - /// Unpacks a byte buffer into a [SlashingInstruction]. - pub fn unpack(input: &[u8]) -> Result { - const U64_BYTES: usize = 8; - - let (&tag, rest) = input - .split_first() - .ok_or(ProgramError::InvalidInstructionData)?; - Ok(match tag { - 0 => { - let offset = rest - .get(..U64_BYTES) - .and_then(|slice| slice.try_into().ok()) - .map(u64::from_le_bytes) - .ok_or(ProgramError::InvalidInstructionData)?; - let slot = rest - .get(U64_BYTES..2 * U64_BYTES) - .and_then(|slice| slice.try_into().ok()) - .map(u64::from_le_bytes) - .ok_or(ProgramError::InvalidInstructionData)?; +/// Data expected by +/// `SlashingInstruction::DuplicateBlockProof` +#[repr(C)] +#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)] +pub struct DuplicateBlockProofInstructionData { + /// Offset into the proof account to begin reading, expressed as `u64` + pub(crate) offset: PodU64, + /// Slot for which the violation occured + pub(crate) slot: PodU64, + /// Identity pubkey of the Node that signed the duplicate block + pub(crate) node_pubkey: Pubkey, +} - let node_pubkey = rest - .get(2 * U64_BYTES..) - .and_then(|slice| slice.try_into().ok()) - .map(Pubkey::new_from_array) - .ok_or(ProgramError::InvalidInstructionData)?; +/// Utility function for encoding instruction data +pub(crate) fn encode_instruction( + accounts: Vec, + instruction: SlashingInstruction, + instruction_data: &D, +) -> Instruction { + let mut data = vec![u8::from(instruction)]; + data.extend_from_slice(bytemuck::bytes_of(instruction_data)); + Instruction { + program_id: id(), + accounts, + data, + } +} - Self::DuplicateBlockProof { - offset, - slot, - node_pubkey, - } - } - _ => return Err(ProgramError::InvalidInstructionData), - }) +/// Utility function for decoding just the instruction type +pub(crate) fn decode_instruction_type(input: &[u8]) -> Result { + if input.is_empty() { + Err(ProgramError::InvalidInstructionData) + } else { + SlashingInstruction::try_from(input[0]) + .map_err(|_| SlashingError::InvalidInstruction.into()) } +} - /// Packs a [SlashingInstruction] into a byte buffer. - pub fn pack(&self) -> Vec { - let mut buf = Vec::with_capacity(size_of::()); - match self { - Self::DuplicateBlockProof { - offset, - slot, - node_pubkey, - } => { - buf.push(0); - buf.extend_from_slice(&offset.to_le_bytes()); - buf.extend_from_slice(&slot.to_le_bytes()); - buf.extend_from_slice(&node_pubkey.to_bytes()); - } - }; - buf +/// Utility function for decoding instruction data +pub(crate) fn decode_instruction_data(input_with_type: &[u8]) -> Result<&T, ProgramError> { + if input_with_type.len() != pod_get_packed_len::().saturating_add(1) { + Err(ProgramError::InvalidInstructionData) + } else { + pod_from_bytes(&input_with_type[1..]) } } @@ -100,16 +93,15 @@ pub fn duplicate_block_proof( slot: Slot, node_pubkey: Pubkey, ) -> Instruction { - Instruction { - program_id: id(), - accounts: vec![AccountMeta::new_readonly(*proof_account, false)], - data: SlashingInstruction::DuplicateBlockProof { - offset, - slot, + encode_instruction( + vec![AccountMeta::new_readonly(*proof_account, false)], + SlashingInstruction::DuplicateBlockProof, + &DuplicateBlockProofInstructionData { + offset: PodU64::from(offset), + slot: PodU64::from(slot), node_pubkey, - } - .pack(), - } + }, + ) } #[cfg(test)] @@ -123,24 +115,30 @@ mod tests { let offset = 34; let slot = 42; let node_pubkey = Pubkey::new_unique(); - let instruction = SlashingInstruction::DuplicateBlockProof { - offset, - slot, - node_pubkey, - }; + let instruction = duplicate_block_proof(&Pubkey::new_unique(), offset, slot, node_pubkey); let mut expected = vec![0]; expected.extend_from_slice(&offset.to_le_bytes()); expected.extend_from_slice(&slot.to_le_bytes()); expected.extend_from_slice(&node_pubkey.to_bytes()); - assert_eq!(instruction.pack(), expected); - assert_eq!(SlashingInstruction::unpack(&expected).unwrap(), instruction); + assert_eq!(instruction.data, expected); + + assert_eq!( + SlashingInstruction::DuplicateBlockProof, + decode_instruction_type(&instruction.data).unwrap() + ); + let instruction_data: &DuplicateBlockProofInstructionData = + decode_instruction_data(&instruction.data).unwrap(); + + assert_eq!(instruction_data.offset, offset.into()); + assert_eq!(instruction_data.slot, slot.into()); + assert_eq!(instruction_data.node_pubkey, node_pubkey); } #[test] fn deserialize_invalid_instruction() { let mut expected = vec![12]; expected.extend_from_slice(&TEST_BYTES); - let err: ProgramError = SlashingInstruction::unpack(&expected).unwrap_err(); - assert_eq!(err, ProgramError::InvalidInstructionData); + let err: ProgramError = decode_instruction_type(&expected).unwrap_err(); + assert_eq!(err, SlashingError::InvalidInstruction.into()); } } diff --git a/slashing/program/src/processor.rs b/slashing/program/src/processor.rs index 462716c4b57..e6f4656d257 100644 --- a/slashing/program/src/processor.rs +++ b/slashing/program/src/processor.rs @@ -2,8 +2,13 @@ use { crate::{ - duplicate_block_proof::DuplicateBlockProofData, error::SlashingError, - instruction::SlashingInstruction, state::SlashingProofData, + duplicate_block_proof::DuplicateBlockProofData, + error::SlashingError, + instruction::{ + decode_instruction_data, decode_instruction_type, DuplicateBlockProofInstructionData, + SlashingInstruction, + }, + state::SlashingProofData, }, serde::Deserialize, solana_program::{ @@ -16,7 +21,7 @@ use { }, }; -fn verify_proof_data<'a, T>(slot: Slot, pubkey: Pubkey, proof_data: &'a [u8]) -> ProgramResult +fn verify_proof_data<'a, T>(slot: Slot, pubkey: &Pubkey, proof_data: &'a [u8]) -> ProgramResult where T: SlashingProofData + Deserialize<'a>, { @@ -44,23 +49,19 @@ pub fn process_instruction( accounts: &[AccountInfo], input: &[u8], ) -> ProgramResult { - let instruction = SlashingInstruction::unpack(input)?; + let instruction_type = decode_instruction_type(input)?; let account_info_iter = &mut accounts.iter(); let proof_data_info = next_account_info(account_info_iter); - match instruction { - SlashingInstruction::DuplicateBlockProof { - offset, - slot, - node_pubkey, - } => { - msg!( - "SlashingInstruction::DuplicateBlockProof {} {}", - slot, - node_pubkey - ); - let proof_data = &proof_data_info?.data.borrow()[offset as usize..]; - verify_proof_data::(slot, node_pubkey, proof_data)?; + match instruction_type { + SlashingInstruction::DuplicateBlockProof => { + let data = decode_instruction_data::(input)?; + let proof_data = &proof_data_info?.data.borrow()[u64::from(data.offset) as usize..]; + verify_proof_data::( + data.slot.into(), + &data.node_pubkey, + proof_data, + )?; Ok(()) } } diff --git a/slashing/program/src/state.rs b/slashing/program/src/state.rs index fbcfccf28b7..47c63a4e8cb 100644 --- a/slashing/program/src/state.rs +++ b/slashing/program/src/state.rs @@ -63,7 +63,7 @@ pub trait SlashingProofData { const PROOF_TYPE: ProofType; /// Verification logic for this type of proof data - fn verify_proof(self, slot: Slot, pubkey: Pubkey) -> Result<(), SlashingError>; + fn verify_proof(self, slot: Slot, pubkey: &Pubkey) -> Result<(), SlashingError>; } #[cfg(test)] From 8e5914793011ad0901d16355639f764163d836be Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Fri, 22 Nov 2024 19:07:57 +0000 Subject: [PATCH 08/18] add one epoch statue of limitations --- slashing/program/src/error.rs | 4 + slashing/program/src/processor.rs | 96 ++++++++++++++++++- .../program/tests/duplicate_block_proof.rs | 22 ++++- 3 files changed, 115 insertions(+), 7 deletions(-) diff --git a/slashing/program/src/error.rs b/slashing/program/src/error.rs index 65eacd53a68..5d928feb808 100644 --- a/slashing/program/src/error.rs +++ b/slashing/program/src/error.rs @@ -9,6 +9,10 @@ use { /// Errors that may be returned by the program. #[derive(Clone, Copy, Debug, Eq, Error, FromPrimitive, PartialEq)] pub enum SlashingError { + /// Violation is too old for statue of limitations + #[error("Exceeds statue of limitations")] + ExceedsStatueOfLimitations, + /// Invalid shred variant #[error("Invalid shred variant")] InvalidShredVariant, diff --git a/slashing/program/src/processor.rs b/slashing/program/src/processor.rs index e6f4656d257..31c1c2d746b 100644 --- a/slashing/program/src/processor.rs +++ b/slashing/program/src/processor.rs @@ -13,11 +13,12 @@ use { serde::Deserialize, solana_program::{ account_info::{next_account_info, AccountInfo}, - clock::Slot, + clock::{Slot, DEFAULT_SLOTS_PER_EPOCH}, entrypoint::ProgramResult, msg, program_error::ProgramError, pubkey::Pubkey, + sysvar::{clock::Clock, Sysvar}, }, }; @@ -25,9 +26,15 @@ fn verify_proof_data<'a, T>(slot: Slot, pubkey: &Pubkey, proof_data: &'a [u8]) - where T: SlashingProofData + Deserialize<'a>, { - if proof_data.len() < T::PROOF_TYPE.proof_account_length() { - return Err(ProgramError::InvalidAccountData); + // Statue of limitations is 1 epoch + let clock = Clock::get()?; + let Some(elapsed) = clock.slot.checked_sub(slot) else { + return Err(ProgramError::ArithmeticOverflow); + }; + if elapsed > DEFAULT_SLOTS_PER_EPOCH { + return Err(SlashingError::ExceedsStatueOfLimitations.into()); } + let proof_data: T = bincode::deserialize(proof_data).map_err(|_| SlashingError::ShredDeserializationError)?; @@ -66,3 +73,86 @@ pub fn process_instruction( } } } + +#[cfg(test)] +mod tests { + use { + super::verify_proof_data, + crate::{ + duplicate_block_proof::DuplicateBlockProofData, error::SlashingError, + shred::tests::new_rand_data_shred, + }, + rand::Rng, + solana_ledger::{blockstore_meta::DuplicateSlotProof, shred::Shredder}, + solana_sdk::{ + clock::{Clock, Slot, DEFAULT_SLOTS_PER_EPOCH}, + program_error::ProgramError, + signature::Keypair, + signer::Signer, + }, + std::sync::Arc, + }; + + const SLOT: Slot = 53084024; + static mut CLOCK_SLOT: Slot = SLOT; + + fn generate_proof_data(leader: Arc) -> Vec { + let mut rng = rand::thread_rng(); + let (slot, parent_slot, reference_tick, version) = (SLOT, 53084023, 0, 0); + let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let next_shred_index = rng.gen_range(0..32_000); + let shred1 = + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); + let shred2 = + new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); + let proof = DuplicateSlotProof { + shred1: shred1.payload().clone(), + shred2: shred2.payload().clone(), + }; + bincode::serialize(&proof).unwrap() + } + + #[test] + fn statue_of_limitations() { + unsafe { + CLOCK_SLOT = SLOT + 5; + test_statue_of_limitations().unwrap(); + + CLOCK_SLOT = SLOT - 1; + assert_eq!( + test_statue_of_limitations().unwrap_err(), + ProgramError::ArithmeticOverflow + ); + + CLOCK_SLOT = SLOT + DEFAULT_SLOTS_PER_EPOCH + 1; + assert_eq!( + test_statue_of_limitations().unwrap_err(), + SlashingError::ExceedsStatueOfLimitations.into() + ); + } + } + + fn test_statue_of_limitations() -> Result<(), ProgramError> { + struct SyscallStubs {} + impl solana_sdk::program_stubs::SyscallStubs for SyscallStubs { + fn sol_get_clock_sysvar(&self, var_addr: *mut u8) -> u64 { + unsafe { + let clock = Clock { + slot: CLOCK_SLOT, + ..Clock::default() + }; + *(var_addr as *mut _ as *mut Clock) = clock; + } + solana_program::entrypoint::SUCCESS + } + } + + solana_sdk::program_stubs::set_syscall_stubs(Box::new(SyscallStubs {})); + let leader = Arc::new(Keypair::new()); + verify_proof_data::( + SLOT, + &leader.pubkey(), + &generate_proof_data(leader), + ) + } +} diff --git a/slashing/program/tests/duplicate_block_proof.rs b/slashing/program/tests/duplicate_block_proof.rs index 29923616423..2038e4d4d52 100644 --- a/slashing/program/tests/duplicate_block_proof.rs +++ b/slashing/program/tests/duplicate_block_proof.rs @@ -10,6 +10,7 @@ use { solana_program::pubkey::Pubkey, solana_program_test::*, solana_sdk::{ + clock::{Clock, Slot}, decode_error::DecodeError, hash::Hash, instruction::InstructionError, @@ -26,6 +27,8 @@ use { std::sync::Arc, }; +const SLOT: Slot = 53084024; + fn program_test() -> ProgramTest { let mut program_test = ProgramTest::new("spl_slashing", id(), processor!(process_instruction)); program_test.add_program( @@ -36,6 +39,13 @@ fn program_test() -> ProgramTest { program_test } +async fn setup_clock(context: &mut ProgramTestContext) { + let clock: Clock = context.banks_client.get_sysvar().await.unwrap(); + let mut new_clock = clock.clone(); + new_clock.slot = SLOT; + context.set_sysvar(&new_clock); +} + async fn initialize_duplicate_proof_account( context: &mut ProgramTestContext, authority: &Keypair, @@ -179,13 +189,14 @@ pub(crate) fn new_rand_shreds( #[tokio::test] async fn valid_proof_data() { let mut context = program_test().start_with_context().await; + setup_clock(&mut context).await; let authority = Keypair::new(); let account = Keypair::new(); let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let (slot, parent_slot, reference_tick, version) = (SLOT, 53084023, 0, 0); let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let shred1 = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true); @@ -227,13 +238,14 @@ async fn valid_proof_data() { #[tokio::test] async fn valid_proof_coding() { let mut context = program_test().start_with_context().await; + setup_clock(&mut context).await; let authority = Keypair::new(); let account = Keypair::new(); let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let (slot, parent_slot, reference_tick, version) = (SLOT, 53084023, 0, 0); let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let shred1 = @@ -276,13 +288,14 @@ async fn valid_proof_coding() { #[tokio::test] async fn invalid_proof_data() { let mut context = program_test().start_with_context().await; + setup_clock(&mut context).await; let authority = Keypair::new(); let account = Keypair::new(); let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let (slot, parent_slot, reference_tick, version) = (SLOT, 53084023, 0, 0); let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let shred1 = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true); @@ -324,13 +337,14 @@ async fn invalid_proof_data() { #[tokio::test] async fn invalid_proof_coding() { let mut context = program_test().start_with_context().await; + setup_clock(&mut context).await; let authority = Keypair::new(); let account = Keypair::new(); let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); + let (slot, parent_slot, reference_tick, version) = (SLOT, 53084023, 0, 0); let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let coding_shreds = new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader); From f18b5e756a73ae8637d94d87271136789419b719 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Fri, 22 Nov 2024 20:36:24 +0000 Subject: [PATCH 09/18] pr feedback: zerocopy from proof account to proof data struct --- slashing/program/src/duplicate_block_proof.rs | 80 ++++++++++++++----- slashing/program/src/error.rs | 8 ++ slashing/program/src/lib.rs | 2 +- slashing/program/src/processor.rs | 25 +++--- slashing/program/src/shred.rs | 70 ++++++++-------- slashing/program/src/state.rs | 7 +- .../program/tests/duplicate_block_proof.rs | 37 ++++----- 7 files changed, 140 insertions(+), 89 deletions(-) diff --git a/slashing/program/src/duplicate_block_proof.rs b/slashing/program/src/duplicate_block_proof.rs index b00c4f8b597..90215fd30d9 100644 --- a/slashing/program/src/duplicate_block_proof.rs +++ b/slashing/program/src/duplicate_block_proof.rs @@ -1,22 +1,40 @@ +//! Duplicate block proof data and verification use { crate::{ error::SlashingError, shred::{Shred, ShredType}, state::{ProofType, SlashingProofData}, }, - serde_derive::{Deserialize, Serialize}, + bytemuck::try_from_bytes, solana_program::{clock::Slot, msg, pubkey::Pubkey}, + spl_pod::primitives::PodU32, }; -#[derive(Deserialize, Serialize)] -pub struct DuplicateBlockProofData { - #[serde(with = "serde_bytes")] - pub shred1: Vec, - #[serde(with = "serde_bytes")] - pub shred2: Vec, +const LENGTH_SIZE: usize = std::mem::size_of::(); + +/// Proof of a duplicate block violation +pub struct DuplicateBlockProofData<'a> { + /// Shred signed by a leader + pub shred1: &'a [u8], + /// Conflicting shred signed by the same leader + pub shred2: &'a [u8], +} + +impl<'a> DuplicateBlockProofData<'a> { + #[allow(dead_code)] + /// Packs proof data to write in account for + /// `SlashingInstruction::DuplicateBlockProof` + pub fn pack(self) -> Vec { + let mut buf = vec![]; + buf.extend_from_slice(&(self.shred1.len() as u32).to_le_bytes()); + buf.extend_from_slice(self.shred1); + buf.extend_from_slice(&(self.shred2.len() as u32).to_le_bytes()); + buf.extend_from_slice(self.shred2); + buf + } } -impl SlashingProofData for DuplicateBlockProofData { +impl<'a> SlashingProofData<'a> for DuplicateBlockProofData<'a> { const PROOF_TYPE: ProofType = ProofType::DuplicateBlockProof; fn verify_proof(self, slot: Slot, _node_pubkey: &Pubkey) -> Result<(), SlashingError> { @@ -30,6 +48,32 @@ impl SlashingProofData for DuplicateBlockProofData { let shred2 = Shred::new_from_payload(self.shred2)?; check_shreds(slot, &shred1, &shred2) } + + fn unpack(data: &'a [u8]) -> Result + where + Self: Sized, + { + if data.len() < LENGTH_SIZE { + return Err(SlashingError::ProofBufferTooSmall); + } + let (length1, data) = data.split_at(LENGTH_SIZE); + let shred1_length = try_from_bytes::(length1) + .map_err(|_| SlashingError::ProofBufferDeserializationError)?; + let (shred1, data) = data.split_at(u32::from(*shred1_length) as usize); + + if data.len() < LENGTH_SIZE { + return Err(SlashingError::ProofBufferTooSmall); + } + let (length2, shred2) = data.split_at(LENGTH_SIZE); + let shred2_length = try_from_bytes::(length2) + .map_err(|_| SlashingError::ProofBufferDeserializationError)?; + + if shred2.len() < u32::from(*shred2_length) as usize { + return Err(SlashingError::ProofBufferTooSmall); + } + + Ok(Self { shred1, shred2 }) + } } /// Check that `shred1` and `shred2` indicate a valid duplicate proof @@ -194,21 +238,19 @@ mod tests { SIZE_OF_SIGNATURE, }, rand::Rng, - solana_ledger::{ - blockstore_meta::DuplicateSlotProof as SolanaDuplicateSlotProof, - shred::{Shred as SolanaShred, Shredder}, - }, + solana_ledger::shred::{Shred as SolanaShred, Shredder}, solana_sdk::signature::{Keypair, Signature, Signer}, std::sync::Arc, }; - fn generate_proof_data(shred1: &SolanaShred, shred2: &SolanaShred) -> DuplicateBlockProofData { - let duplicate_proof = SolanaDuplicateSlotProof { - shred1: shred1.payload().clone(), - shred2: shred2.payload().clone(), - }; - let data = bincode::serialize(&duplicate_proof).unwrap(); - bincode::deserialize(&data).unwrap() + fn generate_proof_data<'a>( + shred1: &'a SolanaShred, + shred2: &'a SolanaShred, + ) -> DuplicateBlockProofData<'a> { + DuplicateBlockProofData { + shred1: shred1.payload().as_slice(), + shred2: shred2.payload().as_slice(), + } } #[test] diff --git a/slashing/program/src/error.rs b/slashing/program/src/error.rs index 5d928feb808..0c6d2b4ec3b 100644 --- a/slashing/program/src/error.rs +++ b/slashing/program/src/error.rs @@ -49,6 +49,14 @@ pub enum SlashingError { #[error("Legacy shreds are not eligible for slashing")] LegacyShreds, + /// Unable to deserialize proof buffer + #[error("Proof buffer deserialization error")] + ProofBufferDeserializationError, + + /// Proof buffer is too small + #[error("Proof buffer too small")] + ProofBufferTooSmall, + /// Shred deserialization error #[error("Deserialization error")] ShredDeserializationError, diff --git a/slashing/program/src/lib.rs b/slashing/program/src/lib.rs index 4835032fdd8..24b7343ab09 100644 --- a/slashing/program/src/lib.rs +++ b/slashing/program/src/lib.rs @@ -1,7 +1,7 @@ //! Slashing program #![deny(missing_docs)] -mod duplicate_block_proof; +pub mod duplicate_block_proof; mod entrypoint; pub mod error; pub mod instruction; diff --git a/slashing/program/src/processor.rs b/slashing/program/src/processor.rs index 31c1c2d746b..bc4d8e2ee62 100644 --- a/slashing/program/src/processor.rs +++ b/slashing/program/src/processor.rs @@ -10,7 +10,6 @@ use { }, state::SlashingProofData, }, - serde::Deserialize, solana_program::{ account_info::{next_account_info, AccountInfo}, clock::{Slot, DEFAULT_SLOTS_PER_EPOCH}, @@ -24,7 +23,7 @@ use { fn verify_proof_data<'a, T>(slot: Slot, pubkey: &Pubkey, proof_data: &'a [u8]) -> ProgramResult where - T: SlashingProofData + Deserialize<'a>, + T: SlashingProofData<'a>, { // Statue of limitations is 1 epoch let clock = Clock::get()?; @@ -36,7 +35,7 @@ where } let proof_data: T = - bincode::deserialize(proof_data).map_err(|_| SlashingError::ShredDeserializationError)?; + T::unpack(proof_data).map_err(|_| SlashingError::ShredDeserializationError)?; SlashingProofData::verify_proof(proof_data, slot, pubkey)?; @@ -83,7 +82,7 @@ mod tests { shred::tests::new_rand_data_shred, }, rand::Rng, - solana_ledger::{blockstore_meta::DuplicateSlotProof, shred::Shredder}, + solana_ledger::shred::Shredder, solana_sdk::{ clock::{Clock, Slot, DEFAULT_SLOTS_PER_EPOCH}, program_error::ProgramError, @@ -105,34 +104,34 @@ mod tests { new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); let shred2 = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); - let proof = DuplicateSlotProof { - shred1: shred1.payload().clone(), - shred2: shred2.payload().clone(), + let proof = DuplicateBlockProofData { + shred1: shred1.payload().as_slice(), + shred2: shred2.payload().as_slice(), }; - bincode::serialize(&proof).unwrap() + proof.pack() } #[test] - fn statue_of_limitations() { + fn test_statue_of_limitations() { unsafe { CLOCK_SLOT = SLOT + 5; - test_statue_of_limitations().unwrap(); + verify_with_clock().unwrap(); CLOCK_SLOT = SLOT - 1; assert_eq!( - test_statue_of_limitations().unwrap_err(), + verify_with_clock().unwrap_err(), ProgramError::ArithmeticOverflow ); CLOCK_SLOT = SLOT + DEFAULT_SLOTS_PER_EPOCH + 1; assert_eq!( - test_statue_of_limitations().unwrap_err(), + verify_with_clock().unwrap_err(), SlashingError::ExceedsStatueOfLimitations.into() ); } } - fn test_statue_of_limitations() -> Result<(), ProgramError> { + fn verify_with_clock() -> Result<(), ProgramError> { struct SyscallStubs {} impl solana_sdk::program_stubs::SyscallStubs for SyscallStubs { fn sol_get_clock_sysvar(&self, var_addr: *mut u8) -> u64 { diff --git a/slashing/program/src/shred.rs b/slashing/program/src/shred.rs index 03f50f10104..6a11d5db12d 100644 --- a/slashing/program/src/shred.rs +++ b/slashing/program/src/shred.rs @@ -2,6 +2,7 @@ use { crate::error::SlashingError, bitflags::bitflags, + bytemuck::Pod, generic_array::{typenum::U64, GenericArray}, num_enum::{IntoPrimitive, TryFromPrimitive}, serde_derive::Deserialize, @@ -9,6 +10,7 @@ use { clock::Slot, hash::{hashv, Hash}, }, + spl_pod::primitives::{PodU16, PodU32, PodU64}, }; pub(crate) const SIZE_OF_SIGNATURE: usize = 64; @@ -88,23 +90,23 @@ pub(crate) struct ErasureMeta { } #[derive(Clone, PartialEq, Eq)] -pub(crate) struct Shred { +pub(crate) struct Shred<'a> { shred_type: ShredType, proof_size: u8, chained: bool, resigned: bool, - payload: Vec, + payload: &'a [u8], } -impl Shred { +impl<'a> Shred<'a> { const SIZE_OF_CODING_PAYLOAD: usize = 1228; const SIZE_OF_DATA_PAYLOAD: usize = Self::SIZE_OF_CODING_PAYLOAD - Self::SIZE_OF_CODING_HEADERS + SIZE_OF_SIGNATURE; const SIZE_OF_CODING_HEADERS: usize = 89; const SIZE_OF_DATA_HEADERS: usize = 88; - pub(crate) fn new_from_payload(payload: Vec) -> Result { - match Self::get_shred_variant(&payload)? { + pub(crate) fn new_from_payload(payload: &'a [u8]) -> Result { + match Self::get_shred_variant(payload)? { ShredVariant::LegacyCode | ShredVariant::LegacyData => Err(SlashingError::LegacyShreds), ShredVariant::MerkleCode { proof_size, @@ -131,13 +133,13 @@ impl Shred { } } - fn get_bytes( + fn pod_from_bytes( &self, - ) -> Result<[u8; SIZE], SlashingError> { + ) -> Result<&T, SlashingError> { let end_index: usize = OFFSET .checked_add(SIZE) .ok_or(SlashingError::ShredDeserializationError)?; - <[u8; SIZE]>::try_from( + bytemuck::try_from_bytes( self.payload .get(OFFSET..end_index) .ok_or(SlashingError::ShredDeserializationError)?, @@ -145,7 +147,7 @@ impl Shred { .map_err(|_| SlashingError::ShredDeserializationError) } - fn get_shred_variant(payload: &[u8]) -> Result { + fn get_shred_variant(payload: &'a [u8]) -> Result { let Some(&shred_variant) = payload.get(OFFSET_OF_SHRED_VARIANT) else { return Err(SlashingError::ShredDeserializationError); }; @@ -153,23 +155,23 @@ impl Shred { } pub(crate) fn slot(&self) -> Result { - self.get_bytes::() - .map(Slot::from_le_bytes) + self.pod_from_bytes::() + .map(|x| u64::from(*x)) } pub(crate) fn index(&self) -> Result { - self.get_bytes::() - .map(u32::from_le_bytes) + self.pod_from_bytes::() + .map(|x| u32::from(*x)) } pub(crate) fn version(&self) -> Result { - self.get_bytes::() - .map(u16::from_le_bytes) + self.pod_from_bytes::() + .map(|x| u16::from(*x)) } pub(crate) fn fec_set_index(&self) -> Result { - self.get_bytes::() - .map(u32::from_le_bytes) + self.pod_from_bytes::() + .map(|x| u32::from(*x)) } pub(crate) fn shred_type(&self) -> ShredType { @@ -189,23 +191,20 @@ impl Shred { fn num_data_shreds(&self) -> Result { debug_assert!(self.shred_type == ShredType::Code); - self.get_bytes::() - .map(u16::from_le_bytes) - .map(usize::from) + self.pod_from_bytes::() + .map(|x| u16::from(*x) as usize) } fn num_coding_shreds(&self) -> Result { debug_assert!(self.shred_type == ShredType::Code); - self.get_bytes::() - .map(u16::from_le_bytes) - .map(usize::from) + self.pod_from_bytes::() + .map(|x| u16::from(*x) as usize) } fn position(&self) -> Result { debug_assert!(self.shred_type == ShredType::Code); - self.get_bytes::() - .map(u16::from_le_bytes) - .map(usize::from) + self.pod_from_bytes::() + .map(|x| u16::from(*x) as usize) } pub(crate) fn next_fec_set_index(&self) -> Result { @@ -305,9 +304,9 @@ impl Shred { // Recovers root of the merkle tree from a leaf node // at the given index and the respective proof. - fn get_merkle_root<'a, I>(index: usize, node: Hash, proof: I) -> Result + fn get_merkle_root<'b, I>(index: usize, node: Hash, proof: I) -> Result where - I: IntoIterator, + I: IntoIterator, { let (index, root) = proof .into_iter() @@ -333,20 +332,17 @@ impl Shred { { return false; } - fn get_payload(shred: &Shred) -> &[u8] { + fn get_payload<'a>(shred: &'a Shred<'a>) -> &'a [u8] { let Ok((proof_offset, proof_size)) = shred.get_proof_offset_and_size() else { - return &shred.payload; + return shred.payload; }; if !shred.resigned { - return &shred.payload; + return shred.payload; } let Some(offset) = proof_offset.checked_add(proof_size) else { - return &shred.payload; + return shred.payload; }; - shred - .payload - .get(..offset) - .unwrap_or_else(|| &shred.payload) + shred.payload.get(..offset).unwrap_or(shred.payload) } get_payload(self) != get_payload(other) } @@ -532,7 +528,7 @@ pub(crate) mod tests { .into_iter() .chain(coding_solana_shreds.into_iter()) { - let payload = solana_shred.payload().clone(); + let payload = solana_shred.payload().as_slice(); let shred = Shred::new_from_payload(payload).unwrap(); assert_eq!(shred.slot().unwrap(), solana_shred.slot()); diff --git a/slashing/program/src/state.rs b/slashing/program/src/state.rs index 47c63a4e8cb..2d617312ed1 100644 --- a/slashing/program/src/state.rs +++ b/slashing/program/src/state.rs @@ -58,10 +58,15 @@ impl From for ProofType { /// Trait that proof accounts must satisfy in order to verify via the slashing /// program -pub trait SlashingProofData { +pub trait SlashingProofData<'a> { /// The type of proof this data represents const PROOF_TYPE: ProofType; + /// Zero copy from raw data buffer + fn unpack(data: &'a [u8]) -> Result + where + Self: Sized; + /// Verification logic for this type of proof data fn verify_proof(self, slot: Slot, pubkey: &Pubkey) -> Result<(), SlashingError>; } diff --git a/slashing/program/tests/duplicate_block_proof.rs b/slashing/program/tests/duplicate_block_proof.rs index 2038e4d4d52..bab00c51015 100644 --- a/slashing/program/tests/duplicate_block_proof.rs +++ b/slashing/program/tests/duplicate_block_proof.rs @@ -4,7 +4,7 @@ use { rand::Rng, solana_entry::entry::Entry, solana_ledger::{ - blockstore_meta::{DuplicateSlotProof, ErasureMeta}, + blockstore_meta::ErasureMeta, shred::{ProcessShredsStats, ReedSolomonCache, Shred, Shredder}, }, solana_program::pubkey::Pubkey, @@ -22,7 +22,8 @@ use { spl_pod::bytemuck::pod_get_packed_len, spl_record::{instruction as record, state::RecordData}, spl_slashing::{ - error::SlashingError, id, instruction, processor::process_instruction, state::ProofType, + duplicate_block_proof::DuplicateBlockProofData, error::SlashingError, id, instruction, + processor::process_instruction, state::ProofType, }, std::sync::Arc, }; @@ -208,11 +209,11 @@ async fn valid_proof_data() { "Expecting merkle root conflict", ); - let duplicate_proof = DuplicateSlotProof { - shred1: shred1.into_payload(), - shred2: shred2.into_payload(), + let duplicate_proof = DuplicateBlockProofData { + shred1: shred1.payload().as_slice(), + shred2: shred2.payload().as_slice(), }; - let data = bincode::serialize(&duplicate_proof).unwrap(); + let data = duplicate_proof.pack(); initialize_duplicate_proof_account(&mut context, &authority, &account).await; write_proof(&mut context, &authority, &account, &data).await; @@ -258,11 +259,11 @@ async fn valid_proof_coding() { "Expected erasure consistency failure", ); - let duplicate_proof = DuplicateSlotProof { - shred1: shred1.into_payload(), - shred2: shred2.into_payload(), + let duplicate_proof = DuplicateBlockProofData { + shred1: shred1.payload().as_slice(), + shred2: shred2.payload().as_slice(), }; - let data = bincode::serialize(&duplicate_proof).unwrap(); + let data = duplicate_proof.pack(); initialize_duplicate_proof_account(&mut context, &authority, &account).await; write_proof(&mut context, &authority, &account, &data).await; @@ -301,11 +302,11 @@ async fn invalid_proof_data() { let shred1 = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true); let shred2 = shred1.clone(); - let duplicate_proof = DuplicateSlotProof { - shred1: shred1.into_payload(), - shred2: shred2.into_payload(), + let duplicate_proof = DuplicateBlockProofData { + shred1: shred1.payload().as_slice(), + shred2: shred2.payload().as_slice(), }; - let data = bincode::serialize(&duplicate_proof).unwrap(); + let data = duplicate_proof.pack(); initialize_duplicate_proof_account(&mut context, &authority, &account).await; write_proof(&mut context, &authority, &account, &data).await; @@ -355,11 +356,11 @@ async fn invalid_proof_coding() { ErasureMeta::check_erasure_consistency(&shred1, &shred2), "Expecting no erasure conflict" ); - let duplicate_proof = DuplicateSlotProof { - shred1: shred1.into_payload(), - shred2: shred2.into_payload(), + let duplicate_proof = DuplicateBlockProofData { + shred1: shred1.payload().as_slice(), + shred2: shred2.payload().as_slice(), }; - let data = bincode::serialize(&duplicate_proof).unwrap(); + let data = duplicate_proof.pack(); initialize_duplicate_proof_account(&mut context, &authority, &account).await; write_proof(&mut context, &authority, &account, &data).await; From 0ef363bd8aafa053307b563943e5bd4906833008 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Mon, 25 Nov 2024 22:55:25 +0000 Subject: [PATCH 10/18] Fix `proof_account_length` for the new size of a proof account --- slashing/program/src/duplicate_block_proof.rs | 21 +++++++++++++------ slashing/program/src/state.rs | 4 ++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/slashing/program/src/duplicate_block_proof.rs b/slashing/program/src/duplicate_block_proof.rs index 90215fd30d9..c36704e8548 100644 --- a/slashing/program/src/duplicate_block_proof.rs +++ b/slashing/program/src/duplicate_block_proof.rs @@ -10,8 +10,6 @@ use { spl_pod::primitives::PodU32, }; -const LENGTH_SIZE: usize = std::mem::size_of::(); - /// Proof of a duplicate block violation pub struct DuplicateBlockProofData<'a> { /// Shred signed by a leader @@ -21,6 +19,8 @@ pub struct DuplicateBlockProofData<'a> { } impl<'a> DuplicateBlockProofData<'a> { + const LENGTH_SIZE: usize = std::mem::size_of::(); + #[allow(dead_code)] /// Packs proof data to write in account for /// `SlashingInstruction::DuplicateBlockProof` @@ -32,6 +32,15 @@ impl<'a> DuplicateBlockProofData<'a> { buf.extend_from_slice(self.shred2); buf } + + /// Given the maximum size of a shred as `shred_size` this returns + /// the maximum size of the account needed to store a + /// `DuplicateBlockProofData` + pub const fn size_of(shred_size: usize) -> usize { + 2usize + .wrapping_mul(shred_size) + .saturating_add(2 * Self::LENGTH_SIZE) + } } impl<'a> SlashingProofData<'a> for DuplicateBlockProofData<'a> { @@ -53,18 +62,18 @@ impl<'a> SlashingProofData<'a> for DuplicateBlockProofData<'a> { where Self: Sized, { - if data.len() < LENGTH_SIZE { + if data.len() < Self::LENGTH_SIZE { return Err(SlashingError::ProofBufferTooSmall); } - let (length1, data) = data.split_at(LENGTH_SIZE); + let (length1, data) = data.split_at(Self::LENGTH_SIZE); let shred1_length = try_from_bytes::(length1) .map_err(|_| SlashingError::ProofBufferDeserializationError)?; let (shred1, data) = data.split_at(u32::from(*shred1_length) as usize); - if data.len() < LENGTH_SIZE { + if data.len() < Self::LENGTH_SIZE { return Err(SlashingError::ProofBufferTooSmall); } - let (length2, shred2) = data.split_at(LENGTH_SIZE); + let (length2, shred2) = data.split_at(Self::LENGTH_SIZE); let shred2_length = try_from_bytes::(length2) .map_err(|_| SlashingError::ProofBufferDeserializationError)?; diff --git a/slashing/program/src/state.rs b/slashing/program/src/state.rs index 2d617312ed1..addd3f50449 100644 --- a/slashing/program/src/state.rs +++ b/slashing/program/src/state.rs @@ -23,8 +23,8 @@ impl ProofType { match self { Self::InvalidType => panic!("Cannot determine size of invalid proof type"), Self::DuplicateBlockProof => { - // Duplicate block proof consists of 2 shreds that can be `PACKET_DATA_SIZE` - std::mem::size_of::().saturating_add(2 * PACKET_DATA_SIZE) + // Duplicate block proof consists of 2 shreds that can be `PACKET_DATA_SIZE`. + DuplicateBlockProofData::size_of(PACKET_DATA_SIZE) } } } From 74cdd12c92ad12956161de82ae28696505167c3a Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 27 Nov 2024 15:57:44 +0000 Subject: [PATCH 11/18] pr feedback: revert Cargo.lock --- Cargo.lock | 2583 +++++++++++++++++++++++++--------------------------- 1 file changed, 1222 insertions(+), 1361 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cdf34f0fe52..75ef8f54db7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,13 +14,19 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.24.2" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "adler2" version = "2.0.0" @@ -34,7 +40,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -65,21 +71,21 @@ dependencies = [ [[package]] name = "agave-geyser-plugin-interface" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc887155df02ede1681894dfb0e0faa64eb13e82d58c99098d7402fce84c0f79" +checksum = "9291468d48d46cfe92d7807990e19c6ee9a07b05a75cda5e118f48597e079391" dependencies = [ "log", "solana-sdk", "solana-transaction-status", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "agave-transaction-view" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b61f7e5b7ba82d8e2ba3f21feb3824ac4066fcf1308be45379e40777cef7ab16" +checksum = "a249374d6349eeb31348a849666f3d47cacb18e0e05454fbd11a1fc69fae8e7e" dependencies = [ "solana-sdk", "solana-svm-transaction", @@ -91,7 +97,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.10", "once_cell", "version_check", ] @@ -103,7 +109,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if 1.0.0", - "getrandom 0.2.15", + "getrandom 0.2.10", "once_cell", "version_check", "zerocopy", @@ -111,33 +117,42 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "aho-corasick" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] [[package]] name = "alloc-no-stdlib" -version = "2.0.4" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" +checksum = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3" [[package]] name = "alloc-stdlib" -version = "0.2.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +checksum = "697ed7edc0f1711de49ce108c541623a0af97c6c60b2f6e2b65229847ac843c2" dependencies = [ "alloc-no-stdlib", ] [[package]] name = "allocator-api2" -version = "0.2.20" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "android-tzdata" @@ -165,9 +180,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -180,43 +195,43 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] name = "anyhow" -version = "1.0.93" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" +checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" [[package]] name = "approx" @@ -238,7 +253,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -252,9 +267,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.7.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f" [[package]] name = "ark-bn254" @@ -311,7 +326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -324,7 +339,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -360,7 +375,7 @@ checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -393,9 +408,9 @@ checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" [[package]] name = "asn1-rs" -version = "0.5.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" dependencies = [ "asn1-rs-derive", "asn1-rs-impl", @@ -403,7 +418,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror 1.0.69", + "thiserror 1.0.68", "time", ] @@ -415,8 +430,8 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "synstructure 0.12.6", + "syn 1.0.107", + "synstructure", ] [[package]] @@ -427,7 +442,7 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -437,10 +452,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1835b7f27878de8525dc71410b5a31cdcc5f230aed5ba5df968e09c201b23d" dependencies = [ "anstyle", - "bstr", + "bstr 1.6.0", "doc-comment", "libc", - "predicates 3.1.2", + "predicates 3.0.3", "predicates-core", "predicates-tree", "wait-timeout", @@ -459,15 +474,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ "concurrent-queue", - "event-listener 2.5.3", + "event-listener 2.5.2", "futures-core", ] [[package]] name = "async-compression" -version = "0.4.18" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" +checksum = "f658e2baef915ba0f26f1f7c42bfb8e12f532a01f449a090ded75ae7a07e9ba2" dependencies = [ "brotli", "flate2", @@ -490,24 +505,23 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.6" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" dependencies = [ "async-stream-impl", "futures-core", - "pin-project-lite", ] [[package]] name = "async-stream-impl" -version = "0.3.6" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 1.0.107", ] [[package]] @@ -518,7 +532,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -534,15 +548,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.4.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "autotools" -version = "0.2.7" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef941527c41b0fc0dd48511a8154cd5fc7e29200a0ff8b7203c5d777dbc795cf" +checksum = "c8138adefca3e5d2e73bfba83bd6eeaf904b26a7ac1b4a19892cfe16cc7e1701" dependencies = [ "cc", ] @@ -599,7 +613,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ "futures-core", - "getrandom 0.2.15", + "getrandom 0.2.10", "instant", "pin-project-lite", "rand 0.8.5", @@ -608,17 +622,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", + "cc", "cfg-if 1.0.0", "libc", - "miniz_oxide", + "miniz_oxide 0.7.1", "object", "rustc-demangle", - "windows-targets 0.52.6", ] [[package]] @@ -629,9 +643,9 @@ checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" [[package]] name = "base64" -version = "0.13.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "base64" @@ -668,9 +682,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.69.5" +version = "0.69.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" dependencies = [ "bitflags 2.6.0", "cexpr", @@ -683,14 +697,14 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] name = "bit-set" -version = "0.5.3" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" dependencies = [ "bit-vec", ] @@ -739,13 +753,25 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + [[package]] name = "block-buffer" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -754,16 +780,25 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array", + "generic-array 0.14.7", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", ] [[package]] name = "borsh" -version = "0.10.4" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115e54d64eb62cdebad391c19efc9dce4981c690c85a33a12199d99bb9546fee" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" dependencies = [ - "borsh-derive 0.10.4", + "borsh-derive 0.10.3", "hashbrown 0.13.2", ] @@ -779,15 +814,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "0.10.4" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831213f80d9423998dd696e2c5345aba6be7a0bd8cd19e31c5243e13df1cef89" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" dependencies = [ "borsh-derive-internal", "borsh-schema-derive-internal", "proc-macro-crate 0.1.5", "proc-macro2", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -797,39 +832,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" dependencies = [ "once_cell", - "proc-macro-crate 3.2.0", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] name = "borsh-derive-internal" -version = "0.10.4" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65d6ba50644c98714aa2a70d13d7df3cd75cd2b523a2b452bf010443800976b3" +checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "borsh-schema-derive-internal" -version = "0.10.4" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276691d96f063427be83e6692b86148e488ebba9f48f77788724ca027ba3b6d4" +checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "brotli" -version = "7.0.0" +version = "3.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" +checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -838,9 +873,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "4.0.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -857,20 +892,29 @@ dependencies = [ [[package]] name = "bstr" -version = "1.11.0" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" dependencies = [ "memchr", - "regex-automata", +] + +[[package]] +name = "bstr" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05" +dependencies = [ + "memchr", + "regex-automata 0.3.0", "serde", ] [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "bv" @@ -882,6 +926,12 @@ dependencies = [ "serde", ] +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + [[package]] name = "bytemuck" version = "1.20.0" @@ -899,7 +949,7 @@ checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -942,7 +992,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" dependencies = [ "libc", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] @@ -959,16 +1009,16 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 1.0.109", + "syn 1.0.107", "tempfile", "toml", ] [[package]] name = "cc" -version = "1.2.1" +version = "1.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" dependencies = [ "jobserver", "libc", @@ -1016,7 +1066,7 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -1062,13 +1112,13 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "4cc00842eed744b858222c4c9faf7243aafc6d33f92f96935263ef4d8a41ce21" dependencies = [ "glob", "libc", - "libloading 0.8.5", + "libloading", ] [[package]] @@ -1082,7 +1132,7 @@ dependencies = [ "bitflags 1.3.2", "strsim 0.8.0", "textwrap 0.11.0", - "unicode-width 0.1.14", + "unicode-width", "vec_map", ] @@ -1100,29 +1150,29 @@ dependencies = [ "once_cell", "strsim 0.10.0", "termcolor", - "textwrap 0.16.1", + "textwrap 0.16.0", ] [[package]] name = "clap" -version = "4.5.21" +version = "4.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +checksum = "2275f18819641850fa26c89acc84d465c1bf91ce57bc2748b28c420473352f64" dependencies = [ "clap_builder", - "clap_derive 4.5.18", + "clap_derive 4.4.7", ] [[package]] name = "clap_builder" -version = "4.5.21" +version = "4.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +checksum = "07cdf1b148b25c1e1f7a42225e30a0d99a615cd4637eae7365548dd4529b95bc" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.3", - "strsim 0.11.1", + "clap_lex 0.6.0", + "strsim 0.10.0", ] [[package]] @@ -1135,19 +1185,19 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "clap_derive" -version = "4.5.18" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ - "heck 0.5.0", + "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -1161,15 +1211,25 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "combine" @@ -1212,7 +1272,7 @@ dependencies = [ "encode_unicode", "lazy_static", "libc", - "unicode-width 0.1.14", + "unicode-width", "windows-sys 0.52.0", ] @@ -1238,9 +1298,9 @@ dependencies = [ [[package]] name = "constant_time_eq" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] name = "convert_case" @@ -1250,9 +1310,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation" -version = "0.9.4" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -1260,9 +1320,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.7" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "core_affinity" @@ -1278,18 +1338,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" dependencies = [ "cfg-if 1.0.0", ] @@ -1305,28 +1365,33 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" dependencies = [ + "cfg-if 1.0.0", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" dependencies = [ + "cfg-if 1.0.0", "crossbeam-utils", + "lazy_static", + "memoffset 0.6.5", + "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -1340,7 +1405,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array", + "generic-array 0.14.7", "rand_core 0.6.4", "typenum", ] @@ -1351,7 +1416,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array", + "generic-array 0.14.7", "subtle", ] @@ -1403,14 +1468,58 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", +] + +[[package]] +name = "cxx" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b7d4e43b25d3c994662706a1d4fcfc32aaa6afd287502c111b237093bb23f3a" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f8829ddc213e2c1368e51a2564c552b65a8cb6a28f31e576270ac81d5e5827" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn 1.0.107", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e72537424b474af1460806647c41d4b6d35d09ef7fe031c5c2fa5766047cc56a" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "309e4fb93eed90e1e14bea0da16b209f81813ba9fc7830c20ed151dd7bc0a4d7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", ] [[package]] name = "darling" -version = "0.20.10" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ "darling_core", "darling_macro", @@ -1418,27 +1527,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.11.1", - "syn 2.0.89", + "strsim 0.10.0", + "syn 2.0.87", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -1451,21 +1560,21 @@ dependencies = [ "hashbrown 0.14.5", "lock_api", "once_cell", - "parking_lot_core 0.9.10", + "parking_lot_core 0.9.9", "rayon", ] [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" [[package]] name = "der-parser" -version = "8.2.0" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" dependencies = [ "asn1-rs", "displaydoc", @@ -1499,31 +1608,31 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "derive_arbitrary" -version = "1.4.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +checksum = "d475dfebcb4854d596b17b09f477616f80f17a550517f2b3615d8c205d5c802b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] name = "derive_more" -version = "0.99.18" +version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 2.0.89", + "syn 1.0.107", ] [[package]] @@ -1544,13 +1653,22 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + [[package]] name = "digest" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -1596,13 +1714,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 1.0.107", ] [[package]] @@ -1625,7 +1743,7 @@ checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -1648,9 +1766,9 @@ checksum = "abe71d579d1812060163dff96056261deb5bf6729b100fa2e36a68b9649ba3d3" [[package]] name = "ed25519" -version = "1.5.3" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +checksum = "74e1069e39f1454367eb2de793ed062fac4c35c2934b76a81d90dd9abcd28816" dependencies = [ "signature", ] @@ -1683,21 +1801,21 @@ dependencies = [ [[package]] name = "educe" -version = "0.4.23" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" +checksum = "f86b50932a01e7ec5c06160492ab660fb19b6bb2a7878030dd6cd68d21df9d4d" dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "either" -version = "1.13.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "encode_unicode" @@ -1707,9 +1825,9 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "encoding_rs" -version = "0.8.35" +version = "0.8.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" dependencies = [ "cfg-if 1.0.0", ] @@ -1725,26 +1843,26 @@ dependencies = [ [[package]] name = "enum-iterator-derive" -version = "1.4.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" +checksum = "03cdc46ec28bd728e67540c528013c6a10eb69a02eb31078a1bda695438cbfb8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] name = "enum-ordinalize" -version = "3.1.15" +version = "3.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf1fa3f06bbff1ea5b1a9c7b14aa992a39657db60a2759457328d7e058f49ee" +checksum = "0b166c9e378360dd5a6666a9604bb4f54ae0cac39023ffbac425e917a2a04fef" dependencies = [ "num-bigint 0.4.6", "num-traits", "proc-macro2", "quote", - "syn 2.0.89", + "syn 1.0.107", ] [[package]] @@ -1756,7 +1874,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -1780,9 +1898,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1790,9 +1908,12 @@ dependencies = [ [[package]] name = "escape8259" -version = "0.5.3" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" +checksum = "ba4f4911e3666fcd7826997b4745c8224295a6f3072f1418c3067b97a67557ee" +dependencies = [ + "rustversion", +] [[package]] name = "etcd-client" @@ -1812,9 +1933,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.3" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" [[package]] name = "event-listener" @@ -1837,6 +1958,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + [[package]] name = "fast-math" version = "0.1.1" @@ -1848,9 +1975,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.2.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "feature-probe" @@ -1866,14 +1993,14 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" dependencies = [ "cfg-if 1.0.0", "libc", - "libredox", - "windows-sys 0.59.0", + "redox_syscall 0.2.10", + "winapi 0.3.9", ] [[package]] @@ -1893,9 +2020,9 @@ checksum = "94474d15a76982be62ca8a39570dccce148d98c238ebb7408b0a21b2c4bdddc4" [[package]] name = "fixedbitset" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e" [[package]] name = "flash_loan_receiver" @@ -1908,12 +2035,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.35" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -2030,7 +2157,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -2070,6 +2197,15 @@ dependencies = [ "slab", ] +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -2106,9 +2242,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -2119,27 +2255,27 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "glob" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "globset" -version = "0.4.15" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" +checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" dependencies = [ - "aho-corasick", - "bstr", + "aho-corasick 0.7.18", + "bstr 0.2.17", + "fnv", "log", - "regex-automata", - "regex-syntax", + "regex", ] [[package]] @@ -2173,7 +2309,7 @@ dependencies = [ "futures-timer", "no-std-compat", "nonzero_ext", - "parking_lot 0.12.3", + "parking_lot 0.12.0", "portable-atomic", "quanta", "rand 0.8.5", @@ -2196,7 +2332,7 @@ dependencies = [ "indexmap 2.6.0", "slab", "tokio", - "tokio-util 0.7.12", + "tokio-util 0.7.1", "tracing", ] @@ -2239,23 +2375,24 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" [[package]] name = "headers" -version = "0.3.9" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +checksum = "4cff78e5788be1e0ab65b04d306b2ed5092c815ec97ec70f4ebd5aee158aa55d" dependencies = [ - "base64 0.21.7", + "base64 0.13.0", + "bitflags 1.3.2", "bytes", "headers-core", "http", "httpdate", "mime", - "sha1", + "sha-1 0.10.0", ] [[package]] @@ -2354,19 +2491,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array", + "generic-array 0.14.7", "hmac 0.8.1", ] -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "honggfuzz" version = "0.5.56" @@ -2375,7 +2503,7 @@ checksum = "7c76b6234c13c9ea73946d1379d33186151148e0da231506b964b44f3d023505" dependencies = [ "arbitrary", "lazy_static", - "memmap2 0.9.5", + "memmap2 0.9.4", "rustc_version", ] @@ -2392,9 +2520,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", @@ -2403,15 +2531,15 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.5" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "humantime" @@ -2463,9 +2591,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" dependencies = [ "futures-util", "http", @@ -2502,143 +2630,26 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core", + "winapi 0.3.9", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locid" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - -[[package]] -name = "icu_normalizer" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" - -[[package]] -name = "icu_properties" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locid_transform", - "icu_properties_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" - -[[package]] -name = "icu_provider" -version = "1.5.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.89", + "cxx", + "cxx-build", ] [[package]] @@ -2660,23 +2671,12 @@ dependencies = [ [[package]] name = "idna" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ - "icu_normalizer", - "icu_properties", + "unicode-bidi", + "unicode-normalization", ] [[package]] @@ -2703,18 +2703,18 @@ dependencies = [ [[package]] name = "include_dir" -version = "0.7.4" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" dependencies = [ "include_dir_macros", ] [[package]] name = "include_dir_macros" -version = "0.7.4" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" dependencies = [ "proc-macro2", "quote", @@ -2744,22 +2744,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.15.0", "rayon", "serde", ] [[package]] name = "indicatif" -version = "0.17.9" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" dependencies = [ "console", + "instant", "number_prefix", "portable-atomic", - "unicode-width 0.2.0", - "web-time", + "unicode-width", ] [[package]] @@ -2768,23 +2768,23 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] name = "instant" -version = "0.1.13" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "ipnet" -version = "2.10.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" [[package]] name = "is_terminal_polyfill" @@ -2812,9 +2812,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jni" @@ -2826,7 +2826,7 @@ dependencies = [ "combine 4.6.7", "jni-sys", "log", - "thiserror 1.0.69", + "thiserror 1.0.68", "walkdir", ] @@ -2915,7 +2915,7 @@ dependencies = [ "proc-macro-crate 0.1.5", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -2963,15 +2963,15 @@ dependencies = [ "log", "tokio", "tokio-stream", - "tokio-util 0.6.10", + "tokio-util 0.6.9", "unicase", ] [[package]] name = "keccak" -version = "0.1.5" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" dependencies = [ "cpufeatures", ] @@ -3009,9 +3009,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.165" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb4d3d38eab6c5239a362fa8bae48c03baf980a6e7079f063942d563ef3533e" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "libloading" @@ -3023,33 +3023,12 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "libloading" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" -dependencies = [ - "cfg-if 1.0.0", - "windows-targets 0.52.6", -] - [[package]] name = "libm" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.6.0", - "libc", - "redox_syscall 0.5.7", -] - [[package]] name = "librocksdb-sys" version = "0.16.0+8.10.0" @@ -3121,15 +3100,15 @@ checksum = "5297962ef19edda4ce33aaa484386e0a5b3d7f2f4e037cbeee00503ef6b29d33" dependencies = [ "anstream", "anstyle", - "clap 4.5.21", + "clap 4.4.8", "escape8259", ] [[package]] name = "libz-sys" -version = "1.1.20" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +checksum = "6f35facd4a5673cb5a48822be2be1d4236c1c99cb4113cab7061ac720d5bf859" dependencies = [ "cc", "pkg-config", @@ -3145,26 +3124,29 @@ dependencies = [ "ark-bn254", "ark-ff", "num-bigint 0.4.6", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] -name = "linux-raw-sys" -version = "0.4.14" +name = "link-cplusplus" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +dependencies = [ + "cc", +] [[package]] -name = "litemap" -version = "0.7.4" +name = "linux-raw-sys" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -3204,6 +3186,12 @@ dependencies = [ "libc", ] +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + [[package]] name = "matches" version = "0.1.10" @@ -3212,15 +3200,15 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matchit" -version = "0.7.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" [[package]] name = "memchr" -version = "2.7.4" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memmap2" @@ -3233,18 +3221,27 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.5" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" dependencies = [ "libc", ] [[package]] name = "memoffset" -version = "0.9.1" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" dependencies = [ "autocfg", ] @@ -3263,15 +3260,15 @@ dependencies = [ [[package]] name = "mime" -version = "0.3.17" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "mime_guess" -version = "2.0.5" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" dependencies = [ "mime", "unicase", @@ -3289,6 +3286,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + [[package]] name = "miniz_oxide" version = "0.8.0" @@ -3300,9 +3306,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" dependencies = [ "hermit-abi 0.3.9", "libc", @@ -3334,7 +3340,7 @@ dependencies = [ "cfg-if 1.0.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -3355,7 +3361,7 @@ checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -3366,10 +3372,11 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" dependencies = [ + "lazy_static", "libc", "log", "openssl", @@ -3383,9 +3390,9 @@ dependencies = [ [[package]] name = "net2" -version = "0.2.39" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac" +checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" dependencies = [ "cfg-if 0.1.10", "libc", @@ -3402,7 +3409,7 @@ dependencies = [ "cfg-if 1.0.0", "cfg_aliases", "libc", - "memoffset", + "memoffset 0.9.0", ] [[package]] @@ -3413,9 +3420,9 @@ checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" [[package]] name = "nom" -version = "7.1.3" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ "memchr", "minimal-lexical", @@ -3492,7 +3499,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -3506,9 +3513,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.45" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" dependencies = [ "autocfg", "num-integer", @@ -3562,10 +3569,10 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -3576,39 +3583,45 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.36.5" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] [[package]] name = "oid-registry" -version = "0.6.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +checksum = "7d4bda43fd1b844cbc6e6e54b5444e2b1bc7838bce59ad205902cccbb26d6761" dependencies = [ "asn1-rs", ] [[package]] name = "once_cell" -version = "1.20.2" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" -version = "0.3.1" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ "bitflags 2.6.0", "cfg-if 1.0.0", @@ -3621,13 +3634,13 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 1.0.107", ] [[package]] @@ -3638,18 +3651,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.4.1+3.4.0" +version = "300.3.1+3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c" +checksum = "7259953d42a81bf137fbbd73bd30a8e1914d6dce43c2b90ed575783a22608b91" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" dependencies = [ "cc", "libc", @@ -3674,14 +3687,14 @@ dependencies = [ "percent-encoding 2.3.1", "pin-project", "rand 0.8.5", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "os_str_bytes" -version = "6.6.1" +version = "6.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" +checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" [[package]] name = "parking" @@ -3697,51 +3710,51 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core 0.8.6", + "parking_lot_core 0.8.5", ] [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" dependencies = [ "lock_api", - "parking_lot_core 0.9.10", + "parking_lot_core 0.9.9", ] [[package]] name = "parking_lot_core" -version = "0.8.6" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall 0.2.16", + "redox_syscall 0.2.10", "smallvec", "winapi 0.3.9", ] [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.5.7", + "redox_syscall 0.4.1", "smallvec", - "windows-targets 0.52.6", + "windows-targets 0.48.0", ] [[package]] name = "paste" -version = "1.0.15" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" [[package]] name = "pbkdf2" @@ -3767,7 +3780,7 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ - "base64 0.13.1", + "base64 0.13.0", ] [[package]] @@ -3793,20 +3806,18 @@ dependencies = [ [[package]] name = "pest" -version = "2.7.14" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" dependencies = [ - "memchr", - "thiserror 1.0.69", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.14" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" +checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" dependencies = [ "pest", "pest_generator", @@ -3814,63 +3825,63 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.14" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" +checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.89", + "syn 1.0.107", ] [[package]] name = "pest_meta" -version = "2.7.14" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" +checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" dependencies = [ - "once_cell", + "maplit", "pest", - "sha2 0.10.8", + "sha-1 0.8.2", ] [[package]] name = "petgraph" -version = "0.6.5" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" dependencies = [ "fixedbitset", - "indexmap 2.6.0", + "indexmap 1.9.3", ] [[package]] name = "pin-project" -version = "1.1.7" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.7" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] name = "pin-project-lite" -version = "0.2.15" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -3880,9 +3891,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" [[package]] name = "polyval" @@ -3892,15 +3903,15 @@ checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "opaque-debug", + "opaque-debug 0.3.0", "universal-hash", ] [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" [[package]] name = "powerfmt" @@ -3910,12 +3921,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] +checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" [[package]] name = "predicates" @@ -3933,26 +3941,27 @@ dependencies = [ [[package]] name = "predicates" -version = "3.1.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" +checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9" dependencies = [ "anstyle", "difflib", + "itertools 0.10.5", "predicates-core", ] [[package]] name = "predicates-core" -version = "1.0.8" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.11" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" +checksum = "4d86de6de25020a36c6d3643a86d9a6a9f552107c0559c60ea03551b5e16c032" dependencies = [ "predicates-core", "termtree", @@ -3966,12 +3975,12 @@ checksum = "c6fa0831dd7cc608c38a5e323422a0077678fa5744aa2be4ad91c4ece8eec8d5" [[package]] name = "prettyplease" -version = "0.1.25" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +checksum = "3b83ec2d0af5c5c556257ff52c9f98934e243b9fd39604bfb2a9b75ec2e97f18" dependencies = [ "proc-macro2", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -3994,9 +4003,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ "toml_edit", ] @@ -4010,7 +4019,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", "version_check", ] @@ -4027,9 +4036,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] @@ -4081,7 +4090,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 1.0.109", + "syn 1.0.107", "tempfile", "which", ] @@ -4096,7 +4105,7 @@ dependencies = [ "itertools 0.10.5", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -4134,7 +4143,7 @@ checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -4160,9 +4169,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quinn" -version = "0.11.6" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" dependencies = [ "bytes", "pin-project-lite", @@ -4171,37 +4180,34 @@ dependencies = [ "rustc-hash 2.0.0", "rustls 0.23.18", "socket2", - "thiserror 2.0.3", + "thiserror 1.0.68", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.9" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" dependencies = [ "bytes", - "getrandom 0.2.15", "rand 0.8.5", - "ring", + "ring 0.17.3", "rustc-hash 2.0.0", "rustls 0.23.18", - "rustls-pki-types", "rustls-platform-verifier", "slab", - "thiserror 2.0.3", + "thiserror 1.0.68", "tinyvec", "tracing", - "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.7" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" +checksum = "e346e016eacfff12233c243718197ca12f148c84e1e84268a896699b41c71780" dependencies = [ "cfg_aliases", "libc", @@ -4213,9 +4219,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.37" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -4279,7 +4285,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.10", ] [[package]] @@ -4350,31 +4356,30 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.5.7" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags 2.6.0", + "bitflags 1.3.2", ] [[package]] name = "redox_users" -version = "0.4.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" dependencies = [ - "getrandom 0.2.15", - "libredox", - "thiserror 1.0.69", + "getrandom 0.2.10", + "redox_syscall 0.2.10", ] [[package]] @@ -4389,7 +4394,7 @@ dependencies = [ "lru", "parking_lot 0.11.2", "smallvec", - "spin", + "spin 0.9.2", ] [[package]] @@ -4398,19 +4403,25 @@ version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ - "aho-corasick", + "aho-corasick 1.0.2", "memchr", - "regex-automata", + "regex-automata 0.4.8", "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa250384981ea14565685dea16a9ccc4d1c541a13f82b9c168572264d1df8c56" + +[[package]] +name = "regex-automata" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ - "aho-corasick", + "aho-corasick 1.0.2", "memchr", "regex-syntax", ] @@ -4449,7 +4460,7 @@ dependencies = [ "percent-encoding 2.3.1", "pin-project-lite", "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "rustls-pemfile 1.0.1", "serde", "serde_json", "serde_urlencoded", @@ -4458,13 +4469,13 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls", - "tokio-util 0.7.12", + "tokio-util 0.7.1", "tower-service", - "url 2.5.4", + "url 2.5.2", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 0.25.4", + "webpki-roots 0.25.2", "winreg", ] @@ -4480,22 +4491,36 @@ dependencies = [ "reqwest", "serde", "task-local-extensions", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "ring" -version = "0.17.8" +version = "0.16.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" dependencies = [ "cc", - "cfg-if 1.0.0", - "getrandom 0.2.15", "libc", - "spin", - "untrusted", - "windows-sys 0.52.0", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "ring" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babe80d5c16becf6594aa32ad2be8fe08498e7ae60b77de8df700e67f191d7e" +dependencies = [ + "cc", + "getrandom 0.2.10", + "libc", + "spin 0.9.2", + "untrusted 0.9.0", + "windows-sys 0.48.0", ] [[package]] @@ -4536,19 +4561,19 @@ dependencies = [ [[package]] name = "rtoolbox" -version = "0.0.2" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" dependencies = [ "libc", - "windows-sys 0.48.0", + "winapi 0.3.9", ] [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustc-hash" @@ -4564,9 +4589,9 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] name = "rustc_version" -version = "0.4.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ "semver", ] @@ -4582,9 +4607,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.41" +version = "0.38.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +checksum = "375116bee2be9ed569afe2154ea6a99dfdffd257f533f187498c2a8f5feaf4ee" dependencies = [ "bitflags 2.6.0", "errno", @@ -4600,7 +4625,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring", + "ring 0.17.3", "rustls-webpki 0.101.7", "sct", ] @@ -4612,7 +4637,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c9cc1d47e243d655ace55ed38201c19ae02c148ae56412ab8750e8f0166ab7f" dependencies = [ "once_cell", - "ring", + "ring 0.17.3", "rustls-pki-types", "rustls-webpki 0.102.8", "subtle", @@ -4634,11 +4659,11 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.4" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" dependencies = [ - "base64 0.21.7", + "base64 0.13.0", ] [[package]] @@ -4655,15 +4680,12 @@ name = "rustls-pki-types" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" -dependencies = [ - "web-time", -] [[package]] name = "rustls-platform-verifier" -version = "0.4.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c7dc240fec5517e6c4eab3310438636cfe6391dfc345ba013109909a90d136" +checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" dependencies = [ "core-foundation", "core-foundation-sys", @@ -4676,8 +4698,8 @@ dependencies = [ "rustls-webpki 0.102.8", "security-framework", "security-framework-sys", - "webpki-root-certs", - "windows-sys 0.52.0", + "webpki-roots 0.26.6", + "winapi 0.3.9", ] [[package]] @@ -4692,8 +4714,8 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring", - "untrusted", + "ring 0.17.3", + "untrusted 0.9.0", ] [[package]] @@ -4702,16 +4724,16 @@ version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ - "ring", + "ring 0.17.3", "rustls-pki-types", - "untrusted", + "untrusted 0.9.0", ] [[package]] name = "rustversion" -version = "1.0.18" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rusty-fork" @@ -4727,9 +4749,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" [[package]] name = "same-file" @@ -4742,20 +4764,21 @@ dependencies = [ [[package]] name = "scc" -version = "2.2.5" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b202022bb57c049555430e11fc22fea12909276a80a4c3d368da36ac1d88ed" +checksum = "ec96560eea317a9cc4e0bb1f6a2c93c09a19b8c4fc5cb3fcc0ec1c094cd783e2" dependencies = [ "sdd", ] [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ - "windows-sys 0.59.0", + "lazy_static", + "winapi 0.3.9", ] [[package]] @@ -4764,6 +4787,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "scratch" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" + [[package]] name = "scroll" version = "0.11.0" @@ -4772,27 +4801,27 @@ checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" [[package]] name = "sct" -version = "0.7.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" dependencies = [ - "ring", - "untrusted", + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] name = "sdd" -version = "3.0.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95" +checksum = "b84345e4c9bd703274a082fb80caaa99b7612be48dfaa1dd9266577ec412309d" [[package]] name = "security-framework" -version = "2.11.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" dependencies = [ - "bitflags 2.6.0", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -4802,9 +4831,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" dependencies = [ "core-foundation-sys", "libc", @@ -4822,7 +4851,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5c67b6f14ecc5b86c66fa63d76b5092352678545a8a3cdae80aef5128371910" dependencies = [ - "parking_lot 0.12.3", + "parking_lot 0.12.0", ] [[package]] @@ -4851,7 +4880,7 @@ checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -4905,7 +4934,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -4930,7 +4959,7 @@ dependencies = [ "futures 0.3.31", "log", "once_cell", - "parking_lot 0.12.3", + "parking_lot 0.12.0", "scc", "serial_test_derive", ] @@ -4943,7 +4972,19 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", +] + +[[package]] +name = "sha-1" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", ] [[package]] @@ -4956,7 +4997,18 @@ dependencies = [ "cfg-if 1.0.0", "cpufeatures", "digest 0.9.0", - "opaque-debug", + "opaque-debug 0.3.0", +] + +[[package]] +name = "sha-1" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", ] [[package]] @@ -4980,7 +5032,7 @@ dependencies = [ "cfg-if 1.0.0", "cpufeatures", "digest 0.9.0", - "opaque-debug", + "opaque-debug 0.3.0", ] [[package]] @@ -5023,7 +5075,7 @@ dependencies = [ "quote", "shank_macro_impl", "shank_render", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -5036,7 +5088,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -5052,9 +5104,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.7" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" dependencies = [ "lazy_static", ] @@ -5073,18 +5125,18 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" dependencies = [ "libc", ] [[package]] name = "signature" -version = "1.6.4" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" [[package]] name = "simpl" @@ -5110,9 +5162,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.9" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" dependencies = [ "autocfg", ] @@ -5129,7 +5181,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95b6ff8c21c74ce7744643a7cddbb02579a44f1f77e4316bff1ddb741aca8ac9" dependencies = [ - "base64 0.13.1", + "base64 0.13.0", "log", "openssl", "serde", @@ -5155,20 +5207,20 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" dependencies = [ - "base64 0.13.1", + "base64 0.13.0", "bytes", "futures 0.3.31", "httparse", "log", "rand 0.8.5", - "sha-1", + "sha-1 0.9.8", ] [[package]] name = "solana-account" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57cb0cf41b565741b350665918b1000324991029cbb56dd31f1bce75a509310b" +checksum = "730219420b206253977b8cc8fd7846ffe021ab2e2c718e70db420efbd2775547" dependencies = [ "bincode", "serde", @@ -5180,9 +5232,9 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375453711ca64576a635a72f70a43629c7e11eacd6d817b47720844718643d29" +checksum = "14e5b1c167335942b659d077552607f79b2eca3472e40eeed97a2c55838b84ef" dependencies = [ "Inflector", "base64 0.22.1", @@ -5200,15 +5252,15 @@ dependencies = [ "spl-token-2022 4.0.0", "spl-token-group-interface 0.3.0", "spl-token-metadata-interface 0.4.0", - "thiserror 1.0.69", + "thiserror 1.0.68", "zstd", ] [[package]] name = "solana-account-decoder-client-types" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84543236b7579c4adfe16114516175b4314909dbad98f0aac0cb523dff8befd9" +checksum = "dee0750d2f106ecbee6d4508b6e2029e6946cb5f67288bf002b5a62f9f451c43" dependencies = [ "base64 0.22.1", "bs58", @@ -5222,9 +5274,9 @@ dependencies = [ [[package]] name = "solana-account-info" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e085851110dc6a38f55a78c238cf005e239ada61450a88713995022f7bbaf7" +checksum = "6abe81cfc4a75f71a510c6856b03a7d8525e416af3c69d55daef62e6078b8d40" dependencies = [ "bincode", "serde", @@ -5235,9 +5287,9 @@ dependencies = [ [[package]] name = "solana-accounts-db" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6166298d12d0c0a711531da1654f18976d26a8dd0f99ad7d392abf077407440b" +checksum = "b9fecc332ad4edd98ed63e5a46d990ecaf6fe4abd2bf9795c15474a64534ced6" dependencies = [ "ahash 0.8.11", "bincode", @@ -5276,14 +5328,14 @@ dependencies = [ "static_assertions", "tar", "tempfile", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-address-lookup-table-program" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aca234458aad20fe6598bf96144a6aefa1140a4f17efa1cc08b9655ee9bd02bf" +checksum = "2cf79a76f2878982b9781dfd0831d58ee15eb905be65406ccf7370c3ecd69c52" dependencies = [ "bincode", "bytemuck", @@ -5295,23 +5347,23 @@ dependencies = [ "solana-program", "solana-program-runtime", "solana-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-atomic-u64" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cfea2176602dcad41dc19578bcb82f8ad7c57a0ec4a51b5dcc91fce0dbe16d" +checksum = "391b795afcdcad39ddc6c938d64b789d036cdfe00d9dc5ff83024cf2da9f066f" dependencies = [ - "parking_lot 0.12.3", + "parking_lot 0.12.0", ] [[package]] name = "solana-banks-client" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3648c9d6c8b90282ca2394fab9fd1cbf1a730fea785eb87be7b95262bf3ff18" +checksum = "2f857fb6590467d433f40eee507666ca496ec67907e50b7d530b6c04f6541875" dependencies = [ "borsh 1.5.3", "futures 0.3.31", @@ -5319,16 +5371,16 @@ dependencies = [ "solana-program", "solana-sdk", "tarpc", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", "tokio-serde", ] [[package]] name = "solana-banks-interface" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9bf04f7944d3d0b98cb95bb9eb0e8e154179ea0043ef74c8b4d8490f226ad3" +checksum = "20052d231bb9ac3268dc61a713e3915d6c95fc942f9a5c15ca3a81a3fcd9cc12" dependencies = [ "serde", "serde_derive", @@ -5338,9 +5390,9 @@ dependencies = [ [[package]] name = "solana-banks-server" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831d55f8f40dd1ea567bad08ecc7a7e97254ee216685dc4feee5dabe5d306bf3" +checksum = "10db60e4bf077b870a7e75f8596bf3790d079b3762e9b4edc032475077007d0b" dependencies = [ "bincode", "crossbeam-channel", @@ -5359,9 +5411,9 @@ dependencies = [ [[package]] name = "solana-bincode" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3023f6d059845d3879307b6cd76f47155dfe39b3842820aaed59599bcc0d996" +checksum = "9e85cb5961c356345a61378163fd9057011b35540f8bcdd8d8a09cb10117264f" dependencies = [ "bincode", "serde", @@ -5370,9 +5422,9 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e074b19f814bbfb8d409938543542f00532f49edcbf604461f2c11a5ed0fc724" +checksum = "a6cdcc35537b23cd3376eb2ea7753d958f6ce64f69318b00dc137817c0b49411" dependencies = [ "bv", "fnv", @@ -5386,9 +5438,9 @@ dependencies = [ [[package]] name = "solana-bn254" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206e710f6146b416042fecf325b37b0418b91e5d6926e87cb879da908236075" +checksum = "c39c4030db26ad618f7e18fb5284df19fd52a68e092a1ca58db857108c4cc777" dependencies = [ "ark-bn254", "ark-ec", @@ -5396,24 +5448,24 @@ dependencies = [ "ark-serialize", "bytemuck", "solana-program", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-borsh" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9d146d0c485d8a2e363aa9b47f3e6b127d1603e1cafc12b4b958f25afd3082" +checksum = "a5d526f3525ab22a3ada3f9a1d642664dafac00dc9208326b701a2045514eb04" dependencies = [ - "borsh 0.10.4", + "borsh 0.10.3", "borsh 1.5.3", ] [[package]] name = "solana-bpf-loader-program" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a3fe016beb94808f71fd0e16a3904b5416621e82f3c677f8a997dcb6955fcd1" +checksum = "142e0407f8428a1d2a33154d1d3d1c134ad257651ddff0811c17a6ee840def36" dependencies = [ "bincode", "byteorder", @@ -5433,14 +5485,14 @@ dependencies = [ "solana-timings", "solana-type-overrides", "solana_rbpf", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-bucket-map" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d138dd06e3be7a5bba2df28be8bedb9320a80480d18f33c147bf78e01ef520fd" +checksum = "66eb348939fcfea6e40eed61bca06a1c631f8cb70f1801a5b14021bddefe93eb" dependencies = [ "bv", "bytemuck", @@ -5457,9 +5509,9 @@ dependencies = [ [[package]] name = "solana-builtins-default-costs" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dda21c775c0d2b56971500f74abd3e617f04df51aee4445f13e9d99d792e07" +checksum = "854270e266040355f5fd5b67c91855bc36cebf1d3f325eb54d8b1b0ca385f74b" dependencies = [ "ahash 0.8.11", "lazy_static", @@ -5477,9 +5529,9 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6322dfd706fbec52a6ab56aa9c55a84046dab62ac661b4fef29723de3af8445d" +checksum = "1709e1b0aefc8062fca29a4fde8d35f39ee95586e77cc6360e9bfc50a094c44f" dependencies = [ "chrono", "clap 2.34.0", @@ -5487,17 +5539,17 @@ dependencies = [ "solana-derivation-path", "solana-remote-wallet", "solana-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", "tiny-bip39", "uriparse", - "url 2.5.4", + "url 2.5.2", ] [[package]] name = "solana-clap-v3-utils" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47de1ca1b8c239917f6a16b2e46e85551d80ef303c4331e2262ef73cc2f65f32" +checksum = "d9682fa05e9e8bcd49340567c000b20e4f094db530ef7912d74ea12706448814" dependencies = [ "chrono", "clap 3.2.25", @@ -5506,17 +5558,17 @@ dependencies = [ "solana-remote-wallet", "solana-sdk", "solana-zk-token-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", "tiny-bip39", "uriparse", - "url 2.5.4", + "url 2.5.2", ] [[package]] name = "solana-cli-config" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5564b3e831cb69cbb338bb86ebf8f5cfbfabf08e82fd0b03e8face45ffd18352" +checksum = "384fda0ddf3099eab0f702b326663f499e84731e8584fd7d0c6d8bab03bead79" dependencies = [ "dirs-next", "lazy_static", @@ -5525,14 +5577,14 @@ dependencies = [ "serde_yaml", "solana-clap-utils", "solana-sdk", - "url 2.5.4", + "url 2.5.2", ] [[package]] name = "solana-cli-output" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc5554028c58cf1d46b87aab06e509cbe8831a45a72d089d97a433e316b3fa2" +checksum = "b82ae7fc5a012ad5bc4077a235ea5b26145fab50ca05b550e792a50bdd6d77a9" dependencies = [ "Inflector", "base64 0.22.1", @@ -5557,9 +5609,9 @@ dependencies = [ [[package]] name = "solana-client" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "017cdda1e882ec268e8e5b9f2e8401161f5ef0b37991cd696111f40137c3bff5" +checksum = "1d9a40b8e9e11604e8c05e8b5fcdb89359235db47d1aae84dcba0fc98e95dd0c" dependencies = [ "async-trait", "bincode", @@ -5583,36 +5635,35 @@ dependencies = [ "solana-thin-client", "solana-tpu-client", "solana-udp-client", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", ] [[package]] name = "solana-clock" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f7b4b20b02b938d791e537a08b82044d985a7764d289d7b405b762bc006cd61" +checksum = "7848171e53fa528efd41dd4b3ab919f47b851f8bb4a827d63ff95678f08737fc" dependencies = [ "serde", "serde_derive", "solana-sdk-macro", - "solana-sysvar-id", ] [[package]] name = "solana-compute-budget" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "690be515649dc4b0e41efc11d86bf15064ed306bea78b288f72dfe6beab5657b" +checksum = "ebf2f023f471bd1195b7f420e13ffc2422592dd48e71104b4901300b49ac493e" dependencies = [ "solana-sdk", ] [[package]] name = "solana-compute-budget-program" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a9aa950f4b632e2781c871e9f675766e0ef0198880186f232ec6bfa9286fb3" +checksum = "73eddf023f02a56daa838818e30894b874368a741782457468eeefdfce2f7f53" dependencies = [ "solana-program-runtime", "solana-sdk", @@ -5620,9 +5671,9 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cf0a83665e3852e56645a4ec45f3f60e0417ae143629c341dccdae543dd2b29" +checksum = "a035a01970ebbf40a244b3b79af533329ac8d48d80b0b98e166e23e35aa88171" dependencies = [ "bincode", "chrono", @@ -5636,9 +5687,9 @@ dependencies = [ [[package]] name = "solana-connection-cache" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e63d1225dc1d6282184a038882d19d35b7eebb673eb04d65ec9de124bfb250d" +checksum = "5f45dd2a6d5d55ed951781486231d0d2ee9ff7047fdafaed01ee021e236319d0" dependencies = [ "async-trait", "bincode", @@ -5651,15 +5702,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", ] [[package]] name = "solana-core" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4903759ccf49a1036596f0657ce6c68d1a44b1fedb6b7ebfd0769d173f5ac082" +checksum = "9d499325db220d9442530d625addc20defe35c41a2e349a9ffb8f3bf20e7a9b7" dependencies = [ "ahash 0.8.11", "anyhow", @@ -5736,16 +5787,16 @@ dependencies = [ "sys-info", "sysctl", "tempfile", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", "trees", ] [[package]] name = "solana-cost-model" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c3cd8fd1ab7681152f491d3ad9e8461c6e3731bc3cd52fca0c8fd33bfd672f" +checksum = "448128561bb950bce19cdbbdc1780955a52ef25f1984c9c13b35b4b9cdc548c4" dependencies = [ "ahash 0.8.11", "lazy_static", @@ -5762,9 +5813,9 @@ dependencies = [ [[package]] name = "solana-cpi" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d70d2d4fa6f1ecadc5293100f0a46e9a60abd63e2c2966f22c363b0972155395" +checksum = "25c536ad0ce25d84a64f48dedcb773e764827e0ef781eda41fa1fa35f5d64b38" dependencies = [ "solana-account-info", "solana-define-syscall", @@ -5776,37 +5827,37 @@ dependencies = [ [[package]] name = "solana-curve25519" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e8f3986a544442d6c16ab747897a9f1f6c37b5c5c6d7aa352c64fb06e93d2" +checksum = "f934d38b6f2a940fb1e1d8eaa17a14ffd3773b37be9fb29fa4bcec1bac5e4591" dependencies = [ "bytemuck", "bytemuck_derive", "curve25519-dalek 4.1.3", "solana-program", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-decode-error" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "987e69c94af8de7094a304e79a35643f9d02956845b16924403c08dcdc60f54a" +checksum = "c5a431f532d030098e81d120877f2dddbd3dd90bea5b259198a6aae4ff6456c3" dependencies = [ "num-traits", ] [[package]] name = "solana-define-syscall" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debfb6b4d3b263112fd001e6102cba148674807ef9c6cd7a80c3883137881032" +checksum = "7062ae1de58e294d3bee5fd2c89efc155b7f7383ddce4cb88345dfafaaabc5bd" [[package]] name = "solana-derivation-path" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985ff15cae72e90dabfc50547b5edfb85e91deae64b0df650037dd770075384" +checksum = "12080d9bf8eecd559c6f40b5aaf9e47f7f28f515218087f83f02e493b46d8388" dependencies = [ "derivation-path", "qstring", @@ -5815,9 +5866,9 @@ dependencies = [ [[package]] name = "solana-entry" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99696dafd57ecaebe13bb21307e8360fed6f3c1033e25aa18b828e7c7ad4e57e" +checksum = "151cbfd824285d3b6ab6391f85448f73364baca34a897184e26ad7c66165e3f0" dependencies = [ "bincode", "crossbeam-channel", @@ -5837,21 +5888,20 @@ dependencies = [ [[package]] name = "solana-epoch-schedule" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf4eb069a4bb1c762fb59d1a3759bd496b2d275c3bb706e514c8cbafe02a24d" +checksum = "65c4cf7d7c266d353169cf4feeada5e4bba3a55f33715535fa1ef49080eac3e0" dependencies = [ "serde", "serde_derive", "solana-sdk-macro", - "solana-sysvar-id", ] [[package]] name = "solana-faucet" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2f0b5176e1d43872a5c044de2dca1c48cabc6d3e7c1744acaad713dcf0f20b" +checksum = "281c481c0efa41a7ddada5dbffabee9099a6b01e9d748b7135366df589f7415e" dependencies = [ "bincode", "byteorder", @@ -5867,15 +5917,15 @@ dependencies = [ "solana-sdk", "solana-version", "spl-memo 5.0.0", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", ] [[package]] name = "solana-feature-set" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2296db31c609b7b88ad71c31e33fd541ad6e756fb40827ba0efecc7a647702" +checksum = "5cebf45992982065a0b01b4e109bf039b2ebf6394b21672382fd951516d4c9b0" dependencies = [ "lazy_static", "solana-clock", @@ -5887,9 +5937,9 @@ dependencies = [ [[package]] name = "solana-fee" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f908bcd9b053017e68ad685647979ad268f0dc8ec8995233cf3b55699197afeb" +checksum = "833e9a34c8cb1271e360b240dce43065cc4419ad74fc7e807c4e30cf06ebca80" dependencies = [ "solana-sdk", "solana-svm-transaction", @@ -5897,9 +5947,9 @@ dependencies = [ [[package]] name = "solana-fee-calculator" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0db9a84d00a6186b8900913caac51b35ef69c484c1cdf2569bfea31798351c28" +checksum = "c2befe056ece2eb5807298c2b569a35ee52f79df859bdd16a1f97869f8224a28" dependencies = [ "log", "serde", @@ -5908,16 +5958,16 @@ dependencies = [ [[package]] name = "solana-geyser-plugin-manager" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "408e402c63ec551c9d04d156b500352c8f48c7020f8c42cc796885dd248e824b" +checksum = "4ac089db04deff5826ad8469e0c934e77451315396ee30fde4d512d6b60f2cca" dependencies = [ "agave-geyser-plugin-interface", "bs58", "crossbeam-channel", "json5", "jsonrpc-core", - "libloading 0.7.4", + "libloading", "log", "serde_json", "solana-accounts-db", @@ -5929,15 +5979,15 @@ dependencies = [ "solana-runtime", "solana-sdk", "solana-transaction-status", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", ] [[package]] name = "solana-gossip" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceb02879b86dba6488d66f8326c757813fe2cce3ccb01cc50bd43c94ee620d25" +checksum = "c5849898b9a0a9b4dc9a200fa7b28d1c929bb89f8db4e8b5899d2d32277459ce" dependencies = [ "assert_matches", "bincode", @@ -5981,14 +6031,14 @@ dependencies = [ "solana-vote", "solana-vote-program", "static_assertions", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-hash" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4adcc124a76786a090639440387ccc68fbf9477103489de107b73d90ce60ba" +checksum = "1807bc4e9e1d25271514167d5a1e698ce5a330bce547a368242dd63b355b5faa" dependencies = [ "borsh 1.5.3", "bs58", @@ -6004,9 +6054,9 @@ dependencies = [ [[package]] name = "solana-inflation" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2139d4e67a310f3a4e09034ba0e1d567bf7419420254be0e87e1f74f2b7e9217" +checksum = "a60b572cdf0ec8fcf5a53e5ba4e3e19814dd96c2b9c156d5828be68d0d2e7103" dependencies = [ "serde", "serde_derive", @@ -6014,9 +6064,9 @@ dependencies = [ [[package]] name = "solana-inline-spl" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4964b5d6d5fb28a396be09655024b750117c041fff6ab8492ed89d3e87c2503e" +checksum = "d24c9c6590e4eaf91efa887b2689b2941fe4b324bccd9a95f77853168f3d9a88" dependencies = [ "bytemuck", "solana-pubkey", @@ -6024,13 +6074,13 @@ dependencies = [ [[package]] name = "solana-instruction" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ece5fc0c0a4a12ec8b505dffbc5e48ab7897e2dec9b335c977456223e94963" +checksum = "bfef689e06e5c7cb6206d4dc61ac77733de4f72d754e0d531393206abc27dbe4" dependencies = [ "bincode", "borsh 1.5.3", - "getrandom 0.2.15", + "getrandom 0.2.10", "js-sys", "num-traits", "serde", @@ -6042,21 +6092,20 @@ dependencies = [ [[package]] name = "solana-last-restart-slot" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206b52fdd6eab6d3a190b50841288d534390b4528b1e63f984ced72b6d1c7a61" +checksum = "b3186feae497bdfd2e77bfa56caed38b1cb1b0f389506666e3331f0b9ae799cb" dependencies = [ "serde", "serde_derive", "solana-sdk-macro", - "solana-sysvar-id", ] [[package]] name = "solana-lattice-hash" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2e8b83df59ff27eaabfdfd12535da692ffd0fbff2e2ece14a3cf4365ddd348" +checksum = "6ec86f48a8694d55757922823823069a3652d2896f61f3ffc4b741646c166a62" dependencies = [ "base64 0.22.1", "blake3", @@ -6066,9 +6115,9 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03288c5aac8cdfd7805b4c5d00394863bd6bdafaaee71aa7aef2bc02dd48ca69" +checksum = "d181954a7e0ef3847ed2336adda1214cda401ac2c5557ebb63d700e409864881" dependencies = [ "assert_matches", "bincode", @@ -6131,7 +6180,7 @@ dependencies = [ "strum_macros 0.24.3", "tar", "tempfile", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", "tokio-stream", "trees", @@ -6139,9 +6188,9 @@ dependencies = [ [[package]] name = "solana-loader-v4-program" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6df769dd4df73e3583527c9f3633917f3f341c0d655600b6435c893a2ecd8a1a" +checksum = "94c6915a49e537925e934551dbce2db2357d555d257a311bbf5ba0810cb1017a" dependencies = [ "log", "solana-bpf-loader-program", @@ -6156,18 +6205,18 @@ dependencies = [ [[package]] name = "solana-log-collector" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b50c21c10fb956b42dfa9d651d7cd8f07955aa47e3a330e6ef4721270ae9fe2" +checksum = "b529f5736a6c0794a885dac2e091138d3db6d924335906f117a62b58b0d3b5dc" dependencies = [ "log", ] [[package]] name = "solana-logger" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b82e7089918666300a7399a1193b53a823f907f85a99f54a75b250f1996c196" +checksum = "367c5431bad14b10fbb62614b48720b746672558dba3244167ff7d251890c355" dependencies = [ "env_logger", "lazy_static", @@ -6176,15 +6225,15 @@ dependencies = [ [[package]] name = "solana-measure" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8af180d3301f722acc301aeb6fa05b14506e12da81fc898a03d9d1a06118742f" +checksum = "33b2047a2f588082b71080b060918f107c3330ae1505f759c3b2d74bae9d9c88" [[package]] name = "solana-merkle-tree" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbfd0bb47c7f829169ee15edcc7ba0ed1cc932938bc74c7de10c7397c3c21488" +checksum = "e75fa782e9cf2a846f09f96594db01e3005aeefb36ce53aebc41b050381e9989" dependencies = [ "fast-math", "solana-hash", @@ -6193,9 +6242,9 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae5ad8e75694856959189de6ec503e9e24486e1596276197ad2bdf1c69c5e00" +checksum = "6319c74238e8ed4f7159fd37c693a574ab8316d03b053103f9cc83dce13f1d5c" dependencies = [ "crossbeam-channel", "gethostname", @@ -6203,29 +6252,29 @@ dependencies = [ "log", "reqwest", "solana-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-msg" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7a6f57e2e4ffe12cd4fee1e717c0f2ba6336ff2439cd5738d9843458a53da0" +checksum = "1f7551f85064bc7299d56dbd7126258b084a2d78d0325b1579324f818b405123" dependencies = [ "solana-define-syscall", ] [[package]] name = "solana-native-token" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dc51c820c41b965a94a00e0939fa2683652c3da6ab8eaaeee194c9a526fae9" +checksum = "5d0c4074f5fc67574dabd8f30fe6e51e290a812d88326b19b49c462058e23340" [[package]] name = "solana-net-utils" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71dee5927b0bb6fb8e7227bd930a11b622a8ceb863208a8a6c09464db87b9ca" +checksum = "bbac19474a4c4f91cb264c2fccead8a1a4f65384ce650b24360d9df5650e65bc" dependencies = [ "bincode", "crossbeam-channel", @@ -6237,7 +6286,7 @@ dependencies = [ "socket2", "solana-sdk", "tokio", - "url 2.5.4", + "url 2.5.2", ] [[package]] @@ -6248,9 +6297,9 @@ checksum = "8b8a731ed60e89177c8a7ab05fe0f1511cedd3e70e773f288f9de33a9cfdc21e" [[package]] name = "solana-packet" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32ed935e9f2d99d2ec0944012b2f9b8afdee5af39a7693faeda68c6a77aa64d0" +checksum = "0dafc2d84e57dbfe32583fe915962bd2ca3af6be496628a871db3c3d697b38d7" dependencies = [ "bincode", "bitflags 2.6.0", @@ -6262,9 +6311,9 @@ dependencies = [ [[package]] name = "solana-perf" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8156dfa8f9f3a46e00323b85bcec38fea9f3508d6c2334dd14481b79adb10644" +checksum = "e8299f1ba518f9888da8cafa861addc6ffdd639c689e3ce219ae08212c0dcd0e" dependencies = [ "ahash 0.8.11", "bincode", @@ -6289,9 +6338,9 @@ dependencies = [ [[package]] name = "solana-poh" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c868fc3189aacf5315eebaead51cef236c28f394f0ace24232b20263efe5d16" +checksum = "c11f9be81af30870cfc5b782e46565f65685d75a6969052d5f8f063a3271c66c" dependencies = [ "core_affinity", "crossbeam-channel", @@ -6302,26 +6351,26 @@ dependencies = [ "solana-metrics", "solana-runtime", "solana-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-poseidon" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b5ba0b7efa0d373ad6b847b4ecb09d464541415459d941b736edb85f276c00" +checksum = "f193a65f0db7fe5615c76c2814d6450a2e4cda61f786d5bf7a6b1ad0c179b947" dependencies = [ "ark-bn254", "light-poseidon", "solana-define-syscall", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-precompile-error" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b44197151afc9e96260228ec173fefea84e7b52d1e14c3b6dbbe0df739e878a9" +checksum = "a30ab58b9e37cde4e5577282670f30df71b97b6b06dbdb420e9b84e57b831227" dependencies = [ "num-traits", "solana-decode-error", @@ -6329,15 +6378,15 @@ dependencies = [ [[package]] name = "solana-program" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eee1043f1a069817b5a96dbade9e37566ff92d6663a747550b942520b2bb289" +checksum = "9040decf2f295d35da22557eeab3768ab8dfca8aed9afe668663c8fa0e97d60e" dependencies = [ "base64 0.22.1", "bincode", "bitflags 2.6.0", "blake3", - "borsh 0.10.4", + "borsh 0.10.3", "borsh 1.5.3", "bs58", "bv", @@ -6347,15 +6396,15 @@ dependencies = [ "console_log", "curve25519-dalek 4.1.3", "five8_const", - "getrandom 0.2.15", + "getrandom 0.2.10", "js-sys", "lazy_static", "log", - "memoffset", + "memoffset 0.9.0", "num-bigint 0.4.6", "num-derive", "num-traits", - "parking_lot 0.12.3", + "parking_lot 0.12.0", "rand 0.8.5", "serde", "serde_bytes", @@ -6394,17 +6443,16 @@ dependencies = [ "solana-slot-hashes", "solana-slot-history", "solana-stable-layout", - "solana-sysvar-id", "solana-transaction-error", - "thiserror 1.0.69", + "thiserror 1.0.68", "wasm-bindgen", ] [[package]] name = "solana-program-entrypoint" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d51f5d76edb8b45d3d47874367a859905c57aee5ca483460d1cd7ecb94d09bf" +checksum = "0eb90f3fa3e979b912451a404508f1f90bb6e5c1d7767625f622b20016fb9fde" dependencies = [ "solana-account-info", "solana-msg", @@ -6414,9 +6462,9 @@ dependencies = [ [[package]] name = "solana-program-error" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8672853ff2835c5ddf711b876711c89033f0fa72b48e427a8cff05268be790de" +checksum = "dd089caeef26dd07bd12b7b67d45e92faddc2fc67a960f316df7ae4776a2f3d5" dependencies = [ "borsh 1.5.3", "num-traits", @@ -6430,9 +6478,9 @@ dependencies = [ [[package]] name = "solana-program-memory" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "203924f5631f04eb2a426bea7ceb3d10b92218735f5339af097897b6ae2d0a79" +checksum = "ed4bc044dc2b49c323aeff04aec03c908a052e278c2edf2f7616f32fc0f1bcd9" dependencies = [ "num-traits", "solana-define-syscall", @@ -6440,24 +6488,24 @@ dependencies = [ [[package]] name = "solana-program-option" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef419526ea1e1d80259f04c24f2cede67db2a18a42d34ca1c6c16784b97fd21b" +checksum = "3babbdffd81994c043fc9a61458ce87496218825d6e9a303de643c0a53089b9a" [[package]] name = "solana-program-pack" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4af037dcb6b4c1c7a6f609868502bc198c969ffbcf628a72b0cbb6948b8c490" +checksum = "b8fb28439d23e1f505e59c7a14ed5012365ab7aa0f20dc7bda048e02ff231cf6" dependencies = [ "solana-program-error", ] [[package]] name = "solana-program-runtime" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d8825aa258629bacbe5591c5e9ee720e213b073bc052879e2f16ecfc3db5bee" +checksum = "ba1de51df173401d50c0f4cf750f5070d7a4c82125a03c1aec9622dc041b0b54" dependencies = [ "base64 0.22.1", "bincode", @@ -6480,14 +6528,14 @@ dependencies = [ "solana-type-overrides", "solana-vote", "solana_rbpf", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-program-test" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9b9109d7af35ad6a0bec5e2cd3d385651db098c09223ee7ee46dc80e9d86f0" +checksum = "974591eca853eafee8196a3445b81fd03ebd9b3e38a6dd7b6f22dc3414c32be6" dependencies = [ "assert_matches", "async-trait", @@ -6515,24 +6563,24 @@ dependencies = [ "solana-timings", "solana-vote-program", "solana_rbpf", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", ] [[package]] name = "solana-pubkey" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc969903363ac8bb619009815083c86da1e78e136cf4e924fee2071042fe528" +checksum = "bea3215775fcedf200d47590c7e2ce9a3a46bc2b7d3f77d0eae9c6edf0a39aec" dependencies = [ - "borsh 0.10.4", + "borsh 0.10.3", "borsh 1.5.3", "bs58", "bytemuck", "bytemuck_derive", "curve25519-dalek 4.1.3", "five8_const", - "getrandom 0.2.15", + "getrandom 0.2.10", "js-sys", "num-traits", "rand 0.8.5", @@ -6548,9 +6596,9 @@ dependencies = [ [[package]] name = "solana-pubsub-client" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eb6f0746bea4f8b86270aae122d836db92d6dcbff8d4ead648fa754380a22a4" +checksum = "9d28adf5ff89c19ef3cb24d0f484afa05852697881c2e4ef12aec190d61f76d8" dependencies = [ "crossbeam-channel", "futures-util", @@ -6563,19 +6611,19 @@ dependencies = [ "solana-account-decoder", "solana-rpc-client-api", "solana-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", "tokio-stream", "tokio-tungstenite", "tungstenite", - "url 2.5.4", + "url 2.5.2", ] [[package]] name = "solana-quic-client" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64883ab151e924627e65591315c1ed16e6a14c40c42d2fad2367ca5ff499afb6" +checksum = "259c6d420c0b7620557700f13fbbdb00afbb1b82274485c27ba30dd660ea921b" dependencies = [ "async-lock", "async-trait", @@ -6593,15 +6641,15 @@ dependencies = [ "solana-rpc-client-api", "solana-sdk", "solana-streamer", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", ] [[package]] name = "solana-rayon-threadlimit" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9541d2fd9402ee8f8c310bb2c4ea7228f92971fb9d7009cf62d05617a0435eb3" +checksum = "4c69806ad1a7b0986f750134e13e55d83919631d81a2328a588615740e14ed0a" dependencies = [ "lazy_static", "num_cpus", @@ -6609,9 +6657,9 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45dd9e9f68b6e57c85c1e636f30e661911f93a53ad14aae7ddf31b5748b8299c" +checksum = "6f36cf8ad0090276b5e9c73512df889b84092761ed733a26781b164c9e95f544" dependencies = [ "console", "dialoguer", @@ -6619,32 +6667,31 @@ dependencies = [ "log", "num-derive", "num-traits", - "parking_lot 0.12.3", + "parking_lot 0.12.0", "qstring", "semver", "solana-derivation-path", "solana-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", "uriparse", ] [[package]] name = "solana-rent" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904df8e9692d80f8f86cbccbe11b59c7b6a3d9b945d84a8a73115e36c9e2f2cd" +checksum = "aab3f4a270196c38d62c3bb3c7a2f07732af2c772b50da49c9b1e2c9d2ace286" dependencies = [ "serde", "serde_derive", "solana-sdk-macro", - "solana-sysvar-id", ] [[package]] name = "solana-rpc" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67276f0e1dbb1d86f7362606b124b6d43618f01b23be8bf539b2e77bfc75f5db" +checksum = "b6e2cf5309990480e4d52e59850bbd8181e1e2c8d4321a44b1c6b89e05df2c44" dependencies = [ "base64 0.22.1", "bincode", @@ -6695,16 +6742,16 @@ dependencies = [ "spl-token 6.0.0", "spl-token-2022 4.0.0", "stream-cancel", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", - "tokio-util 0.7.12", + "tokio-util 0.7.1", ] [[package]] name = "solana-rpc-client" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954970ebcae3ec33ec01ed329ca0ac3cb11242ec9f2b8ae96f30fa04c7db6822" +checksum = "3b05822aceeb484074a72d82a1b289da9fc3383f9ba3f55ce4bfd003bf9d62e6" dependencies = [ "async-trait", "base64 0.22.1", @@ -6729,9 +6776,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d646a25846f568fdd92b9422b09effbd4520bfd3efdeb2e338603e5ef5b413" +checksum = "cb9c6e64f01cfafef9b2d43d6adb02979bb22f579ec8ee88b77796259acce92e" dependencies = [ "anyhow", "base64 0.22.1", @@ -6748,25 +6795,25 @@ dependencies = [ "solana-sdk", "solana-transaction-status-client-types", "solana-version", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-rpc-client-nonce-utils" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6dbd0182fb41999ebd736d5b6262df292c89ce64c900abe7effb3358dd5cc61" +checksum = "7f0ab2d1ca3769c5058c689b438d35eb1cb7d2a32fc4b2b7c16fe72fa187927c" dependencies = [ "solana-rpc-client", "solana-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-runtime" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62f61ba4af4bc1fec468ef3b1d64c697d9cf76d31c0c639451e2de877b9511e" +checksum = "60f579df1ed24b2e7be5c99c2b97cb2a331823008129103b5b7753057ddf3cf7" dependencies = [ "ahash 0.8.11", "aquamarine", @@ -6847,15 +6894,15 @@ dependencies = [ "symlink", "tar", "tempfile", - "thiserror 1.0.69", + "thiserror 1.0.68", "zstd", ] [[package]] name = "solana-runtime-transaction" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a4cab17d76efb82aa4e84d8023f023c7f8ca921be554d370af7346a493e580b" +checksum = "01e1757d4473c7a2f462d2ce5f3cb5689145cfbde3a6b12161a49e497633ab85" dependencies = [ "agave-transaction-view", "log", @@ -6864,20 +6911,20 @@ dependencies = [ "solana-pubkey", "solana-sdk", "solana-svm-transaction", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-sanitize" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080d4769742f6468906e59f61c3f72d30059ba027cb8028d6cfbb5e4ce02082b" +checksum = "203b90994371db8cade8e885f74ec9f68ee02a32b25d514594158b2551a4e5ed" [[package]] name = "solana-sdk" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c599e773875c0f78e4868a9b75027d9e9abfb1561c84ddc2db5f9dc9e06ddda" +checksum = "524604d94185c189616296e5b7da1014cc96d1e446bd2b26f247f00708b9225a" dependencies = [ "bincode", "bitflags 2.6.0", @@ -6928,51 +6975,36 @@ dependencies = [ "solana-sanitize", "solana-sdk-macro", "solana-secp256k1-recover", - "solana-secp256r1-program", "solana-serde-varint", "solana-short-vec", "solana-signature", "solana-transaction-error", - "thiserror 1.0.69", + "thiserror 1.0.68", "wasm-bindgen", ] [[package]] name = "solana-sdk-macro" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b446159601e9d157f21e50673fd5ad4d1d4ac599b3e5c715ab9dcd48e2334b2a" +checksum = "1bd2265b93dce9d3dcf9f395abf1a85b5e06e4da4aa60ca147620003ac3abc67" dependencies = [ "bs58", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] name = "solana-secp256k1-recover" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47faa50f6c257b852165da9771b89df3611620db17e9547ae6c19261ed5ac60" +checksum = "f2eef5a00a75648273c3fb6e3d85b0c8c02fcc1e36c4271664dcc39b6b128d41" dependencies = [ "borsh 1.5.3", "libsecp256k1", "solana-define-syscall", - "thiserror 1.0.69", -] - -[[package]] -name = "solana-secp256r1-program" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21ecb017f075447c509907096989bacf688ed2abbd333094caeabe59db63cd2" -dependencies = [ - "bytemuck", - "openssl", - "solana-feature-set", - "solana-instruction", - "solana-precompile-error", - "solana-pubkey", + "thiserror 1.0.68", ] [[package]] @@ -6983,9 +7015,9 @@ checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] name = "solana-send-transaction-service" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1534fcda68212ac7b032bae6858085c84452cb96663f3e7d68fbf5b11305adf2" +checksum = "8dc6adaa31bdaab1e5f8932575e75160f4806553ab5e15e552c258dfe1d5594b" dependencies = [ "crossbeam-channel", "log", @@ -7000,18 +7032,18 @@ dependencies = [ [[package]] name = "solana-serde-varint" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954f961bbea4d6c727b9d345827463b932b4b15772ca8b4e3b1ee1d1dd71c503" +checksum = "9aeb51d3c20e2a61db0ef72617f3b8c9207a342a867af454a95f17add9f6c262" dependencies = [ "serde", ] [[package]] name = "solana-serialize-utils" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd562dab1702685450c786a22785141bd86b6bd26eb84594645da4802002c21" +checksum = "0cfb0b57c6a431fb15ff33053caadb6c36aed4e1ce74bea9adfc459a710b3626" dependencies = [ "solana-instruction", "solana-pubkey", @@ -7020,9 +7052,9 @@ dependencies = [ [[package]] name = "solana-sha256-hasher" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "215d1d82b57a61b973ac693a0e0a241ab3af87a133baf38879685b29bb16438d" +checksum = "bd115f3a1136314b0183235080d29023530c3a0a5df60505fdb7ea620eff9fd6" dependencies = [ "sha2 0.10.8", "solana-define-syscall", @@ -7031,22 +7063,22 @@ dependencies = [ [[package]] name = "solana-short-vec" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac2f7bd6150c630bb13e8822e58f18dcf0a487f5225e9d6b25e2a9333e81a067" +checksum = "08e55330b694db1139dcdf2a1ea7781abe8bd994dec2ab29e36abfd06e4e9274" dependencies = [ "serde", ] [[package]] name = "solana-signature" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90fbb85f263f88d62667abf3cfd9928c4f9b8b62b81b9b4e46987501bcf696" +checksum = "3ad9784d110f195a3a4fe423479d18f05b01a1c380a1430644a3b3038fdbe2f0" dependencies = [ "bs58", "ed25519-dalek", - "generic-array", + "generic-array 0.14.7", "rand 0.8.5", "serde", "serde_derive", @@ -7055,33 +7087,31 @@ dependencies = [ [[package]] name = "solana-slot-hashes" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c2a5eea7c7d98232935c446926a1d436507e481a7fb7dff6f7c2d5dd588c569" +checksum = "17d216c0ebf00e95acaf2b1e227e6cc900a5ce50fb81fa0743272851e88a788d" dependencies = [ "serde", "serde_derive", "solana-hash", - "solana-sysvar-id", ] [[package]] name = "solana-slot-history" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc4fedafbdd7587c2895dd1e6e129d9d32f4f86d41575bad8ae0f8b69afa472c" +checksum = "88cbcdf767891c6a40116a5ef8f7241000f074ece4ba80c8f00b4f62705fc8a4" dependencies = [ "bv", "serde", "serde_derive", - "solana-sysvar-id", ] [[package]] name = "solana-stable-layout" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e233a8a3df7a03190dc6d1612224157d016a0f1d59c690464da3efbb1cf4f394" +checksum = "8a5305ca88fb5deb219cd88f04e24f3a131769417d7fcb11a8da1126a8f98d23" dependencies = [ "solana-instruction", "solana-pubkey", @@ -7089,9 +7119,9 @@ dependencies = [ [[package]] name = "solana-stake-program" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4d4f60d3453dc4deac449c8008e383e492955207da9ae2f3cb691f7832e7e88" +checksum = "c8bb1a59fdd929becddfaed9ec33a1ca4db853f45ae85e14e4f4054a875fc41d" dependencies = [ "bincode", "log", @@ -7106,9 +7136,9 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9f85a8aa3127b1bc29d764a89c2526004de37956238befb342aeade7d2fb24" +checksum = "bd27a62abd1e8abab640ed77565fcbf10745e732fc016013f521f3a46193d07a" dependencies = [ "backoff", "bincode", @@ -7132,7 +7162,7 @@ dependencies = [ "solana-sdk", "solana-storage-proto", "solana-transaction-status", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", "tonic", "zstd", @@ -7140,9 +7170,9 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e97979e41fd0815426f37649a10d307e120b848458cf3c09ec4238fb02c100" +checksum = "12335d3d506aa9a49ac0674c00a5ea3de2d617e77ced0611080a3c1cdd61ada5" dependencies = [ "bincode", "bs58", @@ -7157,9 +7187,9 @@ dependencies = [ [[package]] name = "solana-streamer" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7566a425600e4b9001350fdeea6c300f170012eb77d5d31cb38b7fc2c3afbec7" +checksum = "ff771524872781eca074e0ba221d72b07fa0800cc1a7ffa400a9eb3e125fb922" dependencies = [ "async-channel", "bytes", @@ -7187,17 +7217,17 @@ dependencies = [ "solana-perf", "solana-sdk", "solana-transaction-metrics-tracker", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", - "tokio-util 0.7.12", + "tokio-util 0.7.1", "x509-parser", ] [[package]] name = "solana-svm" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb9dd8c5a9b93d232cb7fe91024ac5834aaba635872ce3189340789f2b531a3" +checksum = "43f3b139a001effc93295b693437013f365785fab04dcf2fa679164af4206ec8" dependencies = [ "itertools 0.12.1", "log", @@ -7220,32 +7250,32 @@ dependencies = [ "solana-timings", "solana-type-overrides", "solana-vote", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-svm-rent-collector" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31538e7f1dfa8e41c512aa415f055a50012bef409ba76fad265d22e4ab36684" +checksum = "32e7068d6cc69c730190c96b87b106afd42cde203cf56164106792778cd0aaeb" dependencies = [ "solana-sdk", ] [[package]] name = "solana-svm-transaction" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4200ff4dce28883b35563a49ebaa13cb60c3e5e3328aceb7c23f742ec3c1af8c" +checksum = "38a8533576cb7beca4a44b976ac27df9865bbf8c4cbca2ee8f4f3469cdd8175f" dependencies = [ "solana-sdk", ] [[package]] name = "solana-system-program" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57f5b94121cd959b406a4680780c04f3ddeec122865d80f1a5fb14741dda99c5" +checksum = "242634cdc1eacaa83738cc100fdd583eb88f99cc2edcc900c8ebe57d77af51b1" dependencies = [ "bincode", "log", @@ -7257,20 +7287,11 @@ dependencies = [ "solana-type-overrides", ] -[[package]] -name = "solana-sysvar-id" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4aeae93327e408717b0e7812f11324d75297d48a330e3419eebd36ad7e14efe0" -dependencies = [ - "solana-pubkey", -] - [[package]] name = "solana-test-validator" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac99cca67d5b426ed67598f1fff6c46a81f991803b0a52e7fd4c4673c1ad333" +checksum = "f1ff3137ff403e0d6c7f04b0800448341e8b4c889eefb2a1cd52e31e71596e72" dependencies = [ "base64 0.22.1", "bincode", @@ -7301,9 +7322,9 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0541e0dd4e94ab27ab283ff388eeb8c8cf8a0bbe02b09384433140f1f944a4f5" +checksum = "10314ae3e0889cf38140902862d2c2ea481895c82c19f51dc4457b7dfa3aa6d0" dependencies = [ "bincode", "log", @@ -7316,9 +7337,9 @@ dependencies = [ [[package]] name = "solana-timings" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "599a1e124baea46b2b290327395da6e8827fb0a61ac47ff3b7a699113e02c32b" +checksum = "a8a8e2f926d488c1e2a65cbc05544dcb68cfa88deb4d50f89db5bfbda7ff2419" dependencies = [ "eager", "enum-iterator", @@ -7327,9 +7348,9 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b721ee14a533a8db53d018785b5f3f03263c126cb3960cadbc12001738bf9d28" +checksum = "516cbed8800cd36fb3ecc9a65df1e76bf8251929aa32e9b10497e8d6612de605" dependencies = [ "async-trait", "bincode", @@ -7344,15 +7365,15 @@ dependencies = [ "solana-rpc-client", "solana-rpc-client-api", "solana-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", ] [[package]] name = "solana-transaction-error" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe272d53725e15e66449fac0987f162d41cefc2f985d293e5ac05f98f82528da" +checksum = "37a4bea6d80b34fe6e785d19bf928fe103928d1f6c9935ec23bb6a9d4d7a33d2" dependencies = [ "serde", "serde_derive", @@ -7362,9 +7383,9 @@ dependencies = [ [[package]] name = "solana-transaction-metrics-tracker" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96846da9f272146ee992531e30fa5b1d3b339eee6b4f4ba78e933338bc42698a" +checksum = "b0b668c986a83e6b2eb8f130039045b54abc37ee821853250755386d26c1c668" dependencies = [ "base64 0.22.1", "bincode", @@ -7378,9 +7399,9 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce3b3c45df2d152e54be63ff213535410512c12a61f9a0a807b40d8e4cb982fc" +checksum = "e3e8ed5bf2511c45b923de25482407c9a2eb56af73dba52c19db76df4dd35cba" dependencies = [ "Inflector", "base64 0.22.1", @@ -7401,14 +7422,14 @@ dependencies = [ "spl-token-2022 4.0.0", "spl-token-group-interface 0.3.0", "spl-token-metadata-interface 0.4.0", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-transaction-status-client-types" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2be74165813eeb798c755509d2fcd64bb4afbdab1973dafd6a10384a4851ed4" +checksum = "5fb35fb678fec581e9bdf6350d2c7f5829951a6280038fc06949b1589a9605e1" dependencies = [ "base64 0.22.1", "bincode", @@ -7419,14 +7440,14 @@ dependencies = [ "solana-account-decoder-client-types", "solana-sdk", "solana-signature", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-turbine" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "441634fc55c92e08778f281d53bb899ccfcd40b1bff37237a7978966f94bbf05" +checksum = "bf66a4e4cf0deed11e1d351fdce52e2a48058bd4b7ece4f5e1e1b435911460e0" dependencies = [ "bincode", "bytes", @@ -7458,15 +7479,15 @@ dependencies = [ "solana-sdk", "solana-streamer", "static_assertions", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", ] [[package]] name = "solana-type-overrides" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9041b231979c65651a46df4d5421791a9be73bdd4f99dbf873acf325d909f6d8" +checksum = "2066f25d460d63801f91436c2640aaba4f2dc95aa18fe1e76f7f2c063e981d4e" dependencies = [ "lazy_static", "rand 0.8.5", @@ -7474,24 +7495,24 @@ dependencies = [ [[package]] name = "solana-udp-client" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a824589762330e27948641afd210e71d48fd8499b725760a3d992d9a2f13fce5" +checksum = "95ec0cbc2d5e3379fafb2c1493f2358f07c09e76e2081c44e3a8c36da12fbd40" dependencies = [ "async-trait", "solana-connection-cache", "solana-net-utils", "solana-sdk", "solana-streamer", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", ] [[package]] name = "solana-unified-scheduler-logic" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604c4188ee7a3a77800bf70ebd3f9b6d02aa1e3adc9216bb9fa65a1488c3f58d" +checksum = "dd7b34042dc9a9731d47fc0ae1f5e0b4a393b0ad51b27b633df3d21771e4f12b" dependencies = [ "assert_matches", "solana-sdk", @@ -7500,9 +7521,9 @@ dependencies = [ [[package]] name = "solana-unified-scheduler-pool" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fc5bd8f0387a427024d1374f7cb6be2f255aa2d2934bf19c499c5017b5f1db7" +checksum = "672e74caac59ba67407a9895bd34906edd9b4de1884ece54afb49607919ab957" dependencies = [ "assert_matches", "crossbeam-channel", @@ -7522,9 +7543,9 @@ dependencies = [ [[package]] name = "solana-version" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53ab2119a54857e457e238471779ab6e110457ef3fbf739931c809804dac1988" +checksum = "7310708b642fb83c04f44934509f4f149ffd69d0cd4cf76d9645c991177d7ea0" dependencies = [ "semver", "serde", @@ -7536,23 +7557,23 @@ dependencies = [ [[package]] name = "solana-vote" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ecc5a694a4f7dd2fcf6e49df3cf4bbaef09617c15a802d92ec1e5ad2820c816" +checksum = "5ab46788981765ee706094ca53ad8421aae0286a6b948e892fa7db88992a5373" dependencies = [ "itertools 0.12.1", "log", "serde", "serde_derive", "solana-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-vote-program" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de615f1716c0903416ff0a80f593bade0135f12335ef86f59d6287b418fae40d" +checksum = "637cadc921725d1804a451ea7d2dff83310a12b75e0b6c83a8bb67ebc02d10f1" dependencies = [ "bincode", "log", @@ -7565,14 +7586,14 @@ dependencies = [ "solana-program", "solana-program-runtime", "solana-sdk", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] name = "solana-wen-restart" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825ceb8711f3c9df22a24d6146357fa8751670dd0a34453fc38d98faf5ca178e" +checksum = "fb5c015db11fa341ee48fd17d573f27960d32e027606c7cd0586c07332923062" dependencies = [ "anyhow", "log", @@ -7593,9 +7614,9 @@ dependencies = [ [[package]] name = "solana-zk-elgamal-proof-program" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f222634ebe7c48c596d281d2e097a768b4fab787d6026918247b1a9f8fcd2eac" +checksum = "47f5ac026a972c9cbc6bd0f72f692f85ff9ceec961fc4bcb1f2550e6387e962c" dependencies = [ "bytemuck", "num-derive", @@ -7608,9 +7629,9 @@ dependencies = [ [[package]] name = "solana-zk-sdk" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3861c1921163d384415a5204c0602d4bfa740148b98bf9f71ad00f413dc2de05" +checksum = "18c2d96f65cb033f4dc16d3a1b085f8af0ea38012c514a8f65b9b6d75bc9339f" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -7633,16 +7654,16 @@ dependencies = [ "solana-program", "solana-sdk", "subtle", - "thiserror 1.0.69", + "thiserror 1.0.68", "wasm-bindgen", "zeroize", ] [[package]] name = "solana-zk-token-proof-program" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1edd24aa9fae1cac67d5a8f8b3711cb49739e37ad9c250641b01d38080989e" +checksum = "83029f0fac09633fc4463dd5a7d13959d1825dccf77889c6e617e2b1265fb2f1" dependencies = [ "bytemuck", "num-derive", @@ -7656,9 +7677,9 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "2.1.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d209c7b3dd10e70370ddeb7356385ce774bfa21428a5030e767288e0ea4cca1c" +checksum = "ed293089d8eebd6b5c1b53ee4ad6817889fea254274ddb34cb01ad35a2f817cb" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -7682,7 +7703,7 @@ dependencies = [ "solana-program", "solana-sdk", "subtle", - "thiserror 1.0.69", + "thiserror 1.0.68", "zeroize", ] @@ -7700,15 +7721,21 @@ dependencies = [ "rand 0.8.5", "rustc-demangle", "scroll", - "thiserror 1.0.69", + "thiserror 1.0.68", "winapi 0.3.9", ] [[package]] name = "spin" -version = "0.9.8" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" [[package]] name = "spinning_top" @@ -7732,7 +7759,7 @@ dependencies = [ "solana-program", "spl-token 6.0.0", "spl-token-2022 4.0.0", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] @@ -7827,7 +7854,7 @@ version = "0.2.0" dependencies = [ "quote", "spl-discriminator-syn 0.2.0", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -7838,7 +7865,7 @@ checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ "quote", "spl-discriminator-syn 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -7848,8 +7875,8 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.89", - "thiserror 1.0.69", + "syn 2.0.87", + "thiserror 1.0.68", ] [[package]] @@ -7861,8 +7888,8 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.89", - "thiserror 1.0.69", + "syn 2.0.87", + "thiserror 1.0.68", ] [[package]] @@ -8175,9 +8202,9 @@ dependencies = [ [[package]] name = "spl-pod" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c704c88fc457fa649ba3aabe195c79d885c3f26709efaddc453c8de352c90b87" +checksum = "e6166a591d93af33afd75bbd8573c5fd95fb1213f1bf254f0508c89fdb5ee156" dependencies = [ "borsh 1.5.3", "bytemuck", @@ -8218,7 +8245,7 @@ dependencies = [ "num-traits", "solana-program", "spl-program-error-derive 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] @@ -8242,7 +8269,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -8254,7 +8281,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -8344,33 +8371,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "spl-slashing" -version = "0.1.0" -dependencies = [ - "bincode", - "bitflags 2.6.0", - "bytemuck", - "generic-array", - "num-derive", - "num-traits", - "num_enum", - "rand 0.8.5", - "serde", - "serde_bytes", - "serde_derive", - "serde_with", - "solana-client", - "solana-entry", - "solana-ledger", - "solana-program", - "solana-program-test", - "solana-sdk", - "spl-pod 0.5.0", - "spl-record", - "thiserror 1.0.69", -] - [[package]] name = "spl-stake-pool" version = "2.0.1" @@ -8433,7 +8433,7 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator 0.3.0", - "spl-pod 0.3.1", + "spl-pod 0.3.0", "spl-program-error 0.5.0", "spl-type-length-value 0.5.0", ] @@ -8476,7 +8476,7 @@ dependencies = [ "num-traits", "num_enum", "solana-program", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] @@ -8512,13 +8512,13 @@ dependencies = [ "solana-security-txt", "solana-zk-token-sdk", "spl-memo 5.0.0", - "spl-pod 0.3.1", + "spl-pod 0.3.0", "spl-token 6.0.0", "spl-token-group-interface 0.3.0", "spl-token-metadata-interface 0.4.0", "spl-transfer-hook-interface 0.7.0", "spl-type-length-value 0.5.0", - "thiserror 1.0.69", + "thiserror 1.0.68", ] [[package]] @@ -8742,7 +8742,7 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator 0.3.0", - "spl-pod 0.3.1", + "spl-pod 0.3.0", "spl-program-error 0.5.0", ] @@ -8822,7 +8822,7 @@ dependencies = [ "borsh 1.5.3", "solana-program", "spl-discriminator 0.3.0", - "spl-pod 0.3.1", + "spl-pod 0.3.0", "spl-program-error 0.5.0", "spl-type-length-value 0.5.0", ] @@ -9035,7 +9035,7 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator 0.3.0", - "spl-pod 0.3.1", + "spl-pod 0.3.0", "spl-program-error 0.5.0", "spl-tlv-account-resolution 0.7.0", "spl-type-length-value 0.5.0", @@ -9075,7 +9075,7 @@ dependencies = [ "bytemuck", "solana-program", "spl-discriminator 0.3.0", - "spl-pod 0.3.1", + "spl-pod 0.3.0", "spl-program-error 0.5.0", ] @@ -9102,7 +9102,7 @@ version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -9115,12 +9115,6 @@ dependencies = [ "spl-type-length-value 0.7.0", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - [[package]] name = "stateless-asks" version = "0.1.0" @@ -9163,12 +9157,6 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - [[package]] name = "strum" version = "0.24.1" @@ -9194,7 +9182,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -9207,7 +9195,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -9224,9 +9212,9 @@ checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" [[package]] name = "syn" -version = "1.0.109" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ "proc-macro2", "quote", @@ -9235,9 +9223,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.89" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -9258,21 +9246,10 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", "unicode-xid", ] -[[package]] -name = "synstructure" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.89", -] - [[package]] name = "sys-info" version = "0.9.1" @@ -9292,7 +9269,7 @@ dependencies = [ "bitflags 1.3.2", "byteorder", "libc", - "thiserror 1.0.69", + "thiserror 1.0.68", "walkdir", ] @@ -9319,9 +9296,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.43" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" +checksum = "4ff6c40d3aedb5e06b57c6f669ad17ab063dd1e63d977c6a88e7f4dfa4f04020" dependencies = [ "filetime", "libc", @@ -9344,10 +9321,10 @@ dependencies = [ "serde", "static_assertions", "tarpc-plugins", - "thiserror 1.0.69", + "thiserror 1.0.68", "tokio", "tokio-serde", - "tokio-util 0.6.10", + "tokio-util 0.6.9", "tracing", "tracing-opentelemetry", ] @@ -9360,7 +9337,7 @@ checksum = "0ee42b4e559f17bce0385ebf511a7beb67d5cc33c12c96b7f4e9789919d9c10f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -9387,18 +9364,18 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.4.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" dependencies = [ "winapi-util", ] [[package]] name = "termtree" -version = "0.4.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b" [[package]] name = "test-case" @@ -9411,25 +9388,27 @@ dependencies = [ [[package]] name = "test-case-core" -version = "3.3.1" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcb7fd841cd518e279be3d5a3eb0636409487998a4aff22f3de87b81e88384f" +checksum = "54c25e2cb8f5fcd7318157634e8838aa6f7e4715c96637f969fabaccd1ef5462" dependencies = [ "cfg-if 1.0.0", + "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] name = "test-case-macros" -version = "3.3.1" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" +checksum = "37cfd7bbc88a0104e304229fba519bdc45501a30b760fb72240342f1289ad257" dependencies = [ + "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", "test-case-core", ] @@ -9449,22 +9428,22 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "unicode-width 0.1.14", + "unicode-width", ] [[package]] name = "textwrap" -version = "0.16.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.69" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" dependencies = [ - "thiserror-impl 1.0.69", + "thiserror-impl 1.0.68", ] [[package]] @@ -9478,13 +9457,13 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "1.0.69" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] @@ -9495,16 +9474,15 @@ checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" dependencies = [ - "cfg-if 1.0.0", "once_cell", ] @@ -9552,36 +9530,26 @@ dependencies = [ "rand 0.7.3", "rustc-hash 1.1.0", "sha2 0.9.9", - "thiserror 1.0.69", + "thiserror 1.0.68", "unicode-normalization", "wasm-bindgen", "zeroize", ] -[[package]] -name = "tinystr" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" -dependencies = [ - "displaydoc", - "zerovec", -] - [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" -version = "0.1.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" @@ -9593,7 +9561,7 @@ dependencies = [ "bytes", "libc", "mio", - "parking_lot 0.12.3", + "parking_lot 0.12.0", "pin-project-lite", "signal-hook-registry", "socket2", @@ -9619,14 +9587,14 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] name = "tokio-native-tls" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" dependencies = [ "native-tls", "tokio", @@ -9681,14 +9649,14 @@ dependencies = [ "tokio", "tokio-rustls", "tungstenite", - "webpki-roots 0.25.4", + "webpki-roots 0.25.2", ] [[package]] name = "tokio-util" -version = "0.6.10" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" +checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" dependencies = [ "bytes", "futures-core", @@ -9701,9 +9669,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" dependencies = [ "bytes", "futures-core", @@ -9711,28 +9679,29 @@ dependencies = [ "futures-sink", "pin-project-lite", "tokio", + "tracing", ] [[package]] name = "toml" -version = "0.5.11" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" dependencies = [ "serde", ] [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap 2.6.0", "toml_datetime", @@ -9760,7 +9729,7 @@ dependencies = [ "percent-encoding 2.3.1", "pin-project", "prost", - "rustls-pemfile 1.0.4", + "rustls-pemfile 1.0.1", "tokio", "tokio-rustls", "tokio-stream", @@ -9780,7 +9749,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -9797,7 +9766,7 @@ dependencies = [ "rand 0.8.5", "slab", "tokio", - "tokio-util 0.7.12", + "tokio-util 0.7.1", "tower-layer", "tower-service", "tracing", @@ -9805,15 +9774,15 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" [[package]] name = "tower-service" -version = "0.3.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" @@ -9835,14 +9804,14 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -9863,9 +9832,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "5312f325fe3588e277415f5a6cca1f4ccad0f248c4cd5a4bd33032d7286abc22" dependencies = [ "sharded-slab", "thread_local", @@ -9880,9 +9849,9 @@ checksum = "0de5f738ceab88e2491a94ddc33c3feeadfa95fedc60363ef110845df12f3878" [[package]] name = "try-lock" -version = "0.2.5" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "tungstenite" @@ -9899,23 +9868,23 @@ dependencies = [ "rand 0.8.5", "rustls 0.21.12", "sha1", - "thiserror 1.0.69", - "url 2.5.4", + "thiserror 1.0.68", + "url 2.5.2", "utf-8", "webpki-roots 0.24.0", ] [[package]] name = "typenum" -version = "1.17.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "ucd-trie" -version = "0.1.7" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" [[package]] name = "uint" @@ -9937,54 +9906,51 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicase" -version = "2.8.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] [[package]] name = "unicode-bidi" -version = "0.3.17" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" [[package]] name = "unicode-normalization" -version = "0.1.24" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-width" -version = "0.1.14" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "unicode-xid" -version = "0.2.6" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "universal-hash" @@ -10011,6 +9977,12 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "untrusted" version = "0.9.0" @@ -10040,12 +10012,12 @@ dependencies = [ [[package]] name = "url" -version = "2.5.4" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", - "idna 1.0.3", + "idna 0.5.0", "percent-encoding 2.3.1", ] @@ -10055,23 +10027,11 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - [[package]] name = "utf8parse" -version = "0.2.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "valuable" @@ -10099,9 +10059,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.5" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "void" @@ -10130,10 +10090,11 @@ dependencies = [ [[package]] name = "want" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ + "log", "try-lock", ] @@ -10171,15 +10132,15 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.45" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -10205,7 +10166,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10218,58 +10179,47 @@ checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] -name = "web-time" -version = "1.1.0" +name = "webpki-roots" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" dependencies = [ - "js-sys", - "wasm-bindgen", + "rustls-webpki 0.101.7", ] [[package]] -name = "webpki-root-certs" -version = "0.26.7" +name = "webpki-roots" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd5da49bdf1f30054cfe0b8ce2958b8fbeb67c4d82c8967a598af481bef255c" -dependencies = [ - "rustls-pki-types", -] +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" [[package]] name = "webpki-roots" -version = "0.24.0" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" dependencies = [ - "rustls-webpki 0.101.7", + "rustls-pki-types", ] -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - [[package]] name = "which" -version = "4.4.2" +version = "4.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" dependencies = [ "either", - "home", - "once_cell", - "rustix", + "lazy_static", + "libc", ] [[package]] @@ -10302,11 +10252,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "windows-sys 0.59.0", + "winapi 0.3.9", ] [[package]] @@ -10315,22 +10265,13 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.5", + "windows-targets 0.48.0", ] [[package]] @@ -10353,17 +10294,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.5" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] @@ -10384,9 +10325,9 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.5" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" [[package]] name = "windows_aarch64_gnullvm" @@ -10396,9 +10337,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.48.5" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_aarch64_msvc" @@ -10408,9 +10349,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.48.5" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_gnu" @@ -10426,9 +10367,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.48.5" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_i686_msvc" @@ -10438,9 +10379,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] name = "windows_x86_64_gnu" @@ -10450,9 +10391,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.5" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_gnullvm" @@ -10462,9 +10403,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "windows_x86_64_msvc" @@ -10474,9 +10415,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.20" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] @@ -10491,18 +10432,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - -[[package]] -name = "writeable" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" - [[package]] name = "x509-parser" version = "0.14.0" @@ -10510,14 +10439,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ "asn1-rs", - "base64 0.13.1", + "base64 0.13.0", "data-encoding", "der-parser", "lazy_static", "nom", "oid-registry", "rusticata-macros", - "thiserror 1.0.69", + "thiserror 1.0.68", "time", ] @@ -10532,70 +10461,24 @@ dependencies = [ "rustix", ] -[[package]] -name = "yoke" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.89", - "synstructure 0.13.1", -] - [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.89", -] - -[[package]] -name = "zerofrom" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.5" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", - "synstructure 0.13.1", + "syn 2.0.87", ] [[package]] @@ -10615,29 +10498,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", -] - -[[package]] -name = "zerovec" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.89", + "syn 2.0.87", ] [[package]] From 3e2213988e4d26978107cd506847ab2bcd9849c7 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 27 Nov 2024 15:59:22 +0000 Subject: [PATCH 12/18] pr feedback: remove unecessary allow(dead_code) --- slashing/program/src/duplicate_block_proof.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/slashing/program/src/duplicate_block_proof.rs b/slashing/program/src/duplicate_block_proof.rs index c36704e8548..789a5658b11 100644 --- a/slashing/program/src/duplicate_block_proof.rs +++ b/slashing/program/src/duplicate_block_proof.rs @@ -21,7 +21,6 @@ pub struct DuplicateBlockProofData<'a> { impl<'a> DuplicateBlockProofData<'a> { const LENGTH_SIZE: usize = std::mem::size_of::(); - #[allow(dead_code)] /// Packs proof data to write in account for /// `SlashingInstruction::DuplicateBlockProof` pub fn pack(self) -> Vec { From 880d9c0e784174a65d3fc9a8530905455db0de22 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 27 Nov 2024 16:07:41 +0000 Subject: [PATCH 13/18] pr feedback: use SLOT - 1 and constants in test code --- slashing/program/src/duplicate_block_proof.rs | 83 +++++++++---------- slashing/program/src/processor.rs | 2 +- 2 files changed, 38 insertions(+), 47 deletions(-) diff --git a/slashing/program/src/duplicate_block_proof.rs b/slashing/program/src/duplicate_block_proof.rs index 789a5658b11..f2f6c9ec0ff 100644 --- a/slashing/program/src/duplicate_block_proof.rs +++ b/slashing/program/src/duplicate_block_proof.rs @@ -251,6 +251,11 @@ mod tests { std::sync::Arc, }; + const SLOT: Slot = 53084024; + const PARENT_SLOT: Slot = SLOT - 1; + const REFERENCE_TICK: u8 = 0; + const VERSION: u16 = 0; + fn generate_proof_data<'a>( shred1: &'a SolanaShred, shred2: &'a SolanaShred, @@ -265,8 +270,7 @@ mod tests { fn test_legacy_shreds_invalid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let legacy_data_shred = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, false, false); @@ -292,7 +296,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap_err(), SlashingError::LegacyShreds, ); } @@ -302,10 +306,9 @@ mod tests { fn test_slot_invalid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder_slot = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder_slot = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let shredder_bad_slot = - Shredder::new(slot + 1, parent_slot, reference_tick, version).unwrap(); + Shredder::new(SLOT + 1, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let data_shred = new_rand_data_shred( &mut rng, @@ -350,7 +353,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap_err(), SlashingError::SlotMismatch ); } @@ -360,23 +363,21 @@ mod tests { fn test_payload_proof_valid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let shred1 = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); let shred2 = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); let proof_data = generate_proof_data(&shred1, &shred2); - proof_data.verify_proof(slot, &leader.pubkey()).unwrap(); + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap(); } #[test] fn test_payload_proof_invalid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let data_shred = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); @@ -392,7 +393,7 @@ mod tests { for (shred1, shred2) in test_cases.into_iter() { let proof_data = generate_proof_data(&shred1, &shred2); assert_eq!( - proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap_err(), SlashingError::InvalidPayloadProof ); } @@ -402,8 +403,7 @@ mod tests { fn test_merkle_root_proof_valid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let (data_shreds, coding_shreds) = new_rand_shreds( &mut rng, @@ -436,7 +436,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); - proof_data.verify_proof(slot, &leader.pubkey()).unwrap(); + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap(); } } @@ -444,8 +444,7 @@ mod tests { fn test_merkle_root_proof_invalid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let (data_shreds, coding_shreds) = new_rand_shreds( &mut rng, @@ -480,7 +479,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap_err(), SlashingError::ShredTypeMismatch ); } @@ -490,8 +489,7 @@ mod tests { fn test_last_index_conflict_valid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let test_cases = vec![ ( @@ -522,7 +520,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); - proof_data.verify_proof(slot, &leader.pubkey()).unwrap(); + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap(); } } @@ -530,8 +528,7 @@ mod tests { fn test_last_index_conflict_invalid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let test_cases = vec![ ( @@ -583,7 +580,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap_err(), SlashingError::InvalidLastIndexConflict ); } @@ -593,8 +590,7 @@ mod tests { fn test_erasure_meta_conflict_valid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let coding_shreds = new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader, true); @@ -610,7 +606,7 @@ mod tests { ]; for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); - proof_data.verify_proof(slot, &leader.pubkey()).unwrap(); + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap(); } } @@ -618,8 +614,7 @@ mod tests { fn test_erasure_meta_conflict_invalid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let coding_shreds = new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader, true); @@ -666,7 +661,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap_err(), SlashingError::InvalidErasureMetaConflict ); } @@ -676,8 +671,7 @@ mod tests { fn test_shred_version_invalid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let (data_shreds, coding_shreds) = new_rand_shreds( &mut rng, @@ -690,8 +684,8 @@ mod tests { true, ); - // Wrong shred version - let shredder = Shredder::new(slot, parent_slot, reference_tick, version + 1).unwrap(); + // Wrong shred VERSION + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION + 1).unwrap(); let (wrong_data_shreds, wrong_coding_shreds) = new_rand_shreds( &mut rng, next_shred_index, @@ -703,7 +697,7 @@ mod tests { true, ); let test_cases = vec![ - // One correct shred version, one wrong + // One correct shred VERSION, one wrong (coding_shreds[0].clone(), wrong_coding_shreds[0].clone()), (coding_shreds[0].clone(), wrong_data_shreds[0].clone()), (data_shreds[0].clone(), wrong_coding_shreds[0].clone()), @@ -713,7 +707,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap_err(), SlashingError::InvalidShredVersion ); } @@ -728,8 +722,7 @@ mod tests { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let data_shred = new_rand_data_shred(&mut rng, next_shred_index, &shredder, &leader, true, true); @@ -764,7 +757,7 @@ mod tests { for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap_err(), SlashingError::InvalidPayloadProof ); } @@ -774,8 +767,7 @@ mod tests { fn test_overlapping_erasure_meta_proof_valid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let coding_shreds = new_rand_coding_shreds(&mut rng, next_shred_index, 10, &shredder, &leader, true); @@ -805,7 +797,7 @@ mod tests { ]; for (shred1, shred2) in test_cases.iter().flat_map(|(a, b)| [(a, b), (b, a)]) { let proof_data = generate_proof_data(shred1, shred2); - proof_data.verify_proof(slot, &leader.pubkey()).unwrap(); + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap(); } } @@ -813,8 +805,7 @@ mod tests { fn test_overlapping_erasure_meta_proof_invalid() { let mut rng = rand::thread_rng(); let leader = Arc::new(Keypair::new()); - let (slot, parent_slot, reference_tick, version) = (53084024, 53084023, 0, 0); - let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); + let shredder = Shredder::new(SLOT, PARENT_SLOT, REFERENCE_TICK, VERSION).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let (data_shred, coding_shred) = new_rand_shreds( &mut rng, @@ -867,7 +858,7 @@ mod tests { { let proof_data = generate_proof_data(shred1, shred2); assert_eq!( - proof_data.verify_proof(slot, &leader.pubkey()).unwrap_err(), + proof_data.verify_proof(SLOT, &leader.pubkey()).unwrap_err(), *expected, ); } diff --git a/slashing/program/src/processor.rs b/slashing/program/src/processor.rs index bc4d8e2ee62..5c6e0f79484 100644 --- a/slashing/program/src/processor.rs +++ b/slashing/program/src/processor.rs @@ -97,7 +97,7 @@ mod tests { fn generate_proof_data(leader: Arc) -> Vec { let mut rng = rand::thread_rng(); - let (slot, parent_slot, reference_tick, version) = (SLOT, 53084023, 0, 0); + let (slot, parent_slot, reference_tick, version) = (SLOT, SLOT - 1, 0, 0); let shredder = Shredder::new(slot, parent_slot, reference_tick, version).unwrap(); let next_shred_index = rng.gen_range(0..32_000); let shred1 = From c018720853875cf9ef88675c68f210733738a775 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 27 Nov 2024 16:11:01 +0000 Subject: [PATCH 14/18] pr feedback: return error if proof buffer is too small for shred1_length --- slashing/program/src/duplicate_block_proof.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/slashing/program/src/duplicate_block_proof.rs b/slashing/program/src/duplicate_block_proof.rs index f2f6c9ec0ff..8a093f6ee51 100644 --- a/slashing/program/src/duplicate_block_proof.rs +++ b/slashing/program/src/duplicate_block_proof.rs @@ -67,7 +67,12 @@ impl<'a> SlashingProofData<'a> for DuplicateBlockProofData<'a> { let (length1, data) = data.split_at(Self::LENGTH_SIZE); let shred1_length = try_from_bytes::(length1) .map_err(|_| SlashingError::ProofBufferDeserializationError)?; - let (shred1, data) = data.split_at(u32::from(*shred1_length) as usize); + let shred1_length = u32::from(*shred1_length) as usize; + + if data.len() < shred1_length { + return Err(SlashingError::ProofBufferTooSmall); + } + let (shred1, data) = data.split_at(shred1_length); if data.len() < Self::LENGTH_SIZE { return Err(SlashingError::ProofBufferTooSmall); @@ -75,8 +80,9 @@ impl<'a> SlashingProofData<'a> for DuplicateBlockProofData<'a> { let (length2, shred2) = data.split_at(Self::LENGTH_SIZE); let shred2_length = try_from_bytes::(length2) .map_err(|_| SlashingError::ProofBufferDeserializationError)?; + let shred2_length = u32::from(*shred2_length) as usize; - if shred2.len() < u32::from(*shred2_length) as usize { + if shred2.len() < shred2_length { return Err(SlashingError::ProofBufferTooSmall); } From 9174be41bec85352c21555fcf671daff13e3c249 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 27 Nov 2024 16:13:14 +0000 Subject: [PATCH 15/18] pr feedback: remove lifetime on shred reference in get_payload --- slashing/program/src/shred.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slashing/program/src/shred.rs b/slashing/program/src/shred.rs index 6a11d5db12d..47e4308e086 100644 --- a/slashing/program/src/shred.rs +++ b/slashing/program/src/shred.rs @@ -332,7 +332,7 @@ impl<'a> Shred<'a> { { return false; } - fn get_payload<'a>(shred: &'a Shred<'a>) -> &'a [u8] { + fn get_payload<'a>(shred: &Shred<'a>) -> &'a [u8] { let Ok((proof_offset, proof_size)) = shred.get_proof_offset_and_size() else { return shred.payload; }; From 5210f9cee99d136f7061f453c7efa171a09a4166 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 27 Nov 2024 16:18:46 +0000 Subject: [PATCH 16/18] pr feedback: use rwlock in test rather than unsafe const modification --- slashing/program/Cargo.toml | 1 + slashing/program/src/processor.rs | 34 +++++++++++++++---------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/slashing/program/Cargo.toml b/slashing/program/Cargo.toml index 721e10140bf..a8e47e5b022 100644 --- a/slashing/program/Cargo.toml +++ b/slashing/program/Cargo.toml @@ -29,6 +29,7 @@ thiserror = "1.0" spl-pod = { version = "0.5.0", path = "../../libraries/pod" } [dev-dependencies] +lazy_static = "1.5.0" solana-program-test = "2.1.0" solana-sdk = "2.1.0" solana-ledger = "2.1.0" diff --git a/slashing/program/src/processor.rs b/slashing/program/src/processor.rs index 5c6e0f79484..59fbe2087e4 100644 --- a/slashing/program/src/processor.rs +++ b/slashing/program/src/processor.rs @@ -89,11 +89,13 @@ mod tests { signature::Keypair, signer::Signer, }, - std::sync::Arc, + std::sync::{Arc, RwLock}, }; const SLOT: Slot = 53084024; - static mut CLOCK_SLOT: Slot = SLOT; + lazy_static::lazy_static! { + static ref CLOCK_SLOT: Arc> = Arc::new(RwLock::new(SLOT)); + } fn generate_proof_data(leader: Arc) -> Vec { let mut rng = rand::thread_rng(); @@ -113,22 +115,20 @@ mod tests { #[test] fn test_statue_of_limitations() { - unsafe { - CLOCK_SLOT = SLOT + 5; - verify_with_clock().unwrap(); + *CLOCK_SLOT.write().unwrap() = SLOT + 5; + verify_with_clock().unwrap(); - CLOCK_SLOT = SLOT - 1; - assert_eq!( - verify_with_clock().unwrap_err(), - ProgramError::ArithmeticOverflow - ); + *CLOCK_SLOT.write().unwrap() = SLOT - 1; + assert_eq!( + verify_with_clock().unwrap_err(), + ProgramError::ArithmeticOverflow + ); - CLOCK_SLOT = SLOT + DEFAULT_SLOTS_PER_EPOCH + 1; - assert_eq!( - verify_with_clock().unwrap_err(), - SlashingError::ExceedsStatueOfLimitations.into() - ); - } + *CLOCK_SLOT.write().unwrap() = SLOT + DEFAULT_SLOTS_PER_EPOCH + 1; + assert_eq!( + verify_with_clock().unwrap_err(), + SlashingError::ExceedsStatueOfLimitations.into() + ); } fn verify_with_clock() -> Result<(), ProgramError> { @@ -137,7 +137,7 @@ mod tests { fn sol_get_clock_sysvar(&self, var_addr: *mut u8) -> u64 { unsafe { let clock = Clock { - slot: CLOCK_SLOT, + slot: *CLOCK_SLOT.read().unwrap(), ..Clock::default() }; *(var_addr as *mut _ as *mut Clock) = clock; From 09235dac6e62961e673d281fc36063514550116e Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 27 Nov 2024 16:22:52 +0000 Subject: [PATCH 17/18] pr feedback: use epoch schedule sysvar instead of hardcoding length --- slashing/program/src/processor.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/slashing/program/src/processor.rs b/slashing/program/src/processor.rs index 59fbe2087e4..07efa42ccd9 100644 --- a/slashing/program/src/processor.rs +++ b/slashing/program/src/processor.rs @@ -12,12 +12,12 @@ use { }, solana_program::{ account_info::{next_account_info, AccountInfo}, - clock::{Slot, DEFAULT_SLOTS_PER_EPOCH}, + clock::Slot, entrypoint::ProgramResult, msg, program_error::ProgramError, pubkey::Pubkey, - sysvar::{clock::Clock, Sysvar}, + sysvar::{clock::Clock, epoch_schedule::EpochSchedule, Sysvar}, }, }; @@ -30,7 +30,8 @@ where let Some(elapsed) = clock.slot.checked_sub(slot) else { return Err(ProgramError::ArithmeticOverflow); }; - if elapsed > DEFAULT_SLOTS_PER_EPOCH { + let epoch_schedule = EpochSchedule::get()?; + if elapsed > epoch_schedule.slots_per_epoch { return Err(SlashingError::ExceedsStatueOfLimitations.into()); } @@ -85,6 +86,7 @@ mod tests { solana_ledger::shred::Shredder, solana_sdk::{ clock::{Clock, Slot, DEFAULT_SLOTS_PER_EPOCH}, + epoch_schedule::EpochSchedule, program_error::ProgramError, signature::Keypair, signer::Signer, @@ -144,6 +146,13 @@ mod tests { } solana_program::entrypoint::SUCCESS } + + fn sol_get_epoch_schedule_sysvar(&self, var_addr: *mut u8) -> u64 { + unsafe { + *(var_addr as *mut _ as *mut EpochSchedule) = EpochSchedule::default(); + } + solana_program::entrypoint::SUCCESS + } } solana_sdk::program_stubs::set_syscall_stubs(Box::new(SyscallStubs {})); From 8eef69ada263d93c577eb44a7d05930816cce79d Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Wed, 27 Nov 2024 22:54:37 +0000 Subject: [PATCH 18/18] Add Cargo.lock just for slashing crate --- Cargo.lock | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 75ef8f54db7..068e8d32d94 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8371,6 +8371,34 @@ dependencies = [ "tokio", ] +[[package]] +name = "spl-slashing" +version = "0.1.0" +dependencies = [ + "bincode", + "bitflags 2.6.0", + "bytemuck", + "generic-array 0.14.7", + "lazy_static", + "num-derive", + "num-traits", + "num_enum", + "rand 0.8.5", + "serde", + "serde_bytes", + "serde_derive", + "serde_with", + "solana-client", + "solana-entry", + "solana-ledger", + "solana-program", + "solana-program-test", + "solana-sdk", + "spl-pod 0.5.0", + "spl-record", + "thiserror 1.0.68", +] + [[package]] name = "spl-stake-pool" version = "2.0.1"