diff --git a/Cargo.lock b/Cargo.lock index 3975539b0de1..affb8ed6cabd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -97,9 +97,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy" @@ -128,9 +128,9 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.1.47" +version = "0.1.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18c5c520273946ecf715c0010b4e3503d7eba9893cd9ce6b7fff5654c4a3c470" +checksum = "a0161082e0edd9013d23083465cc04b20e44b7a15646d36ba7b0cdb7cd6fe18f" dependencies = [ "alloy-primitives", "num_enum 0.7.3", @@ -169,14 +169,14 @@ dependencies = [ "alloy-transport", "futures 0.3.31", "futures-util", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "alloy-core" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47ef9e96462d0b9fee9008c53c1f3d017b9498fcdef3ad8d728db98afef47955" +checksum = "c618bd382f0bc2ac26a7e4bfae01c9b015ca8f21b37ca40059ae35a7e62b3dc6" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -187,9 +187,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85132f2698b520fab3f54beed55a44389f7006a7b557a0261e1e69439dcc1572" +checksum = "41056bde53ae10ffbbf11618efbe1e0290859e5eab0fe9ef82ebdb62f12a866f" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -256,9 +256,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded610181f3dad5810f6ff12d1a99994cf9b42d2fcb7709029352398a5da5ae6" +checksum = "c357da577dfb56998d01f574d81ad7a1958d248740a7981b205d69d65a7da404" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -276,7 +276,7 @@ dependencies = [ "alloy-sol-types", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tracing", ] @@ -298,7 +298,7 @@ dependencies = [ "async-trait", "auto_impl", "futures-utils-wasm", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -315,9 +315,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd58d377699e6cfeab52c4a9d28bdc4ef37e2bd235ff2db525071fe37a2e9af5" +checksum = "6259a506ab13e1d658796c31e6e39d2e2ee89243bcc505ddc613b35732e0a430" dependencies = [ "alloy-rlp", "bytes", @@ -326,9 +326,9 @@ dependencies = [ "derive_more 1.0.0", "foldhash", "getrandom", - "hashbrown 0.15.0", + "hashbrown 0.15.2", "hex-literal", - "indexmap 2.6.0", + "indexmap 2.7.0", "itoa", "k256 0.13.4", "keccak-asm", @@ -336,7 +336,7 @@ dependencies = [ "proptest", "rand 0.8.5", "ruint", - "rustc-hash 2.0.0", + "rustc-hash 2.1.0", "serde", "sha3 0.10.8", "tiny-keccak 2.0.2", @@ -373,7 +373,7 @@ dependencies = [ "reqwest 0.12.9", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "url", @@ -394,15 +394,15 @@ dependencies = [ "serde_json", "tokio", "tokio-stream", - "tower 0.5.1", + "tower 0.5.2", "tracing", ] [[package]] name = "alloy-rlp" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0822426598f95e45dd1ea32a738dac057529a709ee645fcc516ffa4cbde08f" +checksum = "f542548a609dca89fcd72b3b9f355928cf844d4363c5eed9c5273a3dd225e097" dependencies = [ "alloy-rlp-derive", "arrayvec 0.7.6", @@ -411,13 +411,13 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b09cae092c27b6f1bde952653a22708691802e57bfef4a2973b80bea21efd3f" +checksum = "5a833d97bf8a5f0f878daf2c8451fff7de7f9de38baa5a45d936ec718d81255a" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -440,7 +440,7 @@ dependencies = [ "serde_json", "tokio", "tokio-stream", - "tower 0.5.1", + "tower 0.5.2", "tracing", "url", ] @@ -513,7 +513,7 @@ dependencies = [ "auto_impl", "elliptic-curve 0.13.8", "k256 0.13.4", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -529,64 +529,64 @@ dependencies = [ "async-trait", "k256 0.13.4", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "alloy-sol-macro" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a1b42ac8f45e2f49f4bcdd72cbfde0bb148f5481d403774ffa546e48b83efc1" +checksum = "d9d64f851d95619233f74b310f12bcf16e0cbc27ee3762b6115c14a84809280a" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06318f1778e57f36333e850aa71bd1bb5e560c10279e236622faae0470c50412" +checksum = "6bf7ed1574b699f48bf17caab4e6e54c6d12bc3c006ab33d58b1e227c1c3559f" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", "const-hex", "heck 0.5.0", - "indexmap 2.6.0", + "indexmap 2.7.0", "proc-macro-error2", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", "syn-solidity", "tiny-keccak 2.0.2", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebb9b0ad61a41345a22c9279975c0cdd231b97947b10d7aad1cf0a7181e4a5" +checksum = "8c02997ccef5f34f9c099277d4145f183b422938ed5322dc57a089fe9b9ad9ee" dependencies = [ "alloy-json-abi", "const-hex", "dunce", "heck 0.5.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "serde_json", - "syn 2.0.85", + "syn 2.0.90", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12c71028bfbfec210e24106a542aad3def7caf1a70e2c05710e92a98481980d3" +checksum = "ce13ff37285b0870d0a0746992a4ae48efaf34b766ae4c2640fa15e5305f8e73" dependencies = [ "serde", "winnow 0.6.20", @@ -594,9 +594,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d7fb042d68ddfe79ccb23359de3007f6d4d53c13f703b64fb0db422132111" +checksum = "1174cafd6c6d810711b4e00383037bdb458efc4fe3dbafafa16567e0320c54d8" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -617,9 +617,9 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", - "tower 0.5.1", + "tower 0.5.2", "tracing", "url", ] @@ -634,7 +634,7 @@ dependencies = [ "alloy-transport", "reqwest 0.12.9", "serde_json", - "tower 0.5.1", + "tower 0.5.2", "tracing", "url", ] @@ -667,8 +667,8 @@ dependencies = [ "alloy-pubsub", "alloy-transport", "futures 0.3.31", - "http 1.1.0", - "rustls 0.23.16", + "http 1.2.0", + "rustls 0.23.20", "serde_json", "tokio", "tokio-tungstenite", @@ -708,9 +708,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.17" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a1e53f0f5d86382dafe1cf314783b2044280f406e7e1506368220ad11b1338" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -723,9 +723,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8365de52b16c035ff4fcafe0092ba9390540e3e352870ac09933bebcaa2c8c56" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" @@ -757,9 +757,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.91" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" [[package]] name = "arbitrary" @@ -800,7 +800,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.0", + "hashbrown 0.15.2", "itertools 0.13.0", "num-bigint 0.4.6", "num-integer", @@ -895,7 +895,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -918,7 +918,7 @@ checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint 0.4.6", "num-traits", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -931,9 +931,9 @@ checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" dependencies = [ "num-bigint 0.4.6", "num-traits", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -948,7 +948,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.0", + "hashbrown 0.15.2", "rayon", ] @@ -993,9 +993,9 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -1137,9 +1137,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb8f1d480b0ea3783ab015936d2a55c87e219676f0c0b7dec61494043f21857" +checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" dependencies = [ "futures-core", "memchr", @@ -1190,9 +1190,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.4" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ "async-lock", "cfg-if", @@ -1263,9 +1263,9 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -1331,9 +1331,9 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -1348,9 +1348,9 @@ version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -1402,9 +1402,9 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -1415,21 +1415,20 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-lc-rs" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd82dba44d209fddb11c190e0a94b78651f95299598e472215667417a03ff1d" +checksum = "f409eb70b561706bf8abba8ca9c112729c481595893fd06a2dd9af8ed8441148" dependencies = [ "aws-lc-sys", - "mirai-annotations", "paste", "zeroize", ] [[package]] name = "aws-lc-sys" -version = "0.22.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7a4168111d7eb622a31b214057b8509c0a7e1794f44c546d742330dc793972" +checksum = "8478a5c29ead3f3be14aff8a202ad965cf7da6856860041bfca271becf8ba48b" dependencies = [ "bindgen 0.69.5", "cc", @@ -1453,7 +1452,7 @@ dependencies = [ "futures-util", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.31", + "hyper 0.14.32", "itoa", "matchit", "memchr", @@ -1470,18 +1469,18 @@ dependencies = [ [[package]] name = "axum" -version = "0.7.7" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", "axum-core 0.4.5", "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.2", "hyper-util", "itoa", "matchit", @@ -1495,9 +1494,9 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tokio", - "tower 0.5.1", + "tower 0.5.2", "tower-layer", "tower-service", "tracing", @@ -1529,13 +1528,13 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "mime", "pin-project-lite", "rustversion", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tower-layer", "tower-service", "tracing", @@ -1644,9 +1643,9 @@ dependencies = [ [[package]] name = "bigdecimal" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f850665a0385e070b64c38d2354e6c104c8479c59868d1e48a0c13ee2c7a1c1" +checksum = "7f31f3af01c5c65a07985c804d3366560e6fa7883d640a122819b14ec327482c" dependencies = [ "autocfg", "libm", @@ -1683,12 +1682,12 @@ dependencies = [ "lazycell", "peeking_take_while", "prettyplease", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -1705,12 +1704,12 @@ dependencies = [ "lazycell", "log", "prettyplease", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.85", + "syn 2.0.90", "which", ] @@ -1897,7 +1896,7 @@ name = "block_reverter" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "serde_json", "tokio", "zksync_block_reverter", @@ -1926,14 +1925,14 @@ dependencies = [ [[package]] name = "blockstore" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7679095248a6dc7555fae81154ed1baef264383c16621ef881a219576c72a9be" +checksum = "0a8962daed8fb337472d9c4215006443acba1e40c6c91c9d4a3f440d1fb30436" dependencies = [ "cid", "dashmap 6.1.0", "multihash", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1981,9 +1980,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" dependencies = [ "borsh-derive", "cfg_aliases", @@ -1991,16 +1990,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" dependencies = [ "once_cell", "proc-macro-crate 3.2.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", - "syn_derive", + "syn 2.0.90", ] [[package]] @@ -2053,7 +2051,7 @@ version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -2072,9 +2070,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" dependencies = [ "serde", ] @@ -2122,9 +2120,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ "serde", ] @@ -2137,7 +2135,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.23", + "semver 1.0.24", "serde", "serde_json", ] @@ -2150,9 +2148,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.1.31" +version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" dependencies = [ "jobserver", "libc", @@ -2245,7 +2243,7 @@ dependencies = [ "serde", "serde_repr", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -2302,9 +2300,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -2521,9 +2519,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.20" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", "clap_derive", @@ -2531,13 +2529,13 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.20" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.2", + "clap_lex 0.7.4", "strsim 0.11.1", "terminal_size", ] @@ -2549,9 +2547,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck 0.5.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -2565,15 +2563,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cmake" -version = "0.1.51" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" +checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" dependencies = [ "cc", ] @@ -2620,14 +2618,14 @@ dependencies = [ [[package]] name = "console" -version = "0.15.8" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" dependencies = [ "encode_unicode", - "lazy_static", "libc", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] @@ -2641,9 +2639,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" dependencies = [ "cfg-if", "cpufeatures", @@ -2660,20 +2658,20 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const_format" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "unicode-xid 0.2.6", ] @@ -2715,6 +2713,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -2732,9 +2740,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -2814,18 +2822,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -2842,18 +2850,18 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" @@ -2908,12 +2916,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -2957,9 +2965,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -3013,7 +3021,7 @@ checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "strsim 0.10.0", "syn 1.0.109", @@ -3027,7 +3035,7 @@ checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "strsim 0.10.0", "syn 1.0.109", @@ -3041,10 +3049,10 @@ checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "strsim 0.11.1", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -3077,7 +3085,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -3180,7 +3188,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -3191,9 +3199,9 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -3203,10 +3211,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case 0.4.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "rustc_version 0.4.1", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -3224,9 +3232,9 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", "unicode-xid 0.2.6", ] @@ -3314,9 +3322,9 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -3441,9 +3449,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" dependencies = [ "enum-ordinalize", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", +] + +[[package]] +name = "eigen-client" +version = "0.1.0" +source = "git+https://github.com/lambdaclass/eigenda-client-rs?branch=client-implementation#01935adca57213575a6c7b8709db95cb6b9a1882" +dependencies = [ + "ark-bn254", + "async-trait", + "backon", + "byteorder", + "bytes", + "ethabi", + "ethereum-types", + "hex", + "num-bigint 0.4.6", + "prost 0.12.6", + "rand 0.8.5", + "reqwest 0.12.9", + "rust-kzg-bn254", + "secp256k1 0.27.0", + "secrecy 0.8.0", + "serde", + "serde_json", + "sha3 0.10.8", + "subxt-signer", + "thiserror 1.0.69", + "tiny-keccak 2.0.2", + "tokio", + "tokio-stream", + "tonic 0.11.0", + "url", ] [[package]] @@ -3515,9 +3555,9 @@ dependencies = [ [[package]] name = "encode_unicode" -version = "0.3.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" @@ -3543,9 +3583,9 @@ version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -3555,9 +3595,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" dependencies = [ "once_cell", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -3598,12 +3638,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3639,7 +3679,7 @@ dependencies = [ "serde", "serde_json", "sha3 0.10.8", - "thiserror", + "thiserror 1.0.69", "uint", ] @@ -3699,9 +3739,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ "event-listener 5.3.1", "pin-project-lite", @@ -3719,9 +3759,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fastrlp" @@ -3734,6 +3774,17 @@ dependencies = [ "bytes", ] +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec 0.7.6", + "auto_impl", + "bytes", +] + [[package]] name = "ff" version = "0.12.1" @@ -3798,9 +3849,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.34" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", @@ -3835,9 +3886,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" [[package]] name = "foreign-types" @@ -3887,7 +3938,7 @@ dependencies = [ "rand 0.8.5", "rayon", "reqwest 0.12.9", - "semver 1.0.23", + "semver 1.0.24", "serde", "serde_json", "sha2 0.10.8", @@ -3895,7 +3946,7 @@ dependencies = [ "svm-rs", "svm-rs-builds", "tempfile", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "walkdir", @@ -3925,11 +3976,11 @@ dependencies = [ "md-5", "path-slash", "rayon", - "semver 1.0.23", + "semver 1.0.24", "serde", "serde_json", "serde_repr", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "walkdir", @@ -3946,7 +3997,7 @@ dependencies = [ "foundry-compilers-artifacts-solc", "foundry-compilers-core", "path-slash", - "semver 1.0.23", + "semver 1.0.24", "serde", ] @@ -3962,10 +4013,10 @@ dependencies = [ "md-5", "path-slash", "rayon", - "semver 1.0.23", + "semver 1.0.24", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tracing", "walkdir", "yansi", @@ -3983,12 +4034,12 @@ dependencies = [ "once_cell", "path-slash", "regex", - "semver 1.0.23", + "semver 1.0.24", "serde", "serde_json", "svm-rs", "tempfile", - "thiserror", + "thiserror 1.0.69", "tokio", "walkdir", ] @@ -4165,9 +4216,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ "fastrand", "futures-core", @@ -4182,9 +4233,9 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -4250,7 +4301,7 @@ name = "genesis_generator" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "futures 0.3.31", "serde", "serde_json", @@ -4274,14 +4325,14 @@ version = "0.1.0" dependencies = [ "alloy", "anyhow", - "axum 0.7.7", + "axum 0.7.9", "futures 0.3.31", "hex", "kzgpad-rs", - "prost 0.13.3", + "prost 0.13.4", "reqwest 0.12.9", "rlp", - "rustls 0.23.16", + "rustls 0.23.20", "serde", "serde_json", "tokio", @@ -4348,7 +4399,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -4406,7 +4457,7 @@ dependencies = [ "reqwest 0.12.9", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -4420,7 +4471,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04f945a208886a13d07636f38fb978da371d0abc3e34bad338124b9f8c135a8f" dependencies = [ "reqwest 0.12.9", - "thiserror", + "thiserror 1.0.69", "tokio", ] @@ -4450,7 +4501,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -4517,7 +4568,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.6.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -4526,17 +4577,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.1.0", - "indexmap 2.6.0", + "http 1.2.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -4589,9 +4640,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "allocator-api2", "equivalent", @@ -4712,11 +4763,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4743,9 +4794,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -4770,7 +4821,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http 1.2.0", ] [[package]] @@ -4781,7 +4832,7 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "pin-project-lite", ] @@ -4813,7 +4864,7 @@ dependencies = [ "crossbeam-utils", "form_urlencoded", "futures-util", - "hyper 0.14.31", + "hyper 0.14.32", "lazy_static", "levenshtein", "log", @@ -4834,9 +4885,9 @@ checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" [[package]] name = "hyper" -version = "0.14.31" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -4858,15 +4909,15 @@ dependencies = [ [[package]] name = "hyper" -version = "1.5.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.6", - "http 1.1.0", + "h2 0.4.7", + "http 1.2.0", "http-body 1.0.1", "httparse", "httpdate", @@ -4885,7 +4936,7 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.31", + "hyper 0.14.32", "log", "rustls 0.21.12", "rustls-native-certs 0.6.3", @@ -4895,20 +4946,20 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.3" +version = "0.27.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +checksum = "f6884a48c6826ec44f524c7456b163cebe9e55a18d7b5e307cb4f100371cc767" dependencies = [ "futures-util", - "http 1.1.0", - "hyper 1.5.0", + "http 1.2.0", + "hyper 1.5.2", "hyper-util", "log", - "rustls 0.23.16", - "rustls-native-certs 0.8.0", + "rustls 0.23.20", + "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tower-service", "webpki-roots", ] @@ -4919,7 +4970,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.31", + "hyper 0.14.32", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -4927,11 +4978,11 @@ dependencies = [ [[package]] name = "hyper-timeout" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.5.0", + "hyper 1.5.2", "hyper-util", "pin-project-lite", "tokio", @@ -4945,7 +4996,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.31", + "hyper 0.14.32", "native-tls", "tokio", "tokio-native-tls", @@ -4959,7 +5010,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.2", "hyper-util", "native-tls", "tokio", @@ -4976,9 +5027,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", - "hyper 1.5.0", + "hyper 1.5.2", "pin-project-lite", "socket2", "tokio", @@ -5009,6 +5060,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -5017,12 +5186,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -5068,13 +5248,13 @@ dependencies = [ [[package]] name = "impl-trait-for-tuples" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 1.0.109", + "syn 2.0.90", ] [[package]] @@ -5095,12 +5275,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.2", "serde", ] @@ -5121,9 +5301,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.41.0" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f72d3e19488cf7d8ea52d2fc0f8754fc933398b337cd3cbdb28aaeb35159ef" +checksum = "7e9ffc4d4892617c50a928c52b2961cb5174b6fc6ebf252b2fac9d21955c48b8" dependencies = [ "console", "lazy_static", @@ -5143,9 +5323,9 @@ dependencies = [ [[package]] name = "interprocess" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f4e4a06d42fab3e85ab1b419ad32b09eab58b901d40c57935ff92db3287a13" +checksum = "894148491d817cb36b6f778017b8ac46b17408d522dd90f539d677ea938362eb" dependencies = [ "doctest-file", "futures-core", @@ -5225,9 +5405,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jni" @@ -5239,7 +5419,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", ] @@ -5260,10 +5440,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -5310,7 +5491,7 @@ dependencies = [ "rustls-native-certs 0.7.3", "rustls-pki-types", "soketto 0.7.1", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-rustls 0.25.0", "tokio-util", @@ -5328,16 +5509,16 @@ dependencies = [ "futures-channel", "futures-util", "gloo-net", - "http 1.1.0", + "http 1.2.0", "jsonrpsee-core 0.23.2", "pin-project", - "rustls 0.23.16", + "rustls 0.23.20", "rustls-pki-types", "rustls-platform-verifier", - "soketto 0.8.0", - "thiserror", + "soketto 0.8.1", + "thiserror 1.0.69", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tokio-util", "tracing", "url", @@ -5355,13 +5536,13 @@ dependencies = [ "beef", "futures-timer", "futures-util", - "hyper 0.14.31", + "hyper 0.14.32", "jsonrpsee-types 0.21.0", "pin-project", "rustc-hash 1.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -5379,7 +5560,7 @@ dependencies = [ "bytes", "futures-timer", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "jsonrpsee-types 0.23.2", @@ -5389,7 +5570,7 @@ dependencies = [ "rustc-hash 1.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -5403,13 +5584,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b7de9f3219d95985eb77fd03194d7c1b56c19bce1abfcc9d07462574b15572" dependencies = [ "async-trait", - "hyper 0.14.31", + "hyper 0.14.32", "hyper-rustls 0.24.2", "jsonrpsee-core 0.21.0", "jsonrpsee-types 0.21.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tower 0.4.13", "tracing", @@ -5425,16 +5606,16 @@ dependencies = [ "async-trait", "base64 0.22.1", "http-body 1.0.1", - "hyper 1.5.0", - "hyper-rustls 0.27.3", + "hyper 1.5.2", + "hyper-rustls 0.27.4", "hyper-util", "jsonrpsee-core 0.23.2", "jsonrpsee-types 0.23.2", - "rustls 0.23.16", + "rustls 0.23.20", "rustls-platform-verifier", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tower 0.4.13", "tracing", @@ -5449,9 +5630,9 @@ checksum = "7895f186d5921065d96e16bd795e5ca89ac8356ec423fafc6e3d7cf8ec11aee4" dependencies = [ "heck 0.5.0", "proc-macro-crate 3.2.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -5462,10 +5643,10 @@ checksum = "654afab2e92e5d88ebd8a39d6074483f3f2bfdf91c5ac57fe285e7127cdd4f51" dependencies = [ "anyhow", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", + "hyper 1.5.2", "hyper-util", "jsonrpsee-core 0.23.2", "jsonrpsee-types 0.23.2", @@ -5473,8 +5654,8 @@ dependencies = [ "route-recognizer", "serde", "serde_json", - "soketto 0.8.0", - "thiserror", + "soketto 0.8.1", + "thiserror 1.0.69", "tokio", "tokio-stream", "tokio-util", @@ -5492,7 +5673,7 @@ dependencies = [ "beef", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -5502,10 +5683,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c465fbe385238e861fdc4d1c85e04ada6c1fd246161d26385c1b311724d2af" dependencies = [ "beef", - "http 1.1.0", + "http 1.2.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -5525,7 +5706,7 @@ version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" dependencies = [ - "http 1.1.0", + "http 1.2.0", "jsonrpsee-client-transport 0.23.2", "jsonrpsee-core 0.23.2", "jsonrpsee-types 0.23.2", @@ -5637,7 +5818,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" dependencies = [ - "regex-automata 0.4.8", + "regex-automata 0.4.9", ] [[package]] @@ -5669,7 +5850,7 @@ checksum = "ee58dbc414bd23885d7da915e0457618b36d1fc950a6169ef2cb29829d1b1a1d" dependencies = [ "bytes", "lazy_static", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -5680,15 +5861,15 @@ checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" [[package]] name = "libc" -version = "0.2.161" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets 0.52.6", @@ -5702,16 +5883,16 @@ checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libp2p-identity" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cca1eb2bc1fd29f099f3daaab7effd01e1a54b7c577d0ed082521034d912e8" +checksum = "257b5621d159b32282eac446bed6670c39c7dc68a200a992d8f056afa0066f6d" dependencies = [ "bs58", "hkdf", "multihash", "quick-protobuf", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "tracing", ] @@ -5823,6 +6004,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "loadnext" version = "0.1.0" @@ -5840,7 +6027,7 @@ dependencies = [ "serde", "serde_json", "static_assertions", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -5891,11 +6078,11 @@ dependencies = [ [[package]] name = "logos" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c6b6e02facda28ca5fb8dbe4b152496ba3b1bd5a4b40bb2b1b2d8ad74e0f39b" +checksum = "7251356ef8cb7aec833ddf598c6cb24d17b689d20b993f9d11a3d764e34e6458" dependencies = [ - "logos-derive 0.14.2", + "logos-derive 0.14.4", ] [[package]] @@ -5906,25 +6093,25 @@ checksum = "dc487311295e0002e452025d6b580b77bb17286de87b57138f3b5db711cded68" dependencies = [ "beef", "fnv", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "regex-syntax 0.6.29", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "logos-codegen" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b32eb6b5f26efacd015b000bfc562186472cd9b34bdba3f6b264e2a052676d10" +checksum = "59f80069600c0d66734f5ff52cc42f2dabd6b29d205f333d61fd7832e9e9963f" dependencies = [ "beef", "fnv", "lazy_static", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "regex-syntax 0.8.5", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -5938,11 +6125,11 @@ dependencies = [ [[package]] name = "logos-derive" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5d0c5463c911ef55624739fc353238b4e310f0144be1f875dc42fec6bfd5ec" +checksum = "24fb722b06a9dc12adb0963ed585f19fc61dc5413e6a9be9422ef92c091e731d" dependencies = [ - "logos-codegen 0.14.2", + "logos-codegen 0.14.4", ] [[package]] @@ -5951,7 +6138,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.0", + "hashbrown 0.15.2", ] [[package]] @@ -6015,7 +6202,7 @@ name = "merkle_tree_consistency_checker" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "tracing", "zksync_config", "zksync_env_config", @@ -6045,19 +6232,19 @@ checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" dependencies = [ "miette-derive 5.10.0", "once_cell", - "thiserror", + "thiserror 1.0.69", "unicode-width", ] [[package]] name = "miette" -version = "7.2.0" +version = "7.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4edc8853320c2a0dab800fbda86253c8938f6ea88510dc92c5f1ed20e794afc1" +checksum = "317f146e2eb7021892722af37cf1b971f0a70c8406f487e24952667616192c64" dependencies = [ "cfg-if", - "miette-derive 7.2.0", - "thiserror", + "miette-derive 7.4.0", + "thiserror 1.0.69", "unicode-width", ] @@ -6067,20 +6254,20 @@ version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "miette-derive" -version = "7.2.0" +version = "7.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c" +checksum = "23c9b935fbe1d6cbd1dac857b54a688145e2d93f48db36010514d0f612d0ad67" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -6122,31 +6309,24 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] -[[package]] -name = "mirai-annotations" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" - [[package]] name = "multer" version = "3.1.0" @@ -6156,7 +6336,7 @@ dependencies = [ "bytes", "encoding_rs", "futures-util", - "http 1.1.0", + "http 1.2.0", "httparse", "memchr", "mime", @@ -6196,9 +6376,9 @@ dependencies = [ [[package]] name = "multihash" -version = "0.19.2" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc41f430805af9d1cf4adae4ed2149c759b877b01d909a1f40256188d09345d2" +checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" dependencies = [ "core2", "unsigned-varint", @@ -6222,7 +6402,7 @@ dependencies = [ "openssl-probe", "openssl-sys", "schannel", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "tempfile", ] @@ -6387,7 +6567,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -6479,9 +6659,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -6491,9 +6671,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro-crate 3.2.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -6521,12 +6701,12 @@ dependencies = [ "futures 0.3.31", "futures-core", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", - "hyper-rustls 0.27.3", - "hyper-timeout 0.5.1", + "hyper 1.5.2", + "hyper-rustls 0.27.4", + "hyper-timeout 0.5.2", "hyper-util", "jsonwebtoken", "once_cell", @@ -6539,7 +6719,7 @@ dependencies = [ "serde_urlencoded", "snafu", "tokio", - "tower 0.5.1", + "tower 0.5.2", "tower-http 0.6.2", "tracing", "url", @@ -6584,9 +6764,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -6618,7 +6798,7 @@ dependencies = [ "js-sys", "once_cell", "pin-project-lite", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -6641,7 +6821,7 @@ checksum = "ad31e9de44ee3538fb9d64fe3376c1362f406162434609e79aea2a41a0af78ab" dependencies = [ "async-trait", "bytes", - "http 1.1.0", + "http 1.2.0", "opentelemetry", "reqwest 0.12.9", ] @@ -6654,14 +6834,14 @@ checksum = "6b925a602ffb916fb7421276b86756027b37ee708f9dce2dbdcc51739f07e727" dependencies = [ "async-trait", "futures-core", - "http 1.1.0", + "http 1.2.0", "opentelemetry", "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", - "prost 0.13.3", + "prost 0.13.4", "reqwest 0.12.9", - "thiserror", + "thiserror 1.0.69", "tokio", "tonic 0.12.3", ] @@ -6674,7 +6854,7 @@ checksum = "30ee9f20bff9c984511a02f082dc8ede839e4a9bf15cc2487c8d6fea5ad850d9" dependencies = [ "opentelemetry", "opentelemetry_sdk", - "prost 0.13.3", + "prost 0.13.4", "tonic 0.12.3", ] @@ -6700,7 +6880,7 @@ dependencies = [ "percent-encoding", "rand 0.8.5", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", ] @@ -6722,9 +6902,9 @@ dependencies = [ [[package]] name = "os_info" -version = "3.8.2" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" +checksum = "e5ca711d8b83edbb00b44d504503cd247c9c0bd8b0fa2694f2a1a3d8165379ce" dependencies = [ "log", "serde", @@ -6776,7 +6956,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ "proc-macro-crate 3.2.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -6901,20 +7081,20 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror", + "thiserror 2.0.8", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" +checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" dependencies = [ "pest", "pest_generator", @@ -6922,22 +7102,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" +checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "pest_meta" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" +checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" dependencies = [ "once_cell", "pest", @@ -6951,7 +7131,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.6.0", + "indexmap 2.7.0", ] [[package]] @@ -6992,9 +7172,9 @@ checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", "phf_shared 0.11.2", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -7036,9 +7216,9 @@ version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -7131,9 +7311,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.3" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", @@ -7204,8 +7384,8 @@ version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ - "proc-macro2 1.0.89", - "syn 2.0.85", + "proc-macro2 1.0.92", + "syn 2.0.90", ] [[package]] @@ -7257,7 +7437,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", "version_check", @@ -7269,7 +7449,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "version_check", ] @@ -7280,7 +7460,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", ] @@ -7291,9 +7471,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ "proc-macro-error-attr2", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -7313,9 +7493,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -7338,9 +7518,9 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -7375,12 +7555,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" dependencies = [ "bytes", - "prost-derive 0.13.3", + "prost-derive 0.13.4", ] [[package]] @@ -7400,7 +7580,7 @@ dependencies = [ "prost 0.12.6", "prost-types", "regex", - "syn 2.0.85", + "syn 2.0.90", "tempfile", ] @@ -7412,22 +7592,22 @@ checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", "itertools 0.12.1", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "prost-derive" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" dependencies = [ "anyhow", "itertools 0.13.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -7452,8 +7632,8 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f5eec97d5d34bdd17ad2db2219aabf46b054c6c41bd5529767c9ce55be5898f" dependencies = [ - "logos 0.14.2", - "miette 7.2.0", + "logos 0.14.4", + "miette 7.4.0", "once_cell", "prost 0.12.6", "prost-types", @@ -7480,7 +7660,7 @@ dependencies = [ "prost-reflect 0.12.0", "prost-types", "protox-parse 0.5.0", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7490,12 +7670,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac532509cee918d40f38c3e12f8ef9230f215f017d54de7dd975015538a42ce7" dependencies = [ "bytes", - "miette 7.2.0", + "miette 7.4.0", "prost 0.12.6", "prost-reflect 0.13.1", "prost-types", "protox-parse 0.6.1", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7507,7 +7687,7 @@ dependencies = [ "logos 0.13.0", "miette 5.10.0", "prost-types", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7516,10 +7696,10 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6c33f43516fe397e2f930779d720ca12cd057f7da4cd6326a0ef78d69dee96" dependencies = [ - "logos 0.14.2", - "miette 7.2.0", + "logos 0.14.4", + "miette 7.4.0", "prost-types", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7537,7 +7717,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -7592,44 +7772,47 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ "bytes", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.0.0", - "rustls 0.23.16", + "rustc-hash 2.1.0", + "rustls 0.23.20", "socket2", - "thiserror", + "thiserror 2.0.8", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", + "getrandom", "rand 0.8.5", "ring", - "rustc-hash 2.0.0", - "rustls 0.23.16", + "rustc-hash 2.1.0", + "rustls 0.23.20", + "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.8", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.7" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" dependencies = [ "cfg_aliases", "libc", @@ -7654,7 +7837,7 @@ version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", ] [[package]] @@ -7786,9 +7969,9 @@ checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" [[package]] name = "redox_syscall" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ "bitflags 2.6.0", ] @@ -7801,7 +7984,7 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7812,7 +7995,7 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] @@ -7827,9 +8010,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -7871,7 +8054,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.31", + "hyper 0.14.32", "hyper-tls 0.5.0", "ipnet", "js-sys", @@ -7910,12 +8093,12 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.6", - "http 1.1.0", + "h2 0.4.7", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", - "hyper-rustls 0.27.3", + "hyper 1.5.2", + "hyper-rustls 0.27.4", "hyper-tls 0.6.0", "hyper-util", "ipnet", @@ -7928,18 +8111,18 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.16", - "rustls-native-certs 0.8.0", + "rustls 0.23.20", + "rustls-native-certs 0.8.1", "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "system-configuration 0.6.1", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tokio-socks", "tokio-util", "tower-service", @@ -7960,10 +8143,10 @@ checksum = "562ceb5a604d3f7c885a792d42c199fd8af239d0a51b2fa6a78aafa092452b04" dependencies = [ "anyhow", "async-trait", - "http 1.1.0", + "http 1.2.0", "reqwest 0.12.9", "serde", - "thiserror", + "thiserror 1.0.69", "tower-service", ] @@ -8061,7 +8244,7 @@ version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -8094,9 +8277,9 @@ checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" [[package]] name = "rsa" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519" dependencies = [ "const-oid", "digest 0.10.7", @@ -8114,16 +8297,18 @@ dependencies = [ [[package]] name = "ruint" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" +checksum = "f5ef8fb1dd8de3870cb8400d51b4c2023854bbafd5431a3ac7e7317243e22d2f" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", "ark-ff 0.4.2", "bytes", - "fastrlp", + "fastrlp 0.3.1", + "fastrlp 0.4.0", "num-bigint 0.4.6", + "num-integer", "num-traits", "parity-scale-codec", "primitive-types", @@ -8198,9 +8383,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" dependencies = [ "rand 0.8.5", ] @@ -8226,20 +8411,20 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.23", + "semver 1.0.24", ] [[package]] name = "rustix" -version = "0.38.38" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa260229e6538e52293eeb577aabd09945a09d6d9cc0fc550ed7529056c2e32a" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -8270,9 +8455,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.16" +version = "0.23.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" dependencies = [ "aws-lc-rs", "log", @@ -8293,7 +8478,7 @@ dependencies = [ "openssl-probe", "rustls-pemfile 1.0.4", "schannel", - "security-framework", + "security-framework 2.11.1", ] [[package]] @@ -8306,20 +8491,19 @@ dependencies = [ "rustls-pemfile 2.2.0", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 2.11.1", ] [[package]] name = "rustls-native-certs" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", - "rustls-pemfile 2.2.0", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 3.1.0", ] [[package]] @@ -8342,9 +8526,12 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +dependencies = [ + "web-time", +] [[package]] name = "rustls-platform-verifier" @@ -8352,16 +8539,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" dependencies = [ - "core-foundation", + "core-foundation 0.9.4", "core-foundation-sys", "jni", "log", "once_cell", - "rustls 0.23.16", + "rustls 0.23.20", "rustls-native-certs 0.7.3", "rustls-platform-verifier-android", "rustls-webpki 0.102.8", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "webpki-roots", "winapi", @@ -8473,7 +8660,7 @@ checksum = "d3475108a1b62c7efd1b5c65974f30109a598b2f45f23c9ae030acb9686966db" dependencies = [ "darling 0.14.4", "proc-macro-crate 1.3.1", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -8501,16 +8688,16 @@ checksum = "995491f110efdc6bea96d6a746140e32bfceb4ea47510750a5467295a4707a25" dependencies = [ "darling 0.14.4", "proc-macro-crate 1.3.1", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] [[package]] name = "scale-info" -version = "2.11.5" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aa7ffc1c0ef49b0452c6e2986abf2b07743320641ffd5fc63d552458e3b779b" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "bitvec", "cfg-if", @@ -8522,14 +8709,14 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.5" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46385cc24172cf615450267463f937c10072516359b3ff1cb24228a4a08bf951" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ "proc-macro-crate 3.2.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -8538,11 +8725,11 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00860983481ac590ac87972062909bef0d6a658013b592ccc0f2feb272feab11" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "scale-info", - "syn 2.0.85", - "thiserror", + "syn 2.0.90", + "thiserror 1.0.69", ] [[package]] @@ -8565,20 +8752,11 @@ dependencies = [ "yap", ] -[[package]] -name = "scc" -version = "2.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8d25269dd3a12467afe2e510f69fb0b46b698e5afb296b59f2145259deaf8e8" -dependencies = [ - "sdd", -] - [[package]] name = "schannel" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] @@ -8618,12 +8796,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "sdd" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95" - [[package]] name = "seahash" version = "4.1.0" @@ -8664,10 +8836,19 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ - "secp256k1-sys", + "secp256k1-sys 0.8.1", "serde", ] +[[package]] +name = "secp256k1" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "secp256k1-sys 0.9.2", +] + [[package]] name = "secp256k1-sys" version = "0.8.1" @@ -8677,6 +8858,15 @@ dependencies = [ "cc", ] +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + [[package]] name = "secrecy" version = "0.8.0" @@ -8702,18 +8892,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", "core-foundation-sys", "libc", "num-bigint 0.4.6", "security-framework-sys", ] +[[package]] +name = "security-framework" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81d3f8c9bfcc3cbb6b0179eb57042d75b1582bdc65c3cb95f3fa999509c03cbc" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.10.0", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + [[package]] name = "security-framework-sys" -version = "2.12.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" dependencies = [ "core-foundation-sys", "libc", @@ -8724,7 +8927,7 @@ name = "selector_generator" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "ethabi", "glob", "hex", @@ -8744,18 +8947,18 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" dependencies = [ "serde", ] [[package]] name = "semver-parser" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" dependencies = [ "pest", ] @@ -8874,7 +9077,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", "url", "uuid", @@ -8888,9 +9091,9 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.214" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" dependencies = [ "serde_derive", ] @@ -8916,20 +9119,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.214" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "itoa", "memchr", @@ -8963,9 +9166,9 @@ version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -9008,7 +9211,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" dependencies = [ "darling 0.13.4", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -9019,38 +9222,13 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "itoa", "ryu", "serde", "unsafe-libyaml", ] -[[package]] -name = "serial_test" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" -dependencies = [ - "futures 0.3.31", - "log", - "once_cell", - "parking_lot", - "scc", - "serial_test_derive", -] - -[[package]] -name = "serial_test_derive" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" -dependencies = [ - "proc-macro2 1.0.89", - "quote 1.0.37", - "syn 2.0.85", -] - [[package]] name = "sha-1" version = "0.9.8" @@ -9222,7 +9400,7 @@ checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ "num-bigint 0.4.6", "num-traits", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -9405,9 +9583,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ "heck 0.5.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -9449,9 +9627,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -9474,14 +9652,14 @@ dependencies = [ [[package]] name = "soketto" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37468c595637c10857701c990f93a40ce0e357cedb0953d1c26c8d8027f9bb53" +checksum = "2e859df029d160cb88608f5d7df7fb4753fd20fdfb4de5644f3d8b8440841721" dependencies = [ "base64 0.22.1", "bytes", "futures 0.3.31", - "http 1.1.0", + "http 1.2.0", "httparse", "log", "rand 0.8.5", @@ -9498,7 +9676,7 @@ dependencies = [ "lalrpop", "lalrpop-util", "phf", - "thiserror", + "thiserror 1.0.69", "unicode-xid 0.2.6", ] @@ -9597,7 +9775,7 @@ dependencies = [ "hashbrown 0.14.5", "hashlink", "hex", - "indexmap 2.6.0", + "indexmap 2.7.0", "ipnetwork", "log", "memchr", @@ -9611,7 +9789,7 @@ dependencies = [ "sha2 0.10.8", "smallvec", "sqlformat", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -9624,11 +9802,11 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "sqlx-core", "sqlx-macros-core", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -9642,7 +9820,7 @@ dependencies = [ "heck 0.5.0", "hex", "once_cell", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "serde", "serde_json", @@ -9651,7 +9829,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.85", + "syn 2.0.90", "tempfile", "tokio", "url", @@ -9697,7 +9875,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.69", "tracing", "whoami", ] @@ -9740,7 +9918,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.69", "tracing", "whoami", ] @@ -9842,7 +10020,7 @@ checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ "heck 0.3.3", "proc-macro-error", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -9863,10 +10041,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ "heck 0.5.0", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "rustversion", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -9920,7 +10098,7 @@ dependencies = [ "subxt-lightclient", "subxt-macro", "subxt-metadata", - "thiserror", + "thiserror 1.0.69", "tokio-util", "tracing", "url", @@ -9937,13 +10115,13 @@ dependencies = [ "hex", "jsonrpsee 0.21.0", "parity-scale-codec", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "scale-info", "scale-typegen", "subxt-metadata", - "syn 2.0.85", - "thiserror", + "syn 2.0.90", + "thiserror 1.0.69", "tokio", ] @@ -9958,7 +10136,7 @@ dependencies = [ "serde", "serde_json", "smoldot-light", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -9976,7 +10154,7 @@ dependencies = [ "quote 1.0.37", "scale-typegen", "subxt-codegen", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -9989,7 +10167,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-core-hashing", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -10005,11 +10183,12 @@ dependencies = [ "pbkdf2", "regex", "schnorrkel", + "secp256k1 0.28.2", "secrecy 0.8.0", "sha2 0.10.8", "sp-core-hashing", "subxt", - "thiserror", + "thiserror 1.0.69", "zeroize", ] @@ -10023,12 +10202,12 @@ dependencies = [ "dirs", "fs4 0.9.1", "reqwest 0.12.9", - "semver 1.0.23", + "semver 1.0.24", "serde", "serde_json", "sha2 0.10.8", "tempfile", - "thiserror", + "thiserror 1.0.69", "url", "zip", ] @@ -10041,7 +10220,7 @@ checksum = "f2fa0f145894cb4d1c14446f08098ee5f21fc37ccbd1a7dd9dd355bbc806de3b" dependencies = [ "build_const", "const-hex", - "semver 1.0.23", + "semver 1.0.24", "serde_json", "svm-rs", ] @@ -10063,44 +10242,32 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.85" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "unicode-ident", ] [[package]] name = "syn-solidity" -version = "0.8.11" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf42e81491fb8871b74df3d222c64ae8cbc1269ea509fa768a3ed3e1b0ac8cb" +checksum = "219389c1ebe89f8333df8bdfb871f6631c552ff399c23cac02480b6088aad8f0" dependencies = [ "paste", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", -] - -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2 1.0.89", - "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -10111,13 +10278,24 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", +] + [[package]] name = "sys-info" version = "0.9.1" @@ -10135,7 +10313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys 0.5.0", ] @@ -10146,7 +10324,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -10204,9 +10382,9 @@ checksum = "42a4d50cdb458045afc8131fd91b64904da29548bcb63c7236e0844936c13078" [[package]] name = "tempfile" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", @@ -10237,9 +10415,9 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f599bd7ca042cfdf8f4512b277c02ba102247820f9d9d4a9f521f496751a6ef" +checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9" dependencies = [ "rustix", "windows-sys 0.59.0", @@ -10260,9 +10438,9 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9b53c7124dd88026d5d98a1eb1fd062a578b7d783017c9298825526c7fb6427" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -10282,9 +10460,9 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -10304,22 +10482,42 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.65" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f5383f3e0071702bf93ab5ee99b52d26936be9dedd9413067cbdcddcb6141a" +dependencies = [ + "thiserror-impl 2.0.8", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] name = "thiserror-impl" -version = "1.0.65" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" +checksum = "f2f357fcec90b3caef6623a099691be676d033b40a058ac95d2a6ade6fa0c943" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -10363,9 +10561,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -10384,9 +10582,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", @@ -10410,6 +10608,16 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinytemplate" version = "1.2.1" @@ -10437,22 +10645,22 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tls-listener" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a296135fdab7b3a1f708c338c50bab570bcd77d44080cde9341df45c0c6d73" +checksum = "0f1d8809f604e448c7bc53a5a0e4c2a0a20ba44cb1fb407314c8eeccb92127f9" dependencies = [ "futures-util", "pin-project-lite", - "thiserror", + "thiserror 1.0.69", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", ] [[package]] name = "tokio" -version = "1.41.0" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", @@ -10482,9 +10690,9 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -10520,12 +10728,11 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.16", - "rustls-pki-types", + "rustls 0.23.20", "tokio", ] @@ -10537,15 +10744,15 @@ checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" dependencies = [ "either", "futures-util", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -10561,19 +10768,19 @@ checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" dependencies = [ "futures-util", "log", - "rustls 0.23.16", + "rustls 0.23.20", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tungstenite", "webpki-roots", ] [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -10610,7 +10817,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "toml_datetime", "winnow 0.5.40", ] @@ -10621,7 +10828,7 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", @@ -10642,7 +10849,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.31", + "hyper 0.14.32", "hyper-timeout 0.4.1", "percent-encoding", "pin-project", @@ -10667,24 +10874,24 @@ checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ "async-stream", "async-trait", - "axum 0.7.7", + "axum 0.7.9", "base64 0.22.1", "bytes", - "h2 0.4.6", - "http 1.1.0", + "h2 0.4.7", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.0", - "hyper-timeout 0.5.1", + "hyper 1.5.2", + "hyper-timeout 0.5.2", "hyper-util", "percent-encoding", "pin-project", - "prost 0.13.3", - "rustls-native-certs 0.8.0", + "prost 0.13.4", + "rustls-native-certs 0.8.1", "rustls-pemfile 2.2.0", "socket2", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tokio-stream", "tower 0.4.13", "tower-layer", @@ -10714,14 +10921,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 0.1.2", + "sync_wrapper 1.0.2", "tokio", "tokio-util", "tower-layer", @@ -10739,7 +10946,7 @@ dependencies = [ "bitflags 2.6.0", "bytes", "futures-core", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "pin-project-lite", @@ -10758,11 +10965,11 @@ dependencies = [ "bitflags 2.6.0", "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "iri-string", "pin-project-lite", - "tower 0.5.1", + "tower 0.5.2", "tower-layer", "tower-service", "tracing", @@ -10782,9 +10989,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -10794,20 +11001,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -10844,9 +11051,9 @@ dependencies = [ [[package]] name = "tracing-serde" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" dependencies = [ "serde", "tracing-core", @@ -10854,9 +11061,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -10910,14 +11117,14 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http 1.1.0", + "http 1.2.0", "httparse", "log", "rand 0.8.5", - "rustls 0.23.16", + "rustls 0.23.20", "rustls-pki-types", "sha1", - "thiserror", + "thiserror 1.0.69", "utf-8", ] @@ -10985,15 +11192,15 @@ checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" [[package]] name = "unicode-bidi" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-normalization" @@ -11080,16 +11287,16 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.10.1" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" dependencies = [ "base64 0.22.1", "flate2", "log", "native-tls", "once_cell", - "rustls 0.23.16", + "rustls 0.23.20", "rustls-pki-types", "url", "webpki-roots", @@ -11097,9 +11304,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -11119,6 +11326,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -11197,7 +11416,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "671d3b894d5d0849f0a597f56bf071f42d4f2a1cbcf2f78ca21f870ab7c0cc2b" dependencies = [ - "hyper 0.14.31", + "hyper 0.14.32", "once_cell", "tokio", "tracing", @@ -11210,9 +11429,9 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a511871dc5de990a3b2a0e715facfbc5da848c0c0395597a1415029fb7c250a" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -11282,9 +11501,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -11293,36 +11512,36 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.45" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote 1.0.37", "wasm-bindgen-macro-support", @@ -11330,22 +11549,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "wasm-streams" @@ -11402,9 +11621,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -11422,9 +11641,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.6" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" dependencies = [ "rustls-pki-types", ] @@ -11703,6 +11922,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "ws_stream_wasm" version = "0.7.4" @@ -11716,7 +11947,7 @@ dependencies = [ "pharos", "rustc_version 0.4.1", "send_wrapper 0.6.0", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -11750,9 +11981,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b06cc62d4cec617d3c259537be0fcaa8a5bcf72ddf2983823d9528605f36ed3" dependencies = [ "anes", - "clap 4.5.20", + "clap 4.5.23", "num_cpus", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -11767,6 +11998,30 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -11783,9 +12038,30 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", + "synstructure", ] [[package]] @@ -11803,25 +12079,47 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] name = "zip" -version = "2.2.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" +checksum = "ae9c1ea7b3a5e1f4b922ff856a129881167511563dc219869afe3787fc0c1a45" dependencies = [ "arbitrary", "crc32fast", "crossbeam-utils", "displaydoc", "flate2", - "indexmap 2.6.0", + "indexmap 2.7.0", "memchr", - "thiserror", + "thiserror 2.0.8", "zopfli", ] @@ -12107,7 +12405,7 @@ dependencies = [ "serde_with", "sha2 0.10.8", "strum", - "thiserror", + "thiserror 1.0.69", "tiny-keccak 2.0.2", "url", ] @@ -12165,7 +12463,7 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12217,7 +12515,7 @@ dependencies = [ "pin-project", "rand 0.8.5", "sha3 0.10.8", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -12252,7 +12550,7 @@ dependencies = [ "async-trait", "once_cell", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "tracing", "vise", "zksync_concurrency", @@ -12280,7 +12578,7 @@ dependencies = [ "num-traits", "rand 0.8.5", "sha3 0.10.8", - "thiserror", + "thiserror 1.0.69", "tracing", "zeroize", ] @@ -12294,7 +12592,7 @@ dependencies = [ "anyhow", "async-trait", "rand 0.8.5", - "semver 1.0.23", + "semver 1.0.24", "tracing", "vise", "zksync_concurrency", @@ -12320,19 +12618,19 @@ dependencies = [ "bytesize", "http-body-util", "human-repr", - "hyper 1.5.0", + "hyper 1.5.2", "hyper-util", "im", "once_cell", "pin-project", "prost 0.12.6", "rand 0.8.5", - "semver 1.0.23", + "semver 1.0.24", "snow", - "thiserror", + "thiserror 1.0.69", "tls-listener", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tracing", "vise", "zksync_concurrency", @@ -12357,7 +12655,7 @@ dependencies = [ "prost 0.12.6", "rand 0.8.5", "serde", - "thiserror", + "thiserror 1.0.69", "tracing", "zksync_concurrency", "zksync_consensus_crypto", @@ -12376,7 +12674,7 @@ dependencies = [ "async-trait", "prost 0.12.6", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "tracing", "vise", "zksync_concurrency", @@ -12394,7 +12692,7 @@ checksum = "3222410c67617a86edb192e0c4bb48afc254a17052200a0a839c90e8b0378842" dependencies = [ "anyhow", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "zksync_concurrency", ] @@ -12408,7 +12706,7 @@ dependencies = [ "once_cell", "serde", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "zksync_config", @@ -12428,7 +12726,7 @@ name = "zksync_contract_verification_server" version = "0.1.0" dependencies = [ "anyhow", - "axum 0.7.7", + "axum 0.7.9", "http-body-util", "serde_json", "test-casing", @@ -12447,7 +12745,7 @@ name = "zksync_contract_verifier" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "tokio", "tracing", "zksync_config", @@ -12472,13 +12770,13 @@ dependencies = [ "octocrab", "regex", "reqwest 0.12.9", - "rustls 0.23.16", - "semver 1.0.23", + "rustls 0.23.20", + "semver 1.0.24", "serde", "serde_json", "tempfile", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12527,11 +12825,11 @@ dependencies = [ "blake2 0.10.6", "hex", "rand 0.8.5", - "secp256k1", + "secp256k1 0.27.0", "serde", "serde_json", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "zksync_basic_types", ] @@ -12542,7 +12840,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5939e2df4288c263c706ff18ac718e984149223ad4289d6d957d767dcfc04c81" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "syn 1.0.109", ] @@ -12561,7 +12859,6 @@ name = "zksync_da_clients" version = "0.1.0" dependencies = [ "anyhow", - "ark-bn254", "async-trait", "backon", "base58", @@ -12571,43 +12868,34 @@ dependencies = [ "blake2b_simd", "bytes", "celestia-types", - "ethabi", + "eigen-client", "flate2", "futures 0.3.31", "hex", - "http 1.1.0", + "http 1.2.0", "jsonrpsee 0.23.2", - "num-bigint 0.4.6", "parity-scale-codec", "pbjson-types", "prost 0.12.6", - "rand 0.8.5", "reqwest 0.12.9", "ripemd", - "rust-kzg-bn254", "scale-encode", - "secp256k1", + "secp256k1 0.27.0", "serde", "serde_json", - "serial_test", "sha2 0.10.8", - "sha3 0.10.8", "subxt-metadata", "subxt-signer", - "tiny-keccak 2.0.2", "tokio", - "tokio-stream", "tonic 0.11.0", "tracing", - "url", "zksync_basic_types", "zksync_config", "zksync_da_client", + "zksync_dal", "zksync_env_config", - "zksync_eth_client", "zksync_object_store", "zksync_types", - "zksync_web3_decl", ] [[package]] @@ -12643,7 +12931,7 @@ dependencies = [ "serde_json", "sqlx", "strum", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12674,7 +12962,7 @@ dependencies = [ "serde_json", "sqlx", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12704,7 +12992,7 @@ dependencies = [ "pretty_assertions", "rlp", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12727,7 +13015,7 @@ dependencies = [ "serde", "test-casing", "test-log", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12751,7 +13039,7 @@ version = "0.1.0" dependencies = [ "async-trait", "rlp", - "thiserror", + "thiserror 1.0.69", "zksync_basic_types", "zksync_crypto_primitives", ] @@ -12767,7 +13055,7 @@ dependencies = [ "hex", "itertools 0.10.5", "test-log", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12789,7 +13077,7 @@ dependencies = [ "anyhow", "assert_matches", "async-trait", - "clap 4.5.20", + "clap 4.5.23", "envy", "futures 0.3.31", "rustc_version 0.4.1", @@ -12863,9 +13151,9 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "axum 0.7.7", + "axum 0.7.9", "bincode", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12897,7 +13185,7 @@ dependencies = [ "num-bigint 0.4.6", "num-integer", "num-traits", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", "serde", "syn 1.0.109", @@ -12912,7 +13200,7 @@ dependencies = [ "futures 0.3.31", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -12995,7 +13283,7 @@ version = "0.1.0" dependencies = [ "anyhow", "assert_matches", - "clap 4.5.20", + "clap 4.5.23", "insta", "leb128", "once_cell", @@ -13006,7 +13294,7 @@ dependencies = [ "serde_with", "tempfile", "test-casing", - "thiserror", + "thiserror 1.0.69", "thread_local", "tracing", "tracing-subscriber", @@ -13025,7 +13313,7 @@ dependencies = [ "anyhow", "assert_matches", "async-trait", - "axum 0.7.7", + "axum 0.7.9", "futures 0.3.31", "itertools 0.10.5", "once_cell", @@ -13034,7 +13322,7 @@ dependencies = [ "serde_json", "tempfile", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -13080,7 +13368,7 @@ dependencies = [ "pretty_assertions", "rand 0.8.5", "test-casing", - "thiserror", + "thiserror 1.0.69", "tracing", "vise", "zk_evm 0.131.0-rc.2", @@ -13105,12 +13393,12 @@ dependencies = [ "anyhow", "assert_matches", "async-trait", - "axum 0.7.7", + "axum 0.7.9", "chrono", "futures 0.3.31", "governor", "hex", - "http 1.1.0", + "http 1.2.0", "itertools 0.10.5", "lru", "once_cell", @@ -13120,7 +13408,7 @@ dependencies = [ "serde_json", "strum", "test-casing", - "thiserror", + "thiserror 1.0.69", "thread_local", "tokio", "tower 0.4.13", @@ -13160,10 +13448,10 @@ dependencies = [ "async-trait", "rand 0.8.5", "secrecy 0.8.0", - "semver 1.0.23", + "semver 1.0.24", "tempfile", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -13245,9 +13533,9 @@ dependencies = [ "ctrlc", "futures 0.3.31", "pin-project-lite", - "semver 1.0.23", + "semver 1.0.24", "serde", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "trybuild", @@ -13301,9 +13589,9 @@ dependencies = [ name = "zksync_node_framework_derive" version = "0.1.0" dependencies = [ - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -13312,7 +13600,7 @@ version = "0.1.0" dependencies = [ "anyhow", "itertools 0.10.5", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -13362,7 +13650,7 @@ dependencies = [ "serde", "serde_json", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -13406,7 +13694,7 @@ dependencies = [ "flate2", "google-cloud-auth", "google-cloud-storage", - "http 1.1.0", + "http 1.2.0", "prost 0.12.6", "rand 0.8.5", "reqwest 0.12.9", @@ -13438,9 +13726,9 @@ name = "zksync_proof_data_handler" version = "0.1.0" dependencies = [ "anyhow", - "axum 0.7.7", + "axum 0.7.9", "chrono", - "hyper 1.5.0", + "hyper 1.5.2", "serde_json", "tokio", "tower 0.4.13", @@ -13487,12 +13775,12 @@ dependencies = [ "anyhow", "heck 0.5.0", "prettyplease", - "proc-macro2 1.0.89", + "proc-macro2 1.0.92", "prost-build", "prost-reflect 0.12.0", "protox 0.5.1", "quote 1.0.37", - "syn 2.0.85", + "syn 2.0.90", ] [[package]] @@ -13552,7 +13840,7 @@ dependencies = [ "async-trait", "serde_json", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "zksync_dal", @@ -13569,7 +13857,7 @@ name = "zksync_server" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.23", "futures 0.3.31", "serde_json", "tikv-jemallocator", @@ -13616,7 +13904,7 @@ dependencies = [ "futures 0.3.31", "serde", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -13685,7 +13973,7 @@ dependencies = [ "serde", "tempfile", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", @@ -13739,9 +14027,9 @@ dependencies = [ "async-trait", "envy", "reqwest 0.12.9", - "secp256k1", + "secp256k1 0.27.0", "serde", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "url", @@ -13812,7 +14100,7 @@ dependencies = [ "serde_json", "serde_with", "strum", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "zksync_basic_types", @@ -13853,7 +14141,7 @@ dependencies = [ "sentry", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tracing", @@ -13913,7 +14201,7 @@ dependencies = [ "pretty_assertions", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tracing", "zksync_contracts", "zksync_system_constants", @@ -13966,11 +14254,11 @@ dependencies = [ "pin-project-lite", "rand 0.8.5", "rlp", - "rustls 0.23.16", + "rustls 0.23.20", "serde", "serde_json", "test-casing", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "vise", diff --git a/Cargo.toml b/Cargo.toml index 6093d88442d4..1939b0acbe35 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -222,11 +222,7 @@ tonic = { version = "0.11.0", default-features = false } pbjson-types = "0.6.0" # Eigen -tokio-stream = "0.1.16" -rust-kzg-bn254 = "0.2.1" -ark-bn254 = "0.5.0" -num-bigint = "0.4.6" -serial_test = "3.1.1" +eigenda-client-rs = {git = "https://github.com/lambdaclass/eigenda-client-rs", branch = "client-implementation", package = "eigen-client"} # Here and below: # We *always* pin the latest version of protocol to disallow accidental changes in the execution logic. diff --git a/core/node/da_clients/Cargo.toml b/core/node/da_clients/Cargo.toml index efc588faa081..8776db81546c 100644 --- a/core/node/da_clients/Cargo.toml +++ b/core/node/da_clients/Cargo.toml @@ -54,17 +54,5 @@ tonic = { workspace = true, features = ["tls-roots", "prost", "codegen"] } pbjson-types.workspace = true # Eigen dependencies -tokio-stream.workspace = true -rand.workspace = true -sha3.workspace = true -tiny-keccak.workspace = true -ethabi.workspace = true -rust-kzg-bn254.workspace = true -ark-bn254.workspace = true -num-bigint.workspace = true -zksync_web3_decl.workspace = true -zksync_eth_client.workspace = true -url.workspace = true - -[dev-dependencies] -serial_test.workspace = true +eigenda-client-rs.workspace = true +zksync_dal.workspace = true diff --git a/core/node/da_clients/src/eigen/blob_info.rs b/core/node/da_clients/src/eigen/blob_info.rs deleted file mode 100644 index 63fece177c59..000000000000 --- a/core/node/da_clients/src/eigen/blob_info.rs +++ /dev/null @@ -1,168 +0,0 @@ -use std::fmt; - -use super::{ - common::G1Commitment as DisperserG1Commitment, - disperser::{ - BatchHeader as DisperserBatchHeader, BatchMetadata as DisperserBatchMetadata, - BlobHeader as DisperserBlobHeader, BlobInfo as DisperserBlobInfo, - BlobQuorumParam as DisperserBlobQuorumParam, - BlobVerificationProof as DisperserBlobVerificationProof, - }, -}; - -#[derive(Debug)] -pub enum ConversionError { - NotPresent, -} - -impl fmt::Display for ConversionError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - ConversionError::NotPresent => write!(f, "Failed to convert BlobInfo"), - } - } -} - -#[derive(Debug, PartialEq, Clone)] -pub struct G1Commitment { - pub x: Vec, - pub y: Vec, -} - -impl From for G1Commitment { - fn from(value: DisperserG1Commitment) -> Self { - Self { - x: value.x, - y: value.y, - } - } -} - -#[derive(Debug, PartialEq, Clone)] -pub struct BlobQuorumParam { - pub quorum_number: u32, - pub adversary_threshold_percentage: u32, - pub confirmation_threshold_percentage: u32, - pub chunk_length: u32, -} - -impl From for BlobQuorumParam { - fn from(value: DisperserBlobQuorumParam) -> Self { - Self { - quorum_number: value.quorum_number, - adversary_threshold_percentage: value.adversary_threshold_percentage, - confirmation_threshold_percentage: value.confirmation_threshold_percentage, - chunk_length: value.chunk_length, - } - } -} - -#[derive(Debug, PartialEq, Clone)] -pub struct BlobHeader { - pub commitment: G1Commitment, - pub data_length: u32, - pub blob_quorum_params: Vec, -} - -impl TryFrom for BlobHeader { - type Error = ConversionError; - fn try_from(value: DisperserBlobHeader) -> Result { - let blob_quorum_params: Vec = value - .blob_quorum_params - .iter() - .map(|param| BlobQuorumParam::from(param.clone())) - .collect(); - Ok(Self { - commitment: G1Commitment::from(value.commitment.ok_or(ConversionError::NotPresent)?), - data_length: value.data_length, - blob_quorum_params, - }) - } -} - -#[derive(Debug, PartialEq, Clone)] -pub struct BatchHeader { - pub batch_root: Vec, - pub quorum_numbers: Vec, - pub quorum_signed_percentages: Vec, - pub reference_block_number: u32, -} - -impl From for BatchHeader { - fn from(value: DisperserBatchHeader) -> Self { - Self { - batch_root: value.batch_root, - quorum_numbers: value.quorum_numbers, - quorum_signed_percentages: value.quorum_signed_percentages, - reference_block_number: value.reference_block_number, - } - } -} - -#[derive(Debug, PartialEq, Clone)] -pub struct BatchMetadata { - pub batch_header: BatchHeader, - pub signatory_record_hash: Vec, - pub fee: Vec, - pub confirmation_block_number: u32, - pub batch_header_hash: Vec, -} - -impl TryFrom for BatchMetadata { - type Error = ConversionError; - fn try_from(value: DisperserBatchMetadata) -> Result { - Ok(Self { - batch_header: BatchHeader::from(value.batch_header.ok_or(ConversionError::NotPresent)?), - signatory_record_hash: value.signatory_record_hash, - fee: value.fee, - confirmation_block_number: value.confirmation_block_number, - batch_header_hash: value.batch_header_hash, - }) - } -} - -#[derive(Debug, PartialEq, Clone)] -pub struct BlobVerificationProof { - pub batch_id: u32, - pub blob_index: u32, - pub batch_medatada: BatchMetadata, - pub inclusion_proof: Vec, - pub quorum_indexes: Vec, -} - -impl TryFrom for BlobVerificationProof { - type Error = ConversionError; - fn try_from(value: DisperserBlobVerificationProof) -> Result { - Ok(Self { - batch_id: value.batch_id, - blob_index: value.blob_index, - batch_medatada: BatchMetadata::try_from( - value.batch_metadata.ok_or(ConversionError::NotPresent)?, - )?, - inclusion_proof: value.inclusion_proof, - quorum_indexes: value.quorum_indexes, - }) - } -} - -#[derive(Debug, PartialEq, Clone)] -pub struct BlobInfo { - pub blob_header: BlobHeader, - pub blob_verification_proof: BlobVerificationProof, -} - -impl TryFrom for BlobInfo { - type Error = ConversionError; - fn try_from(value: DisperserBlobInfo) -> Result { - Ok(Self { - blob_header: BlobHeader::try_from( - value.blob_header.ok_or(ConversionError::NotPresent)?, - )?, - blob_verification_proof: BlobVerificationProof::try_from( - value - .blob_verification_proof - .ok_or(ConversionError::NotPresent)?, - )?, - }) - } -} diff --git a/core/node/da_clients/src/eigen/client.rs b/core/node/da_clients/src/eigen/client.rs index 5baee9475e92..0e6c01c9355b 100644 --- a/core/node/da_clients/src/eigen/client.rs +++ b/core/node/da_clients/src/eigen/client.rs @@ -1,48 +1,77 @@ -use std::{str::FromStr, sync::Arc}; +use std::{error::Error, str::FromStr}; -use async_trait::async_trait; -use secp256k1::SecretKey; +use eigenda_client_rs::{client::GetBlobData, EigenClient}; use subxt_signer::ExposeSecret; use zksync_config::{configs::da_client::eigen::EigenSecrets, EigenConfig}; use zksync_da_client::{ types::{DAError, DispatchResponse, InclusionData}, DataAvailabilityClient, }; +use zksync_dal::{ConnectionPool, Core, CoreDal}; -use super::sdk::RawEigenClient; use crate::utils::to_retriable_da_error; -#[async_trait] -pub trait GetBlobData: std::fmt::Debug + Send + Sync { - async fn get_blob_data(&self, input: &str) -> anyhow::Result>>; - - fn clone_boxed(&self) -> Box; -} - -/// EigenClient is a client for the Eigen DA service. +// We can't implement DataAvailabilityClient for an outside struct, so it is needed to defined this intermediate struct #[derive(Debug, Clone)] -pub struct EigenClient { - pub(crate) client: Arc, +pub struct EigenDAClient { + client: EigenClient, } - -impl EigenClient { +impl EigenDAClient { pub async fn new( config: EigenConfig, secrets: EigenSecrets, - get_blob_data: Box, + pool: ConnectionPool, ) -> anyhow::Result { - let private_key = SecretKey::from_str(secrets.private_key.0.expose_secret().as_str()) - .map_err(|e| anyhow::anyhow!("Failed to parse private key: {}", e))?; + let eigen_config = eigenda_client_rs::config::EigenConfig { + disperser_rpc: config.disperser_rpc, + settlement_layer_confirmation_depth: config.settlement_layer_confirmation_depth, + eigenda_eth_rpc: config.eigenda_eth_rpc.ok_or(anyhow::anyhow!( + "eigenda_eth_rpc is required for EigenClient" + ))?, + eigenda_svc_manager_address: config.eigenda_svc_manager_address, + wait_for_finalization: config.wait_for_finalization, + authenticated: config.authenticated, + g1_url: config.g1_url, + g2_url: config.g2_url, + }; + let private_key = + eigenda_client_rs::config::PrivateKey::from_str(secrets.private_key.0.expose_secret()) + .map_err(|_| anyhow::anyhow!("Invalid private key"))?; + let eigen_secrets = eigenda_client_rs::config::EigenSecrets { private_key }; + let get_blob_data = GetBlobFromDB { pool }; + let client = EigenClient::new(eigen_config, eigen_secrets, Box::new(get_blob_data)) + .await + .map_err(|e| anyhow::anyhow!("Eigen client Error: {:?}", e))?; + Ok(Self { client }) + } +} - let client = RawEigenClient::new(private_key, config, get_blob_data).await?; - Ok(Self { - client: Arc::new(client), - }) +#[derive(Debug, Clone)] +pub struct GetBlobFromDB { + pool: ConnectionPool, +} + +#[async_trait::async_trait] +impl GetBlobData for GetBlobFromDB { + async fn get_blob_data( + &self, + input: &str, + ) -> Result>, Box> { + let mut conn = self.pool.connection_tagged("eigen_client").await?; + let batch = conn + .data_availability_dal() + .get_blob_data_by_blob_id(input) + .await?; + Ok(batch.map(|b| b.pubdata)) + } + + fn clone_boxed(&self) -> Box { + Box::new(self.clone()) } } -#[async_trait] -impl DataAvailabilityClient for EigenClient { +#[async_trait::async_trait] +impl DataAvailabilityClient for EigenDAClient { async fn dispatch_blob( &self, _: u32, // batch number @@ -77,6 +106,6 @@ impl DataAvailabilityClient for EigenClient { } fn blob_size_limit(&self) -> Option { - Some(RawEigenClient::blob_size_limit()) + self.client.blob_size_limit() } } diff --git a/core/node/da_clients/src/eigen/client_tests.rs b/core/node/da_clients/src/eigen/client_tests.rs deleted file mode 100644 index 4fbbd5c36761..000000000000 --- a/core/node/da_clients/src/eigen/client_tests.rs +++ /dev/null @@ -1,270 +0,0 @@ -/// EigenDA Client tests are ignored by default, because they require a remote dependency, -/// which may not always be available, causing tests to be flaky. -/// To run these tests, use the following command: -/// `cargo test -p zksync_da_clients -- --ignored` -#[cfg(test)] -mod tests { - use std::{str::FromStr, time::Duration}; - - use backon::{ConstantBuilder, Retryable}; - use serial_test::serial; - use zksync_config::{configs::da_client::eigen::EigenSecrets, EigenConfig}; - use zksync_da_client::{ - types::{DAError, DispatchResponse}, - DataAvailabilityClient, - }; - use zksync_types::secrets::PrivateKey; - - use crate::eigen::{blob_info::BlobInfo, EigenClient, GetBlobData}; - - impl EigenClient { - pub async fn get_blob_data( - &self, - blob_id: BlobInfo, - ) -> anyhow::Result>, DAError> { - self.client.get_blob_data(blob_id).await - } - - pub async fn get_commitment(&self, blob_id: &str) -> anyhow::Result> { - self.client.get_commitment(blob_id).await - } - } - const STATUS_QUERY_TIMEOUT: u64 = 1800000; // 30 minutes - const STATUS_QUERY_INTERVAL: u64 = 5; // 5 ms - - async fn get_blob_info( - client: &EigenClient, - result: &DispatchResponse, - ) -> anyhow::Result { - let blob_info = (|| async { - let blob_info = client.get_commitment(&result.blob_id).await?; - if blob_info.is_none() { - return Err(anyhow::anyhow!("Blob not found")); - } - Ok(blob_info.unwrap()) - }) - .retry( - &ConstantBuilder::default() - .with_delay(Duration::from_millis(STATUS_QUERY_INTERVAL)) - .with_max_times((STATUS_QUERY_TIMEOUT / STATUS_QUERY_INTERVAL) as usize), - ) - .when(|e| e.to_string().contains("Blob not found")) - .await?; - - Ok(blob_info) - } - - #[derive(Debug, Clone)] - struct MockGetBlobData; - - #[async_trait::async_trait] - impl GetBlobData for MockGetBlobData { - async fn get_blob_data(&self, _input: &'_ str) -> anyhow::Result>> { - Ok(None) - } - - fn clone_boxed(&self) -> Box { - Box::new(self.clone()) - } - } - - #[ignore = "depends on external RPC"] - #[tokio::test] - #[serial] - async fn test_non_auth_dispersal() { - let config = EigenConfig { - disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), - settlement_layer_confirmation_depth: 0, - eigenda_eth_rpc: Some("https://ethereum-holesky-rpc.publicnode.com".to_string()), - eigenda_svc_manager_address: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), - wait_for_finalization: false, - authenticated: false, - g1_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), - g2_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), - chain_id: 17000, - }; - let secrets = EigenSecrets { - private_key: PrivateKey::from_str( - "d08aa7ae1bb5ddd46c3c2d8cdb5894ab9f54dec467233686ca42629e826ac4c6", - ) - .unwrap(), - }; - let client = EigenClient::new(config.clone(), secrets, Box::new(MockGetBlobData)) - .await - .unwrap(); - let data = vec![1; 20]; - let result = client.dispatch_blob(0, data.clone()).await.unwrap(); - - let blob_info = get_blob_info(&client, &result).await.unwrap(); - let expected_inclusion_data = blob_info.clone().blob_verification_proof.inclusion_proof; - let actual_inclusion_data = client - .get_inclusion_data(&result.blob_id) - .await - .unwrap() - .unwrap() - .data; - assert_eq!(expected_inclusion_data, actual_inclusion_data); - let retrieved_data = client.get_blob_data(blob_info).await.unwrap(); - assert_eq!(retrieved_data.unwrap(), data); - } - - #[ignore = "depends on external RPC"] - #[tokio::test] - #[serial] - async fn test_auth_dispersal() { - let config = EigenConfig { - disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), - settlement_layer_confirmation_depth: 0, - eigenda_eth_rpc: Some("https://ethereum-holesky-rpc.publicnode.com".to_string()), - eigenda_svc_manager_address: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), - wait_for_finalization: false, - authenticated: true, - g1_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), - g2_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), - chain_id: 17000, - }; - let secrets = EigenSecrets { - private_key: PrivateKey::from_str( - "d08aa7ae1bb5ddd46c3c2d8cdb5894ab9f54dec467233686ca42629e826ac4c6", - ) - .unwrap(), - }; - let client = EigenClient::new(config.clone(), secrets, Box::new(MockGetBlobData)) - .await - .unwrap(); - let data = vec![1; 20]; - let result = client.dispatch_blob(0, data.clone()).await.unwrap(); - let blob_info = get_blob_info(&client, &result).await.unwrap(); - - let expected_inclusion_data = blob_info.clone().blob_verification_proof.inclusion_proof; - let actual_inclusion_data = client - .get_inclusion_data(&result.blob_id) - .await - .unwrap() - .unwrap() - .data; - assert_eq!(expected_inclusion_data, actual_inclusion_data); - let retrieved_data = client.get_blob_data(blob_info).await.unwrap(); - assert_eq!(retrieved_data.unwrap(), data); - } - - #[ignore = "depends on external RPC"] - #[tokio::test] - #[serial] - async fn test_wait_for_finalization() { - let config = EigenConfig { - disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), - wait_for_finalization: true, - authenticated: true, - g1_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), - g2_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), - settlement_layer_confirmation_depth: 0, - eigenda_eth_rpc: Some("https://ethereum-holesky-rpc.publicnode.com".to_string()), - eigenda_svc_manager_address: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), - chain_id: 17000, - }; - let secrets = EigenSecrets { - private_key: PrivateKey::from_str( - "d08aa7ae1bb5ddd46c3c2d8cdb5894ab9f54dec467233686ca42629e826ac4c6", - ) - .unwrap(), - }; - let client = EigenClient::new(config.clone(), secrets, Box::new(MockGetBlobData)) - .await - .unwrap(); - let data = vec![1; 20]; - let result = client.dispatch_blob(0, data.clone()).await.unwrap(); - let blob_info = get_blob_info(&client, &result).await.unwrap(); - - let expected_inclusion_data = blob_info.clone().blob_verification_proof.inclusion_proof; - let actual_inclusion_data = client - .get_inclusion_data(&result.blob_id) - .await - .unwrap() - .unwrap() - .data; - assert_eq!(expected_inclusion_data, actual_inclusion_data); - let retrieved_data = client.get_blob_data(blob_info).await.unwrap(); - assert_eq!(retrieved_data.unwrap(), data); - } - - #[ignore = "depends on external RPC"] - #[tokio::test] - #[serial] - async fn test_settlement_layer_confirmation_depth() { - let config = EigenConfig { - disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), - settlement_layer_confirmation_depth: 5, - eigenda_eth_rpc: Some("https://ethereum-holesky-rpc.publicnode.com".to_string()), - eigenda_svc_manager_address: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), - wait_for_finalization: false, - authenticated: false, - g1_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), - g2_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), - chain_id: 17000, - }; - let secrets = EigenSecrets { - private_key: PrivateKey::from_str( - "d08aa7ae1bb5ddd46c3c2d8cdb5894ab9f54dec467233686ca42629e826ac4c6", - ) - .unwrap(), - }; - let client = EigenClient::new(config.clone(), secrets, Box::new(MockGetBlobData)) - .await - .unwrap(); - let data = vec![1; 20]; - let result = client.dispatch_blob(0, data.clone()).await.unwrap(); - let blob_info = get_blob_info(&client, &result).await.unwrap(); - - let expected_inclusion_data = blob_info.clone().blob_verification_proof.inclusion_proof; - let actual_inclusion_data = client - .get_inclusion_data(&result.blob_id) - .await - .unwrap() - .unwrap() - .data; - assert_eq!(expected_inclusion_data, actual_inclusion_data); - let retrieved_data = client.get_blob_data(blob_info).await.unwrap(); - assert_eq!(retrieved_data.unwrap(), data); - } - - #[ignore = "depends on external RPC"] - #[tokio::test] - #[serial] - async fn test_auth_dispersal_settlement_layer_confirmation_depth() { - let config = EigenConfig { - disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), - settlement_layer_confirmation_depth: 5, - eigenda_eth_rpc: Some("https://ethereum-holesky-rpc.publicnode.com".to_string()), - eigenda_svc_manager_address: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), - wait_for_finalization: false, - authenticated: true, - g1_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), - g2_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), - chain_id: 17000, - }; - let secrets = EigenSecrets { - private_key: PrivateKey::from_str( - "d08aa7ae1bb5ddd46c3c2d8cdb5894ab9f54dec467233686ca42629e826ac4c6", - ) - .unwrap(), - }; - let client = EigenClient::new(config.clone(), secrets, Box::new(MockGetBlobData)) - .await - .unwrap(); - let data = vec![1; 20]; - let result = client.dispatch_blob(0, data.clone()).await.unwrap(); - let blob_info = get_blob_info(&client, &result).await.unwrap(); - - let expected_inclusion_data = blob_info.clone().blob_verification_proof.inclusion_proof; - let actual_inclusion_data = client - .get_inclusion_data(&result.blob_id) - .await - .unwrap() - .unwrap() - .data; - assert_eq!(expected_inclusion_data, actual_inclusion_data); - let retrieved_data = client.get_blob_data(blob_info).await.unwrap(); - assert_eq!(retrieved_data.unwrap(), data); - } -} diff --git a/core/node/da_clients/src/eigen/generated/common.rs b/core/node/da_clients/src/eigen/generated/common.rs deleted file mode 100644 index 0599b9af4127..000000000000 --- a/core/node/da_clients/src/eigen/generated/common.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is @generated by prost-build. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct G1Commitment { - /// The X coordinate of the KZG commitment. This is the raw byte representation of the field element. - #[prost(bytes = "vec", tag = "1")] - pub x: ::prost::alloc::vec::Vec, - /// The Y coordinate of the KZG commitment. This is the raw byte representation of the field element. - #[prost(bytes = "vec", tag = "2")] - pub y: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct G2Commitment { - /// The A0 element of the X coordinate of G2 point. - #[prost(bytes = "vec", tag = "1")] - pub x_a0: ::prost::alloc::vec::Vec, - /// The A1 element of the X coordinate of G2 point. - #[prost(bytes = "vec", tag = "2")] - pub x_a1: ::prost::alloc::vec::Vec, - /// The A0 element of the Y coordinate of G2 point. - #[prost(bytes = "vec", tag = "3")] - pub y_a0: ::prost::alloc::vec::Vec, - /// The A1 element of the Y coordinate of G2 point. - #[prost(bytes = "vec", tag = "4")] - pub y_a1: ::prost::alloc::vec::Vec, -} -/// BlobCommitment represents commitment of a specific blob, containing its -/// KZG commitment, degree proof, the actual degree, and data length in number of symbols. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlobCommitment { - #[prost(message, optional, tag = "1")] - pub commitment: ::core::option::Option, - #[prost(message, optional, tag = "2")] - pub length_commitment: ::core::option::Option, - #[prost(message, optional, tag = "3")] - pub length_proof: ::core::option::Option, - #[prost(uint32, tag = "4")] - pub data_length: u32, -} -/// BlobCertificate is what gets attested by the network -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlobCertificate { - #[prost(uint32, tag = "1")] - pub version: u32, - #[prost(bytes = "vec", tag = "2")] - pub blob_key: ::prost::alloc::vec::Vec, - #[prost(message, optional, tag = "3")] - pub blob_commitment: ::core::option::Option, - #[prost(uint32, repeated, tag = "4")] - pub quorum_numbers: ::prost::alloc::vec::Vec, - #[prost(uint32, tag = "5")] - pub reference_block_number: u32, -} -/// A chunk of a blob. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ChunkData { - #[prost(bytes = "vec", tag = "1")] - pub data: ::prost::alloc::vec::Vec, -} diff --git a/core/node/da_clients/src/eigen/generated/disperser.rs b/core/node/da_clients/src/eigen/generated/disperser.rs deleted file mode 100644 index 7e94d910ecb7..000000000000 --- a/core/node/da_clients/src/eigen/generated/disperser.rs +++ /dev/null @@ -1,517 +0,0 @@ -// This file is @generated by prost-build. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct AuthenticatedRequest { - #[prost(oneof = "authenticated_request::Payload", tags = "1, 2")] - pub payload: ::core::option::Option, -} -/// Nested message and enum types in `AuthenticatedRequest`. -pub mod authenticated_request { - #[allow(clippy::derive_partial_eq_without_eq)] - #[derive(Clone, PartialEq, ::prost::Oneof)] - pub enum Payload { - #[prost(message, tag = "1")] - DisperseRequest(super::DisperseBlobRequest), - #[prost(message, tag = "2")] - AuthenticationData(super::AuthenticationData), - } -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct AuthenticatedReply { - #[prost(oneof = "authenticated_reply::Payload", tags = "1, 2")] - pub payload: ::core::option::Option, -} -/// Nested message and enum types in `AuthenticatedReply`. -pub mod authenticated_reply { - #[allow(clippy::derive_partial_eq_without_eq)] - #[derive(Clone, PartialEq, ::prost::Oneof)] - pub enum Payload { - #[prost(message, tag = "1")] - BlobAuthHeader(super::BlobAuthHeader), - #[prost(message, tag = "2")] - DisperseReply(super::DisperseBlobReply), - } -} -/// BlobAuthHeader contains information about the blob for the client to verify and sign. -/// - Once payments are enabled, the BlobAuthHeader will contain the KZG commitment to the blob, which the client -/// will verify and sign. Having the client verify the KZG commitment instead of calculating it avoids -/// the need for the client to have the KZG structured reference string (SRS), which can be large. -/// The signed KZG commitment prevents the disperser from sending a different blob to the DA Nodes -/// than the one the client sent. -/// - In the meantime, the BlobAuthHeader contains a simple challenge parameter is used to prevent -/// replay attacks in the event that a signature is leaked. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlobAuthHeader { - #[prost(uint32, tag = "1")] - pub challenge_parameter: u32, -} -/// AuthenticationData contains the signature of the BlobAuthHeader. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct AuthenticationData { - #[prost(bytes = "vec", tag = "1")] - pub authentication_data: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct DisperseBlobRequest { - /// The data to be dispersed. - /// The size of data must be <= 2MiB. Every 32 bytes of data chunk is interpreted as an integer in big endian format - /// where the lower address has more significant bits. The integer must stay in the valid range to be interpreted - /// as a field element on the bn254 curve. The valid range is - /// 0 <= x < 21888242871839275222246405745257275088548364400416034343698204186575808495617 - /// containing slightly less than 254 bits and more than 253 bits. If any one of the 32 bytes chunk is outside the range, - /// the whole request is deemed as invalid, and rejected. - #[prost(bytes = "vec", tag = "1")] - pub data: ::prost::alloc::vec::Vec, - /// The quorums to which the blob will be sent, in addition to the required quorums which are configured - /// on the EigenDA smart contract. If required quorums are included here, an error will be returned. - /// The disperser will ensure that the encoded blobs for each quorum are all processed - /// within the same batch. - #[prost(uint32, repeated, tag = "2")] - pub custom_quorum_numbers: ::prost::alloc::vec::Vec, - /// The account ID of the client. This should be a hex-encoded string of the ECSDA public key - /// corresponding to the key used by the client to sign the BlobAuthHeader. - #[prost(string, tag = "3")] - pub account_id: ::prost::alloc::string::String, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct DisperseBlobReply { - /// The status of the blob associated with the request_id. - #[prost(enumeration = "BlobStatus", tag = "1")] - pub result: i32, - /// The request ID generated by the disperser. - /// Once a request is accepted (although not processed), a unique request ID will be - /// generated. - /// Two different DisperseBlobRequests (determined by the hash of the DisperseBlobRequest) - /// will have different IDs, and the same DisperseBlobRequest sent repeatedly at different - /// times will also have different IDs. - /// The client should use this ID to query the processing status of the request (via - /// the GetBlobStatus API). - #[prost(bytes = "vec", tag = "2")] - pub request_id: ::prost::alloc::vec::Vec, -} -/// BlobStatusRequest is used to query the status of a blob. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlobStatusRequest { - #[prost(bytes = "vec", tag = "1")] - pub request_id: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlobStatusReply { - /// The status of the blob. - #[prost(enumeration = "BlobStatus", tag = "1")] - pub status: i32, - /// The blob info needed for clients to confirm the blob against the EigenDA contracts. - #[prost(message, optional, tag = "2")] - pub info: ::core::option::Option, -} -/// RetrieveBlobRequest contains parameters to retrieve the blob. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct RetrieveBlobRequest { - #[prost(bytes = "vec", tag = "1")] - pub batch_header_hash: ::prost::alloc::vec::Vec, - #[prost(uint32, tag = "2")] - pub blob_index: u32, -} -/// RetrieveBlobReply contains the retrieved blob data -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct RetrieveBlobReply { - #[prost(bytes = "vec", tag = "1")] - pub data: ::prost::alloc::vec::Vec, -} -/// BlobInfo contains information needed to confirm the blob against the EigenDA contracts -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlobInfo { - #[prost(message, optional, tag = "1")] - pub blob_header: ::core::option::Option, - #[prost(message, optional, tag = "2")] - pub blob_verification_proof: ::core::option::Option, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlobHeader { - /// KZG commitment of the blob. - #[prost(message, optional, tag = "1")] - pub commitment: ::core::option::Option, - /// The length of the blob in symbols (each symbol is 32 bytes). - #[prost(uint32, tag = "2")] - pub data_length: u32, - /// The params of the quorums that this blob participates in. - #[prost(message, repeated, tag = "3")] - pub blob_quorum_params: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlobQuorumParam { - /// The ID of the quorum. - #[prost(uint32, tag = "1")] - pub quorum_number: u32, - /// The max percentage of stake within the quorum that can be held by or delegated - /// to adversarial operators. Currently, this and the next parameter are standardized - /// across the quorum using values read from the EigenDA contracts. - #[prost(uint32, tag = "2")] - pub adversary_threshold_percentage: u32, - /// The min percentage of stake that must attest in order to consider - /// the dispersal is successful. - #[prost(uint32, tag = "3")] - pub confirmation_threshold_percentage: u32, - /// The length of each chunk. - #[prost(uint32, tag = "4")] - pub chunk_length: u32, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlobVerificationProof { - /// batch_id is an incremental ID assigned to a batch by EigenDAServiceManager - #[prost(uint32, tag = "1")] - pub batch_id: u32, - /// The index of the blob in the batch (which is logically an ordered list of blobs). - #[prost(uint32, tag = "2")] - pub blob_index: u32, - #[prost(message, optional, tag = "3")] - pub batch_metadata: ::core::option::Option, - /// inclusion_proof is a merkle proof for a blob header's inclusion in a batch - #[prost(bytes = "vec", tag = "4")] - pub inclusion_proof: ::prost::alloc::vec::Vec, - /// indexes of quorums in BatchHeader.quorum_numbers that match the quorums in BlobHeader.blob_quorum_params - /// Ex. BlobHeader.blob_quorum_params = [ - /// { - /// quorum_number = 0, - /// ... - /// }, - /// { - /// quorum_number = 3, - /// ... - /// }, - /// { - /// quorum_number = 5, - /// ... - /// }, - /// ] - /// BatchHeader.quorum_numbers = \[0, 5, 3\] => 0x000503 - /// Then, quorum_indexes = \[0, 2, 1\] => 0x000201 - #[prost(bytes = "vec", tag = "5")] - pub quorum_indexes: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BatchMetadata { - #[prost(message, optional, tag = "1")] - pub batch_header: ::core::option::Option, - /// The hash of all public keys of the operators that did not sign the batch. - #[prost(bytes = "vec", tag = "2")] - pub signatory_record_hash: ::prost::alloc::vec::Vec, - /// The fee payment paid by users for dispersing this batch. It's the bytes - /// representation of a big.Int value. - #[prost(bytes = "vec", tag = "3")] - pub fee: ::prost::alloc::vec::Vec, - /// The Ethereum block number at which the batch is confirmed onchain. - #[prost(uint32, tag = "4")] - pub confirmation_block_number: u32, - /// This is the hash of the ReducedBatchHeader defined onchain, see: - /// - /// The is the message that the operators will sign their signatures on. - #[prost(bytes = "vec", tag = "5")] - pub batch_header_hash: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BatchHeader { - /// The root of the merkle tree with the hashes of blob headers as leaves. - #[prost(bytes = "vec", tag = "1")] - pub batch_root: ::prost::alloc::vec::Vec, - /// All quorums associated with blobs in this batch. Sorted in ascending order. - /// Ex. \[0, 2, 1\] => 0x000102 - #[prost(bytes = "vec", tag = "2")] - pub quorum_numbers: ::prost::alloc::vec::Vec, - /// The percentage of stake that has signed for this batch. - /// The quorum_signed_percentages\[i\] is percentage for the quorum_numbers\[i\]. - #[prost(bytes = "vec", tag = "3")] - pub quorum_signed_percentages: ::prost::alloc::vec::Vec, - /// The Ethereum block number at which the batch was created. - /// The Disperser will encode and disperse the blobs based on the onchain info - /// (e.g. operator stakes) at this block number. - #[prost(uint32, tag = "4")] - pub reference_block_number: u32, -} -/// BlobStatus represents the status of a blob. -/// The status of a blob is updated as the blob is processed by the disperser. -/// The status of a blob can be queried by the client using the GetBlobStatus API. -/// Intermediate states are states that the blob can be in while being processed, and it can be updated to a differet state: -/// - PROCESSING -/// - DISPERSING -/// - CONFIRMED -/// Terminal states are states that will not be updated to a different state: -/// - FAILED -/// - FINALIZED -/// - INSUFFICIENT_SIGNATURES -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] -#[repr(i32)] -pub enum BlobStatus { - Unknown = 0, - /// PROCESSING means that the blob is currently being processed by the disperser - Processing = 1, - /// CONFIRMED means that the blob has been dispersed to DA Nodes and the dispersed - /// batch containing the blob has been confirmed onchain - Confirmed = 2, - /// FAILED means that the blob has failed permanently (for reasons other than insufficient - /// signatures, which is a separate state) - Failed = 3, - /// FINALIZED means that the block containing the blob's confirmation transaction has been finalized on Ethereum - Finalized = 4, - /// INSUFFICIENT_SIGNATURES means that the confirmation threshold for the blob was not met - /// for at least one quorum. - InsufficientSignatures = 5, - /// DISPERSING means that the blob is currently being dispersed to DA Nodes and being confirmed onchain - Dispersing = 6, -} -impl BlobStatus { - /// String value of the enum field names used in the ProtoBuf definition. - /// - /// The values are not transformed in any way and thus are considered stable - /// (if the ProtoBuf definition does not change) and safe for programmatic use. - pub fn as_str_name(&self) -> &'static str { - match self { - BlobStatus::Unknown => "UNKNOWN", - BlobStatus::Processing => "PROCESSING", - BlobStatus::Confirmed => "CONFIRMED", - BlobStatus::Failed => "FAILED", - BlobStatus::Finalized => "FINALIZED", - BlobStatus::InsufficientSignatures => "INSUFFICIENT_SIGNATURES", - BlobStatus::Dispersing => "DISPERSING", - } - } - /// Creates an enum from field names used in the ProtoBuf definition. - pub fn from_str_name(value: &str) -> ::core::option::Option { - match value { - "UNKNOWN" => Some(Self::Unknown), - "PROCESSING" => Some(Self::Processing), - "CONFIRMED" => Some(Self::Confirmed), - "FAILED" => Some(Self::Failed), - "FINALIZED" => Some(Self::Finalized), - "INSUFFICIENT_SIGNATURES" => Some(Self::InsufficientSignatures), - "DISPERSING" => Some(Self::Dispersing), - _ => None, - } - } -} -/// Generated client implementations. -pub mod disperser_client { - #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::*; - use tonic::codegen::http::Uri; - /// Disperser defines the public APIs for dispersing blobs. - #[derive(Debug, Clone)] - pub struct DisperserClient { - inner: tonic::client::Grpc, - } - impl DisperserClient { - /// Attempt to create a new client by connecting to a given endpoint. - pub async fn connect(dst: D) -> Result - where - D: TryInto, - D::Error: Into, - { - let conn = tonic::transport::Endpoint::new(dst)?.connect().await?; - Ok(Self::new(conn)) - } - } - impl DisperserClient - where - T: tonic::client::GrpcService, - T::Error: Into, - T::ResponseBody: Body + Send + 'static, - ::Error: Into + Send, - { - pub fn new(inner: T) -> Self { - let inner = tonic::client::Grpc::new(inner); - Self { inner } - } - pub fn with_origin(inner: T, origin: Uri) -> Self { - let inner = tonic::client::Grpc::with_origin(inner, origin); - Self { inner } - } - pub fn with_interceptor( - inner: T, - interceptor: F, - ) -> DisperserClient> - where - F: tonic::service::Interceptor, - T::ResponseBody: Default, - T: tonic::codegen::Service< - http::Request, - Response = http::Response< - >::ResponseBody, - >, - >, - , - >>::Error: Into + Send + Sync, - { - DisperserClient::new(InterceptedService::new(inner, interceptor)) - } - /// Compress requests with the given encoding. - /// - /// This requires the server to support it otherwise it might respond with an - /// error. - #[must_use] - pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { - self.inner = self.inner.send_compressed(encoding); - self - } - /// Enable decompressing responses. - #[must_use] - pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { - self.inner = self.inner.accept_compressed(encoding); - self - } - /// Limits the maximum size of a decoded message. - /// - /// Default: `4MB` - #[must_use] - pub fn max_decoding_message_size(mut self, limit: usize) -> Self { - self.inner = self.inner.max_decoding_message_size(limit); - self - } - /// Limits the maximum size of an encoded message. - /// - /// Default: `usize::MAX` - #[must_use] - pub fn max_encoding_message_size(mut self, limit: usize) -> Self { - self.inner = self.inner.max_encoding_message_size(limit); - self - } - /// This API accepts blob to disperse from clients. - /// This executes the dispersal async, i.e. it returns once the request - /// is accepted. The client could use GetBlobStatus() API to poll the the - /// processing status of the blob. - pub async fn disperse_blob( - &mut self, - request: impl tonic::IntoRequest, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; - let codec = tonic::codec::ProstCodec::default(); - let path = http::uri::PathAndQuery::from_static( - "/disperser.Disperser/DisperseBlob", - ); - let mut req = request.into_request(); - req.extensions_mut() - .insert(GrpcMethod::new("disperser.Disperser", "DisperseBlob")); - self.inner.unary(req, path, codec).await - } - /// DisperseBlobAuthenticated is similar to DisperseBlob, except that it requires the - /// client to authenticate itself via the AuthenticationData message. The protoco is as follows: - /// 1. The client sends a DisperseBlobAuthenticated request with the DisperseBlobRequest message - /// 2. The Disperser sends back a BlobAuthHeader message containing information for the client to - /// verify and sign. - /// 3. The client verifies the BlobAuthHeader and sends back the signed BlobAuthHeader in an - /// AuthenticationData message. - /// 4. The Disperser verifies the signature and returns a DisperseBlobReply message. - pub async fn disperse_blob_authenticated( - &mut self, - request: impl tonic::IntoStreamingRequest< - Message = super::AuthenticatedRequest, - >, - ) -> std::result::Result< - tonic::Response>, - tonic::Status, - > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; - let codec = tonic::codec::ProstCodec::default(); - let path = http::uri::PathAndQuery::from_static( - "/disperser.Disperser/DisperseBlobAuthenticated", - ); - let mut req = request.into_streaming_request(); - req.extensions_mut() - .insert( - GrpcMethod::new("disperser.Disperser", "DisperseBlobAuthenticated"), - ); - self.inner.streaming(req, path, codec).await - } - /// This API is meant to be polled for the blob status. - pub async fn get_blob_status( - &mut self, - request: impl tonic::IntoRequest, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; - let codec = tonic::codec::ProstCodec::default(); - let path = http::uri::PathAndQuery::from_static( - "/disperser.Disperser/GetBlobStatus", - ); - let mut req = request.into_request(); - req.extensions_mut() - .insert(GrpcMethod::new("disperser.Disperser", "GetBlobStatus")); - self.inner.unary(req, path, codec).await - } - /// This retrieves the requested blob from the Disperser's backend. - /// This is a more efficient way to retrieve blobs than directly retrieving - /// from the DA Nodes (see detail about this approach in - /// api/proto/retriever/retriever.proto). - /// The blob should have been initially dispersed via this Disperser service - /// for this API to work. - pub async fn retrieve_blob( - &mut self, - request: impl tonic::IntoRequest, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; - let codec = tonic::codec::ProstCodec::default(); - let path = http::uri::PathAndQuery::from_static( - "/disperser.Disperser/RetrieveBlob", - ); - let mut req = request.into_request(); - req.extensions_mut() - .insert(GrpcMethod::new("disperser.Disperser", "RetrieveBlob")); - self.inner.unary(req, path, codec).await - } - } -} diff --git a/core/node/da_clients/src/eigen/mod.rs b/core/node/da_clients/src/eigen/mod.rs index c536d204175d..e5300f44d0eb 100644 --- a/core/node/da_clients/src/eigen/mod.rs +++ b/core/node/da_clients/src/eigen/mod.rs @@ -1,17 +1,5 @@ -mod blob_info; mod client; -mod client_tests; -mod sdk; -mod verifier; -mod verifier_tests; -pub use self::client::{EigenClient, GetBlobData}; -#[allow(clippy::all)] -pub(crate) mod disperser { - include!("generated/disperser.rs"); -} +pub use eigenda_client_rs::client::GetBlobData; -#[allow(clippy::all)] -pub(crate) mod common { - include!("generated/common.rs"); -} +pub use self::client::EigenDAClient; diff --git a/core/node/da_clients/src/eigen/sdk.rs b/core/node/da_clients/src/eigen/sdk.rs deleted file mode 100644 index 3a3b1202690c..000000000000 --- a/core/node/da_clients/src/eigen/sdk.rs +++ /dev/null @@ -1,481 +0,0 @@ -use std::{str::FromStr, sync::Arc}; - -use secp256k1::{ecdsa::RecoverableSignature, SecretKey}; -use tokio::sync::{mpsc, Mutex}; -use tokio_stream::{wrappers::UnboundedReceiverStream, StreamExt}; -use tonic::{ - transport::{Channel, ClientTlsConfig, Endpoint}, - Streaming, -}; -use url::Url; -use zksync_config::EigenConfig; -use zksync_da_client::types::DAError; -use zksync_eth_client::clients::PKSigningClient; -use zksync_types::{url::SensitiveUrl, Address, K256PrivateKey, SLChainId}; -use zksync_web3_decl::client::{Client, DynClient, L1}; - -use super::{ - blob_info::BlobInfo, - disperser::BlobInfo as DisperserBlobInfo, - verifier::{Verifier, VerifierConfig}, - GetBlobData, -}; -use crate::eigen::{ - blob_info, - disperser::{ - self, - authenticated_request::Payload::{AuthenticationData, DisperseRequest}, - disperser_client::DisperserClient, - AuthenticatedReply, BlobAuthHeader, - }, - verifier::VerificationError, -}; - -#[derive(Debug)] -pub(crate) struct RawEigenClient { - client: Arc>>, - private_key: SecretKey, - pub config: EigenConfig, - verifier: Verifier, - get_blob_data: Box, -} - -impl Clone for RawEigenClient { - fn clone(&self) -> Self { - Self { - client: self.client.clone(), - private_key: self.private_key, - config: self.config.clone(), - verifier: self.verifier.clone(), - get_blob_data: self.get_blob_data.clone_boxed(), - } - } -} - -pub(crate) const DATA_CHUNK_SIZE: usize = 32; - -impl RawEigenClient { - const BLOB_SIZE_LIMIT: usize = 1024 * 1024 * 2; // 2 MB - - pub async fn new( - private_key: SecretKey, - config: EigenConfig, - get_blob_data: Box, - ) -> anyhow::Result { - let endpoint = - Endpoint::from_str(config.disperser_rpc.as_str())?.tls_config(ClientTlsConfig::new())?; - let client = Arc::new(Mutex::new(DisperserClient::connect(endpoint).await?)); - - let verifier_config = VerifierConfig { - rpc_url: config - .eigenda_eth_rpc - .clone() - .ok_or(anyhow::anyhow!("EigenDA ETH RPC not set"))?, - svc_manager_addr: Address::from_str(&config.eigenda_svc_manager_address)?, - max_blob_size: Self::BLOB_SIZE_LIMIT as u32, - g1_url: Url::parse(&config.g1_url)?, - g2_url: Url::parse(&config.g2_url)?, - settlement_layer_confirmation_depth: config.settlement_layer_confirmation_depth, - private_key: hex::encode(private_key.secret_bytes()), - chain_id: config.chain_id, - }; - - let url = SensitiveUrl::from_str(&verifier_config.rpc_url)?; - let query_client: Client = Client::http(url)?.build(); - let query_client = Box::new(query_client) as Box>; - let signing_client = PKSigningClient::new_raw( - K256PrivateKey::from_bytes(zksync_types::H256::from_str( - &verifier_config.private_key, - )?)?, - verifier_config.svc_manager_addr, - Verifier::DEFAULT_PRIORITY_FEE_PER_GAS, - SLChainId(verifier_config.chain_id), - query_client, - ); - - let verifier = Verifier::new(verifier_config, signing_client) - .await - .map_err(|e| anyhow::anyhow!(format!("Failed to create verifier {:?}", e)))?; - Ok(RawEigenClient { - client, - private_key, - config, - verifier, - get_blob_data, - }) - } - - pub fn blob_size_limit() -> usize { - Self::BLOB_SIZE_LIMIT - } - - async fn dispatch_blob_non_authenticated(&self, data: Vec) -> anyhow::Result { - let padded_data = convert_by_padding_empty_byte(&data); - let request = disperser::DisperseBlobRequest { - data: padded_data, - custom_quorum_numbers: vec![], - account_id: String::default(), // Account Id is not used in non-authenticated mode - }; - - let disperse_reply = self - .client - .lock() - .await - .disperse_blob(request) - .await? - .into_inner(); - - match disperser::BlobStatus::try_from(disperse_reply.result)? { - disperser::BlobStatus::Failed - | disperser::BlobStatus::InsufficientSignatures - | disperser::BlobStatus::Unknown => Err(anyhow::anyhow!("Blob dispatch failed")), - - disperser::BlobStatus::Dispersing - | disperser::BlobStatus::Processing - | disperser::BlobStatus::Finalized - | disperser::BlobStatus::Confirmed => Ok(hex::encode(disperse_reply.request_id)), - } - } - - async fn dispatch_blob_authenticated(&self, data: Vec) -> anyhow::Result { - let (tx, rx) = mpsc::unbounded_channel(); - - // 1. send DisperseBlobRequest - let padded_data = convert_by_padding_empty_byte(&data); - self.disperse_data(padded_data, &tx)?; - - // this await is blocked until the first response on the stream, so we only await after sending the `DisperseBlobRequest` - let mut response_stream = self - .client - .clone() - .lock() - .await - .disperse_blob_authenticated(UnboundedReceiverStream::new(rx)) - .await?; - let response_stream = response_stream.get_mut(); - - // 2. receive BlobAuthHeader - let blob_auth_header = self.receive_blob_auth_header(response_stream).await?; - - // 3. sign and send BlobAuthHeader - self.submit_authentication_data(blob_auth_header.clone(), &tx)?; - - // 4. receive DisperseBlobReply - let reply = response_stream - .next() - .await - .ok_or_else(|| anyhow::anyhow!("No response from server"))? - .unwrap() - .payload - .ok_or_else(|| anyhow::anyhow!("No payload in response"))?; - - let disperser::authenticated_reply::Payload::DisperseReply(disperse_reply) = reply else { - return Err(anyhow::anyhow!("Unexpected response from server")); - }; - - match disperser::BlobStatus::try_from(disperse_reply.result)? { - disperser::BlobStatus::Failed - | disperser::BlobStatus::InsufficientSignatures - | disperser::BlobStatus::Unknown => Err(anyhow::anyhow!("Blob dispatch failed")), - - disperser::BlobStatus::Dispersing - | disperser::BlobStatus::Processing - | disperser::BlobStatus::Finalized - | disperser::BlobStatus::Confirmed => Ok(hex::encode(disperse_reply.request_id)), - } - } - - pub async fn get_commitment(&self, request_id: &str) -> anyhow::Result> { - let blob_info = self.try_get_inclusion_data(request_id.to_string()).await?; - - let Some(blob_info) = blob_info else { - return Ok(None); - }; - let blob_info = blob_info::BlobInfo::try_from(blob_info) - .map_err(|e| anyhow::anyhow!("Failed to convert blob info: {}", e))?; - - let Some(data) = self.get_blob_data(blob_info.clone()).await? else { - return Err(anyhow::anyhow!("Failed to get blob data")); - }; - let data_db = self.get_blob_data.get_blob_data(request_id).await?; - if let Some(data_db) = data_db { - if data_db != data { - return Err(anyhow::anyhow!( - "Data from db and from disperser are different" - )); - } - } - self.verifier - .verify_commitment(blob_info.blob_header.commitment.clone(), data) - .map_err(|_| anyhow::anyhow!("Failed to verify commitment"))?; - - let result = self - .verifier - .verify_inclusion_data_against_settlement_layer(blob_info.clone()) - .await; - // in case of an error, the dispatcher will retry, so the need to return None - if let Err(e) = result { - match e { - VerificationError::EmptyHash => return Ok(None), - _ => return Err(anyhow::anyhow!("Failed to verify inclusion data: {:?}", e)), - } - } - - tracing::info!("Blob dispatch confirmed, request id: {}", request_id); - Ok(Some(blob_info)) - } - - pub async fn get_inclusion_data(&self, request_id: &str) -> anyhow::Result>> { - let blob_info = self.get_commitment(request_id).await?; - if let Some(blob_info) = blob_info { - Ok(Some(blob_info.blob_verification_proof.inclusion_proof)) - } else { - Ok(None) - } - } - - pub async fn dispatch_blob(&self, data: Vec) -> anyhow::Result { - if self.config.authenticated { - self.dispatch_blob_authenticated(data).await - } else { - self.dispatch_blob_non_authenticated(data).await - } - } - - fn disperse_data( - &self, - data: Vec, - tx: &mpsc::UnboundedSender, - ) -> anyhow::Result<()> { - let req = disperser::AuthenticatedRequest { - payload: Some(DisperseRequest(disperser::DisperseBlobRequest { - data, - custom_quorum_numbers: vec![], - account_id: get_account_id(&self.private_key), - })), - }; - - tx.send(req) - .map_err(|e| anyhow::anyhow!("Failed to send DisperseBlobRequest: {}", e)) - } - - fn submit_authentication_data( - &self, - blob_auth_header: BlobAuthHeader, - tx: &mpsc::UnboundedSender, - ) -> anyhow::Result<()> { - // TODO: replace challenge_parameter with actual auth header when it is available - let digest = zksync_basic_types::web3::keccak256( - &blob_auth_header.challenge_parameter.to_be_bytes(), - ); - let signature: RecoverableSignature = secp256k1::Secp256k1::signing_only() - .sign_ecdsa_recoverable( - &secp256k1::Message::from_slice(&digest[..])?, - &self.private_key, - ); - let (recovery_id, sig) = signature.serialize_compact(); - - let mut signature = Vec::with_capacity(65); - signature.extend_from_slice(&sig); - signature.push(recovery_id.to_i32() as u8); - - let req = disperser::AuthenticatedRequest { - payload: Some(AuthenticationData(disperser::AuthenticationData { - authentication_data: signature, - })), - }; - - tx.send(req) - .map_err(|e| anyhow::anyhow!("Failed to send AuthenticationData: {}", e)) - } - - async fn receive_blob_auth_header( - &self, - response_stream: &mut Streaming, - ) -> anyhow::Result { - let reply = response_stream - .next() - .await - .ok_or_else(|| anyhow::anyhow!("No response from server"))?; - - let Ok(reply) = reply else { - return Err(anyhow::anyhow!("Err from server: {:?}", reply)); - }; - - let reply = reply - .payload - .ok_or_else(|| anyhow::anyhow!("No payload in response"))?; - - if let disperser::authenticated_reply::Payload::BlobAuthHeader(blob_auth_header) = reply { - Ok(blob_auth_header) - } else { - Err(anyhow::anyhow!("Unexpected response from server")) - } - } - - async fn try_get_inclusion_data( - &self, - request_id: String, - ) -> anyhow::Result> { - let polling_request = disperser::BlobStatusRequest { - request_id: hex::decode(request_id)?, - }; - - let resp = self - .client - .lock() - .await - .get_blob_status(polling_request.clone()) - .await? - .into_inner(); - - match disperser::BlobStatus::try_from(resp.status)? { - disperser::BlobStatus::Processing | disperser::BlobStatus::Dispersing => Ok(None), - disperser::BlobStatus::Failed => Err(anyhow::anyhow!("Blob dispatch failed")), - disperser::BlobStatus::InsufficientSignatures => { - Err(anyhow::anyhow!("Insufficient signatures")) - } - disperser::BlobStatus::Confirmed => { - if !self.config.wait_for_finalization { - let blob_info = resp - .info - .ok_or_else(|| anyhow::anyhow!("No blob header in response"))?; - return Ok(Some(blob_info)); - } - Ok(None) - } - disperser::BlobStatus::Finalized => { - let blob_info = resp - .info - .ok_or_else(|| anyhow::anyhow!("No blob header in response"))?; - Ok(Some(blob_info)) - } - - _ => Err(anyhow::anyhow!("Received unknown blob status")), - } - } - - pub async fn get_blob_data( - &self, - blob_info: BlobInfo, - ) -> anyhow::Result>, DAError> { - use anyhow::anyhow; - use zksync_da_client::types::DAError; - - let blob_index = blob_info.blob_verification_proof.blob_index; - let batch_header_hash = blob_info - .blob_verification_proof - .batch_medatada - .batch_header_hash; - let get_response = self - .client - .lock() - .await - .retrieve_blob(disperser::RetrieveBlobRequest { - batch_header_hash, - blob_index, - }) - .await - .map_err(|e| DAError { - error: anyhow!(e), - is_retriable: true, - })? - .into_inner(); - - if get_response.data.is_empty() { - return Err(DAError { - error: anyhow!("Failed to get blob data"), - is_retriable: false, - }); - } - - let data = remove_empty_byte_from_padded_bytes(&get_response.data); - Ok(Some(data)) - } -} - -fn get_account_id(secret_key: &SecretKey) -> String { - let public_key = - secp256k1::PublicKey::from_secret_key(&secp256k1::Secp256k1::new(), secret_key); - let hex = hex::encode(public_key.serialize_uncompressed()); - - format!("0x{}", hex) -} - -fn convert_by_padding_empty_byte(data: &[u8]) -> Vec { - let parse_size = DATA_CHUNK_SIZE - 1; - - // Calculate the number of chunks - let data_len = (data.len() + parse_size - 1) / parse_size; - - // Pre-allocate `valid_data` with enough space for all chunks - let mut valid_data = vec![0u8; data_len * DATA_CHUNK_SIZE]; - let mut valid_end = data_len * DATA_CHUNK_SIZE; - - for (i, chunk) in data.chunks(parse_size).enumerate() { - let offset = i * DATA_CHUNK_SIZE; - valid_data[offset] = 0x00; // Set first byte of each chunk to 0x00 for big-endian compliance - - let copy_end = offset + 1 + chunk.len(); - valid_data[offset + 1..copy_end].copy_from_slice(chunk); - - if i == data_len - 1 && chunk.len() < parse_size { - valid_end = offset + 1 + chunk.len(); - } - } - - valid_data.truncate(valid_end); - valid_data -} - -fn remove_empty_byte_from_padded_bytes(data: &[u8]) -> Vec { - let parse_size = DATA_CHUNK_SIZE; - - // Calculate the number of chunks - let data_len = (data.len() + parse_size - 1) / parse_size; - - // Pre-allocate `valid_data` with enough space for all chunks - let mut valid_data = vec![0u8; data_len * (DATA_CHUNK_SIZE - 1)]; - let mut valid_end = data_len * (DATA_CHUNK_SIZE - 1); - - for (i, chunk) in data.chunks(parse_size).enumerate() { - let offset = i * (DATA_CHUNK_SIZE - 1); - - let copy_end = offset + chunk.len() - 1; - valid_data[offset..copy_end].copy_from_slice(&chunk[1..]); - - if i == data_len - 1 && chunk.len() < parse_size { - valid_end = offset + chunk.len() - 1; - } - } - - valid_data.truncate(valid_end); - valid_data -} - -#[cfg(test)] -mod test { - #[test] - fn test_pad_and_unpad() { - let data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9]; - let padded_data = super::convert_by_padding_empty_byte(&data); - let unpadded_data = super::remove_empty_byte_from_padded_bytes(&padded_data); - assert_eq!(data, unpadded_data); - } - - #[test] - fn test_pad_and_unpad_large() { - let data = vec![1; 1000]; - let padded_data = super::convert_by_padding_empty_byte(&data); - let unpadded_data = super::remove_empty_byte_from_padded_bytes(&padded_data); - assert_eq!(data, unpadded_data); - } - - #[test] - fn test_pad_and_unpad_empty() { - let data = Vec::new(); - let padded_data = super::convert_by_padding_empty_byte(&data); - let unpadded_data = super::remove_empty_byte_from_padded_bytes(&padded_data); - assert_eq!(data, unpadded_data); - } -} diff --git a/core/node/da_clients/src/eigen/verifier.rs b/core/node/da_clients/src/eigen/verifier.rs deleted file mode 100644 index b8f774c33a98..000000000000 --- a/core/node/da_clients/src/eigen/verifier.rs +++ /dev/null @@ -1,496 +0,0 @@ -use std::{collections::HashMap, path::Path}; - -use ark_bn254::{Fq, G1Affine}; -use ethabi::{encode, ParamType, Token}; -use rust_kzg_bn254::{blob::Blob, kzg::Kzg, polynomial::PolynomialFormat}; -use tokio::{fs::File, io::AsyncWriteExt}; -use url::Url; -use zksync_basic_types::web3::CallRequest; -use zksync_eth_client::{clients::PKSigningClient, EnrichedClientResult}; -use zksync_types::{ - web3::{self, BlockId, BlockNumber}, - Address, U256, U64, -}; - -use super::blob_info::{BatchHeader, BlobHeader, BlobInfo, G1Commitment}; - -#[async_trait::async_trait] -pub trait VerifierClient: Sync + Send + std::fmt::Debug { - fn clone_boxed(&self) -> Box; - - /// Returns the current block number. - async fn block_number(&self) -> EnrichedClientResult; - - /// Invokes a function on a contract specified by `contract_address` / `contract_abi` using `eth_call`. - async fn call_contract_function( - &self, - request: web3::CallRequest, - block: Option, - ) -> EnrichedClientResult; -} - -#[async_trait::async_trait] -impl VerifierClient for PKSigningClient { - fn clone_boxed(&self) -> Box { - Box::new(self.clone()) - } - - async fn block_number(&self) -> EnrichedClientResult { - self.as_ref().block_number().await - } - - async fn call_contract_function( - &self, - request: web3::CallRequest, - block: Option, - ) -> EnrichedClientResult { - self.as_ref().call_contract_function(request, block).await - } -} - -#[derive(Debug)] -pub enum VerificationError { - ServiceManagerError, - KzgError, - WrongProof, - DifferentCommitments, - DifferentRoots, - EmptyHash, - DifferentHashes, - WrongQuorumParams, - QuorumNotConfirmed, - CommitmentNotOnCurve, - CommitmentNotOnCorrectSubgroup, - LinkError, -} - -/// Configuration for the verifier used for authenticated dispersals -#[derive(Debug, Clone)] -pub struct VerifierConfig { - pub rpc_url: String, - pub svc_manager_addr: Address, - pub max_blob_size: u32, - pub g1_url: Url, - pub g2_url: Url, - pub settlement_layer_confirmation_depth: u32, - pub private_key: String, - pub chain_id: u64, -} - -/// Verifier used to verify the integrity of the blob info -/// Kzg is used for commitment verification -/// EigenDA service manager is used to connect to the service manager contract -#[derive(Debug)] -pub struct Verifier { - kzg: Kzg, - cfg: VerifierConfig, - signing_client: Box, -} - -impl Clone for Verifier { - fn clone(&self) -> Self { - Self { - kzg: self.kzg.clone(), - cfg: self.cfg.clone(), - signing_client: self.signing_client.clone_boxed(), - } - } -} - -impl Verifier { - pub const DEFAULT_PRIORITY_FEE_PER_GAS: u64 = 100; - pub const SRSORDER: u32 = 268435456; // 2 ^ 28 - pub const G1POINT: &'static str = "g1.point"; - pub const G2POINT: &'static str = "g2.point.powerOf2"; - pub const POINT_SIZE: u32 = 32; - - async fn save_point(url: Url, point: String) -> Result<(), VerificationError> { - let response = reqwest::get(url) - .await - .map_err(|_| VerificationError::LinkError)?; - if !response.status().is_success() { - return Err(VerificationError::LinkError); - } - let path = format!("./{}", point); - let path = Path::new(&path); - let mut file = File::create(path) - .await - .map_err(|_| VerificationError::LinkError)?; - let content = response - .bytes() - .await - .map_err(|_| VerificationError::LinkError)?; - file.write_all(&content) - .await - .map_err(|_| VerificationError::LinkError)?; - Ok(()) - } - async fn save_points(url_g1: Url, url_g2: Url) -> Result { - Self::save_point(url_g1, Self::G1POINT.to_string()).await?; - Self::save_point(url_g2, Self::G2POINT.to_string()).await?; - - Ok(".".to_string()) - } - pub async fn new( - cfg: VerifierConfig, - signing_client: T, - ) -> Result { - let srs_points_to_load = cfg.max_blob_size / Self::POINT_SIZE; - let path = Self::save_points(cfg.clone().g1_url, cfg.clone().g2_url).await?; - let kzg_handle = tokio::task::spawn_blocking(move || { - Kzg::setup( - &format!("{}/{}", path, Self::G1POINT), - "", - &format!("{}/{}", path, Self::G2POINT), - Self::SRSORDER, - srs_points_to_load, - "".to_string(), - ) - }); - let kzg = kzg_handle - .await - .map_err(|e| { - tracing::error!("Failed to setup KZG: {:?}", e); - VerificationError::KzgError - })? - .map_err(|e| { - tracing::error!("Failed to setup KZG: {:?}", e); - VerificationError::KzgError - })?; - - Ok(Self { - kzg, - cfg, - signing_client: Box::new(signing_client), - }) - } - - /// Return the commitment from a blob - fn commit(&self, blob: Vec) -> Result { - let blob = Blob::from_bytes_and_pad(&blob.to_vec()); - self.kzg - .blob_to_kzg_commitment(&blob, PolynomialFormat::InEvaluationForm) - .map_err(|_| VerificationError::KzgError) - } - - /// Compare the given commitment with the commitment generated with the blob - pub fn verify_commitment( - &self, - expected_commitment: G1Commitment, - blob: Vec, - ) -> Result<(), VerificationError> { - let actual_commitment = self.commit(blob)?; - let expected_commitment = G1Affine::new_unchecked( - Fq::from(num_bigint::BigUint::from_bytes_be(&expected_commitment.x)), - Fq::from(num_bigint::BigUint::from_bytes_be(&expected_commitment.y)), - ); - if !expected_commitment.is_on_curve() { - return Err(VerificationError::CommitmentNotOnCurve); - } - if !expected_commitment.is_in_correct_subgroup_assuming_on_curve() { - return Err(VerificationError::CommitmentNotOnCorrectSubgroup); - } - if actual_commitment != expected_commitment { - return Err(VerificationError::DifferentCommitments); - } - Ok(()) - } - - pub fn hash_encode_blob_header(&self, blob_header: &BlobHeader) -> Vec { - let mut blob_quorums = vec![]; - for quorum in &blob_header.blob_quorum_params { - let quorum = Token::Tuple(vec![ - Token::Uint(ethabi::Uint::from(quorum.quorum_number)), - Token::Uint(ethabi::Uint::from(quorum.adversary_threshold_percentage)), - Token::Uint(ethabi::Uint::from(quorum.confirmation_threshold_percentage)), - Token::Uint(ethabi::Uint::from(quorum.chunk_length)), - ]); - blob_quorums.push(quorum); - } - let blob_header = Token::Tuple(vec![ - Token::Tuple(vec![ - Token::Uint(ethabi::Uint::from_big_endian(&blob_header.commitment.x)), - Token::Uint(ethabi::Uint::from_big_endian(&blob_header.commitment.y)), - ]), - Token::Uint(ethabi::Uint::from(blob_header.data_length)), - Token::Array(blob_quorums), - ]); - - let encoded = encode(&[blob_header]); - web3::keccak256(&encoded).to_vec() - } - - pub fn process_inclusion_proof( - &self, - proof: &[u8], - leaf: &[u8], - index: u32, - ) -> Result, VerificationError> { - let mut index = index; - if proof.is_empty() || proof.len() % 32 != 0 { - return Err(VerificationError::WrongProof); - } - let mut computed_hash = leaf.to_vec(); - for i in 0..proof.len() / 32 { - let mut buffer = [0u8; 64]; - if index % 2 == 0 { - buffer[..32].copy_from_slice(&computed_hash); - buffer[32..].copy_from_slice(&proof[i * 32..(i + 1) * 32]); - } else { - buffer[..32].copy_from_slice(&proof[i * 32..(i + 1) * 32]); - buffer[32..].copy_from_slice(&computed_hash); - } - computed_hash = web3::keccak256(&buffer).to_vec(); - index /= 2; - } - - Ok(computed_hash) - } - - /// Verifies the certificate's batch root - pub fn verify_merkle_proof(&self, cert: &BlobInfo) -> Result<(), VerificationError> { - let inclusion_proof = &cert.blob_verification_proof.inclusion_proof; - let root = &cert - .blob_verification_proof - .batch_medatada - .batch_header - .batch_root; - let blob_index = cert.blob_verification_proof.blob_index; - let blob_header = &cert.blob_header; - - let blob_header_hash = self.hash_encode_blob_header(blob_header); - let leaf_hash = web3::keccak256(&blob_header_hash).to_vec(); - - let generated_root = - self.process_inclusion_proof(inclusion_proof, &leaf_hash, blob_index)?; - - if generated_root != *root { - return Err(VerificationError::DifferentRoots); - } - Ok(()) - } - - fn hash_batch_metadata( - &self, - batch_header: &BatchHeader, - signatory_record_hash: &[u8], - confirmation_block_number: u32, - ) -> Vec { - let batch_header_token = Token::Tuple(vec![ - Token::FixedBytes(batch_header.batch_root.clone()), // Clone only where necessary - Token::Bytes(batch_header.quorum_numbers.clone()), - Token::Bytes(batch_header.quorum_signed_percentages.clone()), - Token::Uint(ethabi::Uint::from(batch_header.reference_block_number)), - ]); - - let encoded = encode(&[batch_header_token]); - let header_hash = web3::keccak256(&encoded).to_vec(); - - let hash_token = Token::Tuple(vec![ - Token::FixedBytes(header_hash.to_vec()), - Token::FixedBytes(signatory_record_hash.to_owned()), // Clone only if required - ]); - - let mut hash_encoded = encode(&[hash_token]); - - hash_encoded.append(&mut confirmation_block_number.to_be_bytes().to_vec()); - web3::keccak256(&hash_encoded).to_vec() - } - - /// Retrieves the block to make the request to the service manager - async fn get_context_block(&self) -> Result { - let latest = self - .signing_client - .as_ref() - .block_number() - .await - .map_err(|_| VerificationError::ServiceManagerError)? - .as_u64(); - - let depth = self - .cfg - .settlement_layer_confirmation_depth - .saturating_sub(1); - let block_to_return = latest.saturating_sub(depth as u64); - Ok(block_to_return) - } - - async fn call_batch_id_to_metadata_hash( - &self, - blob_info: &BlobInfo, - ) -> Result, VerificationError> { - let context_block = self.get_context_block().await?; - - let func_selector = - ethabi::short_signature("batchIdToBatchMetadataHash", &[ParamType::Uint(32)]); - let mut data = func_selector.to_vec(); - let mut batch_id_vec = [0u8; 32]; - U256::from(blob_info.blob_verification_proof.batch_id).to_big_endian(&mut batch_id_vec); - data.append(batch_id_vec.to_vec().as_mut()); - - let call_request = CallRequest { - to: Some(self.cfg.svc_manager_addr), - data: Some(zksync_basic_types::web3::Bytes(data)), - ..Default::default() - }; - - let res = self - .signing_client - .as_ref() - .call_contract_function( - call_request, - Some(BlockId::Number(BlockNumber::Number(context_block.into()))), - ) - .await - .map_err(|_| VerificationError::ServiceManagerError)?; - - Ok(res.0.to_vec()) - } - - /// Verifies the certificate batch hash - pub async fn verify_batch(&self, blob_info: &BlobInfo) -> Result<(), VerificationError> { - let expected_hash = self.call_batch_id_to_metadata_hash(blob_info).await?; - - if expected_hash == vec![0u8; 32] { - return Err(VerificationError::EmptyHash); - } - - let actual_hash = self.hash_batch_metadata( - &blob_info - .blob_verification_proof - .batch_medatada - .batch_header, - &blob_info - .blob_verification_proof - .batch_medatada - .signatory_record_hash, - blob_info - .blob_verification_proof - .batch_medatada - .confirmation_block_number, - ); - - if expected_hash != actual_hash { - return Err(VerificationError::DifferentHashes); - } - Ok(()) - } - - fn decode_bytes(&self, encoded: Vec) -> Result, VerificationError> { - let output_type = [ParamType::Bytes]; - let tokens: Vec = ethabi::decode(&output_type, &encoded) - .map_err(|_| VerificationError::ServiceManagerError)?; - let token = tokens - .first() - .ok_or(VerificationError::ServiceManagerError)?; - match token { - Token::Bytes(data) => Ok(data.to_vec()), - _ => Err(VerificationError::ServiceManagerError), - } - } - - async fn get_quorum_adversary_threshold( - &self, - quorum_number: u32, - ) -> Result { - let func_selector = ethabi::short_signature("quorumAdversaryThresholdPercentages", &[]); - let data = func_selector.to_vec(); - - let call_request = CallRequest { - to: Some(self.cfg.svc_manager_addr), - data: Some(zksync_basic_types::web3::Bytes(data)), - ..Default::default() - }; - - let res = self - .signing_client - .as_ref() - .call_contract_function(call_request, None) - .await - .map_err(|_| VerificationError::ServiceManagerError)?; - - let percentages = self.decode_bytes(res.0.to_vec())?; - - if percentages.len() > quorum_number as usize { - return Ok(percentages[quorum_number as usize]); - } - Ok(0) - } - - async fn call_quorum_numbers_required(&self) -> Result, VerificationError> { - let func_selector = ethabi::short_signature("quorumNumbersRequired", &[]); - let data = func_selector.to_vec(); - let call_request = CallRequest { - to: Some(self.cfg.svc_manager_addr), - data: Some(zksync_basic_types::web3::Bytes(data)), - ..Default::default() - }; - - let res = self - .signing_client - .as_ref() - .call_contract_function(call_request, None) - .await - .map_err(|_| VerificationError::ServiceManagerError)?; - - self.decode_bytes(res.0.to_vec()) - } - - /// Verifies that the certificate's blob quorum params are correct - pub async fn verify_security_params(&self, cert: &BlobInfo) -> Result<(), VerificationError> { - let blob_header = &cert.blob_header; - let batch_header = &cert.blob_verification_proof.batch_medatada.batch_header; - - let mut confirmed_quorums: HashMap = HashMap::new(); - for i in 0..blob_header.blob_quorum_params.len() { - if batch_header.quorum_numbers[i] as u32 - != blob_header.blob_quorum_params[i].quorum_number - { - return Err(VerificationError::WrongQuorumParams); - } - if blob_header.blob_quorum_params[i].adversary_threshold_percentage - > blob_header.blob_quorum_params[i].confirmation_threshold_percentage - { - return Err(VerificationError::WrongQuorumParams); - } - let quorum_adversary_threshold = self - .get_quorum_adversary_threshold(blob_header.blob_quorum_params[i].quorum_number) - .await?; - - if quorum_adversary_threshold > 0 - && blob_header.blob_quorum_params[i].adversary_threshold_percentage - < quorum_adversary_threshold as u32 - { - return Err(VerificationError::WrongQuorumParams); - } - - if (batch_header.quorum_signed_percentages[i] as u32) - < blob_header.blob_quorum_params[i].confirmation_threshold_percentage - { - return Err(VerificationError::WrongQuorumParams); - } - - confirmed_quorums.insert(blob_header.blob_quorum_params[i].quorum_number, true); - } - - let required_quorums = self.call_quorum_numbers_required().await?; - - for quorum in required_quorums { - if !confirmed_quorums.contains_key(&(quorum as u32)) { - return Err(VerificationError::QuorumNotConfirmed); - } - } - Ok(()) - } - - /// Verifies that the certificate is valid - pub async fn verify_inclusion_data_against_settlement_layer( - &self, - cert: BlobInfo, - ) -> Result<(), VerificationError> { - self.verify_batch(&cert).await?; - self.verify_merkle_proof(&cert)?; - self.verify_security_params(&cert).await?; - Ok(()) - } -} diff --git a/core/node/da_clients/src/eigen/verifier_tests.rs b/core/node/da_clients/src/eigen/verifier_tests.rs deleted file mode 100644 index 35c78dd8d9d3..000000000000 --- a/core/node/da_clients/src/eigen/verifier_tests.rs +++ /dev/null @@ -1,815 +0,0 @@ -#[cfg(test)] -mod test { - use std::{collections::HashMap, str::FromStr}; - - use url::Url; - use zksync_eth_client::{clients::PKSigningClient, EnrichedClientResult}; - use zksync_types::{ - url::SensitiveUrl, - web3::{BlockId, Bytes, CallRequest}, - Address, K256PrivateKey, SLChainId, H160, U64, - }; - use zksync_web3_decl::client::{Client, DynClient, L1}; - - use crate::eigen::{ - blob_info::{ - BatchHeader, BatchMetadata, BlobHeader, BlobInfo, BlobQuorumParam, - BlobVerificationProof, G1Commitment, - }, - verifier::{VerificationError, Verifier, VerifierClient, VerifierConfig}, - }; - - fn get_verifier_config() -> VerifierConfig { - VerifierConfig { - rpc_url: "https://ethereum-holesky-rpc.publicnode.com".to_string(), - svc_manager_addr: Address::from_str("0xD4A7E1Bd8015057293f0D0A557088c286942e84b").unwrap(), - max_blob_size: 2 * 1024 * 1024, - g1_url: Url::parse("https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point").unwrap(), - g2_url: Url::parse("https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2").unwrap(), - settlement_layer_confirmation_depth: 0, - private_key: "0xd08aa7ae1bb5ddd46c3c2d8cdb5894ab9f54dec467233686ca42629e826ac4c6" - .to_string(), - chain_id: 17000, - } - } - - /// Mock struct for the Verifier - /// Used to avoid making actual calls to a remote disperser - /// and possible making the CI fail due to network issues. - /// To run tests with the actual verifier run: - /// `cargo test -p zksync_da_clients -- --ignored` - #[derive(Debug)] - pub struct MockVerifierClient { - replies: HashMap, - } - - impl MockVerifierClient { - pub fn new(replies: HashMap) -> Self { - Self { replies } - } - } - - #[async_trait::async_trait] - impl VerifierClient for MockVerifierClient { - fn clone_boxed(&self) -> Box { - Box::new(Self { - replies: self.replies.clone(), - }) - } - - async fn block_number(&self) -> EnrichedClientResult { - Ok(U64::from(42)) - } - - async fn call_contract_function( - &self, - request: CallRequest, - _block: Option, - ) -> EnrichedClientResult { - let req = serde_json::to_string(&request).unwrap(); - Ok(self.replies.get(&req).unwrap().clone()) - } - } - - fn create_remote_signing_client(cfg: VerifierConfig) -> PKSigningClient { - let url = SensitiveUrl::from_str(&cfg.rpc_url).unwrap(); - let query_client: Client = Client::http(url).unwrap().build(); - let query_client = Box::new(query_client) as Box>; - PKSigningClient::new_raw( - K256PrivateKey::from_bytes( - zksync_types::H256::from_str(&cfg.private_key) - .map_err(|_| VerificationError::ServiceManagerError) - .unwrap(), - ) - .map_err(|_| VerificationError::ServiceManagerError) - .unwrap(), - cfg.svc_manager_addr, - Verifier::DEFAULT_PRIORITY_FEE_PER_GAS, - SLChainId(cfg.chain_id), - query_client, - ) - } - - #[ignore = "depends on external RPC"] - #[tokio::test] - async fn test_verify_commitment() { - let cfg = get_verifier_config(); - let signing_client = create_remote_signing_client(cfg.clone()); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let commitment = G1Commitment { - x: vec![ - 22, 11, 176, 29, 82, 48, 62, 49, 51, 119, 94, 17, 156, 142, 248, 96, 240, 183, 134, - 85, 152, 5, 74, 27, 175, 83, 162, 148, 17, 110, 201, 74, - ], - y: vec![ - 12, 132, 236, 56, 147, 6, 176, 135, 244, 166, 21, 18, 87, 76, 122, 3, 23, 22, 254, - 236, 148, 129, 110, 207, 131, 116, 58, 170, 4, 130, 191, 157, - ], - }; - let blob = vec![1u8; 100]; // Actual blob sent was this blob but kzg-padded, but Blob::from_bytes_and_pad padds it inside, so we don't need to pad it here. - let result = verifier.verify_commitment(commitment, blob); - assert!(result.is_ok()); - } - - /// Test the verification of the commitment with a mocked verifier. - /// To test actual behaviour of the verifier, run the test above - #[tokio::test] - async fn test_verify_commitment_mocked() { - let cfg = get_verifier_config(); - let signing_client = MockVerifierClient::new(HashMap::new()); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let commitment = G1Commitment { - x: vec![ - 22, 11, 176, 29, 82, 48, 62, 49, 51, 119, 94, 17, 156, 142, 248, 96, 240, 183, 134, - 85, 152, 5, 74, 27, 175, 83, 162, 148, 17, 110, 201, 74, - ], - y: vec![ - 12, 132, 236, 56, 147, 6, 176, 135, 244, 166, 21, 18, 87, 76, 122, 3, 23, 22, 254, - 236, 148, 129, 110, 207, 131, 116, 58, 170, 4, 130, 191, 157, - ], - }; - let blob = vec![1u8; 100]; // Actual blob sent was this blob but kzg-padded, but Blob::from_bytes_and_pad padds it inside, so we don't need to pad it here. - let result = verifier.verify_commitment(commitment, blob); - assert!(result.is_ok()); - } - - #[ignore = "depends on external RPC"] - #[tokio::test] - async fn test_verify_merkle_proof() { - let cfg = get_verifier_config(); - let signing_client = create_remote_signing_client(cfg.clone()); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let cert = BlobInfo { - blob_header: BlobHeader { - commitment: G1Commitment { - x: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - y: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - }, - data_length: 4, - blob_quorum_params: vec![ - BlobQuorumParam { - quorum_number: 0, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - BlobQuorumParam { - quorum_number: 1, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - ], - }, - blob_verification_proof: BlobVerificationProof { - batch_id: 66507, - blob_index: 92, - batch_medatada: BatchMetadata { - batch_header: BatchHeader { - batch_root: vec![ - 179, 187, 53, 98, 192, 80, 151, 28, 125, 192, 115, 29, 129, 238, 216, - 8, 213, 210, 203, 143, 181, 19, 146, 113, 98, 131, 39, 238, 149, 248, - 211, 43, - ], - quorum_numbers: vec![0, 1], - quorum_signed_percentages: vec![100, 100], - reference_block_number: 2624794, - }, - signatory_record_hash: vec![ - 172, 32, 172, 142, 197, 52, 84, 143, 120, 26, 190, 9, 143, 217, 62, 19, 17, - 107, 105, 67, 203, 5, 172, 249, 6, 60, 105, 240, 134, 34, 66, 133, - ], - fee: vec![0], - confirmation_block_number: 2624876, - batch_header_hash: vec![ - 122, 115, 2, 85, 233, 75, 121, 85, 51, 81, 248, 170, 198, 252, 42, 16, 1, - 146, 96, 218, 159, 44, 41, 40, 94, 247, 147, 11, 255, 68, 40, 177, - ], - }, - inclusion_proof: vec![ - 203, 160, 237, 48, 117, 255, 75, 254, 117, 144, 164, 77, 29, 146, 36, 48, 190, - 140, 50, 100, 144, 237, 125, 125, 75, 54, 210, 247, 147, 23, 48, 189, 120, 4, - 125, 123, 195, 244, 207, 239, 145, 109, 0, 21, 11, 162, 109, 79, 192, 100, 138, - 157, 203, 22, 17, 114, 234, 72, 174, 231, 209, 133, 99, 118, 201, 160, 137, - 128, 112, 84, 34, 136, 174, 139, 96, 26, 246, 148, 134, 52, 200, 229, 160, 145, - 5, 120, 18, 187, 51, 11, 109, 91, 237, 171, 215, 207, 90, 95, 146, 54, 135, - 166, 66, 157, 255, 237, 69, 183, 141, 45, 162, 145, 71, 16, 87, 184, 120, 84, - 156, 220, 159, 4, 99, 48, 191, 203, 136, 112, 127, 226, 192, 184, 110, 6, 177, - 182, 109, 207, 197, 239, 161, 132, 17, 89, 56, 137, 205, 202, 101, 97, 60, 162, - 253, 23, 169, 75, 236, 211, 126, 121, 132, 191, 68, 167, 200, 16, 154, 149, - 202, 197, 7, 191, 26, 8, 67, 3, 37, 137, 16, 153, 30, 209, 238, 53, 233, 148, - 198, 253, 94, 216, 73, 25, 190, 205, 132, 208, 255, 219, 170, 98, 17, 160, 179, - 183, 200, 17, 99, 36, 130, 216, 223, 72, 222, 250, 73, 78, 79, 72, 253, 105, - 245, 84, 244, 196, - ], - quorum_indexes: vec![0, 1], - }, - }; - let result = verifier.verify_merkle_proof(&cert); - assert!(result.is_ok()); - } - - /// Test the verificarion of a merkle proof with a mocked verifier. - /// To test actual behaviour of the verifier, run the test above - #[tokio::test] - async fn test_verify_merkle_proof_mocked() { - let cfg = get_verifier_config(); - let signing_client = MockVerifierClient::new(HashMap::new()); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let cert = BlobInfo { - blob_header: BlobHeader { - commitment: G1Commitment { - x: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - y: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - }, - data_length: 4, - blob_quorum_params: vec![ - BlobQuorumParam { - quorum_number: 0, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - BlobQuorumParam { - quorum_number: 1, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - ], - }, - blob_verification_proof: BlobVerificationProof { - batch_id: 66507, - blob_index: 92, - batch_medatada: BatchMetadata { - batch_header: BatchHeader { - batch_root: vec![ - 179, 187, 53, 98, 192, 80, 151, 28, 125, 192, 115, 29, 129, 238, 216, - 8, 213, 210, 203, 143, 181, 19, 146, 113, 98, 131, 39, 238, 149, 248, - 211, 43, - ], - quorum_numbers: vec![0, 1], - quorum_signed_percentages: vec![100, 100], - reference_block_number: 2624794, - }, - signatory_record_hash: vec![ - 172, 32, 172, 142, 197, 52, 84, 143, 120, 26, 190, 9, 143, 217, 62, 19, 17, - 107, 105, 67, 203, 5, 172, 249, 6, 60, 105, 240, 134, 34, 66, 133, - ], - fee: vec![0], - confirmation_block_number: 2624876, - batch_header_hash: vec![ - 122, 115, 2, 85, 233, 75, 121, 85, 51, 81, 248, 170, 198, 252, 42, 16, 1, - 146, 96, 218, 159, 44, 41, 40, 94, 247, 147, 11, 255, 68, 40, 177, - ], - }, - inclusion_proof: vec![ - 203, 160, 237, 48, 117, 255, 75, 254, 117, 144, 164, 77, 29, 146, 36, 48, 190, - 140, 50, 100, 144, 237, 125, 125, 75, 54, 210, 247, 147, 23, 48, 189, 120, 4, - 125, 123, 195, 244, 207, 239, 145, 109, 0, 21, 11, 162, 109, 79, 192, 100, 138, - 157, 203, 22, 17, 114, 234, 72, 174, 231, 209, 133, 99, 118, 201, 160, 137, - 128, 112, 84, 34, 136, 174, 139, 96, 26, 246, 148, 134, 52, 200, 229, 160, 145, - 5, 120, 18, 187, 51, 11, 109, 91, 237, 171, 215, 207, 90, 95, 146, 54, 135, - 166, 66, 157, 255, 237, 69, 183, 141, 45, 162, 145, 71, 16, 87, 184, 120, 84, - 156, 220, 159, 4, 99, 48, 191, 203, 136, 112, 127, 226, 192, 184, 110, 6, 177, - 182, 109, 207, 197, 239, 161, 132, 17, 89, 56, 137, 205, 202, 101, 97, 60, 162, - 253, 23, 169, 75, 236, 211, 126, 121, 132, 191, 68, 167, 200, 16, 154, 149, - 202, 197, 7, 191, 26, 8, 67, 3, 37, 137, 16, 153, 30, 209, 238, 53, 233, 148, - 198, 253, 94, 216, 73, 25, 190, 205, 132, 208, 255, 219, 170, 98, 17, 160, 179, - 183, 200, 17, 99, 36, 130, 216, 223, 72, 222, 250, 73, 78, 79, 72, 253, 105, - 245, 84, 244, 196, - ], - quorum_indexes: vec![0, 1], - }, - }; - let result = verifier.verify_merkle_proof(&cert); - assert!(result.is_ok()); - } - - #[ignore = "depends on external RPC"] - #[tokio::test] - async fn test_hash_blob_header() { - let cfg = get_verifier_config(); - let signing_client = create_remote_signing_client(cfg.clone()); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let blob_header = BlobHeader { - commitment: G1Commitment { - x: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - ], - y: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - ], - }, - data_length: 2, - blob_quorum_params: vec![ - BlobQuorumParam { - quorum_number: 2, - adversary_threshold_percentage: 4, - confirmation_threshold_percentage: 5, - chunk_length: 6, - }, - BlobQuorumParam { - quorum_number: 2, - adversary_threshold_percentage: 4, - confirmation_threshold_percentage: 5, - chunk_length: 6, - }, - ], - }; - let result = verifier.hash_encode_blob_header(&blob_header); - let expected = "ba4675a31c9bf6b2f7abfdcedd34b74645cb7332b35db39bff00ae8516a67393"; - assert_eq!(result, hex::decode(expected).unwrap()); - } - - /// Test hashing of a blob header with a mocked verifier. - /// To test actual behaviour of the verifier, run the test above - #[tokio::test] - async fn test_hash_blob_header_mocked() { - let cfg = get_verifier_config(); - let signing_client = MockVerifierClient::new(HashMap::new()); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let blob_header = BlobHeader { - commitment: G1Commitment { - x: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - ], - y: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - ], - }, - data_length: 2, - blob_quorum_params: vec![ - BlobQuorumParam { - quorum_number: 2, - adversary_threshold_percentage: 4, - confirmation_threshold_percentage: 5, - chunk_length: 6, - }, - BlobQuorumParam { - quorum_number: 2, - adversary_threshold_percentage: 4, - confirmation_threshold_percentage: 5, - chunk_length: 6, - }, - ], - }; - let result = verifier.hash_encode_blob_header(&blob_header); - let expected = "ba4675a31c9bf6b2f7abfdcedd34b74645cb7332b35db39bff00ae8516a67393"; - assert_eq!(result, hex::decode(expected).unwrap()); - } - - #[ignore = "depends on external RPC"] - #[tokio::test] - async fn test_inclusion_proof() { - let cfg = get_verifier_config(); - let signing_client = create_remote_signing_client(cfg.clone()); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let proof = hex::decode("c455c1ea0e725d7ea3e5f29e9f48be8fc2787bb0a914d5a86710ba302c166ac4f626d76f67f1055bb960a514fb8923af2078fd84085d712655b58a19612e8cd15c3e4ac1cef57acde3438dbcf63f47c9fefe1221344c4d5c1a4943dd0d1803091ca81a270909dc0e146841441c9bd0e08e69ce6168181a3e4060ffacf3627480bec6abdd8d7bb92b49d33f180c42f49e041752aaded9c403db3a17b85e48a11e9ea9a08763f7f383dab6d25236f1b77c12b4c49c5cdbcbea32554a604e3f1d2f466851cb43fe73617b3d01e665e4c019bf930f92dea7394c25ed6a1e200d051fb0c30a2193c459f1cfef00bf1ba6656510d16725a4d1dc031cb759dbc90bab427b0f60ddc6764681924dda848824605a4f08b7f526fe6bd4572458c94e83fbf2150f2eeb28d3011ec921996dc3e69efa52d5fcf3182b20b56b5857a926aa66605808079b4d52c0c0cfe06923fa92e65eeca2c3e6126108e8c1babf5ac522f4d7").unwrap(); - let leaf = hex::decode("f6106e6ae4631e68abe0fa898cedbe97dbae6c7efb1b088c5aa2e8b91190ff96") - .unwrap(); - let expected_root = - hex::decode("7390b8023db8248123dcaeca57fa6c9340bef639e204f2278fc7ec3d46ad071b") - .unwrap(); - - let actual_root = verifier - .process_inclusion_proof(&proof, &leaf, 580) - .unwrap(); - - assert_eq!(actual_root, expected_root); - } - - /// Test proof inclusion with a mocked verifier. - /// To test actual behaviour of the verifier, run the test above - #[tokio::test] - async fn test_inclusion_proof_mocked() { - let cfg = get_verifier_config(); - let signing_client = MockVerifierClient::new(HashMap::new()); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let proof = hex::decode("c455c1ea0e725d7ea3e5f29e9f48be8fc2787bb0a914d5a86710ba302c166ac4f626d76f67f1055bb960a514fb8923af2078fd84085d712655b58a19612e8cd15c3e4ac1cef57acde3438dbcf63f47c9fefe1221344c4d5c1a4943dd0d1803091ca81a270909dc0e146841441c9bd0e08e69ce6168181a3e4060ffacf3627480bec6abdd8d7bb92b49d33f180c42f49e041752aaded9c403db3a17b85e48a11e9ea9a08763f7f383dab6d25236f1b77c12b4c49c5cdbcbea32554a604e3f1d2f466851cb43fe73617b3d01e665e4c019bf930f92dea7394c25ed6a1e200d051fb0c30a2193c459f1cfef00bf1ba6656510d16725a4d1dc031cb759dbc90bab427b0f60ddc6764681924dda848824605a4f08b7f526fe6bd4572458c94e83fbf2150f2eeb28d3011ec921996dc3e69efa52d5fcf3182b20b56b5857a926aa66605808079b4d52c0c0cfe06923fa92e65eeca2c3e6126108e8c1babf5ac522f4d7").unwrap(); - let leaf = hex::decode("f6106e6ae4631e68abe0fa898cedbe97dbae6c7efb1b088c5aa2e8b91190ff96") - .unwrap(); - let expected_root = - hex::decode("7390b8023db8248123dcaeca57fa6c9340bef639e204f2278fc7ec3d46ad071b") - .unwrap(); - - let actual_root = verifier - .process_inclusion_proof(&proof, &leaf, 580) - .unwrap(); - - assert_eq!(actual_root, expected_root); - } - - #[ignore = "depends on external RPC"] - #[tokio::test] - async fn test_verify_batch() { - let cfg = get_verifier_config(); - let signing_client = create_remote_signing_client(cfg.clone()); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let cert = BlobInfo { - blob_header: BlobHeader { - commitment: G1Commitment { - x: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - y: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - }, - data_length: 4, - blob_quorum_params: vec![ - BlobQuorumParam { - quorum_number: 0, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - BlobQuorumParam { - quorum_number: 1, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - ], - }, - blob_verification_proof: BlobVerificationProof { - batch_id: 66507, - blob_index: 92, - batch_medatada: BatchMetadata { - batch_header: BatchHeader { - batch_root: vec![ - 179, 187, 53, 98, 192, 80, 151, 28, 125, 192, 115, 29, 129, 238, 216, - 8, 213, 210, 203, 143, 181, 19, 146, 113, 98, 131, 39, 238, 149, 248, - 211, 43, - ], - quorum_numbers: vec![0, 1], - quorum_signed_percentages: vec![100, 100], - reference_block_number: 2624794, - }, - signatory_record_hash: vec![ - 172, 32, 172, 142, 197, 52, 84, 143, 120, 26, 190, 9, 143, 217, 62, 19, 17, - 107, 105, 67, 203, 5, 172, 249, 6, 60, 105, 240, 134, 34, 66, 133, - ], - fee: vec![0], - confirmation_block_number: 2624876, - batch_header_hash: vec![ - 122, 115, 2, 85, 233, 75, 121, 85, 51, 81, 248, 170, 198, 252, 42, 16, 1, - 146, 96, 218, 159, 44, 41, 40, 94, 247, 147, 11, 255, 68, 40, 177, - ], - }, - inclusion_proof: vec![ - 203, 160, 237, 48, 117, 255, 75, 254, 117, 144, 164, 77, 29, 146, 36, 48, 190, - 140, 50, 100, 144, 237, 125, 125, 75, 54, 210, 247, 147, 23, 48, 189, 120, 4, - 125, 123, 195, 244, 207, 239, 145, 109, 0, 21, 11, 162, 109, 79, 192, 100, 138, - 157, 203, 22, 17, 114, 234, 72, 174, 231, 209, 133, 99, 118, 201, 160, 137, - 128, 112, 84, 34, 136, 174, 139, 96, 26, 246, 148, 134, 52, 200, 229, 160, 145, - 5, 120, 18, 187, 51, 11, 109, 91, 237, 171, 215, 207, 90, 95, 146, 54, 135, - 166, 66, 157, 255, 237, 69, 183, 141, 45, 162, 145, 71, 16, 87, 184, 120, 84, - 156, 220, 159, 4, 99, 48, 191, 203, 136, 112, 127, 226, 192, 184, 110, 6, 177, - 182, 109, 207, 197, 239, 161, 132, 17, 89, 56, 137, 205, 202, 101, 97, 60, 162, - 253, 23, 169, 75, 236, 211, 126, 121, 132, 191, 68, 167, 200, 16, 154, 149, - 202, 197, 7, 191, 26, 8, 67, 3, 37, 137, 16, 153, 30, 209, 238, 53, 233, 148, - 198, 253, 94, 216, 73, 25, 190, 205, 132, 208, 255, 219, 170, 98, 17, 160, 179, - 183, 200, 17, 99, 36, 130, 216, 223, 72, 222, 250, 73, 78, 79, 72, 253, 105, - 245, 84, 244, 196, - ], - quorum_indexes: vec![0, 1], - }, - }; - let result = verifier.verify_batch(&cert).await; - assert!(result.is_ok()); - } - - /// Test batch verification with a mocked verifier. - /// To test actual behaviour of the verifier, run the test above - #[tokio::test] - async fn test_verify_batch_mocked() { - let mut mock_replies = HashMap::new(); - let mock_req = CallRequest { - from: None, - to: Some(H160::from_str("0xd4a7e1bd8015057293f0d0a557088c286942e84b").unwrap()), - gas: None, - gas_price: None, - value: None, - data: Some(Bytes::from( - hex::decode( - "eccbbfc900000000000000000000000000000000000000000000000000000000000103cb", - ) - .unwrap(), - )), - transaction_type: None, - access_list: None, - max_fee_per_gas: None, - max_priority_fee_per_gas: None, - }; - let mock_req = serde_json::to_string(&mock_req).unwrap(); - let mock_res = Bytes::from( - hex::decode("60933e76989e57d6fd210ae2fc3086958d708660ee6927f91963047ab1a91ba8") - .unwrap(), - ); - mock_replies.insert(mock_req, mock_res); - - let cfg = get_verifier_config(); - let signing_client = MockVerifierClient::new(mock_replies); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let cert = BlobInfo { - blob_header: BlobHeader { - commitment: G1Commitment { - x: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - y: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - }, - data_length: 4, - blob_quorum_params: vec![ - BlobQuorumParam { - quorum_number: 0, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - BlobQuorumParam { - quorum_number: 1, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - ], - }, - blob_verification_proof: BlobVerificationProof { - batch_id: 66507, - blob_index: 92, - batch_medatada: BatchMetadata { - batch_header: BatchHeader { - batch_root: vec![ - 179, 187, 53, 98, 192, 80, 151, 28, 125, 192, 115, 29, 129, 238, 216, - 8, 213, 210, 203, 143, 181, 19, 146, 113, 98, 131, 39, 238, 149, 248, - 211, 43, - ], - quorum_numbers: vec![0, 1], - quorum_signed_percentages: vec![100, 100], - reference_block_number: 2624794, - }, - signatory_record_hash: vec![ - 172, 32, 172, 142, 197, 52, 84, 143, 120, 26, 190, 9, 143, 217, 62, 19, 17, - 107, 105, 67, 203, 5, 172, 249, 6, 60, 105, 240, 134, 34, 66, 133, - ], - fee: vec![0], - confirmation_block_number: 2624876, - batch_header_hash: vec![ - 122, 115, 2, 85, 233, 75, 121, 85, 51, 81, 248, 170, 198, 252, 42, 16, 1, - 146, 96, 218, 159, 44, 41, 40, 94, 247, 147, 11, 255, 68, 40, 177, - ], - }, - inclusion_proof: vec![ - 203, 160, 237, 48, 117, 255, 75, 254, 117, 144, 164, 77, 29, 146, 36, 48, 190, - 140, 50, 100, 144, 237, 125, 125, 75, 54, 210, 247, 147, 23, 48, 189, 120, 4, - 125, 123, 195, 244, 207, 239, 145, 109, 0, 21, 11, 162, 109, 79, 192, 100, 138, - 157, 203, 22, 17, 114, 234, 72, 174, 231, 209, 133, 99, 118, 201, 160, 137, - 128, 112, 84, 34, 136, 174, 139, 96, 26, 246, 148, 134, 52, 200, 229, 160, 145, - 5, 120, 18, 187, 51, 11, 109, 91, 237, 171, 215, 207, 90, 95, 146, 54, 135, - 166, 66, 157, 255, 237, 69, 183, 141, 45, 162, 145, 71, 16, 87, 184, 120, 84, - 156, 220, 159, 4, 99, 48, 191, 203, 136, 112, 127, 226, 192, 184, 110, 6, 177, - 182, 109, 207, 197, 239, 161, 132, 17, 89, 56, 137, 205, 202, 101, 97, 60, 162, - 253, 23, 169, 75, 236, 211, 126, 121, 132, 191, 68, 167, 200, 16, 154, 149, - 202, 197, 7, 191, 26, 8, 67, 3, 37, 137, 16, 153, 30, 209, 238, 53, 233, 148, - 198, 253, 94, 216, 73, 25, 190, 205, 132, 208, 255, 219, 170, 98, 17, 160, 179, - 183, 200, 17, 99, 36, 130, 216, 223, 72, 222, 250, 73, 78, 79, 72, 253, 105, - 245, 84, 244, 196, - ], - quorum_indexes: vec![0, 1], - }, - }; - let result = verifier.verify_batch(&cert).await; - assert!(result.is_ok()); - } - - // #[ignore = "depends on external RPC"] - #[tokio::test] - async fn test_verify_security_params() { - let cfg = get_verifier_config(); - let signing_client = create_remote_signing_client(cfg.clone()); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let cert = BlobInfo { - blob_header: BlobHeader { - commitment: G1Commitment { - x: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - y: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - }, - data_length: 4, - blob_quorum_params: vec![ - BlobQuorumParam { - quorum_number: 0, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - BlobQuorumParam { - quorum_number: 1, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - ], - }, - blob_verification_proof: BlobVerificationProof { - batch_id: 66507, - blob_index: 92, - batch_medatada: BatchMetadata { - batch_header: BatchHeader { - batch_root: vec![ - 179, 187, 53, 98, 192, 80, 151, 28, 125, 192, 115, 29, 129, 238, 216, - 8, 213, 210, 203, 143, 181, 19, 146, 113, 98, 131, 39, 238, 149, 248, - 211, 43, - ], - quorum_numbers: vec![0, 1], - quorum_signed_percentages: vec![100, 100], - reference_block_number: 2624794, - }, - signatory_record_hash: vec![ - 172, 32, 172, 142, 197, 52, 84, 143, 120, 26, 190, 9, 143, 217, 62, 19, 17, - 107, 105, 67, 203, 5, 172, 249, 6, 60, 105, 240, 134, 34, 66, 133, - ], - fee: vec![0], - confirmation_block_number: 2624876, - batch_header_hash: vec![ - 122, 115, 2, 85, 233, 75, 121, 85, 51, 81, 248, 170, 198, 252, 42, 16, 1, - 146, 96, 218, 159, 44, 41, 40, 94, 247, 147, 11, 255, 68, 40, 177, - ], - }, - inclusion_proof: vec![ - 203, 160, 237, 48, 117, 255, 75, 254, 117, 144, 164, 77, 29, 146, 36, 48, 190, - 140, 50, 100, 144, 237, 125, 125, 75, 54, 210, 247, 147, 23, 48, 189, 120, 4, - 125, 123, 195, 244, 207, 239, 145, 109, 0, 21, 11, 162, 109, 79, 192, 100, 138, - 157, 203, 22, 17, 114, 234, 72, 174, 231, 209, 133, 99, 118, 201, 160, 137, - 128, 112, 84, 34, 136, 174, 139, 96, 26, 246, 148, 134, 52, 200, 229, 160, 145, - 5, 120, 18, 187, 51, 11, 109, 91, 237, 171, 215, 207, 90, 95, 146, 54, 135, - 166, 66, 157, 255, 237, 69, 183, 141, 45, 162, 145, 71, 16, 87, 184, 120, 84, - 156, 220, 159, 4, 99, 48, 191, 203, 136, 112, 127, 226, 192, 184, 110, 6, 177, - 182, 109, 207, 197, 239, 161, 132, 17, 89, 56, 137, 205, 202, 101, 97, 60, 162, - 253, 23, 169, 75, 236, 211, 126, 121, 132, 191, 68, 167, 200, 16, 154, 149, - 202, 197, 7, 191, 26, 8, 67, 3, 37, 137, 16, 153, 30, 209, 238, 53, 233, 148, - 198, 253, 94, 216, 73, 25, 190, 205, 132, 208, 255, 219, 170, 98, 17, 160, 179, - 183, 200, 17, 99, 36, 130, 216, 223, 72, 222, 250, 73, 78, 79, 72, 253, 105, - 245, 84, 244, 196, - ], - quorum_indexes: vec![0, 1], - }, - }; - let result = verifier.verify_security_params(&cert).await; - assert!(result.is_ok()); - } - - /// Test security params verification with a mocked verifier. - /// To test actual behaviour of the verifier, run the test above - #[tokio::test] - async fn test_verify_security_params_mocked() { - let mut mock_replies = HashMap::new(); - - // First request - let mock_req = CallRequest { - from: None, - to: Some(H160::from_str("0xd4a7e1bd8015057293f0d0a557088c286942e84b").unwrap()), - gas: None, - gas_price: None, - value: None, - data: Some(Bytes::from(hex::decode("8687feae").unwrap())), - transaction_type: None, - access_list: None, - max_fee_per_gas: None, - max_priority_fee_per_gas: None, - }; - let mock_req = serde_json::to_string(&mock_req).unwrap(); - let mock_res = Bytes::from( - hex::decode("000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020001000000000000000000000000000000000000000000000000000000000000") - .unwrap(), - ); - mock_replies.insert(mock_req, mock_res); - - // Second request - let mock_req = CallRequest { - from: None, - to: Some(H160::from_str("0xd4a7e1bd8015057293f0d0a557088c286942e84b").unwrap()), - gas: None, - gas_price: None, - value: None, - data: Some(Bytes::from(hex::decode("e15234ff").unwrap())), - transaction_type: None, - access_list: None, - max_fee_per_gas: None, - max_priority_fee_per_gas: None, - }; - let mock_req = serde_json::to_string(&mock_req).unwrap(); - let mock_res = Bytes::from( - hex::decode("000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020001000000000000000000000000000000000000000000000000000000000000") - .unwrap(), - ); - mock_replies.insert(mock_req, mock_res); - - let cfg = get_verifier_config(); - let signing_client = MockVerifierClient::new(mock_replies); - let verifier = Verifier::new(cfg, signing_client).await.unwrap(); - let cert = BlobInfo { - blob_header: BlobHeader { - commitment: G1Commitment { - x: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - y: vec![ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - ], - }, - data_length: 4, - blob_quorum_params: vec![ - BlobQuorumParam { - quorum_number: 0, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - BlobQuorumParam { - quorum_number: 1, - adversary_threshold_percentage: 33, - confirmation_threshold_percentage: 55, - chunk_length: 1, - }, - ], - }, - blob_verification_proof: BlobVerificationProof { - batch_id: 66507, - blob_index: 92, - batch_medatada: BatchMetadata { - batch_header: BatchHeader { - batch_root: vec![ - 179, 187, 53, 98, 192, 80, 151, 28, 125, 192, 115, 29, 129, 238, 216, - 8, 213, 210, 203, 143, 181, 19, 146, 113, 98, 131, 39, 238, 149, 248, - 211, 43, - ], - quorum_numbers: vec![0, 1], - quorum_signed_percentages: vec![100, 100], - reference_block_number: 2624794, - }, - signatory_record_hash: vec![ - 172, 32, 172, 142, 197, 52, 84, 143, 120, 26, 190, 9, 143, 217, 62, 19, 17, - 107, 105, 67, 203, 5, 172, 249, 6, 60, 105, 240, 134, 34, 66, 133, - ], - fee: vec![0], - confirmation_block_number: 2624876, - batch_header_hash: vec![ - 122, 115, 2, 85, 233, 75, 121, 85, 51, 81, 248, 170, 198, 252, 42, 16, 1, - 146, 96, 218, 159, 44, 41, 40, 94, 247, 147, 11, 255, 68, 40, 177, - ], - }, - inclusion_proof: vec![ - 203, 160, 237, 48, 117, 255, 75, 254, 117, 144, 164, 77, 29, 146, 36, 48, 190, - 140, 50, 100, 144, 237, 125, 125, 75, 54, 210, 247, 147, 23, 48, 189, 120, 4, - 125, 123, 195, 244, 207, 239, 145, 109, 0, 21, 11, 162, 109, 79, 192, 100, 138, - 157, 203, 22, 17, 114, 234, 72, 174, 231, 209, 133, 99, 118, 201, 160, 137, - 128, 112, 84, 34, 136, 174, 139, 96, 26, 246, 148, 134, 52, 200, 229, 160, 145, - 5, 120, 18, 187, 51, 11, 109, 91, 237, 171, 215, 207, 90, 95, 146, 54, 135, - 166, 66, 157, 255, 237, 69, 183, 141, 45, 162, 145, 71, 16, 87, 184, 120, 84, - 156, 220, 159, 4, 99, 48, 191, 203, 136, 112, 127, 226, 192, 184, 110, 6, 177, - 182, 109, 207, 197, 239, 161, 132, 17, 89, 56, 137, 205, 202, 101, 97, 60, 162, - 253, 23, 169, 75, 236, 211, 126, 121, 132, 191, 68, 167, 200, 16, 154, 149, - 202, 197, 7, 191, 26, 8, 67, 3, 37, 137, 16, 153, 30, 209, 238, 53, 233, 148, - 198, 253, 94, 216, 73, 25, 190, 205, 132, 208, 255, 219, 170, 98, 17, 160, 179, - 183, 200, 17, 99, 36, 130, 216, 223, 72, 222, 250, 73, 78, 79, 72, 253, 105, - 245, 84, 244, 196, - ], - quorum_indexes: vec![0, 1], - }, - }; - let result = verifier.verify_security_params(&cert).await; - assert!(result.is_ok()); - } -} diff --git a/core/node/node_framework/src/implementations/layers/da_clients/eigen.rs b/core/node/node_framework/src/implementations/layers/da_clients/eigen.rs index 515c2bb3d834..92e4b82930f1 100644 --- a/core/node/node_framework/src/implementations/layers/da_clients/eigen.rs +++ b/core/node/node_framework/src/implementations/layers/da_clients/eigen.rs @@ -1,7 +1,6 @@ use zksync_config::{configs::da_client::eigen::EigenSecrets, EigenConfig}; use zksync_da_client::DataAvailabilityClient; -use zksync_da_clients::eigen::{EigenClient, GetBlobData}; -use zksync_dal::{ConnectionPool, Core, CoreDal}; +use zksync_da_clients::eigen::EigenDAClient; use zksync_node_framework_derive::FromContext; use crate::{ @@ -48,34 +47,11 @@ impl WiringLayer for EigenWiringLayer { async fn wire(self, input: Self::Input) -> Result { let master_pool = input.master_pool.get().await?; - let get_blob_from_db = GetBlobFromDB { pool: master_pool }; - let client: Box = Box::new( - EigenClient::new(self.config, self.secrets, Box::new(get_blob_from_db)).await?, - ); + let client: Box = + Box::new(EigenDAClient::new(self.config, self.secrets, master_pool).await?); Ok(Self::Output { client: DAClientResource(client), }) } } - -#[derive(Debug, Clone)] -pub struct GetBlobFromDB { - pool: ConnectionPool, -} - -#[async_trait::async_trait] -impl GetBlobData for GetBlobFromDB { - async fn get_blob_data(&self, input: &str) -> anyhow::Result>> { - let mut conn = self.pool.connection_tagged("eigen_client").await?; - let batch = conn - .data_availability_dal() - .get_blob_data_by_blob_id(input) - .await?; - Ok(batch.map(|b| b.pubdata)) - } - - fn clone_boxed(&self) -> Box { - Box::new(self.clone()) - } -}