From 877790d2b9e5251f31919ecd0df526c53035d8d3 Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Mon, 12 Jan 2026 11:39:47 +0100 Subject: [PATCH 1/9] y --- Cargo.lock | 1092 ++++++++++++++++++++---------- Cargo.toml | 28 +- bin/network-monitor/Cargo.toml | 2 +- bin/remote-prover/Cargo.toml | 2 +- crates/large-smt/Cargo.toml | 26 + crates/large-smt/README.md | 45 ++ crates/large-smt/src/lib.rs | 63 ++ crates/large-smt/src/rocksdb.rs | 833 +++++++++++++++++++++++ crates/rpc/Cargo.toml | 2 +- crates/store/Cargo.toml | 3 +- crates/store/src/state/loader.rs | 7 +- 11 files changed, 1717 insertions(+), 386 deletions(-) create mode 100644 crates/large-smt/Cargo.toml create mode 100644 crates/large-smt/README.md create mode 100644 crates/large-smt/src/lib.rs create mode 100644 crates/large-smt/src/rocksdb.rs diff --git a/Cargo.lock b/Cargo.lock index 09653daa04..eee9b11a4f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -137,18 +137,18 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" dependencies = [ "backtrace", ] [[package]] name = "arc-swap" -version = "1.8.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d03449bb8ca2cc2ef70869af31463d1ae5ccc8fa3e334b307203fbf815207e" +checksum = "f9f3647c145568cec02c42054e07bdf9a5a698e15b466fb2341bfc393cd24aa5" dependencies = [ "rustversion", ] @@ -188,7 +188,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -223,6 +223,28 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "aws-lc-rs" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9a7b350e3bb1767102698302bc37256cbd48422809984b98d292c40e2579aa9" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.37.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b092fe214090261288111db7a2b2c2118e5a7f30dc2569f1732c4069a6840549" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + [[package]] name = "axum" version = "0.8.8" @@ -348,16 +370,16 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cexpr", "clang-sys", - "itertools 0.10.5", + "itertools 0.13.0", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -383,9 +405,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "blake2" @@ -442,15 +464,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.1" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +checksum = "c81d250916401487680ed13b8b675660281dcfc3ab0121fe44c94bcab9eae2fb" [[package]] name = "bytemuck" -version = "1.24.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" [[package]] name = "byteorder" @@ -482,9 +504,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.54" +version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ "find-msvc-tools", "jobserver", @@ -492,6 +514,12 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cexpr" version = "0.6.0" @@ -535,6 +563,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chacha20" version = "0.9.1" @@ -640,9 +674,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.55" +version = "4.5.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e34525d5bbbd55da2bb745d34b36121baac88d07619a9a09cfcf4a6c0832785" +checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499" dependencies = [ "clap_builder", "clap_derive 4.5.55", @@ -650,13 +684,13 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.55" +version = "4.5.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a20016a20a3da95bef50ec7238dbd09baeef4311dcdd38ec15aba69812fb61" +checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.7", + "clap_lex 1.0.0", "strsim 0.11.1", ] @@ -682,7 +716,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -696,9 +730,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" +checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" [[package]] name = "cmake" @@ -715,6 +749,16 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -780,7 +824,7 @@ dependencies = [ "anes", "cast", "ciborium", - "clap 4.5.55", + "clap 4.5.59", "criterion-plot", "is-terminal", "itertools 0.10.5", @@ -894,7 +938,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -937,7 +981,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -951,7 +995,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -962,7 +1006,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -973,7 +1017,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1030,9 +1074,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" dependencies = [ "powerfmt", ] @@ -1066,7 +1110,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1076,7 +1120,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1097,7 +1141,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1127,7 +1171,7 @@ dependencies = [ "dsl_auto_type", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1147,7 +1191,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe2444076b48641147115697648dc743c2c00b61adade0f01ce67133c7babe8c" dependencies = [ - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1176,7 +1220,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1202,9 +1246,15 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "ecdsa" version = "0.16.9" @@ -1271,9 +1321,9 @@ dependencies = [ [[package]] name = "ena" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1" dependencies = [ "log", ] @@ -1289,9 +1339,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.4" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" dependencies = [ "log", "regex", @@ -1299,9 +1349,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" dependencies = [ "anstream", "anstyle", @@ -1366,9 +1416,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "fixedbitset" @@ -1378,9 +1428,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "libz-ng-sys", @@ -1417,21 +1467,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -1443,18 +1478,24 @@ dependencies = [ [[package]] name = "fs-err" -version = "3.2.2" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf68cef89750956493a66a10f512b9e58d9db21f2a573c079c0bdf1207a54a7" +checksum = "73fde052dbfc920003cfd2c8e2c6e6d4cc7c1091538c3a24226cec0665ab08c0" dependencies = [ "autocfg", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -1467,9 +1508,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -1477,15 +1518,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -1494,32 +1535,32 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" @@ -1529,9 +1570,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -1541,7 +1582,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -1598,6 +1638,19 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", + "wasip3", +] + [[package]] name = "getset" version = "0.1.6" @@ -1607,7 +1660,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -1859,32 +1912,15 @@ dependencies = [ "tower-service", ] -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - [[package]] name = "hyper-util" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64", "bytes", "futures-channel", - "futures-core", "futures-util", "http", "http-body", @@ -1903,9 +1939,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2006,6 +2042,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -2057,6 +2099,8 @@ checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", + "serde", + "serde_core", ] [[package]] @@ -2122,6 +2166,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.14.0" @@ -2139,9 +2192,9 @@ checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jiff" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" +checksum = "c867c356cc096b33f4981825ab281ecba3db0acefe60329f044c1789d94c6543" dependencies = [ "jiff-static", "log", @@ -2152,15 +2205,37 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" +checksum = "f7946b4325269738f270bb55b3c19ab5c5040525f83fd625259422a9d25d9be5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", ] +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "jobserver" version = "0.1.34" @@ -2197,9 +2272,9 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ "cpufeatures", ] @@ -2215,7 +2290,7 @@ dependencies = [ "ena", "itertools 0.14.0", "lalrpop-util", - "petgraph", + "petgraph 0.7.1", "regex", "regex-syntax", "sha3", @@ -2240,11 +2315,17 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "libc" -version = "0.2.180" +version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "libloading" @@ -2334,9 +2415,9 @@ checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "local-ip-address" -version = "0.6.9" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92488bc8a0f99ee9f23577bdd06526d49657df8bd70504c61f812337cdad01ab" +checksum = "79ef8c257c92ade496781a32a581d43e3d512cf8ce714ecf04ea80f93ed0ff4a" dependencies = [ "libc", "neli", @@ -2380,7 +2461,7 @@ dependencies = [ "quote", "regex-syntax", "rustc_version 0.4.1", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -2420,6 +2501,12 @@ version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "lz4-sys" version = "1.11.1+lz4-1.10.0" @@ -2453,9 +2540,9 @@ checksum = "120fa187be19d9962f0926633453784691731018a2bf936ddb4e29101b79c4a7" [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memoffset" @@ -2469,7 +2556,7 @@ dependencies = [ [[package]] name = "miden-agglayer" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" +source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" dependencies = [ "fs-err", "miden-assembly", @@ -2484,9 +2571,9 @@ dependencies = [ [[package]] name = "miden-air" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2f1db9cdbd5da3eaf07fa0a8122d27b575f96b0699388c98f6c0e468cb9c1f" +checksum = "5cca9632323bd4e32ae5b21b101ed417a646f5d72196b1bf3f1ca889a148322a" dependencies = [ "miden-core", "miden-utils-indexing", @@ -2497,9 +2584,9 @@ dependencies = [ [[package]] name = "miden-assembly" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4aba6bc5cfda2393ecc032b55caabde289fb980650560f8333803db4e48f09" +checksum = "2395b2917aea613a285d3425d1ca07e6c45442e2b34febdea2081db555df62fc" dependencies = [ "env_logger", "log", @@ -2512,9 +2599,9 @@ dependencies = [ [[package]] name = "miden-assembly-syntax" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23eae66f2a55c2a0666f4ed896b61797845b528435ad2bae41fd9a221f94bad7" +checksum = "1f9bed037d137f209b9e7b28811ec78c0536b3f9259d6f4ceb5823c87513b346" dependencies = [ "aho-corasick", "env_logger", @@ -2537,7 +2624,7 @@ dependencies = [ [[package]] name = "miden-block-prover" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" +source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" dependencies = [ "miden-protocol", "thiserror 2.0.18", @@ -2545,9 +2632,9 @@ dependencies = [ [[package]] name = "miden-core" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2716bb01f07f0b19398e3d9785e23a724b89aef64d614a9073c1d44c6898a9a9" +checksum = "8714aa5f86c59e647b7417126b32adc4ef618f835964464f5425549df76b6d03" dependencies = [ "derive_more", "itertools 0.14.0", @@ -2567,9 +2654,9 @@ dependencies = [ [[package]] name = "miden-core-lib" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac97f4fb334ee842663f99f33677beacc7bdf4b7d4eeff419c2cd98a5a68bfa" +checksum = "1bb16a4d39202c59a7964d3585cd5af21a46a759ff6452cb5f20723ed5af4362" dependencies = [ "env_logger", "fs-err", @@ -2585,8 +2672,7 @@ dependencies = [ [[package]] name = "miden-crypto" version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e28b6e110f339c2edc2760a8cb94863f0a055ee658a49bc90c8560eff2feef4" +source = "git+https://github.com/0xMiden/crypto.git?branch=bernhard-migrate-rocksdb-from-crypto#afaa90349f6d5a89a320c6d1d6db78dba3b91c60" dependencies = [ "blake3", "cc", @@ -2606,7 +2692,6 @@ dependencies = [ "rand_core 0.9.5", "rand_hc", "rayon", - "rocksdb", "sha2", "sha3", "subtle", @@ -2620,18 +2705,17 @@ dependencies = [ [[package]] name = "miden-crypto-derive" version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40e95b9c7c99ed6bbf073d9e02721d812dedd2c195019c0a0e0a3dbb9cbf034" +source = "git+https://github.com/0xMiden/crypto.git?branch=bernhard-migrate-rocksdb-from-crypto#afaa90349f6d5a89a320c6d1d6db78dba3b91c60" dependencies = [ "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "miden-debug-types" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b421786850ce05627355ee616c4a5fdc4a9ad1591859ede5e5564ab74aa4abd2" +checksum = "cd1494f102ad5b9fa43e391d2601186dc601f41ab7dcd8a23ecca9bf3ef930f4" dependencies = [ "memchr", "miden-crypto", @@ -2654,11 +2738,21 @@ dependencies = [ "unicode-width 0.1.14", ] +[[package]] +name = "miden-large-smt-backend-rocksdb" +version = "0.14.0" +dependencies = [ + "miden-protocol", + "rayon", + "rocksdb", + "winter-utils", +] + [[package]] name = "miden-mast-package" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "169025a61c2ca2e8a0f53f20a7bdcbdd1f8e34f528676137208bff64944652bb" +checksum = "692185bfbe0ecdb28bf623f1f8c88282cd6727ba081a28e23b301bdde1b45be4" dependencies = [ "derive_more", "miden-assembly-syntax", @@ -2689,7 +2783,7 @@ dependencies = [ "supports-color", "supports-hyperlinks", "supports-unicode", - "syn 2.0.114", + "syn 2.0.116", "terminal_size 0.3.0", "textwrap", "thiserror 2.0.18", @@ -2705,7 +2799,7 @@ checksum = "86a905f3ea65634dd4d1041a4f0fd0a3e77aa4118341d265af1a94339182222f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -2714,7 +2808,7 @@ version = "0.14.0" dependencies = [ "anyhow", "axum", - "clap 4.5.55", + "clap 4.5.59", "hex", "humantime", "miden-node-proto", @@ -2742,7 +2836,7 @@ name = "miden-node" version = "0.14.0" dependencies = [ "anyhow", - "clap 4.5.55", + "clap 4.5.59", "figment", "fs-err", "hex", @@ -2800,7 +2894,7 @@ name = "miden-node-grpc-error-macro" version = "0.14.0" dependencies = [ "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -2923,6 +3017,7 @@ dependencies = [ "libsqlite3-sys", "miden-block-prover", "miden-crypto", + "miden-large-smt-backend-rocksdb", "miden-node-proto", "miden-node-proto-build", "miden-node-rocksdb-cxx-linkage-fix", @@ -2940,7 +3035,7 @@ dependencies = [ "thiserror 2.0.18", "tokio", "tokio-stream", - "toml 0.9.11+spec-1.1.0", + "toml 0.9.12+spec-1.1.0", "tonic", "tonic-reflection", "tower-http", @@ -2952,7 +3047,7 @@ dependencies = [ name = "miden-node-stress-test" version = "0.14.0" dependencies = [ - "clap 4.5.55", + "clap 4.5.59", "fs-err", "futures", "miden-air", @@ -2975,7 +3070,7 @@ name = "miden-node-test-macro" version = "0.1.0" dependencies = [ "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -3032,9 +3127,9 @@ dependencies = [ [[package]] name = "miden-processor" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18a6a5eebe64e81a29be6321ee8f4478c6bfaf619b7689825884e8cd308c044" +checksum = "0e09f7916b1e7505f74a50985a185fdea4c0ceb8f854a34c90db28e3f7da7ab6" dependencies = [ "itertools 0.14.0", "miden-air", @@ -3053,7 +3148,7 @@ dependencies = [ [[package]] name = "miden-protocol" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" +source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" dependencies = [ "bech32", "fs-err", @@ -3075,7 +3170,7 @@ dependencies = [ "semver 1.0.27", "serde", "thiserror 2.0.18", - "toml 0.9.11+spec-1.1.0", + "toml 0.9.12+spec-1.1.0", "walkdir", "winter-rand-utils", ] @@ -3083,18 +3178,18 @@ dependencies = [ [[package]] name = "miden-protocol-macros" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" +source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "miden-prover" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83070f0ca1a08235362e990238b6487191f814054aaebcc40883a073fdcd18f9" +checksum = "d45e30526be72b8af0fd1d8b24c9cba8ac1187ca335dcee38b8e5e20234e7698" dependencies = [ "miden-air", "miden-debug-types", @@ -3112,7 +3207,7 @@ dependencies = [ "async-trait", "axum", "bytes", - "clap 4.5.55", + "clap 4.5.59", "http", "humantime", "miden-block-prover", @@ -3174,7 +3269,7 @@ dependencies = [ [[package]] name = "miden-standards" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" +source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" dependencies = [ "fs-err", "miden-assembly", @@ -3191,7 +3286,7 @@ dependencies = [ [[package]] name = "miden-testing" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" +source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" dependencies = [ "anyhow", "itertools 0.14.0", @@ -3213,7 +3308,7 @@ dependencies = [ [[package]] name = "miden-tx" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" +source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" dependencies = [ "miden-processor", "miden-protocol", @@ -3226,7 +3321,7 @@ dependencies = [ [[package]] name = "miden-tx-batch-prover" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" +source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" dependencies = [ "miden-protocol", "miden-tx", @@ -3234,9 +3329,9 @@ dependencies = [ [[package]] name = "miden-utils-core-derive" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9fc6d350fb9ad44797e8d0a1feaacaa6ee4079ef752d9ababc101ffc40ec354" +checksum = "a1b1d490e6d7b509622d3c2cc69ffd66ad48bf953dc614579b568fe956ce0a6c" dependencies = [ "proc-macro2", "quote", @@ -3245,9 +3340,9 @@ dependencies = [ [[package]] name = "miden-utils-diagnostics" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2462fb2e750247a56264eddf40e2e1c8d96ff9379abe73acbcbe81e530e1d5" +checksum = "52658f6dc091c1c78e8b35ee3e7ff3dad53051971a3c514e461f581333758fe7" dependencies = [ "miden-crypto", "miden-debug-types", @@ -3258,18 +3353,18 @@ dependencies = [ [[package]] name = "miden-utils-indexing" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57046b5c263b78e7fa5a6e328ca852e6319cf844faa26fbdcbb128ec555deb2a" +checksum = "eeff7bcb7875b222424bdfb657a7cf21a55e036aa7558ebe1f5d2e413b440d0d" dependencies = [ "thiserror 2.0.18", ] [[package]] name = "miden-utils-sync" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d3e129b62099672a1ffc012ab2e26ee7f2b35e4ca18ca1f726b88c53546ddd" +checksum = "41d53d1ab5b275d8052ad9c4121071cb184bc276ee74354b0d8a2075e5c1d1f0" dependencies = [ "lock_api", "loom", @@ -3278,9 +3373,9 @@ dependencies = [ [[package]] name = "miden-verifier" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe033af062937938ded511e5238db3bf8e0c1a30205850d62fb23271b3c96f85" +checksum = "b13816663794beb15c8a4721c15252eb21f3b3233525684f60c7888837a98ff4" dependencies = [ "miden-air", "miden-core", @@ -3327,7 +3422,7 @@ checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -3337,7 +3432,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36c791ecdf977c99f45f23280405d7723727470f6689a5e6dbf513ac547ae10d" dependencies = [ "serde", - "toml 0.9.11+spec-1.1.0", + "toml 0.9.12+spec-1.1.0", ] [[package]] @@ -3399,30 +3494,13 @@ dependencies = [ "getrandom 0.2.17", ] -[[package]] -name = "native-tls" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe 0.1.6", - "openssl-sys", - "schannel", - "security-framework 2.11.1", - "security-framework-sys", - "tempfile", -] - [[package]] name = "neli" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e23bebbf3e157c402c4d5ee113233e5e0610cc27453b2f07eefce649c7365dcc" +checksum = "22f9786d56d972959e1408b6a93be6af13b9c1392036c5c1fafa08a1b0c6ee87" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "byteorder", "derive_builder", "getset", @@ -3442,7 +3520,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -3529,7 +3607,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -3616,32 +3694,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" -[[package]] -name = "openssl" -version = "0.10.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" -dependencies = [ - "bitflags 2.10.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "openssl-probe" version = "0.1.6" @@ -3654,18 +3706,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" -[[package]] -name = "openssl-sys" -version = "0.9.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "opentelemetry" version = "0.31.0" @@ -3787,7 +3827,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -3806,6 +3846,17 @@ dependencies = [ "indexmap 2.13.0", ] +[[package]] +name = "petgraph" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" +dependencies = [ + "fixedbitset", + "hashbrown 0.15.5", + "indexmap 2.13.0", +] + [[package]] name = "phf_shared" version = "0.11.3" @@ -3832,7 +3883,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -4149,15 +4200,15 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" dependencies = [ "portable-atomic", ] @@ -4209,7 +4260,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -4264,7 +4315,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -4284,7 +4335,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", "version_check", "yansi", ] @@ -4321,13 +4372,13 @@ dependencies = [ [[package]] name = "proptest" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" +checksum = "37566cb3fdacef14c0737f9546df7cfeadbfbc9fef10991038bf5015d0c80532" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.10.0", + "bitflags 2.11.0", "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", @@ -4346,7 +4397,7 @@ checksum = "fb6dc647500e84a25a85b100e76c85b8ace114c209432dc174f20aac11d4ed6c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -4361,23 +4412,22 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac6c3320f9abac597dcbc668774ef006702672474aad53c6d596b62e487b40b1" +checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" dependencies = [ "heck 0.5.0", "itertools 0.14.0", "log", "multimap", - "once_cell", - "petgraph", + "petgraph 0.8.3", "prettyplease", "prost", "prost-types", "pulldown-cmark", "pulldown-cmark-to-cmark", "regex", - "syn 2.0.114", + "syn 2.0.116", "tempfile", ] @@ -4391,7 +4441,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -4408,9 +4458,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72" +checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" dependencies = [ "prost", ] @@ -4474,16 +4524,16 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e8bbe1a966bd2f362681a44f6edce3c2310ac21e4d5067a6e7ec396297a6ea0" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "memchr", "unicase", ] [[package]] name = "pulldown-cmark-to-cmark" -version = "21.1.0" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8246feae3db61428fd0bb94285c690b460e4517d83152377543ca802357785f1" +checksum = "50793def1b900256624a709439404384204a5dc3a6ec580281bfaac35e882e90" dependencies = [ "pulldown-cmark", ] @@ -4494,6 +4544,62 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.18", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +dependencies = [ + "aws-lc-rs", + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.60.2", +] + [[package]] name = "quote" version = "1.0.44" @@ -4621,14 +4727,14 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -4638,9 +4744,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -4649,9 +4755,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "relative-path" @@ -4661,9 +4767,9 @@ checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] name = "reqwest" -version = "0.12.28" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ "base64", "bytes", @@ -4675,21 +4781,21 @@ dependencies = [ "http-body-util", "hyper", "hyper-rustls", - "hyper-tls", "hyper-util", "js-sys", "log", "mime", - "native-tls", "percent-encoding", "pin-project-lite", + "quinn", + "rustls", "rustls-pki-types", + "rustls-platform-verifier", "serde", "serde_json", - "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-native-tls", + "tokio-rustls", "tower", "tower-http", "tower-service", @@ -4787,7 +4893,7 @@ dependencies = [ "regex", "relative-path", "rustc_version 0.4.1", - "syn 2.0.114", + "syn 2.0.116", "unicode-ident", ] @@ -4837,7 +4943,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4850,7 +4956,7 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys 0.11.0", @@ -4863,6 +4969,7 @@ version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ + "aws-lc-rs", "log", "once_cell", "ring", @@ -4881,7 +4988,7 @@ dependencies = [ "openssl-probe 0.2.1", "rustls-pki-types", "schannel", - "security-framework 3.5.1", + "security-framework", ] [[package]] @@ -4890,15 +4997,44 @@ version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ + "web-time", "zeroize", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -4924,9 +5060,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "same-file" @@ -4989,24 +5125,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework" -version = "3.5.1" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +checksum = "d17b898a6d6948c3a8ee4372c17cb384f90d2e6e912ef00895b14fd7ab54ec38" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -5015,9 +5138,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.15.0" +version = "2.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +checksum = "321c8673b092a9a42605034a9879d73cb79101ed5fd117bc9a597b89b4e9e61a" dependencies = [ "core-foundation-sys", "libc", @@ -5075,7 +5198,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5178,7 +5301,7 @@ checksum = "6f50427f258fb77356e4cd4aa0e87e2bd2c66dbcee41dc405282cae2bfc26c83" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5262,9 +5385,9 @@ checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" @@ -5377,7 +5500,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5420,9 +5543,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.114" +version = "2.0.116" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" +checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" dependencies = [ "proc-macro2", "quote", @@ -5446,16 +5569,16 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "system-configuration" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -5478,12 +5601,12 @@ checksum = "591ef38edfb78ca4771ee32cf494cb8771944bee237a9b91fc9c1424ac4b777b" [[package]] name = "tempfile" -version = "3.24.0" +version = "3.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.1", "once_cell", "rustix 1.1.3", "windows-sys 0.61.2", @@ -5570,7 +5693,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5581,7 +5704,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -5654,6 +5777,21 @@ dependencies = [ "serde_json", ] +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" version = "1.49.0" @@ -5679,17 +5817,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", + "syn 2.0.116", ] [[package]] @@ -5752,9 +5880,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.11+spec-1.1.0" +version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ "indexmap 2.13.0", "serde_core", @@ -5765,6 +5893,21 @@ dependencies = [ "winnow", ] +[[package]] +name = "toml" +version = "1.0.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1dfefef6a142e93f346b64c160934eb13b5594b84ab378133ac6815cb2bd57f" +dependencies = [ + "indexmap 2.13.0", + "serde_core", + "serde_spanned 1.0.4", + "toml_datetime 1.0.0+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow", +] + [[package]] name = "toml_datetime" version = "0.6.11" @@ -5783,6 +5926,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "toml_datetime" +version = "1.0.0+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" @@ -5811,9 +5963,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.6+spec-1.1.0" +version = "1.0.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" +checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" dependencies = [ "winnow", ] @@ -5832,9 +5984,9 @@ checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tonic" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb7613188ce9f7df5bfe185db26c5814347d110db17920415cf2fbcad85e7203" +checksum = "7f32a6f80051a4111560201420c7885d0082ba9efe2ab61875c587bb6b18b9a0" dependencies = [ "async-trait", "axum", @@ -5863,21 +6015,21 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40aaccc9f9eccf2cd82ebc111adc13030d23e887244bc9cfa5d1d636049de3" +checksum = "ce6d8958ed3be404120ca43ffa0fb1e1fc7be214e96c8d33bd43a131b6eebc9e" dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "tonic-health" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a82868bf299e0a1d2e8dce0dc33a46c02d6f045b2c1f1d6cc8dc3d0bf1812ef" +checksum = "163e5ad9be2924d9cef75f02fcd44c1803a5af250f4ef7e085992270ac51fb9b" dependencies = [ "prost", "tokio", @@ -5888,9 +6040,9 @@ dependencies = [ [[package]] name = "tonic-prost" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66bd50ad6ce1252d87ef024b3d64fe4c3cf54a86fb9ef4c631fdd0ded7aeaa67" +checksum = "9f86539c0089bfd09b1f8c0ab0239d80392af74c21bc9e0f15e1b4aca4c1647f" dependencies = [ "bytes", "prost", @@ -5899,25 +6051,25 @@ dependencies = [ [[package]] name = "tonic-prost-build" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a16cba4043dc3ff43fcb3f96b4c5c154c64cbd18ca8dce2ab2c6a451d058a2" +checksum = "65873ace111e90344b8973e94a1fc817c924473affff24629281f90daed1cd2e" dependencies = [ "prettyplease", "proc-macro2", "prost-build", "prost-types", "quote", - "syn 2.0.114", + "syn 2.0.116", "tempfile", "tonic-build", ] [[package]] name = "tonic-reflection" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34da53e8387581d66db16ff01f98a70b426b091fdf76856e289d5c1bd386ed7b" +checksum = "91e5f75c058c397bf4ecada0fe0a2299c49c252fcf484f4a2f47279b6fa7026b" dependencies = [ "prost", "prost-types", @@ -5929,9 +6081,9 @@ dependencies = [ [[package]] name = "tonic-web" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75214f6b6bd28c19aa752ac09fdf0eea546095670906c21fe3940e180a4c43f2" +checksum = "b1d56db85992f978d0c35a091674c03d42c48e029357833d311e95c6f7ec8f5a" dependencies = [ "base64", "bytes", @@ -5995,7 +6147,7 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "bytes", "futures-util", "http", @@ -6041,7 +6193,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -6152,9 +6304,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.114" +version = "1.0.116" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17e807bff86d2a06b52bca4276746584a78375055b6e45843925ce2802b335" +checksum = "47c635f0191bd3a2941013e5062667100969f8c4e9cd787c14f977265d73616e" dependencies = [ "dissimilar", "glob", @@ -6163,7 +6315,7 @@ dependencies = [ "serde_json", "target-triple", "termcolor", - "toml 0.9.11+spec-1.1.0", + "toml 1.0.2+spec-1.1.0", ] [[package]] @@ -6195,9 +6347,9 @@ checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-linebreak" @@ -6266,11 +6418,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.20.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" +checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.1", "js-sys", "wasm-bindgen", ] @@ -6345,6 +6497,15 @@ dependencies = [ "wit-bindgen", ] +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.108" @@ -6391,7 +6552,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", "wasm-bindgen-shared", ] @@ -6404,6 +6565,28 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.13.0", + "wasm-encoder", + "wasmparser", +] + [[package]] name = "wasm-streams" version = "0.4.2" @@ -6417,6 +6600,18 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap 2.13.0", + "semver 1.0.27", +] + [[package]] name = "web-sys" version = "0.3.85" @@ -6437,6 +6632,15 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-root-certs" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi" version = "0.3.9" @@ -6489,7 +6693,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -6500,7 +6704,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -6538,6 +6742,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -6583,6 +6796,21 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -6631,6 +6859,12 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -6649,6 +6883,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -6667,6 +6907,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -6697,6 +6943,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -6715,6 +6967,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -6733,6 +6991,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -6751,6 +7015,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -6830,7 +7100,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d31a19dae58475d019850e25b0170e94b16d382fbf6afee9c0e80fdc935e73e" dependencies = [ "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -6896,6 +7166,88 @@ name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.13.0", + "prettyplease", + "syn 2.0.116", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.116", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap 2.13.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.13.0", + "log", + "semver 1.0.27", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "writeable" @@ -6947,28 +7299,28 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.34" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71ddd76bcebeed25db614f82bf31a9f4222d3fbba300e6fb6c00afa26cbd4d9d" +checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.34" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8187381b52e32220d50b255276aa16a084ec0a9017a0ca2152a1f55c539758d" +checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] @@ -6988,7 +7340,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", "synstructure", ] @@ -7028,14 +7380,14 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.116", ] [[package]] name = "zmij" -version = "1.0.17" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "zstd" diff --git a/Cargo.toml b/Cargo.toml index db02abc0d1..65c520694f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ members = [ "bin/stress-test", "crates/block-producer", "crates/grpc-error-macro", + "crates/large-smt", "crates/ntx-builder", "crates/proto", "crates/remote-prover-client", @@ -51,21 +52,31 @@ miden-node-test-macro = { path = "crates/test-macro" } miden-node-utils = { path = "crates/utils", version = "0.14" } miden-node-validator = { path = "crates/validator", version = "0.14" } miden-remote-prover-client = { path = "crates/remote-prover-client", version = "0.14" } +miden-large-smt-backend-rocksdb = { path = "crates/large-smt", version = "0.14"} + # Temporary workaround until # is part of `rocksdb-rust` release miden-node-rocksdb-cxx-linkage-fix = { path = "crates/rocksdb-cxx-linkage-fix", version = "0.14" } # miden-base aka protocol dependencies. These should be updated in sync. -miden-block-prover = { branch = "next", git = "https://github.com/0xMiden/miden-base" } -miden-protocol = { branch = "next", default-features = false, git = "https://github.com/0xMiden/miden-base" } -miden-standards = { branch = "next", git = "https://github.com/0xMiden/miden-base" } -miden-testing = { branch = "next", git = "https://github.com/0xMiden/miden-base" } -miden-tx = { branch = "next", default-features = false, git = "https://github.com/0xMiden/miden-base" } -miden-tx-batch-prover = { branch = "next", git = "https://github.com/0xMiden/miden-base" } +# miden-block-prover = { branch = "next", git = "https://github.com/0xMiden/miden-base" } +# miden-protocol = { branch = "next", default-features = false, git = "https://github.com/0xMiden/miden-base" } +# miden-standards = { branch = "next", git = "https://github.com/0xMiden/miden-base" } +# miden-testing = { branch = "next", git = "https://github.com/0xMiden/miden-base" } +# miden-tx = { branch = "next", default-features = false, git = "https://github.com/0xMiden/miden-base" } +# miden-tx-batch-prover = { branch = "next", git = "https://github.com/0xMiden/miden-base" } # Other miden dependencies. These should align with those expected by miden-base. miden-air = { features = ["std", "testing"], version = "0.20" } -miden-crypto = { default-features = false, version = "0.19" } +# miden-crypto = { default-features = false, version = "0.19.4" } +miden-block-prover = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/miden-base.git" } +miden-protocol = { branch = "bernhard-migrate-rocksdb-from-crypto", default-features = false, git = "https://github.com/0xMiden/miden-base.git" } +miden-standards = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/miden-base.git" } +miden-testing = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/miden-base.git" } +miden-tx = { branch = "bernhard-migrate-rocksdb-from-crypto", default-features = false, git = "https://github.com/0xMiden/miden-base.git" } +miden-tx-batch-prover = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/miden-base.git" } + +miden-crypto = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/crypto.git" } # External dependencies anyhow = { version = "1.0" } @@ -130,3 +141,6 @@ must_use_candidate = "allow" # This marks many fn's which isn't helpfu needless_for_each = "allow" # Context dependent if that's useful. should_panic_without_expect = "allow" # We don't care about the specific panic message. # End of pedantic lints. + +[patch.crates-io] +miden-crypto = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/crypto.git" } diff --git a/bin/network-monitor/Cargo.toml b/bin/network-monitor/Cargo.toml index 6667a4ded8..df35f8230c 100644 --- a/bin/network-monitor/Cargo.toml +++ b/bin/network-monitor/Cargo.toml @@ -28,7 +28,7 @@ miden-testing = { workspace = true } miden-tx = { features = ["std"], workspace = true } rand = { version = "0.9" } rand_chacha = { version = "0.9" } -reqwest = { features = ["json"], version = "0.12" } +reqwest = { features = ["json"], version = "0.13" } serde = { features = ["derive"], version = "1.0" } serde_json = { version = "1.0" } sha2 = { version = "0.10" } diff --git a/bin/remote-prover/Cargo.toml b/bin/remote-prover/Cargo.toml index adb60f7a8f..010b324aa1 100644 --- a/bin/remote-prover/Cargo.toml +++ b/bin/remote-prover/Cargo.toml @@ -43,7 +43,7 @@ pingora-limits = { version = "0.6" } pingora-proxy = { version = "0.6" } prometheus = { version = "0.14" } prost = { default-features = false, features = ["derive"], workspace = true } -reqwest = { version = "0.12" } +reqwest = { version = "0.13" } semver = { version = "1.0" } serde = { features = ["derive"], version = "1.0" } serde_qs = { version = "0.15" } diff --git a/crates/large-smt/Cargo.toml b/crates/large-smt/Cargo.toml new file mode 100644 index 0000000000..06a1342ddc --- /dev/null +++ b/crates/large-smt/Cargo.toml @@ -0,0 +1,26 @@ +[package] +authors.workspace = true +description = "Large-scale Sparse Merkle Tree backed by pluggable storage (RocksDB, memory)" +edition.workspace = true +homepage.workspace = true +keywords = ["miden", "node", "smt", "merkle"] +license.workspace = true +name = "miden-large-smt-backend-rocksdb" +readme = "README.md" +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[lints] +workspace = true + +[features] +default = ["concurrent"] +concurrent = [] +rocksdb = ["dep:rocksdb", "dep:rayon", "dep:winter-utils"] + +[dependencies] +miden-protocol = { features = ["std"], workspace = true } +rayon = { version = "1.10", optional = true } +rocksdb = { default-features = false, features = ["bindgen-runtime", "lz4"], optional = true, version = "0.24" } +winter-utils = { version = "0.13", optional = true } diff --git a/crates/large-smt/README.md b/crates/large-smt/README.md new file mode 100644 index 0000000000..1d08e1aa4e --- /dev/null +++ b/crates/large-smt/README.md @@ -0,0 +1,45 @@ +# miden-large-smt + +Large-scale Sparse Merkle Tree backed by pluggable storage (RocksDB, memory). + +This crate provides `LargeSmt`, a hybrid SMT implementation that stores the top of the tree +(depths 0–23) in memory and persists the lower depths (24–64) in storage as fixed-size subtrees. +This hybrid layout scales beyond RAM while keeping common operations fast. + +## Migration Status + +This crate is the future home for `LargeSmt` and its storage backends. Currently it re-exports +types from `miden-protocol` (which re-exports from `miden-crypto`). + +The migration will be completed in phases: +1. ✅ Create this crate as a re-export layer (current state) +2. Copy the full implementation from miden-crypto to this crate +3. Update miden-crypto to remove the rocksdb feature +4. Update dependents to use this crate directly + +## Features + +- **concurrent**: Enables parallel processing with rayon (enabled by default) +- **rocksdb**: (Future) Enables RocksDB storage backend + +## Usage + +```rust +use miden_large_smt::{LargeSmt, MemoryStorage}; + +// Create an empty tree with in-memory storage +let storage = MemoryStorage::new(); +let smt = LargeSmt::new(storage).unwrap(); +``` + +## Re-exported Types + +This crate re-exports the following types from `miden-protocol`: + +- `LargeSmt` - The large-scale SMT implementation +- `LargeSmtError` - Error type for LargeSmt operations +- `MemoryStorage` - In-memory storage backend +- `SmtStorage` - Storage backend trait +- `Subtree` - Serializable subtree representation +- `StorageUpdates` / `StorageUpdateParts` - Batch update types +- Various SMT types: `Smt`, `SmtLeaf`, `SmtProof`, `LeafIndex`, etc. diff --git a/crates/large-smt/src/lib.rs b/crates/large-smt/src/lib.rs new file mode 100644 index 0000000000..0b36589430 --- /dev/null +++ b/crates/large-smt/src/lib.rs @@ -0,0 +1,63 @@ +//! Large-scale Sparse Merkle Tree backed by pluggable storage. +//! +//! `LargeSmt` stores the top of the tree (depths 0–23) in memory and persists the lower +//! depths (24–64) in storage as fixed-size subtrees. This hybrid layout scales beyond RAM +//! while keeping common operations fast. +//! +//! # Usage +//! +//! ```ignore +//! use miden_large_smt::{LargeSmt, MemoryStorage}; +//! +//! // Create an empty tree with in-memory storage +//! let storage = MemoryStorage::new(); +//! let smt = LargeSmt::new(storage).unwrap(); +//! ``` +//! +//! With RocksDB (requires `rocksdb` feature): +//! +//! ```ignore +//! use miden_large_smt::{LargeSmt, RocksDbConfig, RocksDbStorage}; +//! +//! let storage = RocksDbStorage::open(RocksDbConfig::new("/path/to/db")).unwrap(); +//! let smt = LargeSmt::new(storage).unwrap(); +//! ``` + +#![cfg_attr(not(feature = "concurrent"), allow(unused_imports))] + +extern crate alloc; + +#[cfg(feature = "rocksdb")] +mod rocksdb; +// Re-export from miden-protocol. +pub use miden_protocol::crypto::merkle::smt::{ + InnerNode, + LargeSmt, + LargeSmtError, + LeafIndex, + MemoryStorage, + SMT_DEPTH, + Smt, + SmtLeaf, + SmtLeafError, + SmtProof, + SmtStorage, + StorageError, + StorageUpdateParts, + StorageUpdates, + Subtree, + SubtreeError, + SubtreeUpdate, +}; +// Also re-export commonly used types for convenience +pub use miden_protocol::{ + EMPTY_WORD, + Felt, + Word, + crypto::{ + hash::rpo::Rpo256, + merkle::{EmptySubtreeRoots, InnerNodeInfo, MerkleError, NodeIndex, SparseMerklePath}, + }, +}; +#[cfg(feature = "rocksdb")] +pub use rocksdb::{RocksDbConfig, RocksDbStorage}; diff --git a/crates/large-smt/src/rocksdb.rs b/crates/large-smt/src/rocksdb.rs new file mode 100644 index 0000000000..63910ff545 --- /dev/null +++ b/crates/large-smt/src/rocksdb.rs @@ -0,0 +1,833 @@ +//! RocksDB-backed persistent storage for Sparse Merkle Trees. + +use alloc::boxed::Box; +use alloc::vec::Vec; +use std::path::PathBuf; +use std::sync::Arc; + +use rocksdb::{ + BlockBasedOptions, + Cache, + ColumnFamilyDescriptor, + DB, + DBCompactionStyle, + DBCompressionType, + DBIteratorWithThreadMode, + FlushOptions, + IteratorMode, + Options, + ReadOptions, + WriteBatch, +}; +use winter_utils::{Deserializable, Serializable}; + +use crate::{ + EMPTY_WORD, + InnerNode, + Map, + NodeIndex, + SmtLeaf, + SmtStorage, + StorageError, + StorageUpdateParts, + StorageUpdates, + Subtree, + SubtreeUpdate, + Word, +}; + +/// The name of the RocksDB column family used for storing SMT leaves. +const LEAVES_CF: &str = "leaves"; +/// The names of the RocksDB column families used for storing SMT subtrees (deep nodes). +const SUBTREE_24_CF: &str = "st24"; +const SUBTREE_32_CF: &str = "st32"; +const SUBTREE_40_CF: &str = "st40"; +const SUBTREE_48_CF: &str = "st48"; +const SUBTREE_56_CF: &str = "st56"; + +/// The name of the RocksDB column family used for storing metadata (e.g., root, counts). +const METADATA_CF: &str = "metadata"; +/// The name of the RocksDB column family used for storing level 24 hashes for fast tree rebuilding. +const DEPTH_24_CF: &str = "depth24"; + +/// The key used in the `METADATA_CF` column family to store the SMT's root hash. +const ROOT_KEY: &[u8] = b"smt_root"; +/// The key used in the `METADATA_CF` column family to store the total count of non-empty leaves. +const LEAF_COUNT_KEY: &[u8] = b"leaf_count"; +/// The key used in the `METADATA_CF` column family to store the total count of key-value entries. +const ENTRY_COUNT_KEY: &[u8] = b"entry_count"; + +/// A RocksDB-backed persistent storage implementation for a Sparse Merkle Tree (SMT). +/// +/// Implements the `SmtStorage` trait, providing durable storage for SMT components +/// including leaves, subtrees (for deeper parts of the tree), and metadata like the SMT root +/// and counts. It leverages RocksDB column families to organize data: +/// - `LEAVES_CF` ("leaves"): Stores `SmtLeaf` data, keyed by their logical u64 index. +/// - `SUBTREE_24_CF` ("st24"): Stores serialized `Subtree` data at depth 24. +/// - `SUBTREE_32_CF` ("st32"): Stores serialized `Subtree` data at depth 32. +/// - `SUBTREE_40_CF` ("st40"): Stores serialized `Subtree` data at depth 40. +/// - `SUBTREE_48_CF` ("st48"): Stores serialized `Subtree` data at depth 48. +/// - `SUBTREE_56_CF` ("st56"): Stores serialized `Subtree` data at depth 56. +/// - `METADATA_CF` ("metadata"): Stores overall SMT metadata such as the current root hash, total +/// leaf count, and total entry count. +#[derive(Debug, Clone)] +pub struct RocksDbStorage { + db: Arc, +} + +impl RocksDbStorage { + /// Opens or creates a RocksDB database at the specified `path` and configures it for SMT + /// storage. + /// + /// This method sets up the necessary column families (`leaves`, `subtrees`, `metadata`) + /// and applies various RocksDB options for performance, such as caching, bloom filters, + /// and compaction strategies tailored for SMT workloads. + /// + /// # Errors + /// Returns `StorageError::Backend` if the database cannot be opened or configured, + /// for example, due to path issues, permissions, or RocksDB internal errors. + pub fn open(config: RocksDbConfig) -> Result { + // Base DB options + let mut db_opts = Options::default(); + db_opts.create_if_missing(true); + db_opts.create_missing_column_families(true); + db_opts.increase_parallelism(rayon::current_num_threads() as i32); + db_opts.set_max_open_files(config.max_open_files); + db_opts.set_max_background_jobs(rayon::current_num_threads() as i32); + db_opts.set_max_total_wal_size(512 * 1024 * 1024); + + // Shared block cache across all column families + let cache = Cache::new_lru_cache(config.cache_size); + + // Common table options for bloom filtering and cache + let mut table_opts = BlockBasedOptions::default(); + table_opts.set_block_cache(&cache); + table_opts.set_bloom_filter(10.0, false); + table_opts.set_whole_key_filtering(true); + table_opts.set_pin_l0_filter_and_index_blocks_in_cache(true); + + // Column family for leaves + let mut leaves_opts = Options::default(); + leaves_opts.set_block_based_table_factory(&table_opts); + leaves_opts.set_write_buffer_size(128 << 20); + leaves_opts.set_max_write_buffer_number(3); + leaves_opts.set_min_write_buffer_number_to_merge(1); + leaves_opts.set_max_write_buffer_size_to_maintain(0); + leaves_opts.set_compaction_style(DBCompactionStyle::Level); + leaves_opts.set_target_file_size_base(512 << 20); + leaves_opts.set_target_file_size_multiplier(2); + leaves_opts.set_compression_type(DBCompressionType::Lz4); + leaves_opts.set_level_zero_file_num_compaction_trigger(8); + + // Helper to build subtree CF options + fn subtree_cf(cache: &Cache, bloom_filter_bits: f64) -> Options { + let mut tbl = BlockBasedOptions::default(); + tbl.set_block_cache(cache); + tbl.set_bloom_filter(bloom_filter_bits, false); + tbl.set_whole_key_filtering(true); + tbl.set_pin_l0_filter_and_index_blocks_in_cache(true); + + let mut opts = Options::default(); + opts.set_block_based_table_factory(&tbl); + opts.set_write_buffer_size(128 << 20); + opts.set_max_write_buffer_number(3); + opts.set_min_write_buffer_number_to_merge(1); + opts.set_max_write_buffer_size_to_maintain(0); + opts.set_compaction_style(DBCompactionStyle::Level); + opts.set_level_zero_file_num_compaction_trigger(4); + opts.set_target_file_size_base(512 << 20); + opts.set_target_file_size_multiplier(2); + opts.set_compression_type(DBCompressionType::Lz4); + opts.set_level_zero_file_num_compaction_trigger(8); + opts + } + + let mut depth24_opts = Options::default(); + depth24_opts.set_compression_type(DBCompressionType::Lz4); + depth24_opts.set_block_based_table_factory(&table_opts); + + let mut metadata_opts = Options::default(); + metadata_opts.set_compression_type(DBCompressionType::None); + + let cfs = vec![ + ColumnFamilyDescriptor::new(LEAVES_CF, leaves_opts), + ColumnFamilyDescriptor::new(SUBTREE_24_CF, subtree_cf(&cache, 8.0)), + ColumnFamilyDescriptor::new(SUBTREE_32_CF, subtree_cf(&cache, 10.0)), + ColumnFamilyDescriptor::new(SUBTREE_40_CF, subtree_cf(&cache, 10.0)), + ColumnFamilyDescriptor::new(SUBTREE_48_CF, subtree_cf(&cache, 12.0)), + ColumnFamilyDescriptor::new(SUBTREE_56_CF, subtree_cf(&cache, 12.0)), + ColumnFamilyDescriptor::new(METADATA_CF, metadata_opts), + ColumnFamilyDescriptor::new(DEPTH_24_CF, depth24_opts), + ]; + + let db = DB::open_cf_descriptors(&db_opts, config.path, cfs)?; + + Ok(Self { db: Arc::new(db) }) + } + + /// Syncs the RocksDB database to disk. + fn sync(&self) -> Result<(), StorageError> { + let mut fopts = FlushOptions::default(); + fopts.set_wait(true); + + for name in [ + LEAVES_CF, + SUBTREE_24_CF, + SUBTREE_32_CF, + SUBTREE_40_CF, + SUBTREE_48_CF, + SUBTREE_56_CF, + METADATA_CF, + DEPTH_24_CF, + ] { + let cf = self.cf_handle(name)?; + self.db.flush_cf_opt(cf, &fopts)?; + } + + self.db.flush_wal(true)?; + Ok(()) + } + + #[inline(always)] + fn index_db_key(index: u64) -> [u8; 8] { + index.to_be_bytes() + } + + #[inline(always)] + fn subtree_db_key(index: NodeIndex) -> KeyBytes { + let keep = match index.depth() { + 24 => 3, + 32 => 4, + 40 => 5, + 48 => 6, + 56 => 7, + d => panic!("unsupported depth {d}"), + }; + KeyBytes::new(index.value(), keep) + } + + fn cf_handle(&self, name: &str) -> Result<&rocksdb::ColumnFamily, StorageError> { + self.db + .cf_handle(name) + .ok_or_else(|| StorageError::Unsupported(format!("unknown column family `{name}`"))) + } + + #[inline(always)] + fn subtree_cf(&self, index: NodeIndex) -> &rocksdb::ColumnFamily { + let name = cf_for_depth(index.depth()); + self.cf_handle(name).expect("CF handle missing") + } +} + +impl SmtStorage for RocksDbStorage { + fn get_root(&self) -> Result, StorageError> { + let cf = self.cf_handle(METADATA_CF)?; + match self.db.get_cf(cf, ROOT_KEY)? { + Some(bytes) => { + let digest = Word::read_from_bytes(&bytes)?; + Ok(Some(digest)) + }, + None => Ok(None), + } + } + + fn set_root(&self, root: Word) -> Result<(), StorageError> { + let cf = self.cf_handle(METADATA_CF)?; + self.db.put_cf(cf, ROOT_KEY, root.to_bytes())?; + Ok(()) + } + + fn leaf_count(&self) -> Result { + let cf = self.cf_handle(METADATA_CF)?; + self.db.get_cf(cf, LEAF_COUNT_KEY)?.map_or(Ok(0), |bytes| { + let arr: [u8; 8] = + bytes.as_slice().try_into().map_err(|_| StorageError::BadValueLen { + what: "leaf count", + expected: 8, + found: bytes.len(), + })?; + Ok(usize::from_be_bytes(arr)) + }) + } + + fn entry_count(&self) -> Result { + let cf = self.cf_handle(METADATA_CF)?; + self.db.get_cf(cf, ENTRY_COUNT_KEY)?.map_or(Ok(0), |bytes| { + let arr: [u8; 8] = + bytes.as_slice().try_into().map_err(|_| StorageError::BadValueLen { + what: "entry count", + expected: 8, + found: bytes.len(), + })?; + Ok(usize::from_be_bytes(arr)) + }) + } + + fn insert_value( + &self, + index: u64, + key: Word, + value: Word, + ) -> Result, StorageError> { + debug_assert_ne!(value, EMPTY_WORD); + + let mut batch = WriteBatch::default(); + + let mut current_leaf_count = self.leaf_count()?; + let mut current_entry_count = self.entry_count()?; + + let leaves_cf = self.cf_handle(LEAVES_CF)?; + let db_key = Self::index_db_key(index); + + let maybe_leaf = self.get_leaf(index)?; + + let (old_value, new_leaf) = match maybe_leaf { + Some(mut existing_leaf) => { + let old_val = existing_leaf.insert(key, value)?; + if old_val.is_none() { + current_entry_count += 1; + } + (old_val, existing_leaf) + }, + None => { + let new_leaf = SmtLeaf::new_single(key, value); + current_leaf_count += 1; + current_entry_count += 1; + (None, new_leaf) + }, + }; + + batch.put_cf(leaves_cf, db_key, new_leaf.to_bytes()); + + let metadata_cf = self.cf_handle(METADATA_CF)?; + batch.put_cf(metadata_cf, LEAF_COUNT_KEY, current_leaf_count.to_be_bytes()); + batch.put_cf(metadata_cf, ENTRY_COUNT_KEY, current_entry_count.to_be_bytes()); + + self.db.write(batch)?; + + Ok(old_value) + } + + fn remove_value(&self, index: u64, key: Word) -> Result, StorageError> { + let maybe_leaf = self.get_leaf(index)?; + + let Some(mut existing_leaf) = maybe_leaf else { + return Ok(None); + }; + + let (old_value, is_empty) = existing_leaf.remove(key); + if old_value.is_none() { + return Ok(None); + } + + let mut batch = WriteBatch::default(); + let leaves_cf = self.cf_handle(LEAVES_CF)?; + let db_key = Self::index_db_key(index); + + let mut current_leaf_count = self.leaf_count()?; + let mut current_entry_count = self.entry_count()?; + + if is_empty { + batch.delete_cf(leaves_cf, db_key); + current_leaf_count = current_leaf_count.saturating_sub(1); + } else { + batch.put_cf(leaves_cf, db_key, existing_leaf.to_bytes()); + } + current_entry_count = current_entry_count.saturating_sub(1); + + let metadata_cf = self.cf_handle(METADATA_CF)?; + batch.put_cf(metadata_cf, LEAF_COUNT_KEY, current_leaf_count.to_be_bytes()); + batch.put_cf(metadata_cf, ENTRY_COUNT_KEY, current_entry_count.to_be_bytes()); + + self.db.write(batch)?; + + Ok(old_value) + } + + fn get_leaf(&self, index: u64) -> Result, StorageError> { + let cf = self.cf_handle(LEAVES_CF)?; + let db_key = Self::index_db_key(index); + + match self.db.get_cf(cf, db_key)? { + Some(bytes) => Ok(Some(SmtLeaf::read_from_bytes(&bytes)?)), + None => Ok(None), + } + } + + fn set_leaves(&self, leaves: Map) -> Result<(), StorageError> { + let leaves_cf = self.cf_handle(LEAVES_CF)?; + let mut batch = WriteBatch::default(); + + for (index, leaf) in leaves { + let db_key = Self::index_db_key(index); + batch.put_cf(leaves_cf, db_key, leaf.to_bytes()); + } + + self.db.write(batch)?; + Ok(()) + } + + fn remove_leaf(&self, index: u64) -> Result, StorageError> { + let cf = self.cf_handle(LEAVES_CF)?; + let db_key = Self::index_db_key(index); + + let old_leaf = match self.db.get_cf(cf, &db_key)? { + Some(bytes) => Some(SmtLeaf::read_from_bytes(&bytes)?), + None => None, + }; + + if old_leaf.is_some() { + self.db.delete_cf(cf, db_key)?; + } + + Ok(old_leaf) + } + + fn get_leaves(&self, indices: &[u64]) -> Result>, StorageError> { + let cf = self.cf_handle(LEAVES_CF)?; + let keys: Vec<[u8; 8]> = indices.iter().map(|idx| Self::index_db_key(*idx)).collect(); + let key_refs: Vec<(&rocksdb::ColumnFamily, &[u8])> = + keys.iter().map(|k| (cf, k.as_slice())).collect(); + + let results = self.db.multi_get_cf(key_refs); + let mut out = Vec::with_capacity(indices.len()); + for res in results { + match res? { + Some(bytes) => out.push(Some(SmtLeaf::read_from_bytes(&bytes)?)), + None => out.push(None), + } + } + Ok(out) + } + + fn has_leaves(&self) -> Result { + Ok(self.leaf_count()? > 0) + } + + fn get_subtree(&self, index: NodeIndex) -> Result, StorageError> { + let cf = self.subtree_cf(index); + let key = Self::subtree_db_key(index); + + match self.db.get_cf(cf, key)? { + Some(bytes) => Ok(Some(Subtree::from_vec(index, &bytes)?)), + None => Ok(None), + } + } + + fn get_subtrees(&self, indices: &[NodeIndex]) -> Result>, StorageError> { + let keys: Vec<(NodeIndex, KeyBytes)> = + indices.iter().map(|&idx| (idx, Self::subtree_db_key(idx))).collect(); + + let key_refs: Vec<(&rocksdb::ColumnFamily, &[u8])> = + keys.iter().map(|(idx, k)| (self.subtree_cf(*idx), k.as_slice())).collect(); + + let results = self.db.multi_get_cf(key_refs); + let mut out = Vec::with_capacity(indices.len()); + + for (res, &idx) in results.into_iter().zip(indices.iter()) { + match res? { + Some(bytes) => out.push(Some(Subtree::from_vec(idx, &bytes)?)), + None => out.push(None), + } + } + Ok(out) + } + + fn set_subtree(&self, subtree: &Subtree) -> Result<(), StorageError> { + let index = subtree.root_index(); + let cf = self.subtree_cf(index); + let key = Self::subtree_db_key(index); + let data = subtree.to_vec(); + + self.db.put_cf(cf, key, data)?; + Ok(()) + } + + fn set_subtrees(&self, subtrees: Vec) -> Result<(), StorageError> { + let mut batch = WriteBatch::default(); + + for subtree in subtrees { + let index = subtree.root_index(); + let cf = self.subtree_cf(index); + let key = Self::subtree_db_key(index); + let data = subtree.to_vec(); + batch.put_cf(cf, key, data); + } + + self.db.write(batch)?; + Ok(()) + } + + fn remove_subtree(&self, index: NodeIndex) -> Result<(), StorageError> { + let cf = self.subtree_cf(index); + let key = Self::subtree_db_key(index); + self.db.delete_cf(cf, key)?; + Ok(()) + } + + fn get_inner_node(&self, index: NodeIndex) -> Result, StorageError> { + let subtree = self.get_subtree(index)?; + Ok(subtree.and_then(|s| s.get_inner_node(index))) + } + + fn set_inner_node( + &self, + index: NodeIndex, + node: InnerNode, + ) -> Result, StorageError> { + let mut subtree = self.get_subtree(index)?.unwrap_or_else(|| Subtree::new(index)); + let old = subtree.insert_inner_node(index, node); + self.set_subtree(&subtree)?; + Ok(old) + } + + fn remove_inner_node(&self, index: NodeIndex) -> Result, StorageError> { + let Some(mut subtree) = self.get_subtree(index)? else { + return Ok(None); + }; + let old = subtree.remove_inner_node(index); + if subtree.is_empty() { + self.remove_subtree(index)?; + } else { + self.set_subtree(&subtree)?; + } + Ok(old) + } + + fn apply(&self, updates: StorageUpdates) -> Result<(), StorageError> { + let StorageUpdateParts { + new_root, + leaf_updates, + subtree_updates, + leaf_count_delta, + entry_count_delta, + } = updates.into_parts(); + + let mut batch = WriteBatch::default(); + + let leaves_cf = self.cf_handle(LEAVES_CF)?; + let metadata_cf = self.cf_handle(METADATA_CF)?; + let depth24_cf = self.cf_handle(DEPTH_24_CF)?; + + // Process leaf updates + for (index, maybe_leaf) in leaf_updates { + let key = Self::index_db_key(index); + match maybe_leaf { + Some(leaf) => batch.put_cf(leaves_cf, key, leaf.to_bytes()), + None => batch.delete_cf(leaves_cf, key), + } + } + + // Process subtree updates + let subtree_ops: Result, StorageError> = subtree_updates + .into_iter() + .map(|update| { + let (index, maybe_bytes, depth24_op) = match update { + SubtreeUpdate::Set(subtree) => { + let index = subtree.root_index(); + let bytes = subtree.to_vec(); + let depth24_op = if index.depth() == 24 { + let hash_key = Self::index_db_key(index.value()); + let root_hash = subtree.root_hash(); + Some((hash_key, Some(root_hash.to_bytes()))) + } else { + None + }; + (index, Some(bytes), depth24_op) + }, + SubtreeUpdate::Remove(index) => { + let depth24_op = if index.depth() == 24 { + let hash_key = Self::index_db_key(index.value()); + Some((hash_key, None)) + } else { + None + }; + (index, None, depth24_op) + }, + }; + + let key = Self::subtree_db_key(index); + let subtrees_cf = self.subtree_cf(index); + + Ok((subtrees_cf, key, maybe_bytes, depth24_op)) + }) + .collect(); + + for (subtrees_cf, key, maybe_bytes, depth24_op) in subtree_ops? { + match maybe_bytes { + Some(bytes) => batch.put_cf(subtrees_cf, key, bytes), + None => batch.delete_cf(subtrees_cf, key), + } + + if let Some((hash_key, maybe_hash_bytes)) = depth24_op { + match maybe_hash_bytes { + Some(hash_bytes) => batch.put_cf(depth24_cf, hash_key, hash_bytes), + None => batch.delete_cf(depth24_cf, hash_key), + } + } + } + + if leaf_count_delta != 0 || entry_count_delta != 0 { + let current_leaf_count = self.leaf_count()?; + let current_entry_count = self.entry_count()?; + + let new_leaf_count = current_leaf_count.saturating_add_signed(leaf_count_delta); + let new_entry_count = current_entry_count.saturating_add_signed(entry_count_delta); + + batch.put_cf(metadata_cf, LEAF_COUNT_KEY, new_leaf_count.to_be_bytes()); + batch.put_cf(metadata_cf, ENTRY_COUNT_KEY, new_entry_count.to_be_bytes()); + } + + batch.put_cf(metadata_cf, ROOT_KEY, new_root.to_bytes()); + + let mut write_opts = rocksdb::WriteOptions::default(); + write_opts.set_sync(false); + self.db.write_opt(batch, &write_opts)?; + + Ok(()) + } + + fn iter_leaves(&self) -> Result + '_>, StorageError> { + let cf = self.cf_handle(LEAVES_CF)?; + let mut read_opts = ReadOptions::default(); + read_opts.set_total_order_seek(true); + let db_iter = self.db.iterator_cf_opt(cf, read_opts, IteratorMode::Start); + + Ok(Box::new(RocksDbDirectLeafIterator { iter: db_iter })) + } + + fn iter_subtrees(&self) -> Result + '_>, StorageError> { + const SUBTREE_CFS: [&str; 5] = + [SUBTREE_24_CF, SUBTREE_32_CF, SUBTREE_40_CF, SUBTREE_48_CF, SUBTREE_56_CF]; + + let mut cf_handles = Vec::new(); + for cf_name in SUBTREE_CFS { + cf_handles.push(self.cf_handle(cf_name)?); + } + + Ok(Box::new(RocksDbSubtreeIterator::new(&self.db, cf_handles))) + } + + fn get_depth24(&self) -> Result, StorageError> { + let cf = self.cf_handle(DEPTH_24_CF)?; + let iter = self.db.iterator_cf(cf, IteratorMode::Start); + let mut hashes = Vec::new(); + + for item in iter { + let (key_bytes, value_bytes) = item?; + + let index = index_from_key_bytes(&key_bytes)?; + let hash = Word::read_from_bytes(&value_bytes)?; + + hashes.push((index, hash)); + } + + Ok(hashes) + } +} + +impl Drop for RocksDbStorage { + fn drop(&mut self) { + if let Err(e) = self.sync() { + panic!("failed to flush RocksDB on drop: {e}"); + } + } +} + +// ITERATORS +// -------------------------------------------------------------------------------------------- + +struct RocksDbDirectLeafIterator<'a> { + iter: DBIteratorWithThreadMode<'a, DB>, +} + +impl Iterator for RocksDbDirectLeafIterator<'_> { + type Item = (u64, SmtLeaf); + + fn next(&mut self) -> Option { + self.iter.find_map(|result| { + let (key_bytes, value_bytes) = result.ok()?; + let leaf_idx = index_from_key_bytes(&key_bytes).ok()?; + let leaf = SmtLeaf::read_from_bytes(&value_bytes).ok()?; + Some((leaf_idx, leaf)) + }) + } +} + +struct RocksDbSubtreeIterator<'a> { + db: &'a DB, + cf_handles: Vec<&'a rocksdb::ColumnFamily>, + current_cf_index: usize, + current_iter: Option>, +} + +impl<'a> RocksDbSubtreeIterator<'a> { + fn new(db: &'a DB, cf_handles: Vec<&'a rocksdb::ColumnFamily>) -> Self { + let mut iterator = Self { + db, + cf_handles, + current_cf_index: 0, + current_iter: None, + }; + iterator.advance_to_next_cf(); + iterator + } + + fn advance_to_next_cf(&mut self) { + if self.current_cf_index < self.cf_handles.len() { + let cf = self.cf_handles[self.current_cf_index]; + let mut read_opts = ReadOptions::default(); + read_opts.set_total_order_seek(true); + self.current_iter = Some(self.db.iterator_cf_opt(cf, read_opts, IteratorMode::Start)); + } else { + self.current_iter = None; + } + } + + fn try_next_from_iter( + iter: &mut DBIteratorWithThreadMode, + cf_index: usize, + ) -> Option { + iter.find_map(|result| { + let (key_bytes, value_bytes) = result.ok()?; + let depth = 24 + (cf_index * 8) as u8; + + let node_idx = subtree_root_from_key_bytes(&key_bytes, depth).ok()?; + Subtree::from_vec(node_idx, &value_bytes).ok() + }) + } +} + +impl Iterator for RocksDbSubtreeIterator<'_> { + type Item = Subtree; + + fn next(&mut self) -> Option { + loop { + let iter = self.current_iter.as_mut()?; + + if let Some(subtree) = Self::try_next_from_iter(iter, self.current_cf_index) { + return Some(subtree); + } + + self.current_cf_index += 1; + self.advance_to_next_cf(); + + self.current_iter.as_ref()?; + } + } +} + +// ROCKSDB CONFIGURATION +// -------------------------------------------------------------------------------------------- + +/// Configuration for RocksDB storage used by the Sparse Merkle Tree implementation. +#[derive(Debug, Clone)] +pub struct RocksDbConfig { + pub(crate) path: PathBuf, + pub(crate) cache_size: usize, + pub(crate) max_open_files: i32, +} + +impl RocksDbConfig { + /// Creates a new RocksDbConfig with the given database path and default settings. + pub fn new>(path: P) -> Self { + Self { + path: path.into(), + cache_size: 1 << 30, + max_open_files: 512, + } + } + + /// Sets the block cache size for RocksDB. + pub fn with_cache_size(mut self, size: usize) -> Self { + self.cache_size = size; + self + } + + /// Sets the maximum number of files that RocksDB can have open simultaneously. + pub fn with_max_open_files(mut self, count: i32) -> Self { + self.max_open_files = count; + self + } +} + +// SUBTREE DB KEY +// -------------------------------------------------------------------------------------------- + +#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)] +pub(crate) struct KeyBytes { + bytes: [u8; 8], + len: u8, +} + +impl KeyBytes { + #[inline(always)] + pub fn new(value: u64, keep: usize) -> Self { + debug_assert!((3..=7).contains(&keep)); + let bytes = value.to_be_bytes(); + debug_assert!(bytes[..8 - keep].iter().all(|&b| b == 0)); + Self { bytes, len: keep as u8 } + } + + #[inline(always)] + pub fn as_slice(&self) -> &[u8] { + &self.bytes[8 - self.len as usize..] + } +} + +impl AsRef<[u8]> for KeyBytes { + #[inline(always)] + fn as_ref(&self) -> &[u8] { + self.as_slice() + } +} + +// HELPERS +// -------------------------------------------------------------------------------------------- + +fn index_from_key_bytes(key_bytes: &[u8]) -> Result { + if key_bytes.len() != 8 { + return Err(StorageError::BadKeyLen { expected: 8, found: key_bytes.len() }); + } + let mut arr = [0u8; 8]; + arr.copy_from_slice(key_bytes); + Ok(u64::from_be_bytes(arr)) +} + +#[inline(always)] +fn subtree_root_from_key_bytes(key_bytes: &[u8], depth: u8) -> Result { + let expected = match depth { + 24 => 3, + 32 => 4, + 40 => 5, + 48 => 6, + 56 => 7, + d => return Err(StorageError::Unsupported(format!("unsupported subtree depth {d}"))), + }; + + if key_bytes.len() != expected { + return Err(StorageError::BadSubtreeKeyLen { depth, expected, found: key_bytes.len() }); + } + let mut buf = [0u8; 8]; + buf[8 - expected..].copy_from_slice(key_bytes); + let value = u64::from_be_bytes(buf); + Ok(NodeIndex::new_unchecked(depth, value)) +} + +#[inline(always)] +fn cf_for_depth(depth: u8) -> &'static str { + match depth { + 24 => SUBTREE_24_CF, + 32 => SUBTREE_32_CF, + 40 => SUBTREE_40_CF, + 48 => SUBTREE_48_CF, + 56 => SUBTREE_56_CF, + _ => panic!("unsupported subtree depth: {depth}"), + } +} + +impl From for StorageError { + fn from(e: rocksdb::Error) -> Self { + StorageError::Backend(Box::new(e)) + } +} diff --git a/crates/rpc/Cargo.toml b/crates/rpc/Cargo.toml index 926fe0ee8a..6fb0bb6a68 100644 --- a/crates/rpc/Cargo.toml +++ b/crates/rpc/Cargo.toml @@ -42,6 +42,6 @@ miden-node-store = { features = ["rocksdb"], workspace = true } miden-node-utils = { features = ["testing", "tracing-forest"], workspace = true } miden-protocol = { default-features = true, features = ["testing"], workspace = true } miden-standards = { workspace = true } -reqwest = { version = "0.12" } +reqwest = { version = "0.13" } rstest = { workspace = true } tempfile = { version = "3.20" } diff --git a/crates/store/Cargo.toml b/crates/store/Cargo.toml index 5ce4daee74..00e76258a5 100644 --- a/crates/store/Cargo.toml +++ b/crates/store/Cargo.toml @@ -35,6 +35,7 @@ miden-remote-prover-client = { features = ["block-prover"], workspace = true } miden-standards = { workspace = true } # TODO remove `testing` from `miden-protocol`, required for `BlockProof::new_dummy` miden-protocol = { features = ["std", "testing"], workspace = true } +miden-large-smt-backend-rocksdb = { optional = true, workspace = true } pretty_assertions = { workspace = true } rand = { workspace = true } rand_chacha = { workspace = true } @@ -66,7 +67,7 @@ termtree = { version = "0.5" } [features] default = ["rocksdb"] -rocksdb = ["miden-crypto/rocksdb"] +rocksdb = ["dep:miden-large-smt-backend-rocksdb"] [[bench]] harness = false diff --git a/crates/store/src/state/loader.rs b/crates/store/src/state/loader.rs index d237716f33..11902f4d04 100644 --- a/crates/store/src/state/loader.rs +++ b/crates/store/src/state/loader.rs @@ -12,6 +12,8 @@ use std::future::Future; use std::num::NonZeroUsize; use std::path::Path; +#[cfg(feature = "rocksdb")] +use miden_large_smt_backend_rocksdb::{RocksDbConfig, RocksDbStorage}; use miden_protocol::block::account_tree::{AccountTree, account_id_to_smt_key}; use miden_protocol::block::nullifier_tree::NullifierTree; use miden_protocol::block::{BlockHeader, BlockNumber, Blockchain}; @@ -22,11 +24,6 @@ use miden_protocol::{Felt, FieldElement, Word}; #[cfg(feature = "rocksdb")] use tracing::info; use tracing::instrument; -#[cfg(feature = "rocksdb")] -use { - miden_crypto::merkle::smt::RocksDbStorage, - miden_protocol::crypto::merkle::smt::RocksDbConfig, -}; use crate::COMPONENT; use crate::db::Db; From 5ebd43c2c3190120e9b4823d37e53ec0536110a4 Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Tue, 24 Feb 2026 18:54:19 +0100 Subject: [PATCH 2/9] sanity --- Cargo.lock | 840 ++++++------------ Cargo.toml | 21 +- bin/network-monitor/src/deploy/counter.rs | 9 +- .../Cargo.toml | 12 +- .../README.md | 6 +- .../src/lib.rs | 4 - .../src/rocksdb.rs | 0 crates/store/src/genesis/mod.rs | 4 +- 8 files changed, 287 insertions(+), 609 deletions(-) rename crates/{large-smt => large-smt-backend-rocksdb}/Cargo.toml (71%) rename crates/{large-smt => large-smt-backend-rocksdb}/README.md (89%) rename crates/{large-smt => large-smt-backend-rocksdb}/src/lib.rs (92%) rename crates/{large-smt => large-smt-backend-rocksdb}/src/rocksdb.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 3dcda94a50..ee80b8a3b9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -109,9 +109,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.101" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" dependencies = [ "backtrace", ] @@ -151,7 +151,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -325,13 +325,13 @@ dependencies = [ "bitflags", "cexpr", "clang-sys", - "itertools 0.13.0", + "itertools 0.10.5", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -351,9 +351,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "2.11.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "blake3" @@ -380,15 +380,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c81d250916401487680ed13b8b675660281dcfc3ab0121fe44c94bcab9eae2fb" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" [[package]] name = "byteorder" @@ -420,9 +420,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.56" +version = "1.2.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583" dependencies = [ "find-msvc-tools", "jobserver", @@ -545,9 +545,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.59" +version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499" +checksum = "3e34525d5bbbd55da2bb745d34b36121baac88d07619a9a09cfcf4a6c0832785" dependencies = [ "clap_builder", "clap_derive", @@ -555,9 +555,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.59" +version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24" +checksum = "59a20016a20a3da95bef50ec7238dbd09baeef4311dcdd38ec15aba69812fb61" dependencies = [ "anstream", "anstyle", @@ -574,14 +574,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] name = "clap_lex" -version = "1.0.0" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "cmake" @@ -769,7 +769,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -793,7 +793,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -804,7 +804,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -860,9 +860,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.6" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", ] @@ -885,7 +885,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -915,7 +915,7 @@ dependencies = [ "dsl_auto_type", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -935,7 +935,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe2444076b48641147115697648dc743c2c00b61adade0f01ce67133c7babe8c" dependencies = [ - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -964,7 +964,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -990,7 +990,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -1065,9 +1065,9 @@ dependencies = [ [[package]] name = "ena" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" dependencies = [ "log", ] @@ -1083,9 +1083,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "1.0.0" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" dependencies = [ "log", "regex", @@ -1093,9 +1093,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.9" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", @@ -1160,9 +1160,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" [[package]] name = "fixedbitset" @@ -1188,12 +1188,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foldhash" version = "0.2.0" @@ -1211,9 +1205,9 @@ dependencies = [ [[package]] name = "fs-err" -version = "3.3.0" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fde052dbfc920003cfd2c8e2c6e6d4cc7c1091538c3a24226cec0665ab08c0" +checksum = "baf68cef89750956493a66a10f512b9e58d9db21f2a573c079c0bdf1207a54a7" dependencies = [ "autocfg", ] @@ -1226,9 +1220,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1241,9 +1235,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1251,15 +1245,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1268,32 +1262,32 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -1303,9 +1297,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1315,6 +1309,7 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", + "pin-utils", "slab", ] @@ -1371,19 +1366,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "getrandom" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasip2", - "wasip3", -] - [[package]] name = "gimli" version = "0.32.3" @@ -1437,15 +1419,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash 0.1.5", -] - [[package]] name = "hashbrown" version = "0.16.1" @@ -1454,7 +1427,7 @@ checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", - "foldhash 0.2.0", + "foldhash", "rayon", "serde", "serde_core", @@ -1601,13 +1574,14 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.20" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ "base64", "bytes", "futures-channel", + "futures-core", "futures-util", "http", "http-body", @@ -1626,9 +1600,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.65" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1729,12 +1703,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -1775,9 +1743,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown 0.16.1", - "serde", - "serde_core", + "hashbrown", ] [[package]] @@ -1843,15 +1809,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.14.0" @@ -1869,9 +1826,9 @@ checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jiff" -version = "0.2.20" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c867c356cc096b33f4981825ab281ecba3db0acefe60329f044c1789d94c6543" +checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" dependencies = [ "jiff-static", "log", @@ -1882,13 +1839,13 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.20" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7946b4325269738f270bb55b3c19ab5c5040525f83fd625259422a9d25d9be5" +checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -1967,7 +1924,7 @@ dependencies = [ "ena", "itertools 0.14.0", "lalrpop-util", - "petgraph 0.7.1", + "petgraph", "regex", "regex-syntax", "sha3", @@ -1992,17 +1949,11 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" -version = "0.2.182" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libloading" @@ -2111,7 +2062,7 @@ dependencies = [ "quote", "regex-syntax", "rustc_version 0.4.1", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -2181,38 +2132,21 @@ checksum = "120fa187be19d9962f0926633453784691731018a2bf936ddb4e29101b79c4a7" [[package]] name = "memchr" -version = "2.8.0" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - -[[package]] -name = "miden-agglayer" -version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" -dependencies = [ - "fs-err", - "miden-assembly", - "miden-core", - "miden-core-lib", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", - "miden-utils-sync", - "regex", - "walkdir", -] +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "miden-agglayer" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#04a86320bf8e11e8d2fb989045267a0424e3e00d" +source = "git+https://github.com/0xMiden/miden-base.git?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" dependencies = [ "fs-err", "miden-assembly", "miden-core", "miden-core-lib", - "miden-crypto 0.19.6", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base?branch=next)", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base?branch=next)", + "miden-protocol", + "miden-standards", "miden-utils-sync", "regex", "walkdir", @@ -2220,9 +2154,9 @@ dependencies = [ [[package]] name = "miden-air" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cca9632323bd4e32ae5b21b101ed417a646f5d72196b1bf3f1ca889a148322a" +checksum = "ab2f1db9cdbd5da3eaf07fa0a8122d27b575f96b0699388c98f6c0e468cb9c1f" dependencies = [ "miden-core", "miden-utils-indexing", @@ -2233,9 +2167,9 @@ dependencies = [ [[package]] name = "miden-assembly" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2395b2917aea613a285d3425d1ca07e6c45442e2b34febdea2081db555df62fc" +checksum = "cf4aba6bc5cfda2393ecc032b55caabde289fb980650560f8333803db4e48f09" dependencies = [ "env_logger", "log", @@ -2248,9 +2182,9 @@ dependencies = [ [[package]] name = "miden-assembly-syntax" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f9bed037d137f209b9e7b28811ec78c0536b3f9259d6f4ceb5823c87513b346" +checksum = "23eae66f2a55c2a0666f4ed896b61797845b528435ad2bae41fd9a221f94bad7" dependencies = [ "aho-corasick", "env_logger", @@ -2273,21 +2207,21 @@ dependencies = [ [[package]] name = "miden-block-prover" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" +source = "git+https://github.com/0xMiden/miden-base.git?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" dependencies = [ - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "thiserror 2.0.18", ] [[package]] name = "miden-core" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8714aa5f86c59e647b7417126b32adc4ef618f835964464f5425549df76b6d03" +checksum = "2716bb01f07f0b19398e3d9785e23a724b89aef64d614a9073c1d44c6898a9a9" dependencies = [ "derive_more", "itertools 0.14.0", - "miden-crypto 0.19.6", + "miden-crypto", "miden-debug-types", "miden-formatting", "miden-utils-core-derive", @@ -2303,59 +2237,24 @@ dependencies = [ [[package]] name = "miden-core-lib" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb16a4d39202c59a7964d3585cd5af21a46a759ff6452cb5f20723ed5af4362" +checksum = "9ac97f4fb334ee842663f99f33677beacc7bdf4b7d4eeff419c2cd98a5a68bfa" dependencies = [ "env_logger", "fs-err", "miden-assembly", "miden-core", - "miden-crypto 0.19.6", + "miden-crypto", "miden-processor", "miden-utils-sync", "sha2", "thiserror 2.0.18", ] -[[package]] -name = "miden-crypto" -version = "0.19.4" -source = "git+https://github.com/0xMiden/crypto.git?branch=bernhard-migrate-rocksdb-from-crypto#afaa90349f6d5a89a320c6d1d6db78dba3b91c60" -dependencies = [ - "blake3", - "cc", - "chacha20poly1305", - "curve25519-dalek", - "ed25519-dalek", - "flume", - "glob", - "hashbrown 0.16.1", - "hkdf", - "k256", - "miden-crypto-derive 0.19.4", - "num", - "num-complex", - "rand", - "rand_chacha", - "rand_core 0.9.5", - "rand_hc", - "rayon", - "sha2", - "sha3", - "subtle", - "thiserror 2.0.18", - "winter-crypto", - "winter-math", - "winter-utils", - "x25519-dalek", -] - [[package]] name = "miden-crypto" version = "0.19.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "999926d48cf0929a39e06ce22299084f11d307ca9e765801eb56bf192b07054b" dependencies = [ "blake3", "cc", @@ -2364,15 +2263,17 @@ dependencies = [ "ed25519-dalek", "flume", "glob", + "hashbrown", "hkdf", "k256", - "miden-crypto-derive 0.19.6", + "miden-crypto-derive", "num", "num-complex", "rand", "rand_chacha", "rand_core 0.9.5", "rand_hc", + "rayon", "sha2", "sha3", "subtle", @@ -2383,33 +2284,22 @@ dependencies = [ "x25519-dalek", ] -[[package]] -name = "miden-crypto-derive" -version = "0.19.4" -source = "git+https://github.com/0xMiden/crypto.git?branch=bernhard-migrate-rocksdb-from-crypto#afaa90349f6d5a89a320c6d1d6db78dba3b91c60" -dependencies = [ - "quote", - "syn 2.0.116", -] - [[package]] name = "miden-crypto-derive" version = "0.19.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550b5656b791fec59c0b6089b4d0368db746a34749ccd47e59afb01aa877e9e" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] name = "miden-debug-types" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1494f102ad5b9fa43e391d2601186dc601f41ab7dcd8a23ecca9bf3ef930f4" +checksum = "b421786850ce05627355ee616c4a5fdc4a9ad1591859ede5e5564ab74aa4abd2" dependencies = [ "memchr", - "miden-crypto 0.19.6", + "miden-crypto", "miden-formatting", "miden-miette", "miden-utils-indexing", @@ -2433,7 +2323,8 @@ dependencies = [ name = "miden-large-smt-backend-rocksdb" version = "0.14.0" dependencies = [ - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-crypto", + "miden-protocol", "rayon", "rocksdb", "winter-utils", @@ -2441,9 +2332,9 @@ dependencies = [ [[package]] name = "miden-mast-package" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692185bfbe0ecdb28bf623f1f8c88282cd6727ba081a28e23b301bdde1b45be4" +checksum = "169025a61c2ca2e8a0f53f20a7bdcbdd1f8e34f528676137208bff64944652bb" dependencies = [ "derive_more", "miden-assembly-syntax", @@ -2474,7 +2365,7 @@ dependencies = [ "supports-color", "supports-hyperlinks", "supports-unicode", - "syn 2.0.116", + "syn 2.0.114", "terminal_size 0.3.0", "textwrap", "thiserror 2.0.18", @@ -2490,7 +2381,7 @@ checksum = "86a905f3ea65634dd4d1041a4f0fd0a3e77aa4118341d265af1a94339182222f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -2505,8 +2396,8 @@ dependencies = [ "miden-node-proto", "miden-node-rocksdb-cxx-linkage-fix", "miden-node-utils", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", + "miden-standards", "miden-testing", "miden-tx", "rand", @@ -2539,7 +2430,7 @@ dependencies = [ "miden-node-store", "miden-node-utils", "miden-node-validator", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "tokio", "url", ] @@ -2558,9 +2449,9 @@ dependencies = [ "miden-node-test-macro", "miden-node-utils", "miden-node-validator", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "miden-remote-prover-client", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-standards", "miden-tx", "miden-tx-batch-prover", "pretty_assertions", @@ -2588,7 +2479,7 @@ dependencies = [ "deadpool-diesel", "deadpool-sync", "diesel", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "thiserror 2.0.18", "tracing", ] @@ -2598,7 +2489,7 @@ name = "miden-node-grpc-error-macro" version = "0.14.0" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -2614,9 +2505,9 @@ dependencies = [ "miden-node-proto", "miden-node-test-macro", "miden-node-utils", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "miden-remote-prover-client", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-standards", "miden-tx", "prost", "rand_chacha", @@ -2644,8 +2535,8 @@ dependencies = [ "miden-node-proto-build", "miden-node-rocksdb-cxx-linkage-fix", "miden-node-utils", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", + "miden-standards", "miette", "proptest", "prost", @@ -2683,8 +2574,8 @@ dependencies = [ "miden-node-proto-build", "miden-node-store", "miden-node-utils", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", + "miden-standards", "miden-tx", "reqwest", "rstest", @@ -2718,9 +2609,9 @@ dependencies = [ "hex", "indexmap", "libsqlite3-sys", - "miden-agglayer 0.14.0 (git+https://github.com/0xMiden/miden-base?branch=next)", + "miden-agglayer", "miden-block-prover", - "miden-crypto 0.19.4", + "miden-crypto", "miden-large-smt-backend-rocksdb", "miden-node-db", "miden-node-proto", @@ -2728,9 +2619,9 @@ dependencies = [ "miden-node-rocksdb-cxx-linkage-fix", "miden-node-test-macro", "miden-node-utils", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "miden-remote-prover-client", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-standards", "pretty_assertions", "rand", "rand_chacha", @@ -2741,7 +2632,7 @@ dependencies = [ "thiserror 2.0.18", "tokio", "tokio-stream", - "toml 0.9.12+spec-1.1.0", + "toml 0.9.11+spec-1.1.0", "tonic", "tonic-reflection", "tower-http", @@ -2762,8 +2653,8 @@ dependencies = [ "miden-node-rocksdb-cxx-linkage-fix", "miden-node-store", "miden-node-utils", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", + "miden-standards", "rand", "rayon", "tokio", @@ -2776,7 +2667,7 @@ name = "miden-node-test-macro" version = "0.1.0" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -2791,7 +2682,7 @@ dependencies = [ "itertools 0.14.0", "lru", "miden-node-rocksdb-cxx-linkage-fix", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "opentelemetry", "opentelemetry-otlp", "opentelemetry_sdk", @@ -2819,7 +2710,7 @@ dependencies = [ "miden-node-proto", "miden-node-proto-build", "miden-node-utils", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "miden-tx", "thiserror 2.0.18", "tokio", @@ -2832,9 +2723,9 @@ dependencies = [ [[package]] name = "miden-processor" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e09f7916b1e7505f74a50985a185fdea4c0ceb8f854a34c90db28e3f7da7ab6" +checksum = "a18a6a5eebe64e81a29be6321ee8f4478c6bfaf619b7689825884e8cd308c044" dependencies = [ "itertools 0.14.0", "miden-air", @@ -2853,7 +2744,7 @@ dependencies = [ [[package]] name = "miden-protocol" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" +source = "git+https://github.com/0xMiden/miden-base.git?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" dependencies = [ "bech32", "fs-err", @@ -2862,10 +2753,10 @@ dependencies = [ "miden-assembly-syntax", "miden-core", "miden-core-lib", - "miden-crypto 0.19.4", + "miden-crypto", "miden-mast-package", "miden-processor", - "miden-protocol-macros 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol-macros", "miden-utils-sync", "miden-verifier", "rand", @@ -2875,35 +2766,7 @@ dependencies = [ "semver 1.0.27", "serde", "thiserror 2.0.18", - "toml 0.9.12+spec-1.1.0", - "walkdir", - "winter-rand-utils", -] - -[[package]] -name = "miden-protocol" -version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#04a86320bf8e11e8d2fb989045267a0424e3e00d" -dependencies = [ - "bech32", - "fs-err", - "getrandom 0.3.4", - "miden-assembly", - "miden-assembly-syntax", - "miden-core", - "miden-core-lib", - "miden-crypto 0.19.6", - "miden-mast-package", - "miden-processor", - "miden-protocol-macros 0.14.0 (git+https://github.com/0xMiden/miden-base?branch=next)", - "miden-utils-sync", - "miden-verifier", - "rand", - "rand_chacha", - "rand_xoshiro", - "regex", - "semver 1.0.27", - "thiserror 2.0.18", + "toml 0.9.11+spec-1.1.0", "walkdir", "winter-rand-utils", ] @@ -2911,28 +2774,18 @@ dependencies = [ [[package]] name = "miden-protocol-macros" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" +source = "git+https://github.com/0xMiden/miden-base.git?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", -] - -[[package]] -name = "miden-protocol-macros" -version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#04a86320bf8e11e8d2fb989045267a0424e3e00d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] name = "miden-prover" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d45e30526be72b8af0fd1d8b24c9cba8ac1187ca335dcee38b8e5e20234e7698" +checksum = "83070f0ca1a08235362e990238b6487191f814054aaebcc40883a073fdcd18f9" dependencies = [ "miden-air", "miden-debug-types", @@ -2956,8 +2809,8 @@ dependencies = [ "miden-node-proto-build", "miden-node-rocksdb-cxx-linkage-fix", "miden-node-utils", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", + "miden-standards", "miden-testing", "miden-tx", "miden-tx-batch-prover", @@ -2983,7 +2836,7 @@ dependencies = [ "fs-err", "getrandom 0.3.4", "miden-node-proto-build", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "miden-tx", "miette", "prost", @@ -2999,50 +2852,34 @@ dependencies = [ [[package]] name = "miden-standards" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" +source = "git+https://github.com/0xMiden/miden-base.git?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" dependencies = [ "fs-err", "miden-assembly", "miden-core", "miden-core-lib", "miden-processor", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "rand", "regex", "thiserror 2.0.18", "walkdir", ] -[[package]] -name = "miden-standards" -version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base?branch=next#04a86320bf8e11e8d2fb989045267a0424e3e00d" -dependencies = [ - "fs-err", - "miden-assembly", - "miden-core", - "miden-core-lib", - "miden-processor", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base?branch=next)", - "regex", - "thiserror 2.0.18", - "walkdir", -] - [[package]] name = "miden-testing" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" +source = "git+https://github.com/0xMiden/miden-base.git?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" dependencies = [ "anyhow", "itertools 0.14.0", - "miden-agglayer 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-agglayer", "miden-assembly", "miden-block-prover", "miden-core-lib", "miden-processor", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", + "miden-standards", "miden-tx", "miden-tx-batch-prover", "rand", @@ -3054,12 +2891,12 @@ dependencies = [ [[package]] name = "miden-tx" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" +source = "git+https://github.com/0xMiden/miden-base.git?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" dependencies = [ "miden-processor", - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "miden-prover", - "miden-standards 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-standards", "miden-verifier", "thiserror 2.0.18", ] @@ -3067,17 +2904,17 @@ dependencies = [ [[package]] name = "miden-tx-batch-prover" version = "0.14.0" -source = "git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto#fb599fffc6099c17338e01db35e1311ea10a6ea9" +source = "git+https://github.com/0xMiden/miden-base.git?branch=next#33eabfe45ab67bdfb9f7d8907b8d50298c6b182e" dependencies = [ - "miden-protocol 0.14.0 (git+https://github.com/0xMiden/miden-base.git?branch=bernhard-migrate-rocksdb-from-crypto)", + "miden-protocol", "miden-tx", ] [[package]] name = "miden-utils-core-derive" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b1d490e6d7b509622d3c2cc69ffd66ad48bf953dc614579b568fe956ce0a6c" +checksum = "c9fc6d350fb9ad44797e8d0a1feaacaa6ee4079ef752d9ababc101ffc40ec354" dependencies = [ "proc-macro2", "quote", @@ -3086,11 +2923,11 @@ dependencies = [ [[package]] name = "miden-utils-diagnostics" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52658f6dc091c1c78e8b35ee3e7ff3dad53051971a3c514e461f581333758fe7" +checksum = "af2462fb2e750247a56264eddf40e2e1c8d96ff9379abe73acbcbe81e530e1d5" dependencies = [ - "miden-crypto 0.19.6", + "miden-crypto", "miden-debug-types", "miden-miette", "paste", @@ -3099,18 +2936,18 @@ dependencies = [ [[package]] name = "miden-utils-indexing" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeff7bcb7875b222424bdfb657a7cf21a55e036aa7558ebe1f5d2e413b440d0d" +checksum = "57046b5c263b78e7fa5a6e328ca852e6319cf844faa26fbdcbb128ec555deb2a" dependencies = [ "thiserror 2.0.18", ] [[package]] name = "miden-utils-sync" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d53d1ab5b275d8052ad9c4121071cb184bc276ee74354b0d8a2075e5c1d1f0" +checksum = "e2d3e129b62099672a1ffc012ab2e26ee7f2b35e4ca18ca1f726b88c53546ddd" dependencies = [ "lock_api", "loom", @@ -3119,9 +2956,9 @@ dependencies = [ [[package]] name = "miden-verifier" -version = "0.20.6" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b13816663794beb15c8a4721c15252eb21f3b3233525684f60c7888837a98ff4" +checksum = "fe033af062937938ded511e5238db3bf8e0c1a30205850d62fb23271b3c96f85" dependencies = [ "miden-air", "miden-core", @@ -3168,7 +3005,7 @@ checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -3178,7 +3015,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36c791ecdf977c99f45f23280405d7723727470f6689a5e6dbf513ac547ae10d" dependencies = [ "serde", - "toml 0.9.12+spec-1.1.0", + "toml 0.9.11+spec-1.1.0", ] [[package]] @@ -3311,7 +3148,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -3519,7 +3356,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -3538,17 +3375,6 @@ dependencies = [ "indexmap", ] -[[package]] -name = "petgraph" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" -dependencies = [ - "fixedbitset", - "hashbrown 0.15.5", - "indexmap", -] - [[package]] name = "phf_shared" version = "0.11.3" @@ -3575,7 +3401,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -3647,15 +3473,15 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" [[package]] name = "portable-atomic-util" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" dependencies = [ "portable-atomic", ] @@ -3707,7 +3533,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -3736,16 +3562,16 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", "version_check", "yansi", ] [[package]] name = "proptest" -version = "1.10.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37566cb3fdacef14c0737f9546df7cfeadbfbc9fef10991038bf5015d0c80532" +checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" dependencies = [ "bit-set", "bit-vec", @@ -3768,7 +3594,7 @@ checksum = "fb6dc647500e84a25a85b100e76c85b8ace114c209432dc174f20aac11d4ed6c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -3783,22 +3609,23 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.14.3" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" +checksum = "ac6c3320f9abac597dcbc668774ef006702672474aad53c6d596b62e487b40b1" dependencies = [ "heck", "itertools 0.14.0", "log", "multimap", - "petgraph 0.8.3", + "once_cell", + "petgraph", "prettyplease", "prost", "prost-types", "pulldown-cmark", "pulldown-cmark-to-cmark", "regex", - "syn 2.0.116", + "syn 2.0.114", "tempfile", ] @@ -3812,7 +3639,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -3829,9 +3656,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.14.3" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" +checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72" dependencies = [ "prost", ] @@ -3876,9 +3703,9 @@ dependencies = [ [[package]] name = "pulldown-cmark-to-cmark" -version = "22.0.0" +version = "21.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50793def1b900256624a709439404384204a5dc3a6ec580281bfaac35e882e90" +checksum = "8246feae3db61428fd0bb94285c690b460e4517d83152377543ca802357785f1" dependencies = [ "pulldown-cmark", ] @@ -4056,9 +3883,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -4068,9 +3895,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -4079,9 +3906,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.9" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "relative-path" @@ -4169,7 +3996,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8a1f2315036ef6b1fbacd1972e8ee7688030b0a2121edfc2a6550febd41574d" dependencies = [ - "hashbrown 0.16.1", + "hashbrown", "thiserror 2.0.18", ] @@ -4198,7 +4025,7 @@ dependencies = [ "regex", "relative-path", "rustc_version 0.4.1", - "syn 2.0.116", + "syn 2.0.114", "unicode-ident", ] @@ -4355,9 +4182,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.23" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "same-file" @@ -4420,9 +4247,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.6.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d17b898a6d6948c3a8ee4372c17cb384f90d2e6e912ef00895b14fd7ab54ec38" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ "bitflags", "core-foundation 0.10.1", @@ -4433,9 +4260,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.16.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321c8673b092a9a42605034a9879d73cb79101ed5fd117bc9a597b89b4e9e61a" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -4493,7 +4320,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -4573,7 +4400,7 @@ checksum = "6f50427f258fb77356e4cd4aa0e87e2bd2c66dbcee41dc405282cae2bfc26c83" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -4640,9 +4467,9 @@ checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "slab" -version = "0.4.12" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" @@ -4770,9 +4597,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.116" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -4796,14 +4623,14 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] name = "system-configuration" -version = "0.7.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags", "core-foundation 0.9.4", @@ -4828,12 +4655,12 @@ checksum = "591ef38edfb78ca4771ee32cf494cb8771944bee237a9b91fc9c1424ac4b777b" [[package]] name = "tempfile" -version = "3.25.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", - "getrandom 0.4.1", + "getrandom 0.3.4", "once_cell", "rustix 1.1.3", "windows-sys 0.61.2", @@ -4920,7 +4747,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -4931,7 +4758,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -5034,7 +4861,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -5086,9 +4913,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.12+spec-1.1.0" +version = "0.9.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" dependencies = [ "indexmap", "serde_core", @@ -5099,21 +4926,6 @@ dependencies = [ "winnow", ] -[[package]] -name = "toml" -version = "1.0.2+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1dfefef6a142e93f346b64c160934eb13b5594b84ab378133ac6815cb2bd57f" -dependencies = [ - "indexmap", - "serde_core", - "serde_spanned 1.0.4", - "toml_datetime 1.0.0+spec-1.1.0", - "toml_parser", - "toml_writer", - "winnow", -] - [[package]] name = "toml_datetime" version = "0.6.11" @@ -5132,15 +4944,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "toml_datetime" -version = "1.0.0+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" -dependencies = [ - "serde_core", -] - [[package]] name = "toml_edit" version = "0.22.27" @@ -5169,9 +4972,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.9+spec-1.1.0" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] @@ -5190,9 +4993,9 @@ checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tonic" -version = "0.14.4" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f32a6f80051a4111560201420c7885d0082ba9efe2ab61875c587bb6b18b9a0" +checksum = "eb7613188ce9f7df5bfe185db26c5814347d110db17920415cf2fbcad85e7203" dependencies = [ "async-trait", "axum", @@ -5221,21 +5024,21 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.14.4" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6d8958ed3be404120ca43ffa0fb1e1fc7be214e96c8d33bd43a131b6eebc9e" +checksum = "4c40aaccc9f9eccf2cd82ebc111adc13030d23e887244bc9cfa5d1d636049de3" dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] name = "tonic-health" -version = "0.14.4" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "163e5ad9be2924d9cef75f02fcd44c1803a5af250f4ef7e085992270ac51fb9b" +checksum = "2a82868bf299e0a1d2e8dce0dc33a46c02d6f045b2c1f1d6cc8dc3d0bf1812ef" dependencies = [ "prost", "tokio", @@ -5246,9 +5049,9 @@ dependencies = [ [[package]] name = "tonic-prost" -version = "0.14.4" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f86539c0089bfd09b1f8c0ab0239d80392af74c21bc9e0f15e1b4aca4c1647f" +checksum = "66bd50ad6ce1252d87ef024b3d64fe4c3cf54a86fb9ef4c631fdd0ded7aeaa67" dependencies = [ "bytes", "prost", @@ -5257,25 +5060,25 @@ dependencies = [ [[package]] name = "tonic-prost-build" -version = "0.14.4" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65873ace111e90344b8973e94a1fc817c924473affff24629281f90daed1cd2e" +checksum = "b4a16cba4043dc3ff43fcb3f96b4c5c154c64cbd18ca8dce2ab2c6a451d058a2" dependencies = [ "prettyplease", "proc-macro2", "prost-build", "prost-types", "quote", - "syn 2.0.116", + "syn 2.0.114", "tempfile", "tonic-build", ] [[package]] name = "tonic-reflection" -version = "0.14.4" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e5f75c058c397bf4ecada0fe0a2299c49c252fcf484f4a2f47279b6fa7026b" +checksum = "34da53e8387581d66db16ff01f98a70b426b091fdf76856e289d5c1bd386ed7b" dependencies = [ "prost", "prost-types", @@ -5287,9 +5090,9 @@ dependencies = [ [[package]] name = "tonic-web" -version = "0.14.4" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d56db85992f978d0c35a091674c03d42c48e029357833d311e95c6f7ec8f5a" +checksum = "75214f6b6bd28c19aa752ac09fdf0eea546095670906c21fe3940e180a4c43f2" dependencies = [ "base64", "bytes", @@ -5399,7 +5202,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -5491,9 +5294,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.116" +version = "1.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47c635f0191bd3a2941013e5062667100969f8c4e9cd787c14f977265d73616e" +checksum = "3e17e807bff86d2a06b52bca4276746584a78375055b6e45843925ce2802b335" dependencies = [ "dissimilar", "glob", @@ -5502,7 +5305,7 @@ dependencies = [ "serde_json", "target-triple", "termcolor", - "toml 1.0.2+spec-1.1.0", + "toml 0.9.11+spec-1.1.0", ] [[package]] @@ -5534,9 +5337,9 @@ checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-linebreak" @@ -5673,15 +5476,6 @@ dependencies = [ "wit-bindgen", ] -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen", -] - [[package]] name = "wasm-bindgen" version = "0.2.108" @@ -5728,7 +5522,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", "wasm-bindgen-shared", ] @@ -5741,28 +5535,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - [[package]] name = "wasm-streams" version = "0.4.2" @@ -5776,18 +5548,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver 1.0.27", -] - [[package]] name = "web-sys" version = "0.3.85" @@ -5847,7 +5607,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -5858,7 +5618,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -6254,7 +6014,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d31a19dae58475d019850e25b0170e94b16d382fbf6afee9c0e80fdc935e73e" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -6320,88 +6080,6 @@ name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn 2.0.116", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn 2.0.116", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver 1.0.27", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] [[package]] name = "writeable" @@ -6444,28 +6122,28 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.39" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" +checksum = "71ddd76bcebeed25db614f82bf31a9f4222d3fbba300e6fb6c00afa26cbd4d9d" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.39" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" +checksum = "d8187381b52e32220d50b255276aa16a084ec0a9017a0ca2152a1f55c539758d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] @@ -6485,7 +6163,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", "synstructure", ] @@ -6525,11 +6203,11 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.114", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439" diff --git a/Cargo.toml b/Cargo.toml index e802e03d55..5c1179cc30 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ "crates/block-producer", "crates/db", "crates/grpc-error-macro", - "crates/large-smt", + "crates/large-smt-backend-rocksdb", "crates/ntx-builder", "crates/proto", "crates/remote-prover-client", @@ -58,7 +58,7 @@ miden-node-test-macro = { path = "crates/test-macro" } miden-node-utils = { path = "crates/utils", version = "0.14" } miden-node-validator = { path = "crates/validator", version = "0.14" } miden-remote-prover-client = { path = "crates/remote-prover-client", version = "0.14" } -miden-large-smt-backend-rocksdb = { path = "crates/large-smt", version = "0.14"} +miden-large-smt-backend-rocksdb = { path = "crates/large-smt-backend-rocksdb", version = "0.14"} # Temporary workaround until # is part of `rocksdb-rust` release @@ -75,14 +75,14 @@ miden-node-rocksdb-cxx-linkage-fix = { path = "crates/rocksdb-cxx-linkage-fix", # Other miden dependencies. These should align with those expected by miden-base. miden-air = { features = ["std", "testing"], version = "0.20" } # miden-crypto = { default-features = false, version = "0.19.4" } -miden-block-prover = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/miden-base.git" } -miden-protocol = { branch = "bernhard-migrate-rocksdb-from-crypto", default-features = false, git = "https://github.com/0xMiden/miden-base.git" } -miden-standards = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/miden-base.git" } -miden-testing = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/miden-base.git" } -miden-tx = { branch = "bernhard-migrate-rocksdb-from-crypto", default-features = false, git = "https://github.com/0xMiden/miden-base.git" } -miden-tx-batch-prover = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/miden-base.git" } +miden-block-prover = { branch = "next", git = "https://github.com/0xMiden/miden-base.git" } +miden-protocol = { branch = "next", default-features = false, git = "https://github.com/0xMiden/miden-base.git" } +miden-standards = { branch = "next", git = "https://github.com/0xMiden/miden-base.git" } +miden-testing = { branch = "next", git = "https://github.com/0xMiden/miden-base.git" } +miden-tx = { branch = "next", default-features = false, git = "https://github.com/0xMiden/miden-base.git" } +miden-tx-batch-prover = { branch = "next", git = "https://github.com/0xMiden/miden-base.git" } -miden-crypto = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/crypto.git" } +miden-crypto = { version = "0.19.6" } # External dependencies anyhow = { version = "1.0" } @@ -152,3 +152,6 @@ should_panic_without_expect = "allow" # We don't care about the specific panic # Configure `cargo-typos` [workspace.metadata.typos] files.extend-exclude = ["*.svg"] # Ignore SVG files. + +[patch.crates-io] +miden-crypto = { path = "../miden-crypto-bernhard-migrate-rocksdb-from-crypto/miden-crypto/" } diff --git a/bin/network-monitor/src/deploy/counter.rs b/bin/network-monitor/src/deploy/counter.rs index a5ab3d3638..bfe1143d55 100644 --- a/bin/network-monitor/src/deploy/counter.rs +++ b/bin/network-monitor/src/deploy/counter.rs @@ -7,6 +7,7 @@ use miden_protocol::account::{ Account, AccountBuilder, AccountComponent, + AccountComponentMetadata, AccountFile, AccountId, AccountStorageMode, @@ -53,8 +54,12 @@ pub fn create_counter_account(owner_account_id: AccountId) -> Result { let component_code = CodeBuilder::default().compile_component_code("counter::program", script)?; - let account_code = AccountComponent::new(component_code, vec![counter_slot, owner_id_slot])? - .with_supports_all_types(); + let account_code = AccountComponent::new( + component_code, + vec![counter_slot, owner_id_slot], + AccountComponentMetadata::default().with_supports_all_types(), + )? + .with_supports_all_types(); let incr_nonce_auth: AccountComponent = IncrNonceAuthComponent.into(); diff --git a/crates/large-smt/Cargo.toml b/crates/large-smt-backend-rocksdb/Cargo.toml similarity index 71% rename from crates/large-smt/Cargo.toml rename to crates/large-smt-backend-rocksdb/Cargo.toml index 06a1342ddc..8fb147930e 100644 --- a/crates/large-smt/Cargo.toml +++ b/crates/large-smt-backend-rocksdb/Cargo.toml @@ -1,6 +1,6 @@ [package] authors.workspace = true -description = "Large-scale Sparse Merkle Tree backed by pluggable storage (RocksDB, memory)" +description = "Large-scale Sparse Merkle Tree backed by pluggable storage - RocksDB backend" edition.workspace = true homepage.workspace = true keywords = ["miden", "node", "smt", "merkle"] @@ -14,13 +14,9 @@ version.workspace = true [lints] workspace = true -[features] -default = ["concurrent"] -concurrent = [] -rocksdb = ["dep:rocksdb", "dep:rayon", "dep:winter-utils"] - [dependencies] miden-protocol = { features = ["std"], workspace = true } -rayon = { version = "1.10", optional = true } +miden-crypto = { features = ["std", "concurrent"], workspace = true } +rayon = { version = "1.10" } rocksdb = { default-features = false, features = ["bindgen-runtime", "lz4"], optional = true, version = "0.24" } -winter-utils = { version = "0.13", optional = true } +winter-utils = { version = "0.13" } diff --git a/crates/large-smt/README.md b/crates/large-smt-backend-rocksdb/README.md similarity index 89% rename from crates/large-smt/README.md rename to crates/large-smt-backend-rocksdb/README.md index 1d08e1aa4e..4b612c3257 100644 --- a/crates/large-smt/README.md +++ b/crates/large-smt-backend-rocksdb/README.md @@ -1,6 +1,6 @@ -# miden-large-smt +# miden-large-smt-backend-rocksdb -Large-scale Sparse Merkle Tree backed by pluggable storage (RocksDB, memory). +Large-scale Sparse Merkle Tree backed by pluggable storage - RocksDB backend implementation. This crate provides `LargeSmt`, a hybrid SMT implementation that stores the top of the tree (depths 0–23) in memory and persists the lower depths (24–64) in storage as fixed-size subtrees. @@ -37,7 +37,7 @@ let smt = LargeSmt::new(storage).unwrap(); This crate re-exports the following types from `miden-protocol`: - `LargeSmt` - The large-scale SMT implementation -- `LargeSmtError` - Error type for LargeSmt operations +- `LargeSmtError` - Error type for LargeSmt operations - `MemoryStorage` - In-memory storage backend - `SmtStorage` - Storage backend trait - `Subtree` - Serializable subtree representation diff --git a/crates/large-smt/src/lib.rs b/crates/large-smt-backend-rocksdb/src/lib.rs similarity index 92% rename from crates/large-smt/src/lib.rs rename to crates/large-smt-backend-rocksdb/src/lib.rs index 0b36589430..817a4e069d 100644 --- a/crates/large-smt/src/lib.rs +++ b/crates/large-smt-backend-rocksdb/src/lib.rs @@ -23,11 +23,8 @@ //! let smt = LargeSmt::new(storage).unwrap(); //! ``` -#![cfg_attr(not(feature = "concurrent"), allow(unused_imports))] - extern crate alloc; -#[cfg(feature = "rocksdb")] mod rocksdb; // Re-export from miden-protocol. pub use miden_protocol::crypto::merkle::smt::{ @@ -59,5 +56,4 @@ pub use miden_protocol::{ merkle::{EmptySubtreeRoots, InnerNodeInfo, MerkleError, NodeIndex, SparseMerklePath}, }, }; -#[cfg(feature = "rocksdb")] pub use rocksdb::{RocksDbConfig, RocksDbStorage}; diff --git a/crates/large-smt/src/rocksdb.rs b/crates/large-smt-backend-rocksdb/src/rocksdb.rs similarity index 100% rename from crates/large-smt/src/rocksdb.rs rename to crates/large-smt-backend-rocksdb/src/rocksdb.rs diff --git a/crates/store/src/genesis/mod.rs b/crates/store/src/genesis/mod.rs index 5df1825d66..dd19a6cb0f 100644 --- a/crates/store/src/genesis/mod.rs +++ b/crates/store/src/genesis/mod.rs @@ -9,10 +9,10 @@ use miden_protocol::block::{ BlockNoteTree, BlockNumber, BlockProof, - BlockSigner, FeeParameters, ProvenBlock, }; +use miden_protocol::crypto::dsa::ecdsa_k256_keccak::SecretKey; use miden_protocol::crypto::merkle::mmr::{Forest, MmrPeaks}; use miden_protocol::crypto::merkle::smt::{LargeSmt, MemoryStorage, Smt}; use miden_protocol::note::Nullifier; @@ -67,7 +67,7 @@ impl GenesisState { } } -impl GenesisState { +impl GenesisState { /// Returns the block header and the account SMT pub fn into_block(self) -> Result { let accounts: Vec = self From 5ab5770341d4e3434da419b6fe5d2062117de90b Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Tue, 24 Feb 2026 20:04:57 +0100 Subject: [PATCH 3/9] maybe --- bin/network-monitor/src/deploy/counter.rs | 9 +- crates/large-smt-backend-rocksdb/Cargo.toml | 2 +- .../large-smt-backend-rocksdb/src/rocksdb.rs | 183 ++++++++++++++---- .../src/db/models/queries/tests.rs | 7 +- crates/store/src/accounts/mod.rs | 4 +- crates/store/src/db/tests.rs | 11 +- crates/store/src/genesis/mod.rs | 2 +- crates/store/src/server/mod.rs | 2 +- crates/validator/src/block_validation/mod.rs | 10 +- crates/validator/src/server/mod.rs | 3 +- 10 files changed, 166 insertions(+), 67 deletions(-) diff --git a/bin/network-monitor/src/deploy/counter.rs b/bin/network-monitor/src/deploy/counter.rs index bfe1143d55..a5ab3d3638 100644 --- a/bin/network-monitor/src/deploy/counter.rs +++ b/bin/network-monitor/src/deploy/counter.rs @@ -7,7 +7,6 @@ use miden_protocol::account::{ Account, AccountBuilder, AccountComponent, - AccountComponentMetadata, AccountFile, AccountId, AccountStorageMode, @@ -54,12 +53,8 @@ pub fn create_counter_account(owner_account_id: AccountId) -> Result { let component_code = CodeBuilder::default().compile_component_code("counter::program", script)?; - let account_code = AccountComponent::new( - component_code, - vec![counter_slot, owner_id_slot], - AccountComponentMetadata::default().with_supports_all_types(), - )? - .with_supports_all_types(); + let account_code = AccountComponent::new(component_code, vec![counter_slot, owner_id_slot])? + .with_supports_all_types(); let incr_nonce_auth: AccountComponent = IncrNonceAuthComponent.into(); diff --git a/crates/large-smt-backend-rocksdb/Cargo.toml b/crates/large-smt-backend-rocksdb/Cargo.toml index 8fb147930e..b35741cd99 100644 --- a/crates/large-smt-backend-rocksdb/Cargo.toml +++ b/crates/large-smt-backend-rocksdb/Cargo.toml @@ -18,5 +18,5 @@ workspace = true miden-protocol = { features = ["std"], workspace = true } miden-crypto = { features = ["std", "concurrent"], workspace = true } rayon = { version = "1.10" } -rocksdb = { default-features = false, features = ["bindgen-runtime", "lz4"], optional = true, version = "0.24" } +rocksdb = { default-features = false, features = ["bindgen-runtime", "lz4"], version = "0.24" } winter-utils = { version = "0.13" } diff --git a/crates/large-smt-backend-rocksdb/src/rocksdb.rs b/crates/large-smt-backend-rocksdb/src/rocksdb.rs index 63910ff545..7951908647 100644 --- a/crates/large-smt-backend-rocksdb/src/rocksdb.rs +++ b/crates/large-smt-backend-rocksdb/src/rocksdb.rs @@ -2,31 +2,37 @@ use alloc::boxed::Box; use alloc::vec::Vec; +use core::cmp::Ordering; use std::path::PathBuf; use std::sync::Arc; -use rocksdb::{ +use ::rocksdb::{ BlockBasedOptions, Cache, + ColumnFamily, ColumnFamilyDescriptor, DB, DBCompactionStyle, DBCompressionType, DBIteratorWithThreadMode, + Error as RocksDbError, FlushOptions, IteratorMode, Options, ReadOptions, WriteBatch, + WriteOptions, }; +use miden_crypto::Map; +use miden_crypto::merkle::smt::MAX_LEAF_ENTRIES; use winter_utils::{Deserializable, Serializable}; use crate::{ EMPTY_WORD, InnerNode, - Map, NodeIndex, SmtLeaf, + SmtLeafError, SmtStorage, StorageError, StorageUpdateParts, @@ -57,6 +63,16 @@ const LEAF_COUNT_KEY: &[u8] = b"leaf_count"; /// The key used in the `METADATA_CF` column family to store the total count of key-value entries. const ENTRY_COUNT_KEY: &[u8] = b"entry_count"; +trait RocksDbResultExt { + fn map_rocksdb_err(self) -> Result; +} + +impl RocksDbResultExt for Result { + fn map_rocksdb_err(self) -> Result { + self.map_err(rocksdb_error_to_storage_error) + } +} + /// A RocksDB-backed persistent storage implementation for a Sparse Merkle Tree (SMT). /// /// Implements the `SmtStorage` trait, providing durable storage for SMT components @@ -160,7 +176,7 @@ impl RocksDbStorage { ColumnFamilyDescriptor::new(DEPTH_24_CF, depth24_opts), ]; - let db = DB::open_cf_descriptors(&db_opts, config.path, cfs)?; + let db = DB::open_cf_descriptors(&db_opts, config.path, cfs).map_rocksdb_err()?; Ok(Self { db: Arc::new(db) }) } @@ -181,10 +197,10 @@ impl RocksDbStorage { DEPTH_24_CF, ] { let cf = self.cf_handle(name)?; - self.db.flush_cf_opt(cf, &fopts)?; + self.db.flush_cf_opt(cf, &fopts).map_rocksdb_err()?; } - self.db.flush_wal(true)?; + self.db.flush_wal(true).map_rocksdb_err()?; Ok(()) } @@ -206,14 +222,14 @@ impl RocksDbStorage { KeyBytes::new(index.value(), keep) } - fn cf_handle(&self, name: &str) -> Result<&rocksdb::ColumnFamily, StorageError> { + fn cf_handle(&self, name: &str) -> Result<&ColumnFamily, StorageError> { self.db .cf_handle(name) .ok_or_else(|| StorageError::Unsupported(format!("unknown column family `{name}`"))) } #[inline(always)] - fn subtree_cf(&self, index: NodeIndex) -> &rocksdb::ColumnFamily { + fn subtree_cf(&self, index: NodeIndex) -> &ColumnFamily { let name = cf_for_depth(index.depth()); self.cf_handle(name).expect("CF handle missing") } @@ -222,7 +238,7 @@ impl RocksDbStorage { impl SmtStorage for RocksDbStorage { fn get_root(&self) -> Result, StorageError> { let cf = self.cf_handle(METADATA_CF)?; - match self.db.get_cf(cf, ROOT_KEY)? { + match self.db.get_cf(cf, ROOT_KEY).map_rocksdb_err()? { Some(bytes) => { let digest = Word::read_from_bytes(&bytes)?; Ok(Some(digest)) @@ -233,13 +249,13 @@ impl SmtStorage for RocksDbStorage { fn set_root(&self, root: Word) -> Result<(), StorageError> { let cf = self.cf_handle(METADATA_CF)?; - self.db.put_cf(cf, ROOT_KEY, root.to_bytes())?; + self.db.put_cf(cf, ROOT_KEY, root.to_bytes()).map_rocksdb_err()?; Ok(()) } fn leaf_count(&self) -> Result { let cf = self.cf_handle(METADATA_CF)?; - self.db.get_cf(cf, LEAF_COUNT_KEY)?.map_or(Ok(0), |bytes| { + self.db.get_cf(cf, LEAF_COUNT_KEY).map_rocksdb_err()?.map_or(Ok(0), |bytes| { let arr: [u8; 8] = bytes.as_slice().try_into().map_err(|_| StorageError::BadValueLen { what: "leaf count", @@ -252,7 +268,7 @@ impl SmtStorage for RocksDbStorage { fn entry_count(&self) -> Result { let cf = self.cf_handle(METADATA_CF)?; - self.db.get_cf(cf, ENTRY_COUNT_KEY)?.map_or(Ok(0), |bytes| { + self.db.get_cf(cf, ENTRY_COUNT_KEY).map_rocksdb_err()?.map_or(Ok(0), |bytes| { let arr: [u8; 8] = bytes.as_slice().try_into().map_err(|_| StorageError::BadValueLen { what: "entry count", @@ -282,12 +298,12 @@ impl SmtStorage for RocksDbStorage { let maybe_leaf = self.get_leaf(index)?; let (old_value, new_leaf) = match maybe_leaf { - Some(mut existing_leaf) => { - let old_val = existing_leaf.insert(key, value)?; + Some(existing_leaf) => { + let (old_val, updated_leaf) = insert_leaf_entry(existing_leaf, key, value)?; if old_val.is_none() { current_entry_count += 1; } - (old_val, existing_leaf) + (old_val, updated_leaf) }, None => { let new_leaf = SmtLeaf::new_single(key, value); @@ -303,7 +319,7 @@ impl SmtStorage for RocksDbStorage { batch.put_cf(metadata_cf, LEAF_COUNT_KEY, current_leaf_count.to_be_bytes()); batch.put_cf(metadata_cf, ENTRY_COUNT_KEY, current_entry_count.to_be_bytes()); - self.db.write(batch)?; + self.db.write(batch).map_rocksdb_err()?; Ok(old_value) } @@ -311,11 +327,11 @@ impl SmtStorage for RocksDbStorage { fn remove_value(&self, index: u64, key: Word) -> Result, StorageError> { let maybe_leaf = self.get_leaf(index)?; - let Some(mut existing_leaf) = maybe_leaf else { + let Some(existing_leaf) = maybe_leaf else { return Ok(None); }; - let (old_value, is_empty) = existing_leaf.remove(key); + let (old_value, is_empty, updated_leaf) = remove_leaf_entry(existing_leaf, key); if old_value.is_none() { return Ok(None); } @@ -331,7 +347,7 @@ impl SmtStorage for RocksDbStorage { batch.delete_cf(leaves_cf, db_key); current_leaf_count = current_leaf_count.saturating_sub(1); } else { - batch.put_cf(leaves_cf, db_key, existing_leaf.to_bytes()); + batch.put_cf(leaves_cf, db_key, updated_leaf.to_bytes()); } current_entry_count = current_entry_count.saturating_sub(1); @@ -339,7 +355,7 @@ impl SmtStorage for RocksDbStorage { batch.put_cf(metadata_cf, LEAF_COUNT_KEY, current_leaf_count.to_be_bytes()); batch.put_cf(metadata_cf, ENTRY_COUNT_KEY, current_entry_count.to_be_bytes()); - self.db.write(batch)?; + self.db.write(batch).map_rocksdb_err()?; Ok(old_value) } @@ -348,7 +364,7 @@ impl SmtStorage for RocksDbStorage { let cf = self.cf_handle(LEAVES_CF)?; let db_key = Self::index_db_key(index); - match self.db.get_cf(cf, db_key)? { + match self.db.get_cf(cf, db_key).map_rocksdb_err()? { Some(bytes) => Ok(Some(SmtLeaf::read_from_bytes(&bytes)?)), None => Ok(None), } @@ -363,7 +379,7 @@ impl SmtStorage for RocksDbStorage { batch.put_cf(leaves_cf, db_key, leaf.to_bytes()); } - self.db.write(batch)?; + self.db.write(batch).map_rocksdb_err()?; Ok(()) } @@ -371,13 +387,13 @@ impl SmtStorage for RocksDbStorage { let cf = self.cf_handle(LEAVES_CF)?; let db_key = Self::index_db_key(index); - let old_leaf = match self.db.get_cf(cf, &db_key)? { + let old_leaf = match self.db.get_cf(cf, &db_key).map_rocksdb_err()? { Some(bytes) => Some(SmtLeaf::read_from_bytes(&bytes)?), None => None, }; if old_leaf.is_some() { - self.db.delete_cf(cf, db_key)?; + self.db.delete_cf(cf, db_key).map_rocksdb_err()?; } Ok(old_leaf) @@ -386,13 +402,13 @@ impl SmtStorage for RocksDbStorage { fn get_leaves(&self, indices: &[u64]) -> Result>, StorageError> { let cf = self.cf_handle(LEAVES_CF)?; let keys: Vec<[u8; 8]> = indices.iter().map(|idx| Self::index_db_key(*idx)).collect(); - let key_refs: Vec<(&rocksdb::ColumnFamily, &[u8])> = + let key_refs: Vec<(&ColumnFamily, &[u8])> = keys.iter().map(|k| (cf, k.as_slice())).collect(); let results = self.db.multi_get_cf(key_refs); let mut out = Vec::with_capacity(indices.len()); for res in results { - match res? { + match res.map_rocksdb_err()? { Some(bytes) => out.push(Some(SmtLeaf::read_from_bytes(&bytes)?)), None => out.push(None), } @@ -408,7 +424,7 @@ impl SmtStorage for RocksDbStorage { let cf = self.subtree_cf(index); let key = Self::subtree_db_key(index); - match self.db.get_cf(cf, key)? { + match self.db.get_cf(cf, key).map_rocksdb_err()? { Some(bytes) => Ok(Some(Subtree::from_vec(index, &bytes)?)), None => Ok(None), } @@ -418,14 +434,14 @@ impl SmtStorage for RocksDbStorage { let keys: Vec<(NodeIndex, KeyBytes)> = indices.iter().map(|&idx| (idx, Self::subtree_db_key(idx))).collect(); - let key_refs: Vec<(&rocksdb::ColumnFamily, &[u8])> = + let key_refs: Vec<(&ColumnFamily, &[u8])> = keys.iter().map(|(idx, k)| (self.subtree_cf(*idx), k.as_slice())).collect(); let results = self.db.multi_get_cf(key_refs); let mut out = Vec::with_capacity(indices.len()); for (res, &idx) in results.into_iter().zip(indices.iter()) { - match res? { + match res.map_rocksdb_err()? { Some(bytes) => out.push(Some(Subtree::from_vec(idx, &bytes)?)), None => out.push(None), } @@ -439,7 +455,7 @@ impl SmtStorage for RocksDbStorage { let key = Self::subtree_db_key(index); let data = subtree.to_vec(); - self.db.put_cf(cf, key, data)?; + self.db.put_cf(cf, key, data).map_rocksdb_err()?; Ok(()) } @@ -454,14 +470,14 @@ impl SmtStorage for RocksDbStorage { batch.put_cf(cf, key, data); } - self.db.write(batch)?; + self.db.write(batch).map_rocksdb_err()?; Ok(()) } fn remove_subtree(&self, index: NodeIndex) -> Result<(), StorageError> { let cf = self.subtree_cf(index); let key = Self::subtree_db_key(index); - self.db.delete_cf(cf, key)?; + self.db.delete_cf(cf, key).map_rocksdb_err()?; Ok(()) } @@ -523,19 +539,25 @@ impl SmtStorage for RocksDbStorage { .into_iter() .map(|update| { let (index, maybe_bytes, depth24_op) = match update { - SubtreeUpdate::Set(subtree) => { - let index = subtree.root_index(); + SubtreeUpdate::Store { index, subtree } => { let bytes = subtree.to_vec(); let depth24_op = if index.depth() == 24 { let hash_key = Self::index_db_key(index.value()); - let root_hash = subtree.root_hash(); + let root_hash = subtree + .get_inner_node(index) + .ok_or_else(|| { + StorageError::Unsupported( + "Subtree root node not found".to_string(), + ) + })? + .hash(); Some((hash_key, Some(root_hash.to_bytes()))) } else { None }; (index, Some(bytes), depth24_op) }, - SubtreeUpdate::Remove(index) => { + SubtreeUpdate::Delete { index } => { let depth24_op = if index.depth() == 24 { let hash_key = Self::index_db_key(index.value()); Some((hash_key, None)) @@ -580,9 +602,9 @@ impl SmtStorage for RocksDbStorage { batch.put_cf(metadata_cf, ROOT_KEY, new_root.to_bytes()); - let mut write_opts = rocksdb::WriteOptions::default(); + let mut write_opts = WriteOptions::default(); write_opts.set_sync(false); - self.db.write_opt(batch, &write_opts)?; + self.db.write_opt(batch, &write_opts).map_rocksdb_err()?; Ok(()) } @@ -614,7 +636,7 @@ impl SmtStorage for RocksDbStorage { let mut hashes = Vec::new(); for item in iter { - let (key_bytes, value_bytes) = item?; + let (key_bytes, value_bytes) = item.map_rocksdb_err()?; let index = index_from_key_bytes(&key_bytes)?; let hash = Word::read_from_bytes(&value_bytes)?; @@ -656,13 +678,13 @@ impl Iterator for RocksDbDirectLeafIterator<'_> { struct RocksDbSubtreeIterator<'a> { db: &'a DB, - cf_handles: Vec<&'a rocksdb::ColumnFamily>, + cf_handles: Vec<&'a ColumnFamily>, current_cf_index: usize, current_iter: Option>, } impl<'a> RocksDbSubtreeIterator<'a> { - fn new(db: &'a DB, cf_handles: Vec<&'a rocksdb::ColumnFamily>) -> Self { + fn new(db: &'a DB, cf_handles: Vec<&'a ColumnFamily>) -> Self { let mut iterator = Self { db, cf_handles, @@ -826,8 +848,83 @@ fn cf_for_depth(depth: u8) -> &'static str { } } -impl From for StorageError { - fn from(e: rocksdb::Error) -> Self { - StorageError::Backend(Box::new(e)) +fn insert_leaf_entry( + leaf: SmtLeaf, + key: Word, + value: Word, +) -> Result<(Option, SmtLeaf), StorageError> { + match leaf { + SmtLeaf::Empty(_) => Ok((None, SmtLeaf::new_single(key, value))), + SmtLeaf::Single((key_at_leaf, value_at_leaf)) => { + if key_at_leaf == key { + Ok((Some(value_at_leaf), SmtLeaf::Single((key_at_leaf, value)))) + } else { + let mut pairs = vec![(key_at_leaf, value_at_leaf), (key, value)]; + pairs.sort_by(|(key_1, _), (key_2, _)| cmp_keys(*key_1, *key_2)); + Ok((None, SmtLeaf::Multiple(pairs))) + } + }, + SmtLeaf::Multiple(mut kv_pairs) => { + match kv_pairs.binary_search_by(|kv_pair| cmp_keys(kv_pair.0, key)) { + Ok(pos) => { + let old_value = kv_pairs[pos].1; + kv_pairs[pos].1 = value; + Ok((Some(old_value), SmtLeaf::Multiple(kv_pairs))) + }, + Err(pos) => { + if kv_pairs.len() >= MAX_LEAF_ENTRIES { + return Err(SmtLeafError::TooManyLeafEntries { + actual: kv_pairs.len() + 1, + } + .into()); + } + kv_pairs.insert(pos, (key, value)); + Ok((None, SmtLeaf::Multiple(kv_pairs))) + }, + } + }, } } + +fn remove_leaf_entry(leaf: SmtLeaf, key: Word) -> (Option, bool, SmtLeaf) { + match leaf { + SmtLeaf::Empty(_) => (None, false, leaf), + SmtLeaf::Single((key_at_leaf, value_at_leaf)) => { + if key_at_leaf == key { + (Some(value_at_leaf), true, SmtLeaf::new_empty(key.into())) + } else { + (None, false, SmtLeaf::Single((key_at_leaf, value_at_leaf))) + } + }, + SmtLeaf::Multiple(mut kv_pairs) => { + match kv_pairs.binary_search_by(|kv_pair| cmp_keys(kv_pair.0, key)) { + Ok(pos) => { + let old_value = kv_pairs[pos].1; + kv_pairs.remove(pos); + if kv_pairs.len() == 1 { + (Some(old_value), false, SmtLeaf::Single(kv_pairs[0])) + } else { + (Some(old_value), false, SmtLeaf::Multiple(kv_pairs)) + } + }, + Err(_) => (None, false, SmtLeaf::Multiple(kv_pairs)), + } + }, + } +} + +fn cmp_keys(key_1: Word, key_2: Word) -> Ordering { + for (v1, v2) in key_1.iter().zip(key_2.iter()).rev() { + let v1 = v1.as_int(); + let v2 = v2.as_int(); + if v1 != v2 { + return v1.cmp(&v2); + } + } + + Ordering::Equal +} + +fn rocksdb_error_to_storage_error(err: RocksDbError) -> StorageError { + StorageError::Backend(Box::new(err)) +} diff --git a/crates/ntx-builder/src/db/models/queries/tests.rs b/crates/ntx-builder/src/db/models/queries/tests.rs index 0db95c018a..e05274714d 100644 --- a/crates/ntx-builder/src/db/models/queries/tests.rs +++ b/crates/ntx-builder/src/db/models/queries/tests.rs @@ -6,11 +6,11 @@ use miden_node_proto::domain::note::SingleTargetNetworkNote; use miden_protocol::Word; use miden_protocol::account::{AccountId, AccountStorageMode, AccountType}; use miden_protocol::block::BlockNumber; -use miden_protocol::note::NoteExecutionHint; use miden_protocol::testing::account_id::{ ACCOUNT_ID_REGULAR_NETWORK_ACCOUNT_IMMUTABLE_CODE, AccountIdBuilder, }; +use miden_protocol::note::NoteExecutionHint; use miden_protocol::transaction::TransactionId; use miden_standards::note::NetworkAccountTarget; use miden_standards::testing::note::NoteBuilder; @@ -544,8 +544,9 @@ fn mock_account(_account_id: NetworkAccountId) -> miden_protocol::account::Accou .compile_component_code("test::interface", "pub proc test_proc push.1.2 add end") .unwrap(); - let component = - AccountComponent::new(component_code, vec![]).unwrap().with_supports_all_types(); + let component = AccountComponent::new(component_code, vec![]) + .unwrap() + .with_supports_all_types(); AccountBuilder::new([0u8; 32]) .account_type(AccountType::RegularAccountImmutableCode) diff --git a/crates/store/src/accounts/mod.rs b/crates/store/src/accounts/mod.rs index 2508c9d2df..f9815190bd 100644 --- a/crates/store/src/accounts/mod.rs +++ b/crates/store/src/accounts/mod.rs @@ -2,6 +2,8 @@ use std::collections::{BTreeMap, HashMap}; +#[cfg(feature = "rocksdb")] +use miden_large_smt_backend_rocksdb::RocksDbStorage; use miden_protocol::account::{AccountId, AccountIdPrefix}; use miden_protocol::block::BlockNumber; use miden_protocol::block::account_tree::{AccountMutationSet, AccountTree, AccountWitness}; @@ -32,7 +34,7 @@ pub type InMemoryAccountTree = AccountTree>; #[cfg(feature = "rocksdb")] /// Convenience for a persistent account tree. -pub type PersistentAccountTree = AccountTree>; +pub type PersistentAccountTree = AccountTree>; // HISTORICAL ERROR TYPES // ================================================================================================ diff --git a/crates/store/src/db/tests.rs b/crates/store/src/db/tests.rs index 2154af4c3c..abfbe561aa 100644 --- a/crates/store/src/db/tests.rs +++ b/crates/store/src/db/tests.rs @@ -355,7 +355,7 @@ fn sql_unconsumed_network_notes() { NoteType::Public, NoteTag::with_account_target(account_note.0), ) - .with_attachment(attachment.clone()), + .with_attachment(attachment.clone()), details: None, inclusion_path: SparseMerklePath::default(), }; @@ -2118,9 +2118,12 @@ fn db_roundtrip_note_metadata_attachment() { let attachment: NoteAttachment = target.into(); // Create NoteMetadata with the attachment - let metadata = - NoteMetadata::new(account_id, NoteType::Public, NoteTag::with_account_target(account_id)) - .with_attachment(attachment.clone()); + let metadata = NoteMetadata::new( + account_id, + NoteType::Public, + NoteTag::with_account_target(account_id), + ) + .with_attachment(attachment.clone()); let note = NoteRecord { block_num, diff --git a/crates/store/src/genesis/mod.rs b/crates/store/src/genesis/mod.rs index dd19a6cb0f..957df1e799 100644 --- a/crates/store/src/genesis/mod.rs +++ b/crates/store/src/genesis/mod.rs @@ -134,7 +134,7 @@ impl GenesisState { let block_proof = BlockProof::new_dummy(); - let signature = self.block_signer.sign(&header); + let signature = self.block_signer.sign(header.commitment()); // SAFETY: Header and accounts should be valid by construction. // No notes or nullifiers are created at genesis, which is consistent with the above empty // block note tree root and empty nullifier tree root. diff --git a/crates/store/src/server/mod.rs b/crates/store/src/server/mod.rs index 3a284ceff4..473412533e 100644 --- a/crates/store/src/server/mod.rs +++ b/crates/store/src/server/mod.rs @@ -12,7 +12,7 @@ use miden_node_proto_build::{ }; use miden_node_utils::panic::{CatchPanicLayer, catch_panic_layer_fn}; use miden_node_utils::tracing::grpc::grpc_trace_fn; -use miden_protocol::block::BlockSigner; +use miden_protocol::crypto::dsa::ecdsa_k256_keccak::SecretKey; use tokio::net::TcpListener; use tokio::task::JoinSet; use tokio_stream::wrappers::TcpListenerStream; diff --git a/crates/validator/src/block_validation/mod.rs b/crates/validator/src/block_validation/mod.rs index 954d043b8c..69b46c4e30 100644 --- a/crates/validator/src/block_validation/mod.rs +++ b/crates/validator/src/block_validation/mod.rs @@ -1,6 +1,6 @@ use miden_node_db::{DatabaseError, Db}; -use miden_protocol::block::{BlockSigner, ProposedBlock}; -use miden_protocol::crypto::dsa::ecdsa_k256_keccak::Signature; +use miden_protocol::block::ProposedBlock; +use miden_protocol::crypto::dsa::ecdsa_k256_keccak::{SecretKey, Signature}; use miden_protocol::errors::ProposedBlockError; use miden_protocol::transaction::{TransactionHeader, TransactionId}; use tracing::{info_span, instrument}; @@ -27,9 +27,9 @@ pub enum BlockValidationError { /// Validates a block by checking that all transactions in the proposed block have been processed by /// the validator in the past. #[instrument(target = COMPONENT, skip_all, err)] -pub async fn validate_block( +pub async fn validate_block( proposed_block: ProposedBlock, - signer: &S, + signer: &SecretKey, db: &Db, ) -> Result { // Search for any proposed transactions that have not previously been validated. @@ -53,7 +53,7 @@ pub async fn validate_block( .map_err(BlockValidationError::BlockBuildingFailed)?; // Sign the header. - let signature = info_span!("sign_block").in_scope(|| signer.sign(&header)); + let signature = info_span!("sign_block").in_scope(|| signer.sign(header.commitment())); Ok(signature) } diff --git a/crates/validator/src/server/mod.rs b/crates/validator/src/server/mod.rs index 7f71161a23..f7c5440973 100644 --- a/crates/validator/src/server/mod.rs +++ b/crates/validator/src/server/mod.rs @@ -12,7 +12,8 @@ use miden_node_utils::ErrorReport; use miden_node_utils::panic::catch_panic_layer_fn; use miden_node_utils::tracing::OpenTelemetrySpanExt; use miden_node_utils::tracing::grpc::grpc_trace_fn; -use miden_protocol::block::{BlockSigner, ProposedBlock}; +use miden_protocol::block::ProposedBlock; +use miden_protocol::crypto::dsa::ecdsa_k256_keccak::SecretKey; use miden_protocol::transaction::{ProvenTransaction, TransactionInputs}; use miden_tx::utils::{Deserializable, Serializable}; use tokio::net::TcpListener; From c91e646b4404479b84dc61095b5bde09c2ae74a3 Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Tue, 24 Feb 2026 20:05:15 +0100 Subject: [PATCH 4/9] SecretKey(new) vs BlockSigner(old) --- crates/block-producer/src/server/tests.rs | 5 ++--- crates/store/src/db/tests.rs | 11 ++++------- crates/store/src/server/mod.rs | 4 ++-- crates/validator/src/server/mod.rs | 16 ++++++++-------- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/crates/block-producer/src/server/tests.rs b/crates/block-producer/src/server/tests.rs index 8c98e9da4d..02d18e31d5 100644 --- a/crates/block-producer/src/server/tests.rs +++ b/crates/block-producer/src/server/tests.rs @@ -6,7 +6,6 @@ use miden_node_store::{GenesisState, Store}; use miden_node_utils::fee::test_fee_params; use miden_node_validator::Validator; use miden_protocol::crypto::dsa::ecdsa_k256_keccak::SecretKey; -use miden_protocol::testing::random_signer::RandomBlockSigner as _; use tokio::net::TcpListener; use tokio::time::sleep; use tokio::{runtime, task}; @@ -49,7 +48,7 @@ async fn block_producer_startup_is_robust_to_network_failures() { Validator { address: validator_addr, grpc_timeout, - signer: SecretKey::random(), + signer: SecretKey::new(), data_directory, } .serve() @@ -130,7 +129,7 @@ async fn start_store( store_addr: std::net::SocketAddr, data_directory: &std::path::Path, ) -> runtime::Runtime { - let genesis_state = GenesisState::new(vec![], test_fee_params(), 1, 1, SecretKey::random()); + let genesis_state = GenesisState::new(vec![], test_fee_params(), 1, 1, SecretKey::new()); Store::bootstrap(genesis_state.clone(), data_directory).expect("store should bootstrap"); let dir = data_directory.to_path_buf(); diff --git a/crates/store/src/db/tests.rs b/crates/store/src/db/tests.rs index abfbe561aa..5480b7364f 100644 --- a/crates/store/src/db/tests.rs +++ b/crates/store/src/db/tests.rs @@ -52,7 +52,6 @@ use miden_protocol::testing::account_id::{ ACCOUNT_ID_REGULAR_PUBLIC_ACCOUNT_IMMUTABLE_CODE, ACCOUNT_ID_REGULAR_PUBLIC_ACCOUNT_IMMUTABLE_CODE_2, }; -use miden_protocol::testing::random_signer::RandomBlockSigner; use miden_protocol::transaction::{ InputNoteCommitment, InputNotes, @@ -1409,7 +1408,7 @@ fn genesis_with_account_assets() { .unwrap(); let genesis_state = - GenesisState::new(vec![account], test_fee_params(), 1, 0, SecretKey::random()); + GenesisState::new(vec![account], test_fee_params(), 1, 0, SecretKey::new()); let genesis_block = genesis_state.into_block().unwrap(); crate::db::Db::bootstrap(":memory:".into(), &genesis_block).unwrap(); @@ -1457,8 +1456,7 @@ fn genesis_with_account_storage_map() { .build_existing() .unwrap(); - let genesis_state = - GenesisState::new(vec![account], test_fee_params(), 1, 0, SecretKey::random()); + let genesis_state = GenesisState::new(vec![account], test_fee_params(), 1, 0, SecretKey::new()); let genesis_block = genesis_state.into_block().unwrap(); crate::db::Db::bootstrap(":memory:".into(), &genesis_block).unwrap(); @@ -1504,8 +1502,7 @@ fn genesis_with_account_assets_and_storage() { .build_existing() .unwrap(); - let genesis_state = - GenesisState::new(vec![account], test_fee_params(), 1, 0, SecretKey::random()); + let genesis_state = GenesisState::new(vec![account], test_fee_params(), 1, 0, SecretKey::new()); let genesis_block = genesis_state.into_block().unwrap(); crate::db::Db::bootstrap(":memory:".into(), &genesis_block).unwrap(); @@ -1582,7 +1579,7 @@ fn genesis_with_multiple_accounts() { test_fee_params(), 1, 0, - SecretKey::random(), + SecretKey::new(), ); let genesis_block = genesis_state.into_block().unwrap(); diff --git a/crates/store/src/server/mod.rs b/crates/store/src/server/mod.rs index 473412533e..667cfda44a 100644 --- a/crates/store/src/server/mod.rs +++ b/crates/store/src/server/mod.rs @@ -54,8 +54,8 @@ impl Store { skip_all, err, )] - pub fn bootstrap( - genesis: GenesisState, + pub fn bootstrap( + genesis: GenesisState, data_directory: &Path, ) -> anyhow::Result<()> { let genesis = genesis diff --git a/crates/validator/src/server/mod.rs b/crates/validator/src/server/mod.rs index f7c5440973..02f52e1fcc 100644 --- a/crates/validator/src/server/mod.rs +++ b/crates/validator/src/server/mod.rs @@ -34,7 +34,7 @@ use crate::tx_validation::validate_transaction; /// The handle into running the gRPC validator server. /// /// Facilitates the running of the gRPC server which implements the validator API. -pub struct Validator { +pub struct Validator { /// The address of the validator component. pub address: SocketAddr, /// Server-side timeout for an individual gRPC request. @@ -43,13 +43,13 @@ pub struct Validator { pub grpc_timeout: Duration, /// The signer used to sign blocks. - pub signer: S, + pub signer: SecretKey, /// The data directory for the validator component's database files. pub data_directory: PathBuf, } -impl Validator { +impl Validator { /// Serves the validator RPC API. /// /// Executes in place (i.e. not spawned) and will run indefinitely until a fatal error is @@ -100,19 +100,19 @@ impl Validator { /// The underlying implementation of the gRPC validator server. /// /// Implements the gRPC API for the validator. -struct ValidatorServer { - signer: S, +struct ValidatorServer { + signer: SecretKey, db: Arc, } -impl ValidatorServer { - fn new(signer: S, db: Db) -> Self { +impl ValidatorServer { + fn new(signer: SecretKey, db: Db) -> Self { Self { signer, db: db.into() } } } #[tonic::async_trait] -impl api_server::Api for ValidatorServer { +impl api_server::Api for ValidatorServer { /// Returns the status of the validator. async fn status( &self, From f47111a2c2c4d6db15bcf64a371e5d794910759f Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Tue, 24 Feb 2026 20:06:00 +0100 Subject: [PATCH 5/9] yuk --- crates/ntx-builder/src/db/models/queries/tests.rs | 7 +++---- crates/store/src/db/tests.rs | 14 +++++--------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/crates/ntx-builder/src/db/models/queries/tests.rs b/crates/ntx-builder/src/db/models/queries/tests.rs index e05274714d..0db95c018a 100644 --- a/crates/ntx-builder/src/db/models/queries/tests.rs +++ b/crates/ntx-builder/src/db/models/queries/tests.rs @@ -6,11 +6,11 @@ use miden_node_proto::domain::note::SingleTargetNetworkNote; use miden_protocol::Word; use miden_protocol::account::{AccountId, AccountStorageMode, AccountType}; use miden_protocol::block::BlockNumber; +use miden_protocol::note::NoteExecutionHint; use miden_protocol::testing::account_id::{ ACCOUNT_ID_REGULAR_NETWORK_ACCOUNT_IMMUTABLE_CODE, AccountIdBuilder, }; -use miden_protocol::note::NoteExecutionHint; use miden_protocol::transaction::TransactionId; use miden_standards::note::NetworkAccountTarget; use miden_standards::testing::note::NoteBuilder; @@ -544,9 +544,8 @@ fn mock_account(_account_id: NetworkAccountId) -> miden_protocol::account::Accou .compile_component_code("test::interface", "pub proc test_proc push.1.2 add end") .unwrap(); - let component = AccountComponent::new(component_code, vec![]) - .unwrap() - .with_supports_all_types(); + let component = + AccountComponent::new(component_code, vec![]).unwrap().with_supports_all_types(); AccountBuilder::new([0u8; 32]) .account_type(AccountType::RegularAccountImmutableCode) diff --git a/crates/store/src/db/tests.rs b/crates/store/src/db/tests.rs index 5480b7364f..1499fc811b 100644 --- a/crates/store/src/db/tests.rs +++ b/crates/store/src/db/tests.rs @@ -354,7 +354,7 @@ fn sql_unconsumed_network_notes() { NoteType::Public, NoteTag::with_account_target(account_note.0), ) - .with_attachment(attachment.clone()), + .with_attachment(attachment.clone()), details: None, inclusion_path: SparseMerklePath::default(), }; @@ -1407,8 +1407,7 @@ fn genesis_with_account_assets() { .build_existing() .unwrap(); - let genesis_state = - GenesisState::new(vec![account], test_fee_params(), 1, 0, SecretKey::new()); + let genesis_state = GenesisState::new(vec![account], test_fee_params(), 1, 0, SecretKey::new()); let genesis_block = genesis_state.into_block().unwrap(); crate::db::Db::bootstrap(":memory:".into(), &genesis_block).unwrap(); @@ -2115,12 +2114,9 @@ fn db_roundtrip_note_metadata_attachment() { let attachment: NoteAttachment = target.into(); // Create NoteMetadata with the attachment - let metadata = NoteMetadata::new( - account_id, - NoteType::Public, - NoteTag::with_account_target(account_id), - ) - .with_attachment(attachment.clone()); + let metadata = + NoteMetadata::new(account_id, NoteType::Public, NoteTag::with_account_target(account_id)) + .with_attachment(attachment.clone()); let note = NoteRecord { block_num, From 594aa40d008017e58c19c8d0d74e8b730d01e39e Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Tue, 24 Feb 2026 20:22:04 +0100 Subject: [PATCH 6/9] clippy --- bin/network-monitor/src/faucet.rs | 42 +++--- bin/remote-prover/src/server/prover.rs | 4 +- crates/large-smt-backend-rocksdb/src/lib.rs | 4 +- .../large-smt-backend-rocksdb/src/rocksdb.rs | 130 +++++++++--------- crates/store/benches/account_tree.rs | 2 +- 5 files changed, 89 insertions(+), 93 deletions(-) diff --git a/bin/network-monitor/src/faucet.rs b/bin/network-monitor/src/faucet.rs index caeafe055d..1e50a173d9 100644 --- a/bin/network-monitor/src/faucet.rs +++ b/bin/network-monitor/src/faucet.rs @@ -189,14 +189,15 @@ async fn perform_faucet_test( debug!("Generated account ID: {} (length: {})", account_id, account_id.len()); // Step 1: Request PoW challenge - let pow_url = faucet_url.join("/pow")?; - let response = client - .get(pow_url) - .query(&[("account_id", &account_id), ("amount", &MINT_AMOUNT.to_string())]) - .send() - .await?; + let mut pow_url = faucet_url.join("/pow")?; + pow_url + .query_pairs_mut() + .append_pair("account_id", &account_id) + .append_pair("amount", &MINT_AMOUNT.to_string()); - let response_text = response.text().await?; + let response = client.get(pow_url).send().await?; + + let response_text: String = response.text().await?; debug!("Faucet PoW response: {}", response_text); let challenge_response: PowChallengeResponse = serde_json::from_str(&response_text) @@ -215,21 +216,18 @@ async fn perform_faucet_test( debug!("Solved PoW challenge with nonce: {}", nonce); // Step 3: Request tokens with the solution - let tokens_url = faucet_url.join("/get_tokens")?; - - let response = client - .get(tokens_url) - .query(&[ - ("account_id", account_id.as_str()), - ("is_private_note", "false"), - ("asset_amount", &MINT_AMOUNT.to_string()), - ("challenge", &challenge_response.challenge), - ("nonce", &nonce.to_string()), - ]) - .send() - .await?; - - let response_text = response.text().await?; + let mut tokens_url = faucet_url.join("/get_tokens")?; + tokens_url + .query_pairs_mut() + .append_pair("account_id", account_id.as_str()) + .append_pair("is_private_note", "false") + .append_pair("asset_amount", &MINT_AMOUNT.to_string()) + .append_pair("challenge", &challenge_response.challenge) + .append_pair("nonce", &nonce.to_string()); + + let response = client.get(tokens_url).send().await?; + + let response_text: String = response.text().await?; let tokens_response: GetTokensResponse = serde_json::from_str(&response_text) .with_context(|| format!("Failed to parse tokens response: {response_text}"))?; diff --git a/bin/remote-prover/src/server/prover.rs b/bin/remote-prover/src/server/prover.rs index 3a163a1900..6ca76794e5 100644 --- a/bin/remote-prover/src/server/prover.rs +++ b/bin/remote-prover/src/server/prover.rs @@ -31,8 +31,8 @@ impl Prover { } } - /// Proves a [`ProofRequest`] using the appropriate prover implementation as specified during - /// construction. + /// Proves a [`proto::ProofRequest`] using the appropriate prover implementation as specified + /// during construction. pub fn prove(&self, request: proto::ProofRequest) -> Result { match self { Prover::Transaction(prover) => prover.prove_request(request), diff --git a/crates/large-smt-backend-rocksdb/src/lib.rs b/crates/large-smt-backend-rocksdb/src/lib.rs index 817a4e069d..d75026a455 100644 --- a/crates/large-smt-backend-rocksdb/src/lib.rs +++ b/crates/large-smt-backend-rocksdb/src/lib.rs @@ -14,10 +14,8 @@ //! let smt = LargeSmt::new(storage).unwrap(); //! ``` //! -//! With RocksDB (requires `rocksdb` feature): -//! //! ```ignore -//! use miden_large_smt::{LargeSmt, RocksDbConfig, RocksDbStorage}; +//! use miden_large_smt_backend_rocksdb::{LargeSmt, RocksDbConfig, RocksDbStorage}; //! //! let storage = RocksDbStorage::open(RocksDbConfig::new("/path/to/db")).unwrap(); //! let smt = LargeSmt::new(storage).unwrap(); diff --git a/crates/large-smt-backend-rocksdb/src/rocksdb.rs b/crates/large-smt-backend-rocksdb/src/rocksdb.rs index 7951908647..299284f932 100644 --- a/crates/large-smt-backend-rocksdb/src/rocksdb.rs +++ b/crates/large-smt-backend-rocksdb/src/rocksdb.rs @@ -42,18 +42,19 @@ use crate::{ Word, }; -/// The name of the RocksDB column family used for storing SMT leaves. +/// The name of the `RocksDB` column family used for storing SMT leaves. const LEAVES_CF: &str = "leaves"; -/// The names of the RocksDB column families used for storing SMT subtrees (deep nodes). +/// The names of the `RocksDB` column families used for storing SMT subtrees (deep nodes). const SUBTREE_24_CF: &str = "st24"; const SUBTREE_32_CF: &str = "st32"; const SUBTREE_40_CF: &str = "st40"; const SUBTREE_48_CF: &str = "st48"; const SUBTREE_56_CF: &str = "st56"; -/// The name of the RocksDB column family used for storing metadata (e.g., root, counts). +/// The name of the `RocksDB` column family used for storing metadata (e.g., root, counts). const METADATA_CF: &str = "metadata"; -/// The name of the RocksDB column family used for storing level 24 hashes for fast tree rebuilding. +/// The name of the `RocksDB` column family used for storing level 24 hashes for fast tree +/// rebuilding. const DEPTH_24_CF: &str = "depth24"; /// The key used in the `METADATA_CF` column family to store the SMT's root hash. @@ -63,6 +64,28 @@ const LEAF_COUNT_KEY: &[u8] = b"leaf_count"; /// The key used in the `METADATA_CF` column family to store the total count of key-value entries. const ENTRY_COUNT_KEY: &[u8] = b"entry_count"; +fn subtree_cf_opts(cache: &Cache, bloom_filter_bits: f64) -> Options { + let mut tbl = BlockBasedOptions::default(); + tbl.set_block_cache(cache); + tbl.set_bloom_filter(bloom_filter_bits, false); + tbl.set_whole_key_filtering(true); + tbl.set_pin_l0_filter_and_index_blocks_in_cache(true); + + let mut opts = Options::default(); + opts.set_block_based_table_factory(&tbl); + opts.set_write_buffer_size(128 << 20); + opts.set_max_write_buffer_number(3); + opts.set_min_write_buffer_number_to_merge(1); + opts.set_max_write_buffer_size_to_maintain(0); + opts.set_compaction_style(DBCompactionStyle::Level); + opts.set_level_zero_file_num_compaction_trigger(4); + opts.set_target_file_size_base(512 << 20); + opts.set_target_file_size_multiplier(2); + opts.set_compression_type(DBCompressionType::Lz4); + opts.set_level_zero_file_num_compaction_trigger(8); + opts +} + trait RocksDbResultExt { fn map_rocksdb_err(self) -> Result; } @@ -77,7 +100,7 @@ impl RocksDbResultExt for Result { /// /// Implements the `SmtStorage` trait, providing durable storage for SMT components /// including leaves, subtrees (for deeper parts of the tree), and metadata like the SMT root -/// and counts. It leverages RocksDB column families to organize data: +/// and counts. It leverages `RocksDB` column families to organize data: /// - `LEAVES_CF` ("leaves"): Stores `SmtLeaf` data, keyed by their logical u64 index. /// - `SUBTREE_24_CF` ("st24"): Stores serialized `Subtree` data at depth 24. /// - `SUBTREE_32_CF` ("st32"): Stores serialized `Subtree` data at depth 32. @@ -92,24 +115,25 @@ pub struct RocksDbStorage { } impl RocksDbStorage { - /// Opens or creates a RocksDB database at the specified `path` and configures it for SMT + /// Opens or creates a `RocksDB` database at the specified `path` and configures it for SMT /// storage. /// /// This method sets up the necessary column families (`leaves`, `subtrees`, `metadata`) - /// and applies various RocksDB options for performance, such as caching, bloom filters, + /// and applies various `RocksDB` options for performance, such as caching, bloom filters, /// and compaction strategies tailored for SMT workloads. /// /// # Errors /// Returns `StorageError::Backend` if the database cannot be opened or configured, - /// for example, due to path issues, permissions, or RocksDB internal errors. + /// for example, due to path issues, permissions, or `RocksDB` internal errors. pub fn open(config: RocksDbConfig) -> Result { // Base DB options let mut db_opts = Options::default(); db_opts.create_if_missing(true); db_opts.create_missing_column_families(true); - db_opts.increase_parallelism(rayon::current_num_threads() as i32); + let background_threads = i32::try_from(rayon::current_num_threads()).unwrap_or(i32::MAX); + db_opts.increase_parallelism(background_threads); db_opts.set_max_open_files(config.max_open_files); - db_opts.set_max_background_jobs(rayon::current_num_threads() as i32); + db_opts.set_max_background_jobs(background_threads); db_opts.set_max_total_wal_size(512 * 1024 * 1024); // Shared block cache across all column families @@ -135,29 +159,6 @@ impl RocksDbStorage { leaves_opts.set_compression_type(DBCompressionType::Lz4); leaves_opts.set_level_zero_file_num_compaction_trigger(8); - // Helper to build subtree CF options - fn subtree_cf(cache: &Cache, bloom_filter_bits: f64) -> Options { - let mut tbl = BlockBasedOptions::default(); - tbl.set_block_cache(cache); - tbl.set_bloom_filter(bloom_filter_bits, false); - tbl.set_whole_key_filtering(true); - tbl.set_pin_l0_filter_and_index_blocks_in_cache(true); - - let mut opts = Options::default(); - opts.set_block_based_table_factory(&tbl); - opts.set_write_buffer_size(128 << 20); - opts.set_max_write_buffer_number(3); - opts.set_min_write_buffer_number_to_merge(1); - opts.set_max_write_buffer_size_to_maintain(0); - opts.set_compaction_style(DBCompactionStyle::Level); - opts.set_level_zero_file_num_compaction_trigger(4); - opts.set_target_file_size_base(512 << 20); - opts.set_target_file_size_multiplier(2); - opts.set_compression_type(DBCompressionType::Lz4); - opts.set_level_zero_file_num_compaction_trigger(8); - opts - } - let mut depth24_opts = Options::default(); depth24_opts.set_compression_type(DBCompressionType::Lz4); depth24_opts.set_block_based_table_factory(&table_opts); @@ -167,11 +168,11 @@ impl RocksDbStorage { let cfs = vec![ ColumnFamilyDescriptor::new(LEAVES_CF, leaves_opts), - ColumnFamilyDescriptor::new(SUBTREE_24_CF, subtree_cf(&cache, 8.0)), - ColumnFamilyDescriptor::new(SUBTREE_32_CF, subtree_cf(&cache, 10.0)), - ColumnFamilyDescriptor::new(SUBTREE_40_CF, subtree_cf(&cache, 10.0)), - ColumnFamilyDescriptor::new(SUBTREE_48_CF, subtree_cf(&cache, 12.0)), - ColumnFamilyDescriptor::new(SUBTREE_56_CF, subtree_cf(&cache, 12.0)), + ColumnFamilyDescriptor::new(SUBTREE_24_CF, subtree_cf_opts(&cache, 8.0)), + ColumnFamilyDescriptor::new(SUBTREE_32_CF, subtree_cf_opts(&cache, 10.0)), + ColumnFamilyDescriptor::new(SUBTREE_40_CF, subtree_cf_opts(&cache, 10.0)), + ColumnFamilyDescriptor::new(SUBTREE_48_CF, subtree_cf_opts(&cache, 12.0)), + ColumnFamilyDescriptor::new(SUBTREE_56_CF, subtree_cf_opts(&cache, 12.0)), ColumnFamilyDescriptor::new(METADATA_CF, metadata_opts), ColumnFamilyDescriptor::new(DEPTH_24_CF, depth24_opts), ]; @@ -181,7 +182,7 @@ impl RocksDbStorage { Ok(Self { db: Arc::new(db) }) } - /// Syncs the RocksDB database to disk. + /// Syncs the `RocksDB` database to disk. fn sync(&self) -> Result<(), StorageError> { let mut fopts = FlushOptions::default(); fopts.set_wait(true); @@ -204,12 +205,12 @@ impl RocksDbStorage { Ok(()) } - #[inline(always)] + #[inline] fn index_db_key(index: u64) -> [u8; 8] { index.to_be_bytes() } - #[inline(always)] + #[inline] fn subtree_db_key(index: NodeIndex) -> KeyBytes { let keep = match index.depth() { 24 => 3, @@ -228,7 +229,7 @@ impl RocksDbStorage { .ok_or_else(|| StorageError::Unsupported(format!("unknown column family `{name}`"))) } - #[inline(always)] + #[inline] fn subtree_cf(&self, index: NodeIndex) -> &ColumnFamily { let name = cf_for_depth(index.depth()); self.cf_handle(name).expect("CF handle missing") @@ -297,20 +298,17 @@ impl SmtStorage for RocksDbStorage { let maybe_leaf = self.get_leaf(index)?; - let (old_value, new_leaf) = match maybe_leaf { - Some(existing_leaf) => { - let (old_val, updated_leaf) = insert_leaf_entry(existing_leaf, key, value)?; - if old_val.is_none() { - current_entry_count += 1; - } - (old_val, updated_leaf) - }, - None => { - let new_leaf = SmtLeaf::new_single(key, value); - current_leaf_count += 1; + let (old_value, new_leaf) = if let Some(existing_leaf) = maybe_leaf { + let (old_val, updated_leaf) = insert_leaf_entry(existing_leaf, key, value)?; + if old_val.is_none() { current_entry_count += 1; - (None, new_leaf) - }, + } + (old_val, updated_leaf) + } else { + let new_leaf = SmtLeaf::new_single(key, value); + current_leaf_count += 1; + current_entry_count += 1; + (None, new_leaf) }; batch.put_cf(leaves_cf, db_key, new_leaf.to_bytes()); @@ -387,7 +385,7 @@ impl SmtStorage for RocksDbStorage { let cf = self.cf_handle(LEAVES_CF)?; let db_key = Self::index_db_key(index); - let old_leaf = match self.db.get_cf(cf, &db_key).map_rocksdb_err()? { + let old_leaf = match self.db.get_cf(cf, db_key).map_rocksdb_err()? { Some(bytes) => Some(SmtLeaf::read_from_bytes(&bytes)?), None => None, }; @@ -742,7 +740,7 @@ impl Iterator for RocksDbSubtreeIterator<'_> { // ROCKSDB CONFIGURATION // -------------------------------------------------------------------------------------------- -/// Configuration for RocksDB storage used by the Sparse Merkle Tree implementation. +/// Configuration for `RocksDB` storage used by the Sparse Merkle Tree implementation. #[derive(Debug, Clone)] pub struct RocksDbConfig { pub(crate) path: PathBuf, @@ -751,7 +749,7 @@ pub struct RocksDbConfig { } impl RocksDbConfig { - /// Creates a new RocksDbConfig with the given database path and default settings. + /// Creates a new `RocksDbConfig` with the given database path and default settings. pub fn new>(path: P) -> Self { Self { path: path.into(), @@ -760,13 +758,15 @@ impl RocksDbConfig { } } - /// Sets the block cache size for RocksDB. + /// Sets the block cache size for `RocksDB`. + #[must_use] pub fn with_cache_size(mut self, size: usize) -> Self { self.cache_size = size; self } - /// Sets the maximum number of files that RocksDB can have open simultaneously. + /// Sets the maximum number of files that `RocksDB` can have open simultaneously. + #[must_use] pub fn with_max_open_files(mut self, count: i32) -> Self { self.max_open_files = count; self @@ -783,7 +783,7 @@ pub(crate) struct KeyBytes { } impl KeyBytes { - #[inline(always)] + #[inline] pub fn new(value: u64, keep: usize) -> Self { debug_assert!((3..=7).contains(&keep)); let bytes = value.to_be_bytes(); @@ -791,14 +791,14 @@ impl KeyBytes { Self { bytes, len: keep as u8 } } - #[inline(always)] + #[inline] pub fn as_slice(&self) -> &[u8] { &self.bytes[8 - self.len as usize..] } } impl AsRef<[u8]> for KeyBytes { - #[inline(always)] + #[inline] fn as_ref(&self) -> &[u8] { self.as_slice() } @@ -816,7 +816,7 @@ fn index_from_key_bytes(key_bytes: &[u8]) -> Result { Ok(u64::from_be_bytes(arr)) } -#[inline(always)] +#[inline] fn subtree_root_from_key_bytes(key_bytes: &[u8], depth: u8) -> Result { let expected = match depth { 24 => 3, @@ -836,7 +836,7 @@ fn subtree_root_from_key_bytes(key_bytes: &[u8], depth: u8) -> Result &'static str { match depth { 24 => SUBTREE_24_CF, diff --git a/crates/store/benches/account_tree.rs b/crates/store/benches/account_tree.rs index 8c3f1009ec..e69da7714d 100644 --- a/crates/store/benches/account_tree.rs +++ b/crates/store/benches/account_tree.rs @@ -3,7 +3,7 @@ use std::path::Path; use std::sync::atomic::{AtomicUsize, Ordering}; use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main}; -use miden_crypto::merkle::smt::{RocksDbConfig, RocksDbStorage}; +use miden_large_smt_backend_rocksdb::{RocksDbConfig, RocksDbStorage}; use miden_node_store::AccountTreeWithHistory; use miden_protocol::Word; use miden_protocol::account::AccountId; From 196b03ea77e984aae1ed93d4d41485121f81e3d0 Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Tue, 24 Feb 2026 21:17:01 +0100 Subject: [PATCH 7/9] toml, use git dep for CI --- Cargo.toml | 31 +++++++++++---------- crates/large-smt-backend-rocksdb/Cargo.toml | 4 +-- crates/store/Cargo.toml | 28 +++++++++---------- 3 files changed, 32 insertions(+), 31 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5c1179cc30..f3be03a421 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,19 +46,19 @@ debug = true [workspace.dependencies] # Workspace crates. -miden-node-block-producer = { path = "crates/block-producer", version = "0.14" } -miden-node-db = { path = "crates/db", version = "0.14" } -miden-node-grpc-error-macro = { path = "crates/grpc-error-macro", version = "0.14" } -miden-node-ntx-builder = { path = "crates/ntx-builder", version = "0.14" } -miden-node-proto = { path = "crates/proto", version = "0.14" } -miden-node-proto-build = { path = "proto", version = "0.14" } -miden-node-rpc = { path = "crates/rpc", version = "0.14" } -miden-node-store = { path = "crates/store", version = "0.14" } -miden-node-test-macro = { path = "crates/test-macro" } -miden-node-utils = { path = "crates/utils", version = "0.14" } -miden-node-validator = { path = "crates/validator", version = "0.14" } -miden-remote-prover-client = { path = "crates/remote-prover-client", version = "0.14" } -miden-large-smt-backend-rocksdb = { path = "crates/large-smt-backend-rocksdb", version = "0.14"} +miden-large-smt-backend-rocksdb = { path = "crates/large-smt-backend-rocksdb", version = "0.14" } +miden-node-block-producer = { path = "crates/block-producer", version = "0.14" } +miden-node-db = { path = "crates/db", version = "0.14" } +miden-node-grpc-error-macro = { path = "crates/grpc-error-macro", version = "0.14" } +miden-node-ntx-builder = { path = "crates/ntx-builder", version = "0.14" } +miden-node-proto = { path = "crates/proto", version = "0.14" } +miden-node-proto-build = { path = "proto", version = "0.14" } +miden-node-rpc = { path = "crates/rpc", version = "0.14" } +miden-node-store = { path = "crates/store", version = "0.14" } +miden-node-test-macro = { path = "crates/test-macro" } +miden-node-utils = { path = "crates/utils", version = "0.14" } +miden-node-validator = { path = "crates/validator", version = "0.14" } +miden-remote-prover-client = { path = "crates/remote-prover-client", version = "0.14" } # Temporary workaround until # is part of `rocksdb-rust` release @@ -73,7 +73,7 @@ miden-node-rocksdb-cxx-linkage-fix = { path = "crates/rocksdb-cxx-linkage-fix", # miden-tx-batch-prover = { branch = "next", git = "https://github.com/0xMiden/miden-base" } # Other miden dependencies. These should align with those expected by miden-base. -miden-air = { features = ["std", "testing"], version = "0.20" } +miden-air = { features = ["std", "testing"], version = "0.20" } # miden-crypto = { default-features = false, version = "0.19.4" } miden-block-prover = { branch = "next", git = "https://github.com/0xMiden/miden-base.git" } miden-protocol = { branch = "next", default-features = false, git = "https://github.com/0xMiden/miden-base.git" } @@ -154,4 +154,5 @@ should_panic_without_expect = "allow" # We don't care about the specific panic files.extend-exclude = ["*.svg"] # Ignore SVG files. [patch.crates-io] -miden-crypto = { path = "../miden-crypto-bernhard-migrate-rocksdb-from-crypto/miden-crypto/" } +#miden-crypto = { path = "../miden-crypto-bernhard-migrate-rocksdb-from-crypto/miden-crypto/" } +miden-crypto = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/crypto/pull/850" } diff --git a/crates/large-smt-backend-rocksdb/Cargo.toml b/crates/large-smt-backend-rocksdb/Cargo.toml index b35741cd99..c7f009f929 100644 --- a/crates/large-smt-backend-rocksdb/Cargo.toml +++ b/crates/large-smt-backend-rocksdb/Cargo.toml @@ -3,7 +3,7 @@ authors.workspace = true description = "Large-scale Sparse Merkle Tree backed by pluggable storage - RocksDB backend" edition.workspace = true homepage.workspace = true -keywords = ["miden", "node", "smt", "merkle"] +keywords = ["merkle", "miden", "node", "smt"] license.workspace = true name = "miden-large-smt-backend-rocksdb" readme = "README.md" @@ -15,8 +15,8 @@ version.workspace = true workspace = true [dependencies] +miden-crypto = { features = ["concurrent", "std"], workspace = true } miden-protocol = { features = ["std"], workspace = true } -miden-crypto = { features = ["std", "concurrent"], workspace = true } rayon = { version = "1.10" } rocksdb = { default-features = false, features = ["bindgen-runtime", "lz4"], version = "0.24" } winter-utils = { version = "0.13" } diff --git a/crates/store/Cargo.toml b/crates/store/Cargo.toml index 8e5e5142e4..b4dda6c953 100644 --- a/crates/store/Cargo.toml +++ b/crates/store/Cargo.toml @@ -34,21 +34,21 @@ miden-node-utils = { workspace = true } miden-remote-prover-client = { features = ["block-prover"], workspace = true } miden-standards = { workspace = true } # TODO remove `testing` from `miden-protocol`, required for `BlockProof::new_dummy` -miden-protocol = { features = ["std", "testing"], workspace = true } miden-large-smt-backend-rocksdb = { optional = true, workspace = true } -pretty_assertions = { workspace = true } -rand = { workspace = true } -rand_chacha = { workspace = true } -serde = { features = ["derive"], version = "1" } -thiserror = { workspace = true } -tokio = { features = ["fs", "rt-multi-thread"], workspace = true } -tokio-stream = { features = ["net"], workspace = true } -toml = { version = "0.9" } -tonic = { default-features = true, workspace = true } -tonic-reflection = { workspace = true } -tower-http = { features = ["util"], workspace = true } -tracing = { workspace = true } -url = { workspace = true } +miden-protocol = { features = ["std", "testing"], workspace = true } +pretty_assertions = { workspace = true } +rand = { workspace = true } +rand_chacha = { workspace = true } +serde = { features = ["derive"], version = "1" } +thiserror = { workspace = true } +tokio = { features = ["fs", "rt-multi-thread"], workspace = true } +tokio-stream = { features = ["net"], workspace = true } +toml = { version = "0.9" } +tonic = { default-features = true, workspace = true } +tonic-reflection = { workspace = true } +tower-http = { features = ["util"], workspace = true } +tracing = { workspace = true } +url = { workspace = true } [build-dependencies] fs-err = { workspace = true } From 9078f6b44ef306e34a6248e936620d56161aa501 Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Wed, 25 Feb 2026 11:37:41 +0100 Subject: [PATCH 8/9] .git suffix for temp patch --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index f3be03a421..50e8ae0ef6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -155,4 +155,4 @@ files.extend-exclude = ["*.svg"] # Ignore SVG files. [patch.crates-io] #miden-crypto = { path = "../miden-crypto-bernhard-migrate-rocksdb-from-crypto/miden-crypto/" } -miden-crypto = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/crypto/pull/850" } +miden-crypto = { branch = "bernhard-migrate-rocksdb-from-crypto", git = "https://github.com/0xMiden/crypto.git" } From 462217851423c8f0efe3a5baf664f7eb4f6d514a Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Wed, 25 Feb 2026 21:27:01 +0100 Subject: [PATCH 9/9] bump patch --- Cargo.lock | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index ee80b8a3b9..562f440860 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2255,6 +2255,7 @@ dependencies = [ [[package]] name = "miden-crypto" version = "0.19.6" +source = "git+https://github.com/0xMiden/crypto.git?branch=bernhard-migrate-rocksdb-from-crypto#9224fe8ef0f9249d47f7904564d8f5ce6991b337" dependencies = [ "blake3", "cc", @@ -2287,6 +2288,7 @@ dependencies = [ [[package]] name = "miden-crypto-derive" version = "0.19.6" +source = "git+https://github.com/0xMiden/crypto.git?branch=bernhard-migrate-rocksdb-from-crypto#9224fe8ef0f9249d47f7904564d8f5ce6991b337" dependencies = [ "quote", "syn 2.0.114",