diff --git a/Cargo.lock b/Cargo.lock index 400f1c9c9..a22c24c94 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -221,9 +221,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.83" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "arbitrary" @@ -541,8 +541,24 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", + "asn1-rs-derive 0.4.0", + "asn1-rs-impl 0.1.0", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time 0.3.36", +] + +[[package]] +name = "asn1-rs" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ad1373757efa0f70ec53939aabc7152e1591cb485208052993070ac8d2429d" +dependencies = [ + "asn1-rs-derive 0.5.0", + "asn1-rs-impl 0.2.0", "displaydoc", "nom", "num-traits", @@ -563,6 +579,18 @@ dependencies = [ "synstructure 0.12.6", ] +[[package]] +name = "asn1-rs-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7378575ff571966e99a744addeff0bff98b8ada0dedf1956d59e634db95eaac1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "synstructure 0.13.1", +] + [[package]] name = "asn1-rs-impl" version = "0.1.0" @@ -574,6 +602,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "asn1_der" version = "0.7.6" @@ -592,12 +631,12 @@ dependencies = [ [[package]] name = "async-broadcast" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258b52a1aa741b9f09783b2d86cf0aeeb617bbf847f6933340a39644227acbdb" +checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" dependencies = [ - "event-listener 5.3.0", - "event-listener-strategy 0.5.2", + "event-listener 5.3.1", + "event-listener-strategy", "futures-core", "pin-project-lite 0.2.14", ] @@ -615,24 +654,23 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener 5.3.0", - "event-listener-strategy 0.5.2", + "event-listener-strategy", "futures-core", "pin-project-lite 0.2.14", ] [[package]] name = "async-compatibility-layer" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7d24a8f9d6fec5b9313ceebbd82133ae87cf94944c362e8169d7ec735c88a23" +checksum = "2c928880329566b45c159fca61fbc2a1d301a7e5fd2a0e94c17476bb1a3ea526" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "async-std", "async-trait", "color-eyre", @@ -652,15 +690,15 @@ version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c2886ab563af5038f79ec016dd7b87947ed138b794e8dd64992962c9cca0411" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "futures-io", ] [[package]] name = "async-executor" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" dependencies = [ "async-task", "concurrent-queue", @@ -687,10 +725,10 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel 2.2.1", + "async-channel 2.3.1", "async-executor", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.3.3", + "async-lock 3.4.0", "blocking", "futures-lite 2.3.0", "once_cell", @@ -736,17 +774,17 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", "futures-lite 2.3.0", "parking", - "polling 3.7.0", + "polling 3.7.1", "rustix 0.38.34", "slab", "tracing", @@ -764,12 +802,12 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "event-listener 5.3.1", + "event-listener-strategy", "pin-project-lite 0.2.14", ] @@ -821,12 +859,12 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +checksum = "329972aa325176e89114919f2a80fdae4f4c040f66a370b1a1159c6c0f94e7aa" dependencies = [ - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.3.3", + "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", @@ -913,7 +951,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -943,7 +981,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -1046,7 +1084,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -1063,7 +1101,7 @@ checksum = "edf3ee19dbc0a46d740f6f0926bde8c50f02bdbc7b536842da28f6ac56513a8b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -1281,12 +1319,11 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel 2.2.1", - "async-lock 3.3.0", + "async-channel 2.3.1", "async-task", "futures-io", "futures-lite 2.3.0", @@ -1295,9 +1332,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +checksum = "62dc83a094a71d43eeadd254b1ec2d24cb6a0bb6cadce00df51f0db594711a32" dependencies = [ "cc", "glob", @@ -1346,7 +1383,7 @@ dependencies = [ "rand 0.8.5", "sequencer", "serde", - "snafu 0.8.2", + "snafu 0.8.3", "surf", "surf-disco", "tagged-base64", @@ -1440,18 +1477,18 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" dependencies = [ "serde", ] [[package]] name = "capnp" -version = "0.19.3" +version = "0.19.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b11832e6fb7a695c4a63cc42bd97bd2cda7165cd850caf5aff9a3d0e617720ed" +checksum = "de71387912cac7dd3cb7c219e09628411620a18061bba58c71453c26ae7bf66a" dependencies = [ "embedded-io", ] @@ -1482,7 +1519,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.22", + "semver 1.0.23", "serde", "serde_json", "thiserror", @@ -1499,9 +1536,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.97" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" dependencies = [ "jobserver", "libc", @@ -1579,7 +1616,7 @@ dependencies = [ "num_enum", "pem 3.0.4", "prometheus", - "quinn", + "quinn 0.10.2", "rand 0.8.5", "rcgen 0.12.1", "redis", @@ -1677,7 +1714,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.1", + "strsim", ] [[package]] @@ -1689,7 +1726,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -1889,9 +1926,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.11.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ba00838774b4ab0233e355d26710fbfc8327a05c017f6dc4873f876d1f79f78" +checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" dependencies = [ "cfg-if", "cpufeatures", @@ -2047,18 +2084,18 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] @@ -2093,9 +2130,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -2252,7 +2289,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2294,15 +2331,15 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", "synstructure 0.13.1", ] [[package]] name = "darling" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" dependencies = [ "darling_core", "darling_macro", @@ -2310,27 +2347,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 2.0.60", + "strsim", + "syn 2.0.66", ] [[package]] name = "darling_macro" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" dependencies = [ "darling_core", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2389,7 +2426,21 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs 0.6.1", "displaydoc", "nom", "num-bigint", @@ -2426,7 +2477,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2447,7 +2498,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2457,7 +2508,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "206868b8242f27cecce124c19fd88157fbd0dd334df2587f36417bafbc85097b" dependencies = [ "derive_builder_core", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2607,7 +2658,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2707,9 +2758,9 @@ checksum = "bbbaaaf38131deb9ca518a274a45bfdb8771f139517b073b16c2d3d32ae5037b" [[package]] name = "either" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" dependencies = [ "serde", ] @@ -2784,7 +2835,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2795,18 +2846,19 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "erased-serde" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b73807008a3c7f171cc40312f37d95ef0396e048b5848d775f54b1a4dd4a0d3" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" dependencies = [ "serde", + "typeid", ] [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2999,7 +3051,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "syn 2.0.60", + "syn 2.0.66", "toml", "walkdir", ] @@ -3017,7 +3069,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -3043,7 +3095,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.60", + "syn 2.0.66", "tempfile", "thiserror", "tiny-keccak", @@ -3060,7 +3112,7 @@ dependencies = [ "ethers-core", "ethers-solc", "reqwest 0.11.27", - "semver 1.0.22", + "semver 1.0.23", "serde", "serde_json", "thiserror", @@ -3169,7 +3221,7 @@ dependencies = [ "path-slash", "rayon", "regex", - "semver 1.0.22", + "semver 1.0.23", "serde", "serde_json", "solang-parser", @@ -3201,43 +3253,22 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.3" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite 0.2.14", -] - -[[package]] -name = "event-listener" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ "concurrent-queue", "parking", "pin-project-lite 0.2.14", ] -[[package]] -name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite 0.2.14", -] - [[package]] name = "event-listener-strategy" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener 5.3.0", + "event-listener 5.3.1", "pin-project-lite 0.2.14", ] @@ -3284,15 +3315,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38793c55593b33412e3ae40c2c9781ffaa6f438f6f8c10f24e71846fbd7ae01e" - -[[package]] -name = "finl_unicode" -version = "1.2.0" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "fixed-hash" @@ -3507,7 +3532,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -3520,6 +3545,17 @@ dependencies = [ "rustls 0.21.12", ] +[[package]] +name = "futures-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" +dependencies = [ + "futures-io", + "rustls 0.23.9", + "rustls-pki-types", +] + [[package]] name = "futures-sink" version = "0.3.30" @@ -3703,15 +3739,15 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" dependencies = [ + "atomic-waker", "bytes 1.6.0", "fnv", "futures-core", "futures-sink", - "futures-util", "http 1.1.0", "indexmap 2.2.6", "slab", @@ -3970,7 +4006,7 @@ dependencies = [ [[package]] name = "hotshot" version = "0.5.43" -source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.55#81842b54a699a255645ac195354a0feb08fdc9d6" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.56#1138cfeafc061839494391eb52a46d0259008cf0" dependencies = [ "anyhow", "async-broadcast", @@ -3984,6 +4020,7 @@ dependencies = [ "cdn-broker", "cdn-client", "cdn-marshal", + "chrono", "committable", "custom_debug 0.5.1", "dashmap", @@ -4004,7 +4041,7 @@ dependencies = [ "rand 0.8.5", "serde", "sha2 0.10.8", - "snafu 0.8.2", + "snafu 0.8.3", "surf-disco", "time 0.3.36", "tokio", @@ -4015,7 +4052,7 @@ dependencies = [ [[package]] name = "hotshot-builder-api" version = "0.1.7" -source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.55#81842b54a699a255645ac195354a0feb08fdc9d6" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.56#1138cfeafc061839494391eb52a46d0259008cf0" dependencies = [ "async-trait", "clap", @@ -4024,7 +4061,7 @@ dependencies = [ "futures", "hotshot-types", "serde", - "snafu 0.8.2", + "snafu 0.8.3", "tagged-base64", "tide-disco", "toml", @@ -4033,8 +4070,8 @@ dependencies = [ [[package]] name = "hotshot-builder-core" -version = "0.1.21" -source = "git+https://github.com/EspressoSystems/hotshot-builder-core?tag=0.1.23#978778b3852d57f0239cdb448a097845e67024a6" +version = "0.1.25" +source = "git+https://github.com/EspressoSystems/hotshot-builder-core?tag=0.1.25#0862a0a1335ca07e1b5bb3d619c1cd996a886382" dependencies = [ "anyhow", "async-broadcast", @@ -4052,7 +4089,7 @@ dependencies = [ "hotshot-types", "serde", "sha2 0.10.8", - "snafu 0.8.2", + "snafu 0.8.3", "surf-disco", "tagged-base64", "tide-disco", @@ -4086,8 +4123,8 @@ dependencies = [ [[package]] name = "hotshot-events-service" -version = "0.1.22" -source = "git+https://github.com/EspressoSystems/hotshot-events-service.git?tag=0.1.23#7049c81d8e697894803ea76e7128d0aca7fa47c9" +version = "0.1.25" +source = "git+https://github.com/EspressoSystems/hotshot-events-service.git?tag=0.1.25#964c175d9145dcde354cbaf407f26f05976c5348" dependencies = [ "async-broadcast", "async-compatibility-layer", @@ -4101,7 +4138,7 @@ dependencies = [ "futures", "hotshot-types", "serde", - "snafu 0.8.2", + "snafu 0.8.3", "tagged-base64", "tide-disco", "toml", @@ -4112,7 +4149,7 @@ dependencies = [ [[package]] name = "hotshot-example-types" version = "0.5.43" -source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.55#81842b54a699a255645ac195354a0feb08fdc9d6" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.56#1138cfeafc061839494391eb52a46d0259008cf0" dependencies = [ "anyhow", "async-broadcast", @@ -4133,7 +4170,7 @@ dependencies = [ "serde", "sha2 0.10.8", "sha3", - "snafu 0.8.2", + "snafu 0.8.3", "time 0.3.36", "tokio", "tracing", @@ -4143,18 +4180,18 @@ dependencies = [ [[package]] name = "hotshot-macros" version = "0.5.43" -source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.55#81842b54a699a255645ac195354a0feb08fdc9d6" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.56#1138cfeafc061839494391eb52a46d0259008cf0" dependencies = [ "derive_builder", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] name = "hotshot-orchestrator" version = "0.5.43" -source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.55#81842b54a699a255645ac195354a0feb08fdc9d6" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.56#1138cfeafc061839494391eb52a46d0259008cf0" dependencies = [ "anyhow", "async-compatibility-layer", @@ -4182,13 +4219,13 @@ dependencies = [ [[package]] name = "hotshot-query-service" -version = "0.1.29" -source = "git+https://github.com/EspressoSystems/hotshot-query-service?tag=0.1.29#bcfce9e03f38e955f81de8b87df3cc26d0a202b5" +version = "0.1.30" +source = "git+https://github.com/EspressoSystems/hotshot-query-service?tag=0.1.30#9d13a745cfbd9ac3c779b66f5959f009954323c6" dependencies = [ "anyhow", "ark-serialize", "async-compatibility-layer", - "async-lock 3.3.0", + "async-lock 3.4.0", "async-std", "async-trait", "atomic_store", @@ -4218,7 +4255,7 @@ dependencies = [ "refinery", "serde", "serde_json", - "snafu 0.8.2", + "snafu 0.8.3", "spin_sleep", "surf-disco", "tagged-base64", @@ -4237,7 +4274,7 @@ dependencies = [ [[package]] name = "hotshot-stake-table" version = "0.5.43" -source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.55#81842b54a699a255645ac195354a0feb08fdc9d6" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.56#1138cfeafc061839494391eb52a46d0259008cf0" dependencies = [ "ark-bn254", "ark-ed-on-bn254", @@ -4294,7 +4331,7 @@ dependencies = [ "rand_chacha 0.3.1", "sequencer-utils", "serde", - "snafu 0.8.2", + "snafu 0.8.3", "surf-disco", "tagged-base64", "tide-disco", @@ -4308,11 +4345,13 @@ dependencies = [ [[package]] name = "hotshot-task" version = "0.5.43" -source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.55#81842b54a699a255645ac195354a0feb08fdc9d6" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.56#1138cfeafc061839494391eb52a46d0259008cf0" dependencies = [ + "anyhow", "async-broadcast", "async-compatibility-layer", "async-std", + "async-trait", "futures", "tokio", "tracing", @@ -4321,7 +4360,7 @@ dependencies = [ [[package]] name = "hotshot-task-impls" version = "0.5.43" -source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.55#81842b54a699a255645ac195354a0feb08fdc9d6" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.56#1138cfeafc061839494391eb52a46d0259008cf0" dependencies = [ "anyhow", "async-broadcast", @@ -4344,7 +4383,7 @@ dependencies = [ "rand 0.8.5", "serde", "sha2 0.10.8", - "snafu 0.8.2", + "snafu 0.8.3", "surf-disco", "tagged-base64", "time 0.3.36", @@ -4356,8 +4395,9 @@ dependencies = [ [[package]] name = "hotshot-testing" version = "0.5.43" -source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.55#81842b54a699a255645ac195354a0feb08fdc9d6" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.56#1138cfeafc061839494391eb52a46d0259008cf0" dependencies = [ + "anyhow", "async-broadcast", "async-compatibility-layer", "async-lock 2.8.0", @@ -4385,7 +4425,7 @@ dependencies = [ "serde", "sha2 0.10.8", "sha3", - "snafu 0.8.2", + "snafu 0.8.3", "tagged-base64", "tide-disco", "tokio", @@ -4396,7 +4436,7 @@ dependencies = [ [[package]] name = "hotshot-types" version = "0.1.11" -source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.55#81842b54a699a255645ac195354a0feb08fdc9d6" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.56#1138cfeafc061839494391eb52a46d0259008cf0" dependencies = [ "anyhow", "ark-bls12-381", @@ -4436,7 +4476,7 @@ dependencies = [ "rand_chacha 0.3.1", "serde", "sha2 0.10.8", - "snafu 0.8.2", + "snafu 0.8.3", "tagged-base64", "time 0.3.36", "tokio", @@ -4589,7 +4629,7 @@ dependencies = [ "bytes 1.6.0", "futures-channel", "futures-util", - "h2 0.4.4", + "h2 0.4.5", "http 1.1.0", "http-body 1.0.0", "httparse", @@ -4644,9 +4684,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" dependencies = [ "bytes 1.6.0", "futures-channel", @@ -4673,7 +4713,7 @@ dependencies = [ "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core", + "windows-core 0.52.0", ] [[package]] @@ -4727,7 +4767,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" dependencies = [ - "async-io 2.3.2", + "async-io 2.3.3", "core-foundation", "fnv", "futures", @@ -4871,9 +4911,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -5330,9 +5370,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.154" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libm" @@ -5619,7 +5659,7 @@ version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49007d9a339b3e1d7eeebc4d67c05dbf23d300b7d091193ec2d3f26802d7faf2" dependencies = [ - "async-io 2.3.2", + "async-io 2.3.3", "async-std", "data-encoding", "futures", @@ -5659,7 +5699,7 @@ dependencies = [ [[package]] name = "libp2p-networking" version = "0.5.43" -source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.55#81842b54a699a255645ac195354a0feb08fdc9d6" +source = "git+https://github.com/EspressoSystems/hotshot?tag=rc-0.5.56#1138cfeafc061839494391eb52a46d0259008cf0" dependencies = [ "anyhow", "async-compatibility-layer", @@ -5680,7 +5720,7 @@ dependencies = [ "serde", "serde_bytes", "serde_json", - "snafu 0.8.2", + "snafu 0.8.3", "tokio", "tokio-stream", "tracing", @@ -5764,9 +5804,9 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0375cdfee57b47b313ef1f0fdb625b78aed770d33a40cf1c294a371ff5e6666" +checksum = "c67296ad4e092e23f92aea3d2bdb6f24eab79c0929ed816dfb460ea2f4567d2b" dependencies = [ "async-std", "bytes 1.6.0", @@ -5777,10 +5817,10 @@ dependencies = [ "libp2p-identity", "libp2p-tls", "parking_lot", - "quinn", + "quinn 0.11.1", "rand 0.8.5", - "ring 0.16.20", - "rustls 0.21.12", + "ring 0.17.8", + "rustls 0.23.9", "socket2 0.5.7", "thiserror", "tokio", @@ -5892,7 +5932,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -5915,20 +5955,20 @@ dependencies = [ [[package]] name = "libp2p-tls" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ce7e3c2e7569d685d08ec795157981722ff96e9e9f9eae75df3c29d02b07a5" +checksum = "251b17aebdd29df7e8f80e4d94b782fae42e934c49086e1a81ba23b60a8314f2" dependencies = [ "futures", - "futures-rustls", + "futures-rustls 0.26.0", "libp2p-core", "libp2p-identity", "rcgen 0.11.3", - "ring 0.16.20", - "rustls 0.21.12", + "ring 0.17.8", + "rustls 0.23.9", "rustls-webpki 0.101.7", "thiserror", - "x509-parser", + "x509-parser 0.16.0", "yasna", ] @@ -5967,7 +6007,7 @@ checksum = "f4846d51afd08180e164291c3754ba30dd4fbac6fac65571be56403c16431a5e" dependencies = [ "either", "futures", - "futures-rustls", + "futures-rustls 0.24.0", "libp2p-core", "libp2p-identity", "parking_lot", @@ -6065,9 +6105,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.16" +version = "1.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" +checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" dependencies = [ "cc", "libc", @@ -6089,9 +6129,9 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "local-ip-address" @@ -6203,7 +6243,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -6281,9 +6321,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" dependencies = [ "adler", ] @@ -6371,11 +6411,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -6524,11 +6563,10 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -6564,7 +6602,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -6622,10 +6660,10 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -6652,7 +6690,16 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", +] + +[[package]] +name = "oid-registry" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c958dd45046245b9c3c2547369bb634eb461670b2e7e0de552905801a648d1d" +dependencies = [ + "asn1-rs 0.6.1", ] [[package]] @@ -6715,7 +6762,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -6766,9 +6813,9 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "parity-scale-codec" -version = "3.6.9" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ "arrayvec", "bitvec", @@ -6780,11 +6827,11 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.9" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate 2.0.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 1.0.109", @@ -6798,9 +6845,9 @@ checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -6832,9 +6879,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "path-slash" @@ -6935,7 +6982,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -6951,9 +6998,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", "indexmap 2.2.6", @@ -6999,7 +7046,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -7037,7 +7084,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -7066,9 +7113,9 @@ checksum = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" [[package]] name = "piper" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" dependencies = [ "atomic-waker", "fastrand 2.1.0", @@ -7126,9 +7173,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.0" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "5e6a007746f34ed64099e88783b0ae369eaa3da6392868ba262e2af9b8fbaea1" dependencies = [ "cfg-if", "concurrent-queue", @@ -7258,12 +7305,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac2cf0f2e4f42b49f5ffd07dae8d746508ef7526c13940e5f524012ae6c6550" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -7280,25 +7327,6 @@ dependencies = [ "uint", ] -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" -dependencies = [ - "toml_edit 0.20.7", -] - [[package]] name = "proc-macro-crate" version = "3.1.0" @@ -7339,9 +7367,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" dependencies = [ "unicode-ident", ] @@ -7381,7 +7409,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -7402,9 +7430,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f5d036824e4761737860779c906171497f6d55681139d8312388f8fe398922" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes 1.6.0", "prost-derive", @@ -7412,22 +7440,22 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19de2de2a00075bf566bee3bd4db014b11587e84184d3f7a791bc17f1a8e9e48" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] name = "prost-types" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3235c33eb02c1f1e212abdbe34c78b264b038fb58ca612664343271e36e55ffe" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ "prost", ] @@ -7505,15 +7533,32 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" dependencies = [ - "async-io 1.13.0", + "bytes 1.6.0", + "pin-project-lite 0.2.14", + "quinn-proto 0.10.6", + "quinn-udp 0.4.1", + "rustc-hash", + "rustls 0.21.12", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904e3d3ba178131798c6d9375db2b13b34337d489b089fc5ba0825a2ff1bee73" +dependencies = [ + "async-io 2.3.3", "async-std", "bytes 1.6.0", "futures-io", "pin-project-lite 0.2.14", - "quinn-proto", - "quinn-udp", + "quinn-proto 0.11.2", + "quinn-udp 0.5.1", "rustc-hash", - "rustls 0.21.12", + "rustls 0.23.9", "thiserror", "tokio", "tracing", @@ -7536,6 +7581,23 @@ dependencies = [ "tracing", ] +[[package]] +name = "quinn-proto" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e974563a4b1c2206bbc61191ca4da9c22e4308b4c455e8906751cc7828393f08" +dependencies = [ + "bytes 1.6.0", + "rand 0.8.5", + "ring 0.17.8", + "rustc-hash", + "rustls 0.23.9", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + [[package]] name = "quinn-udp" version = "0.4.1" @@ -7549,6 +7611,19 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "quinn-udp" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4f0def2590301f4f667db5a77f9694fb004f82796dc1a8b1508fafa3d0e8b72" +dependencies = [ + "libc", + "once_cell", + "socket2 0.5.7", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "quote" version = "1.0.36" @@ -7695,7 +7770,7 @@ dependencies = [ "pem 3.0.4", "ring 0.17.8", "time 0.3.36", - "x509-parser", + "x509-parser 0.15.1", "yasna", ] @@ -7792,7 +7867,7 @@ dependencies = [ "quote", "refinery-core", "regex", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -7900,7 +7975,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.4.4", + "h2 0.4.5", "http 1.1.0", "http-body 1.0.0", "http-body-util", @@ -8117,9 +8192,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -8148,7 +8223,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.22", + "semver 1.0.23", ] [[package]] @@ -8183,7 +8258,7 @@ dependencies = [ "bitflags 2.5.0", "errno", "libc", - "linux-raw-sys 0.4.13", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] @@ -8221,7 +8296,21 @@ dependencies = [ "log", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.3", + "rustls-webpki 0.102.4", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a218f0f6d05669de4eabfb24f31ce802035c952429d037507b4a4a39f0e60c5b" +dependencies = [ + "once_cell", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.4", "subtle", "zeroize", ] @@ -8247,9 +8336,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.5.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beb461507cee2c2ff151784c52762cf4d9ff6a61f3e80968600ed24fa837fa54" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "rustls-webpki" @@ -8263,9 +8352,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.3" +version = "0.102.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" dependencies = [ "ring 0.17.8", "rustls-pki-types", @@ -8274,9 +8363,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rw-stream-sink" @@ -8291,9 +8380,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "salsa20" @@ -8315,9 +8404,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.2" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" dependencies = [ "cfg-if", "derive_more", @@ -8327,11 +8416,11 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.2" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate", "proc-macro2", "quote", "syn 1.0.109", @@ -8444,9 +8533,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" dependencies = [ "serde", ] @@ -8533,7 +8622,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "snafu 0.8.2", + "snafu 0.8.3", "strum", "surf-disco", "tagged-base64", @@ -8577,9 +8666,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.200" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] @@ -8606,13 +8695,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.200" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -8626,9 +8715,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -8648,9 +8737,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" dependencies = [ "serde", ] @@ -8694,7 +8783,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -8935,11 +9024,11 @@ dependencies = [ [[package]] name = "snafu" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75976f4748ab44f6e5332102be424e7c2dc18daeaf7e725f2040c3ebb133512e" +checksum = "418b8136fec49956eba89be7da2847ec1909df92a9ae4178b5ff0ff092c8d95e" dependencies = [ - "snafu-derive 0.8.2", + "snafu-derive 0.8.3", ] [[package]] @@ -8956,14 +9045,14 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b19911debfb8c2fb1107bc6cb2d61868aaf53a988449213959bb1b5b1ed95f" +checksum = "1a4812a669da00d17d8266a0439eddcacbc88b17f732f927e52eeb9d196f7fb5" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -9363,21 +9452,15 @@ dependencies = [ [[package]] name = "stringprep" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" dependencies = [ - "finl_unicode", "unicode-bidi", "unicode-normalization", + "unicode-properties", ] -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" @@ -9395,15 +9478,15 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +checksum = "f7993a8e3a9e88a00351486baae9522c91b123a088f76469e5bd5cc17198ea87" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", "rustversion", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -9437,9 +9520,9 @@ dependencies = [ [[package]] name = "surf-disco" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b649b5919e809b105a8ae833154430f7069b0e3a392fff26a672211c6b8e30d" +checksum = "2e4318abbbbc4d640c6cb45d29cd3c70cf517c751fae9b68f2f76a6ff1950da7" dependencies = [ "async-std", "async-tungstenite", @@ -9543,7 +9626,7 @@ dependencies = [ "hex", "once_cell", "reqwest 0.11.27", - "semver 1.0.22", + "semver 1.0.23", "serde", "serde_json", "sha2 0.10.8", @@ -9565,9 +9648,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ "proc-macro2", "quote", @@ -9600,7 +9683,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -9635,7 +9718,7 @@ dependencies = [ "base64 0.22.1", "crc-any", "serde", - "snafu 0.8.2", + "snafu 0.8.3", "tagged-base64-macros", "wasm-bindgen", ] @@ -9681,22 +9764,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -9741,11 +9824,13 @@ dependencies = [ [[package]] name = "tide-disco" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf3579d6f1362fffc7d1686ed061537afe8a187fd0b18e0f5694ad17e977ff3" +checksum = "44c9d803bc734a5cced767b36bb1caab87e9eb7eb144cffcab38160b084a8cef" dependencies = [ "anyhow", + "async-h1", + "async-lock 3.4.0", "async-std", "async-trait", "clap", @@ -9769,14 +9854,14 @@ dependencies = [ "prometheus", "reqwest 0.12.4", "routefinder", - "semver 1.0.22", + "semver 1.0.23", "serde", "serde_json", "serde_with", "shellexpand", "signal-hook", "signal-hook-async-std", - "snafu 0.8.2", + "snafu 0.8.3", "strum", "strum_macros", "tagged-base64", @@ -9907,9 +9992,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes 1.6.0", @@ -9937,13 +10022,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -10044,47 +10129,25 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.12" +version = "0.8.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.12", + "toml_edit 0.22.13", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" dependencies = [ "serde", ] -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.20.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" -dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.21.1" @@ -10098,15 +10161,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.12" +version = "0.22.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" +checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" dependencies = [ "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.8", + "winnow 0.6.9", ] [[package]] @@ -10188,7 +10251,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -10303,7 +10366,7 @@ checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -10353,6 +10416,12 @@ dependencies = [ "utf-8", ] +[[package]] +name = "typeid" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "059d83cc991e7a42fc37bd50941885db0888e34209f8cfd9aab07ddec03bc9cf" + [[package]] name = "typenum" version = "1.17.0" @@ -10413,6 +10482,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-properties" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" + [[package]] name = "unicode-segmentation" version = "1.11.0" @@ -10491,7 +10566,7 @@ dependencies = [ "once_cell", "rustls 0.22.4", "rustls-pki-types", - "rustls-webpki 0.102.3", + "rustls-webpki 0.102.4", "url", "webpki-roots 0.26.1", ] @@ -10586,9 +10661,9 @@ dependencies = [ [[package]] name = "vbs" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "971bcbd6c41e4e53fa9eab95b2a8ddaf1826be2f3e86b4101efebc8c3a17fde0" +checksum = "1da07d9ca0c69892851ff70256392d1b0c6408a0007cc87409b1ca3064821e9b" dependencies = [ "anyhow", "bincode", @@ -10629,9 +10704,9 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "waker-fn" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] name = "walkdir" @@ -10720,7 +10795,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -10754,7 +10829,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10873,7 +10948,7 @@ version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" dependencies = [ - "windows-core", + "windows-core 0.51.1", "windows-targets 0.48.5", ] @@ -10886,6 +10961,15 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -11036,9 +11120,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" +checksum = "86c949fede1d13936a99f14fafd3e76fd642b556dd2ce96287fbe2e0151bfac6" dependencies = [ "memchr", ] @@ -11109,18 +11193,35 @@ version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", "data-encoding", - "der-parser", + "der-parser 8.2.0", "lazy_static", "nom", - "oid-registry", + "oid-registry 0.6.1", "ring 0.16.20", "rusticata-macros", "thiserror", "time 0.3.36", ] +[[package]] +name = "x509-parser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +dependencies = [ + "asn1-rs 0.6.1", + "data-encoding", + "der-parser 9.0.0", + "lazy_static", + "nom", + "oid-registry 0.7.0", + "rusticata-macros", + "thiserror", + "time 0.3.36", +] + [[package]] name = "xml-rs" version = "0.8.20" @@ -11193,29 +11294,29 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.33" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "087eca3c1eaf8c47b94d02790dd086cd594b912d2043d4de4bfdd466b3befb7c" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.33" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f4b6c273f496d8fd4eaf18853e6b448760225dc030ff2c485a786859aea6393" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] @@ -11228,7 +11329,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index add22ffa0..cc7838fa5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,19 +47,19 @@ dotenvy = "0.15" ethers = { version = "2.0", features = ["solc"] } futures = "0.3" -hotshot = { git = "https://github.com/EspressoSystems/hotshot", tag = "0.5.55" } +hotshot = { git = "https://github.com/EspressoSystems/hotshot", tag = "rc-0.5.56" } # Hotshot imports -hotshot-builder-api = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "0.5.55" } -hotshot-builder-core = { git = "https://github.com/EspressoSystems/hotshot-builder-core", tag = "0.1.23" } -hotshot-contract-adapter = { version = "0.1.0", path = "contracts/rust/adapter" } -hotshot-events-service = { git = "https://github.com/EspressoSystems/hotshot-events-service.git", tag = "0.1.23" } -hotshot-orchestrator = { git = "https://github.com/EspressoSystems/hotshot", tag = "0.5.55" } -hotshot-query-service = { git = "https://github.com/EspressoSystems/hotshot-query-service", tag = "0.1.29" } -hotshot-stake-table = { git = "https://github.com/EspressoSystems/hotshot", tag = "0.5.55" } +hotshot-builder-api = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "rc-0.5.56" } +hotshot-builder-core = { git = "https://github.com/EspressoSystems/hotshot-builder-core", tag = "0.1.25" } +hotshot-events-service = { git = "https://github.com/EspressoSystems/hotshot-events-service.git", tag = "0.1.25" } +hotshot-orchestrator = { git = "https://github.com/EspressoSystems/hotshot", tag = "rc-0.5.56" } +hotshot-query-service = { git = "https://github.com/EspressoSystems/hotshot-query-service", tag = "0.1.30" } +hotshot-stake-table = { git = "https://github.com/EspressoSystems/hotshot", tag = "rc-0.5.56" } hotshot-state-prover = { version = "0.1.0", path = "hotshot-state-prover" } -hotshot-task = { git = "https://github.com/EspressoSystems/hotshot", tag = "0.5.55" } -hotshot-testing = { git = "https://github.com/EspressoSystems/hotshot", tag = "0.5.55" } -hotshot-types = { git = "https://github.com/EspressoSystems/hotshot", tag = "0.5.55" } +hotshot-task = { git = "https://github.com/EspressoSystems/hotshot", tag = "rc-0.5.56" } +hotshot-testing = { git = "https://github.com/EspressoSystems/hotshot", tag = "rc-0.5.56" } +hotshot-types = { git = "https://github.com/EspressoSystems/hotshot", tag = "rc-0.5.56" } +hotshot-contract-adapter = { version = "0.1.0", path = "contracts/rust/adapter" } # Push CDN imports cdn-broker = { git = "https://github.com/EspressoSystems/Push-CDN", features = [ @@ -99,9 +99,9 @@ jf-relation = { git = "https://github.com/EspressoSystems/jellyfish", tag = "0.4 jf-utils = { git = "https://github.com/EspressoSystems/jellyfish", tag = "0.4.5" } snafu = "0.8" strum = { version = "0.26", features = ["derive"] } -surf-disco = "0.6" +surf-disco = "0.7" tagged-base64 = "0.4" -tide-disco = "0.6" +tide-disco = "0.7" time = "0.3" tracing = "0.1" bytesize = "1.3" diff --git a/builder/src/bin/permissionless-builder.rs b/builder/src/bin/permissionless-builder.rs index 137b5e4e3..a506b8c48 100644 --- a/builder/src/bin/permissionless-builder.rs +++ b/builder/src/bin/permissionless-builder.rs @@ -3,6 +3,7 @@ use builder::non_permissioned::{build_instance_state, BuilderConfig}; use clap::Parser; use cld::ClDuration; use es_version::SEQUENCER_VERSION; +use hotshot::traits::ValidatedState; use hotshot_types::data::ViewNumber; use hotshot_types::traits::node_implementation::ConsensusTime; use sequencer::{eth_signature_key::EthKeyPair, Genesis, L1Params}; @@ -127,6 +128,7 @@ async fn main() -> anyhow::Result<()> { let txn_timeout_duration = api_response_timeout_duration / 4; let buffer_view_num_count = opt.buffer_view_num_count; + let validated_state = ValidatedState::genesis(&instance_state).0; let _builder_config = BuilderConfig::init( builder_key_pair, @@ -139,6 +141,7 @@ async fn main() -> anyhow::Result<()> { api_response_timeout_duration, buffer_view_num_count, txn_timeout_duration, + validated_state, ) .await; diff --git a/builder/src/lib.rs b/builder/src/lib.rs index b077884b5..2f8702bcb 100644 --- a/builder/src/lib.rs +++ b/builder/src/lib.rs @@ -322,7 +322,7 @@ pub mod testing { bind_version: Ver, options: impl PersistenceOptions, ) -> Vec<( - SystemContextHandle>, + Arc>>, Option>, )> { let num_staked_nodes = self.num_staked_nodes(); @@ -348,7 +348,7 @@ pub mod testing { ) .await; // wrapped in some because need to take later - (hotshot_handle, Some(state_signer)) + (Arc::new(hotshot_handle), Some(state_signer)) } })) .await @@ -452,7 +452,7 @@ pub mod testing { hotshot_events_api_url: Url, known_nodes_with_stake: Vec>, num_non_staking_nodes: usize, - hotshot_context_handle: SystemContextHandle>, + hotshot_context_handle: Arc>>, ) { // create a event streamer let events_streamer = Arc::new(RwLock::new(EventsStreamer::new( @@ -560,6 +560,7 @@ pub mod testing { Duration::from_millis(2000), 15, Duration::from_millis(500), + ValidatedState::default(), ) .await .unwrap(); @@ -584,7 +585,7 @@ pub mod testing { { pub async fn init_permissioned_builder( hotshot_test_config: HotShotTestConfig, - hotshot_handle: SystemContextHandle>, + hotshot_handle: Arc>>, node_id: u64, state_signer: StateSigner, hotshot_builder_api_url: Url, @@ -612,7 +613,7 @@ pub mod testing { let bootstrapped_view = ViewNumber::new(0); let builder_context = BuilderContext::init( - hotshot_handle, + Arc::clone(&hotshot_handle), state_signer, node_id, key_pair, @@ -623,6 +624,7 @@ pub mod testing { Duration::from_millis(2000), 15, Duration::from_millis(500), + ValidatedState::default(), ) .await .unwrap(); @@ -704,7 +706,8 @@ mod test { let mut parent = { // TODO refactor repeated code from other tests let (genesis_payload, genesis_ns_table) = - Payload::from_transactions([], &genesis_state) + Payload::from_transactions([], &ValidatedState::default(), &genesis_state) + .await .expect("unable to create genesis payload"); let builder_commitment = genesis_payload.builder_commitment(&genesis_ns_table); let genesis_commitment = { diff --git a/builder/src/non_permissioned.rs b/builder/src/non_permissioned.rs index fbe3954bd..911f6a69c 100644 --- a/builder/src/non_permissioned.rs +++ b/builder/src/non_permissioned.rs @@ -36,7 +36,7 @@ use hotshot_types::{ }; use sequencer::{ catchup::StatePeers, eth_signature_key::EthKeyPair, l1_client::L1Client, ChainConfig, L1Params, - NetworkParams, NodeState, Payload, PrivKey, PubKey, SeqTypes, + NetworkParams, NodeState, Payload, PrivKey, PubKey, SeqTypes, ValidatedState, }; use hotshot_events_service::{ @@ -87,6 +87,7 @@ impl BuilderConfig { max_api_timeout_duration: Duration, buffered_view_num_count: usize, maximize_txns_count_timeout_duration: Duration, + validated_state: ValidatedState, ) -> anyhow::Result { tracing::info!( address = %builder_key_pair.fee_account(), @@ -114,8 +115,10 @@ impl BuilderConfig { // builder api request channel let (req_sender, req_receiver) = broadcast::>(channel_capacity.get()); - let (genesis_payload, genesis_ns_table) = Payload::from_transactions([], &instance_state) - .expect("genesis payload construction failed"); + let (genesis_payload, genesis_ns_table) = + Payload::from_transactions([], &validated_state, &instance_state) + .await + .expect("genesis payload construction failed"); let builder_commitment = genesis_payload.builder_commitment(&genesis_ns_table); @@ -159,6 +162,8 @@ impl BuilderConfig { .as_u64() .context("the base fee exceeds the maximum amount that a builder can pay (defined by u64::MAX)")?, Arc::new(instance_state), + Duration::from_secs(60), + Arc::new(validated_state), ); // spawn the builder event loop @@ -274,10 +279,8 @@ mod test { let num_non_staking_nodes = hotshot_config.config.num_nodes_without_stake; // non-staking node handle - let hotshot_context_handle = handles - [NonPermissionedBuilderTestConfig::SUBSCRIBED_DA_NODE_ID] - .0 - .clone(); + let hotshot_context_handle = + &handles[NonPermissionedBuilderTestConfig::SUBSCRIBED_DA_NODE_ID].0; // hotshot event streaming api url let hotshot_events_streaming_api_url = HotShotTestConfig::hotshot_event_streaming_api_url(); @@ -287,7 +290,7 @@ mod test { hotshot_events_streaming_api_url.clone(), known_nodes_with_stake, num_non_staking_nodes, - hotshot_context_handle, + Arc::clone(hotshot_context_handle), ); // builder api url diff --git a/builder/src/permissioned.rs b/builder/src/permissioned.rs index 2c4595b37..2b0ed4c77 100644 --- a/builder/src/permissioned.rs +++ b/builder/src/permissioned.rs @@ -108,7 +108,7 @@ pub struct BuilderContext< Ver: StaticVersionType + 'static, > { /// The consensus handle - pub hotshot_handle: Consensus, + pub hotshot_handle: Arc>, /// Index of this sequencer node pub node_index: u64, @@ -186,7 +186,7 @@ pub async fn init_node::from_urls(network_params.state_peers)), node_id: node_index, @@ -283,7 +283,7 @@ pub async fn init_node, + hotshot_handle: Arc>, state_signer: StateSigner, node_index: u64, eth_key_pair: EthKeyPair, @@ -389,6 +392,7 @@ impl anyhow::Result { // tx channel let (tx_sender, tx_receiver) = broadcast::>(channel_capacity.get()); @@ -406,8 +410,10 @@ impl>(channel_capacity.get()); - let (genesis_payload, genesis_ns_table) = Payload::from_transactions([], &instance_state) - .expect("genesis payload construction failed"); + let (genesis_payload, genesis_ns_table) = + Payload::from_transactions([], &validated_state, &instance_state) + .await + .expect("genesis payload construction failed"); let builder_commitment = genesis_payload.builder_commitment(&genesis_ns_table); @@ -452,9 +458,11 @@ impl>, + handle: Arc>>>, } impl @@ -71,7 +71,7 @@ impl impl Stream> + Unpin { let state = self.clone(); - async move { state.consensus().await.event_stream() } + async move { state.consensus().await.read().await.event_stream() } .boxed() .flatten_stream() } @@ -111,8 +111,8 @@ impl &SystemContextHandle> { - &self.consensus.as_ref().get().await.get_ref().handle + async fn consensus(&self) -> Arc>>> { + Arc::clone(&self.consensus.as_ref().get().await.get_ref().handle) } async fn node_state(&self) -> &NodeState { @@ -126,6 +126,8 @@ impl for ApiState { async fn submit(&self, tx: Transaction) -> anyhow::Result<()> { - self.consensus().await.submit_transaction(tx).await?; + self.consensus() + .await + .read() + .await + .submit_transaction(tx) + .await?; Ok(()) } } @@ -222,9 +229,16 @@ impl anyhow::Result { - let state = self.consensus().await.state(view).await.context(format!( - "state not available for height {height}, view {view:?}" - ))?; + let state = self + .consensus() + .await + .read() + .await + .state(view) + .await + .context(format!( + "state not available for height {height}, view {view:?}" + ))?; let (proof, balance) = FeeAccountProof::prove(&state.fee_merkle_tree, account).context( format!("account {account} not available for height {height}, view {view:?}"), )?; @@ -233,9 +247,16 @@ impl anyhow::Result { - let state = self.consensus().await.state(view).await.context(format!( - "state not available for height {height}, view {view:?}" - ))?; + let state = self + .consensus() + .await + .read() + .await + .state(view) + .await + .context(format!( + "state not available for height {height}, view {view:?}" + ))?; let tree = &state.block_merkle_tree; let frontier = tree.lookup(tree.num_leaves() - 1).expect_ok()?.1; Ok(frontier) @@ -379,7 +400,7 @@ pub mod test_helpers { // Hook the builder up to the event stream from the first node if let Some(builder_task) = builder_task { - builder_task.start(Box::new(handle_0.event_stream())); + builder_task.start(Box::new(handle_0.event_stream().await)); } for ctx in &nodes { @@ -413,9 +434,10 @@ pub mod test_helpers { } pub async fn stop_consensus(&mut self) { - self.server.consensus_mut().shut_down().await; + self.server.shutdown_consensus().await; + for ctx in &mut self.peers { - ctx.consensus_mut().shut_down().await; + ctx.shutdown_consensus().await; } } } @@ -489,7 +511,7 @@ pub mod test_helpers { let l1 = anvil.endpoint().parse().unwrap(); let network = TestNetwork::new(options, [no_storage::Options; TestConfig::NUM_NODES], l1).await; - let mut events = network.server.event_stream(); + let mut events = network.server.event_stream().await; client.connect(None).await; @@ -526,7 +548,7 @@ pub mod test_helpers { // Wait for block >=2 appears // It's waiting for an extra second to make sure that the signature is generated loop { - height = network.server.consensus().decided_leaf().await.height(); + height = network.server.decided_leaf().await.height(); sleep(std::time::Duration::from_secs(1)).await; if height >= 2 { break; @@ -558,12 +580,12 @@ pub mod test_helpers { let options = opt(Options::from(options::Http { port }).catchup(Default::default())); let anvil = Anvil::new().spawn(); let l1 = anvil.endpoint().parse().unwrap(); - let mut network = + let network = TestNetwork::new(options, [no_storage::Options; TestConfig::NUM_NODES], l1).await; client.connect(None).await; // Wait for a few blocks to be decided. - let mut events = network.server.event_stream(); + let mut events = network.server.event_stream().await; loop { if let Event { event: EventType::Decide { leaf_chain, .. }, @@ -580,10 +602,13 @@ pub mod test_helpers { } // Stop consensus running on the node so we freeze the decided and undecided states. - network.server.consensus_mut().shut_down().await; + // We'll let it go out of scope here since it's a write lock. + { + network.server.shutdown_consensus().await; + } // Undecided fee state: absent account. - let leaf = network.server.consensus().decided_leaf().await; + let leaf = network.server.decided_leaf().await; let height = leaf.height() + 1; let view = leaf.view_number() + 1; let res = client @@ -601,7 +626,6 @@ pub mod test_helpers { .verify( &network .server - .consensus() .state(view) .await .unwrap() @@ -620,7 +644,6 @@ pub mod test_helpers { .unwrap(); let root = &network .server - .consensus() .state(view) .await .unwrap() @@ -697,7 +720,7 @@ mod api_tests { l1, ) .await; - let mut events = network.server.event_stream(); + let mut events = network.server.event_stream().await; // Connect client. let client: Client = @@ -994,7 +1017,7 @@ mod test { .await; // Wait for replica 0 to reach a (non-genesis) decide, before disconnecting it. - let mut events = network.peers[0].event_stream(); + let mut events = network.peers[0].event_stream().await; loop { let event = events.next().await.unwrap(); let EventType::Decide { leaf_chain, .. } = event.event else { @@ -1016,6 +1039,7 @@ mod test { network .server .event_stream() + .await .filter(|event| future::ready(matches!(event.event, EventType::Decide { .. }))) .take(3) .collect::>() @@ -1036,7 +1060,7 @@ mod test { SEQUENCER_VERSION, ) .await; - let mut events = node.event_stream(); + let mut events = node.event_stream().await; // Wait for a (non-genesis) block proposed by each node, to prove that the lagging node has // caught up and all nodes are in sync. @@ -1134,7 +1158,8 @@ mod test { let decided_view = chain.last().unwrap().leaf().view_number(); // Get the most recent state, for catchup. - let state = network.server.consensus().decided_state().await; + + let state = network.server.decided_state().await; tracing::info!(?decided_view, ?state, "consensus state"); // Fully shut down the API servers. diff --git a/sequencer/src/block.rs b/sequencer/src/block.rs index 75b131580..12cae22e1 100644 --- a/sequencer/src/block.rs +++ b/sequencer/src/block.rs @@ -1,4 +1,5 @@ -use crate::{BlockBuildingSnafu, NodeState, Transaction}; +use crate::{BlockBuildingSnafu, ChainConfig, NodeState, SeqTypes, Transaction, ValidatedState}; +use async_trait::async_trait; use committable::{Commitment, Committable}; use hotshot_query_service::availability::QueryablePayload; use hotshot_types::traits::{BlockPayload, EncodeBytes}; @@ -24,11 +25,13 @@ impl EncodeBytes for Payload { Arc::from(self.raw_payload.clone()) } } -impl BlockPayload for Payload { +#[async_trait] +impl BlockPayload for Payload { type Error = crate::Error; type Transaction = Transaction; type Instance = NodeState; type Metadata = NsTable; + type ValidatedState = ValidatedState; /// Returns (Self, metadata). /// @@ -50,8 +53,12 @@ impl BlockPayload for Payload { /// https://github.com/EspressoSystems/espresso-sequencer/issues/757 /// /// TODO(746) refactor and make pretty "table" code for tx, namespace tables? - fn from_transactions( - txs: impl IntoIterator, + /// + /// This function also performs catchup from peers + /// when the ValidatedState's chain config commitment differs from the NodeState's chain config, and the ValidatedState does not have full chain config. + async fn from_transactions( + txs: impl IntoIterator + Send, + _validated_state: &Self::ValidatedState, instance_state: &Self::Instance, ) -> Result<(Self, Self::Metadata), Self::Error> { let payload = Payload::from_txs(txs, &instance_state.chain_config)?; @@ -66,16 +73,6 @@ impl BlockPayload for Payload { } } - // TODO remove - fn genesis() -> (Self, Self::Metadata) { - // this is only called from `Leaf::genesis`. Since we are - // passing empty list, max_block_size is irrelevant so we can - // use the mock NodeState. A future update to HotShot should - // make a change there to remove the need for this workaround. - - Self::from_transactions([], &NodeState::mock()).unwrap() - } - fn transaction_commitments(&self, meta: &Self::Metadata) -> Vec> { self.enumerate(meta).map(|(_, tx)| tx.commit()).collect() } @@ -98,4 +95,10 @@ impl BlockPayload for Payload { ) -> impl 'a + Iterator { self.enumerate(metadata).map(|(_, t)| t) } + + fn empty() -> (Self, Self::Metadata) { + let payload = Payload::from_txs(vec![], &ChainConfig::default()).unwrap(); + let ns_table = payload.get_ns_table().clone(); + (payload, ns_table) + } } diff --git a/sequencer/src/block/payload.rs b/sequencer/src/block/payload.rs index d6dd37176..664cde38d 100644 --- a/sequencer/src/block/payload.rs +++ b/sequencer/src/block/payload.rs @@ -2,7 +2,7 @@ use crate::block::entry::{TxTableEntry, TxTableEntryWord}; use crate::block::payload; use crate::block::tables::NameSpaceTable; use crate::block::tables::TxTable; -use crate::{BlockBuildingSnafu, ChainConfig, Error, NamespaceId, Transaction}; +use crate::{BlockBuildingSnafu, ChainConfig, Error, NamespaceId, SeqTypes, Transaction}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize}; use derivative::Derivative; use hotshot::traits::BlockPayload; @@ -152,7 +152,9 @@ impl Payload { } pub fn from_txs( - txs: impl IntoIterator as BlockPayload>::Transaction>, + txs: impl IntoIterator< + Item = as BlockPayload>::Transaction, + >, chain_config: &ChainConfig, ) -> Result { let mut namespaces: HashMap = Default::default(); @@ -183,7 +185,7 @@ impl Payload { fn update_namespace_with_tx( namespaces: &mut HashMap, - tx: as BlockPayload>::Transaction, + tx: as BlockPayload>::Transaction, ) { let tx_bytes_len: TxTableEntry = tx.payload().len().try_into().unwrap(); // TODO (Philippe) error handling @@ -317,13 +319,11 @@ pub fn parse_ns_payload(ns_bytes: &[u8], ns_id: NamespaceId) -> Vec } #[cfg(any(test, feature = "testing"))] -impl hotshot_types::traits::block_contents::TestableBlock +impl hotshot_types::traits::block_contents::TestableBlock for Payload { fn genesis() -> Self { - BlockPayload::from_transactions([], &Default::default()) - .unwrap() - .0 + BlockPayload::empty().0 } fn txn_count(&self) -> u64 { @@ -344,7 +344,7 @@ mod test { tx_iterator::TxIndex, }, transaction::NamespaceId, - ChainConfig, NodeState, Transaction, + ChainConfig, NodeState, Transaction, ValidatedState, }; use async_compatibility_layer::logging::{setup_backtrace, setup_logging}; use helpers::*; @@ -396,12 +396,12 @@ mod test { assert_eq!(payload.txn_count(), txs.len() as u64); } - #[test] - fn basic_correctness() { - check_basic_correctness::() + #[async_std::test] + async fn basic_correctness() { + check_basic_correctness::().await } - fn check_basic_correctness() { + async fn check_basic_correctness() { // play with this let test_cases = [ // 1 namespace only @@ -515,8 +515,13 @@ mod test { let all_txs_iter = derived_nss .iter() .flat_map(|(_ns_id, ns)| ns.txs.iter().cloned()); - let (block, actual_ns_table) = - Payload::from_transactions(all_txs_iter, &NodeState::mock()).unwrap(); + let (block, actual_ns_table) = Payload::from_transactions( + all_txs_iter, + &ValidatedState::default(), + &NodeState::mock(), + ) + .await + .unwrap(); let disperse_data = vid.disperse(&block.raw_payload).unwrap(); // TEST ACTUAL STUFF AGAINST DERIVED STUFF diff --git a/sequencer/src/block/queryable.rs b/sequencer/src/block/queryable.rs index d8f1025b0..114f0a826 100644 --- a/sequencer/src/block/queryable.rs +++ b/sequencer/src/block/queryable.rs @@ -1,6 +1,6 @@ -use crate::block::entry::TxTableEntryWord; use crate::block::payload::Payload; use crate::block::tables::TxTable; +use crate::{block::entry::TxTableEntryWord, SeqTypes}; use hotshot_query_service::availability::QueryablePayload; use hotshot_types::vid::{vid_scheme, SmallRangeProofType}; use jf_vid::payload_prover::{PayloadProver, Statement}; @@ -15,7 +15,7 @@ use super::{ }; // TODO don't hard-code TxTableEntryWord generic param -impl QueryablePayload for Payload { +impl QueryablePayload for Payload { type TransactionIndex = TxIndex; type Iter<'a> = TxIterator<'a, TxTableEntryWord>; type InclusionProof = TxInclusionProof; diff --git a/sequencer/src/context.rs b/sequencer/src/context.rs index b0fbefc7b..ab239c751 100644 --- a/sequencer/src/context.rs +++ b/sequencer/src/context.rs @@ -14,8 +14,10 @@ use hotshot::{ Memberships, Networks, SystemContext, }; use hotshot_orchestrator::client::OrchestratorClient; +use hotshot_query_service::Leaf; use hotshot_types::{ consensus::ConsensusMetricsValue, + data::ViewNumber, traits::{election::Membership, metrics::Metrics}, HotShotConfig, }; @@ -25,7 +27,7 @@ use vbs::version::StaticVersionType; use crate::{ network, persistence::SequencerPersistence, state_signature::StateSigner, - static_stake_table_commitment, Node, NodeState, PubKey, SeqTypes, Transaction, + static_stake_table_commitment, Node, NodeState, PubKey, SeqTypes, Transaction, ValidatedState, }; use hotshot_events_service::events_source::{EventConsumer, EventsStreamer}; /// The consensus handle @@ -41,7 +43,7 @@ pub struct SequencerContext< > { /// The consensus handle #[derivative(Debug = "ignore")] - handle: Consensus, + handle: Arc>>, /// Context for generating state signatures. state_signer: Arc>, @@ -162,7 +164,7 @@ impl impl Stream> { - self.handle.event_stream() + pub async fn event_stream(&self) -> impl Stream> { + self.handle.read().await.event_stream() } pub async fn submit_transaction(&self, tx: Transaction) -> anyhow::Result<()> { - self.handle.submit_transaction(tx).await?; + self.handle.read().await.submit_transaction(tx).await?; Ok(()) } @@ -216,17 +218,28 @@ impl &Consensus { - &self.handle + pub fn consensus(&self) -> Arc>> { + Arc::clone(&self.handle) } - pub fn node_state(&self) -> NodeState { - self.node_state.clone() + pub async fn shutdown_consensus(&self) { + self.handle.write().await.shut_down().await } - /// Return a mutable reference to the underlying consensus handle. - pub fn consensus_mut(&mut self) -> &mut Consensus { - &mut self.handle + pub async fn decided_leaf(&self) -> Leaf { + self.handle.read().await.decided_leaf().await + } + + pub async fn state(&self, view: ViewNumber) -> Option> { + self.handle.read().await.state(view).await + } + + pub async fn decided_state(&self) -> Arc { + self.handle.read().await.decided_state().await + } + + pub fn node_state(&self) -> NodeState { + self.node_state.clone() } /// Start participating in consensus. @@ -238,7 +251,7 @@ impl for Header { parent_leaf: &Leaf, payload_commitment: VidCommitment, builder_commitment: BuilderCommitment, - metadata: <::BlockPayload as BlockPayload>::Metadata, + metadata: <::BlockPayload as BlockPayload>::Metadata, builder_fee: BuilderFee, _vid_common: VidCommon, _version: Version, @@ -380,7 +380,7 @@ impl BlockHeader for Header { instance_state: &NodeState, payload_commitment: VidCommitment, builder_commitment: BuilderCommitment, - ns_table: <::BlockPayload as BlockPayload>::Metadata, + ns_table: <::BlockPayload as BlockPayload>::Metadata, ) -> Self { let ValidatedState { fee_merkle_tree, @@ -419,7 +419,9 @@ impl BlockHeader for Header { self.payload_commitment } - fn metadata(&self) -> &<::BlockPayload as BlockPayload>::Metadata { + fn metadata( + &self, + ) -> &<::BlockPayload as BlockPayload>::Metadata { &self.ns_table } @@ -515,7 +517,7 @@ mod test_headers { } impl TestCase { - fn run(self) { + async fn run(self) { setup_logging(); setup_backtrace(); @@ -524,7 +526,7 @@ mod test_headers { assert!(self.expected_l1_head >= self.parent_l1_head); assert!(self.expected_l1_finalized >= self.parent_l1_finalized); - let genesis = GenesisForTest::default(); + let genesis = GenesisForTest::default().await; let mut parent = genesis.header.clone(); parent.timestamp = self.parent_timestamp; parent.l1_head = self.parent_l1_head; @@ -605,24 +607,25 @@ mod test_headers { } } - #[test] - fn test_new_header() { + #[async_std::test] + async fn test_new_header() { // Simplest case: building on genesis, L1 info and timestamp unchanged. - TestCase::default().run() + TestCase::default().run().await } - #[test] - fn test_new_header_advance_timestamp() { + #[async_std::test] + async fn test_new_header_advance_timestamp() { TestCase { timestamp: 1, expected_timestamp: 1, ..Default::default() } .run() + .await } - #[test] - fn test_new_header_advance_l1_block() { + #[async_std::test] + async fn test_new_header_advance_l1_block() { TestCase { parent_l1_head: 0, parent_l1_finalized: Some(l1_block(0)), @@ -636,20 +639,22 @@ mod test_headers { ..Default::default() } .run() + .await } - #[test] - fn test_new_header_advance_l1_finalized_from_none() { + #[async_std::test] + async fn test_new_header_advance_l1_finalized_from_none() { TestCase { l1_finalized: Some(l1_block(1)), expected_l1_finalized: Some(l1_block(1)), ..Default::default() } .run() + .await } - #[test] - fn test_new_header_timestamp_behind_finalized_l1_block() { + #[async_std::test] + async fn test_new_header_timestamp_behind_finalized_l1_block() { let l1_finalized = Some(L1BlockInfo { number: 1, timestamp: 1.into(), @@ -667,10 +672,11 @@ mod test_headers { ..Default::default() } .run() + .await } - #[test] - fn test_new_header_timestamp_behind() { + #[async_std::test] + async fn test_new_header_timestamp_behind() { TestCase { parent_timestamp: 1, timestamp: 0, @@ -679,10 +685,11 @@ mod test_headers { ..Default::default() } .run() + .await } - #[test] - fn test_new_header_l1_head_behind() { + #[async_std::test] + async fn test_new_header_l1_head_behind() { TestCase { parent_l1_head: 1, l1_head: 0, @@ -691,10 +698,11 @@ mod test_headers { ..Default::default() } .run() + .await } - #[test] - fn test_new_header_l1_finalized_behind_some() { + #[async_std::test] + async fn test_new_header_l1_finalized_behind_some() { TestCase { parent_l1_finalized: Some(l1_block(1)), l1_finalized: Some(l1_block(0)), @@ -703,10 +711,11 @@ mod test_headers { ..Default::default() } .run() + .await } - #[test] - fn test_new_header_l1_finalized_behind_none() { + #[async_std::test] + async fn test_new_header_l1_finalized_behind_none() { TestCase { parent_l1_finalized: Some(l1_block(0)), l1_finalized: None, @@ -715,19 +724,21 @@ mod test_headers { ..Default::default() } .run() + .await } - #[test] - fn test_new_header_deposits_one() { + #[async_std::test] + async fn test_new_header_deposits_one() { TestCase { l1_deposits: vec![FeeInfo::new(Address::default(), 1)], ..Default::default() } .run() + .await } - #[test] - fn test_new_header_deposits_many() { + #[async_std::test] + async fn test_new_header_deposits_many() { TestCase { l1_deposits: [ (Address::default(), 1), @@ -740,6 +751,7 @@ mod test_headers { ..Default::default() } .run() + .await } struct GenesisForTest { @@ -750,11 +762,11 @@ mod test_headers { pub ns_table: NameSpaceTable, } - impl Default for GenesisForTest { - fn default() -> Self { + impl GenesisForTest { + async fn default() -> Self { let instance_state = NodeState::mock(); let validated_state = ValidatedState::genesis(&instance_state).0; - let leaf = Leaf::genesis(&instance_state); + let leaf = Leaf::genesis(&validated_state, &instance_state).await; let header = leaf.block_header().clone(); let ns_table = leaf.block_payload().unwrap().get_ns_table().clone(); Self { @@ -769,7 +781,7 @@ mod test_headers { #[async_std::test] async fn test_validate_proposal_error_cases() { - let genesis = GenesisForTest::default(); + let genesis = GenesisForTest::default().await; let vid_common = vid_scheme(1).disperse([]).unwrap().common; let mut validated_state = ValidatedState::default(); @@ -857,7 +869,7 @@ mod test_headers { let mut genesis_state = NodeState::mock().with_l1(L1Client::new(anvil.endpoint().parse().unwrap(), 1)); - let genesis = GenesisForTest::default(); + let genesis = GenesisForTest::default().await; let vid_common = vid_scheme(1).disperse([]).unwrap().common; let mut parent_state = genesis.validated_state.clone(); diff --git a/sequencer/src/hotshot_commitment.rs b/sequencer/src/hotshot_commitment.rs index ad205ad64..798ac3f45 100644 --- a/sequencer/src/hotshot_commitment.rs +++ b/sequencer/src/hotshot_commitment.rs @@ -275,7 +275,7 @@ fn build_sequence_batches_txn( #[cfg(test)] mod test { use super::*; - use crate::{l1_client::L1Client, Leaf, NodeState}; + use crate::{l1_client::L1Client, Leaf, NodeState, ValidatedState}; use async_compatibility_layer::logging::{setup_backtrace, setup_logging}; use async_std::task::spawn; use committable::Committable; @@ -327,9 +327,9 @@ mod test { } } - fn mock_leaf(height: u64, node_state: &NodeState) -> LeafQueryData { - let mut leaf = Leaf::genesis(node_state); - let mut qc = QuorumCertificate::genesis(node_state); + async fn mock_leaf(height: u64, node_state: &NodeState) -> LeafQueryData { + let mut leaf = Leaf::genesis(&ValidatedState::default(), node_state).await; + let mut qc = QuorumCertificate::genesis(&ValidatedState::default(), node_state).await; leaf.block_header_mut().height = height; qc.data.leaf_commit = leaf.commit(); LeafQueryData::new(leaf, qc).unwrap() @@ -379,7 +379,8 @@ mod test { NodeState::mock().with_l1(L1Client::new(anvil.provider().url().clone(), 1)); for i in 0..num_batches { - data.leaves.push(Some(mock_leaf(i as u64, &node_state))); + data.leaves + .push(Some(mock_leaf(i as u64, &node_state).await)); } tracing::info!("sequencing batches: {:?}", data.leaves); @@ -447,7 +448,7 @@ mod test { let node_state = NodeState::mock().with_l1(L1Client::new(anvil.provider().url().clone(), 1)); - data.leaves.push(Some(mock_leaf(0, &node_state))); + data.leaves.push(Some(mock_leaf(0, &node_state).await)); // Connect to the HotShot contract with the expected L1 client. let hotshot = HotShot::new(l1.hotshot.address(), adaptor_l1_signer); @@ -472,7 +473,7 @@ mod test { assert_eq!(l1.hotshot.block_height().call().await.unwrap().as_u64(), 1); // Once a new batch is available, we can sequence it. - data.leaves.push(Some(mock_leaf(1, &node_state))); + data.leaves.push(Some(mock_leaf(1, &node_state).await)); sync_with_l1(1, &data, &hotshot).await.unwrap(); let (event, _) = wait_for_new_batches(&l1, from_block.as_u64()).await; assert_eq!(event.first_block_number.as_u64(), 1); @@ -513,7 +514,7 @@ mod test { // Create a sequence of leaves, some of which are missing. let mut data = MockDataSource::default(); data.leaves - .extend([None, Some(mock_leaf(1, &node_state)), None]); + .extend([None, Some(mock_leaf(1, &node_state).await), None]); // Connect to the HotShot contract with the expected L1 client. let hotshot = HotShot::new(l1.hotshot.address(), adaptor_l1_signer); @@ -524,7 +525,7 @@ mod test { // If the first leaf is present but subsequent leaves are missing, we should sequence the // leaves that are available. - data.leaves[0] = Some(mock_leaf(0, &node_state)); + data.leaves[0] = Some(mock_leaf(0, &node_state).await); sync_with_l1(3, &data, &hotshot).await.unwrap(); // Check the NewBatches event. diff --git a/sequencer/src/lib.rs b/sequencer/src/lib.rs index fbfbe50c8..28854bb84 100644 --- a/sequencer/src/lib.rs +++ b/sequencer/src/lib.rs @@ -376,7 +376,7 @@ pub async fn init_node( let topics = { let mut topics = vec![Topic::Global]; if is_da { - topics.push(Topic::DA); + topics.push(Topic::Da); } topics }; @@ -513,7 +513,7 @@ pub mod testing { use hotshot::types::{EventType::Decide, Message}; use hotshot_stake_table::vec_based::StakeTable; use hotshot_testing::block_builder::{ - BuilderTask, SimpleBuilderImplementation, TestBuilderImplementation, + BuilderTask, SimpleBuilderConfig, SimpleBuilderImplementation, TestBuilderImplementation, }; use hotshot_types::{ event::LeafInfo, @@ -529,7 +529,7 @@ pub mod testing { pub async fn run_test_builder() -> (Option>>, Url) { >::start( TestConfig::NUM_NODES, - (), + SimpleBuilderConfig::default(), ) .await } @@ -814,10 +814,10 @@ mod test { // Hook the builder up to the event stream from the first node if let Some(builder_task) = builder_task { - builder_task.start(Box::new(handle_0.event_stream())); + builder_task.start(Box::new(handle_0.event_stream().await)); } - let mut events = handle_0.event_stream(); + let mut events = handle_0.event_stream().await; for handle in handles.iter() { handle.start_consensus().await; @@ -853,11 +853,11 @@ mod test { let handle_0 = &handles[0]; - let mut events = handle_0.event_stream(); + let mut events = handle_0.event_stream().await; // Hook the builder up to the event stream from the first node if let Some(builder_task) = builder_task { - builder_task.start(Box::new(handle_0.event_stream())); + builder_task.start(Box::new(handle_0.event_stream().await)); } for handle in handles.iter() { @@ -867,7 +867,9 @@ mod test { let mut parent = { // TODO refactor repeated code from other tests let (genesis_payload, genesis_ns_table) = - Payload::from_transactions([], &NodeState::mock()).unwrap(); + Payload::from_transactions([], &ValidatedState::default(), &NodeState::mock()) + .await + .unwrap(); let genesis_commitment = { // TODO we should not need to collect payload bytes just to compute vid_commitment let payload_bytes = genesis_payload.encode(); diff --git a/sequencer/src/message_compat_tests.rs b/sequencer/src/message_compat_tests.rs index d7899bb95..f794fdd60 100644 --- a/sequencer/src/message_compat_tests.rs +++ b/sequencer/src/message_compat_tests.rs @@ -14,7 +14,7 @@ //! If this test is failing and you did not intend to change the consensus API, figure out what //! code changed caused the serialization change and revert it. -use crate::{Leaf, NodeState, Payload, PubKey, SeqTypes, Transaction}; +use crate::{Leaf, NodeState, Payload, PubKey, SeqTypes, Transaction, ValidatedState}; use committable::Committable; use es_version::SequencerVersion; use hotshot::traits::election::static_committee::GeneralStaticCommittee; @@ -49,8 +49,8 @@ use vbs::{version::Version, BinarySerializer}; type Serializer = vbs::Serializer; -#[test] -fn test_message_compat() { +#[async_std::test] +async fn test_message_compat() { let (sender, priv_key) = PubKey::generated_from_seed_indexed(Default::default(), 0); let signature = PubKey::sign(&priv_key, &[]).unwrap(); let membership = GeneralStaticCommittee::new(&[], vec![sender.stake_table_entry(1)], vec![], 0); @@ -62,11 +62,16 @@ fn test_message_compat() { old_version_last_view: ViewNumber::genesis(), new_version_first_view: ViewNumber::genesis(), }; - let leaf = Leaf::genesis(&NodeState::mock()); + let leaf = Leaf::genesis(&ValidatedState::default(), &NodeState::mock()).await; let block_header = leaf.block_header().clone(); let transaction = Transaction::new(1.into(), vec![1, 2, 3]); - let (payload, metadata) = - Payload::from_transactions([transaction.clone()], &NodeState::mock()).unwrap(); + let (payload, metadata) = Payload::from_transactions( + [transaction.clone()], + &ValidatedState::default(), + &NodeState::mock(), + ) + .await + .unwrap(); let view_sync_pre_commit_data = ViewSyncPreCommitData { relay: 0, round: ViewNumber::genesis(), @@ -91,7 +96,11 @@ fn test_message_compat() { data: QuorumProposal { block_header, view_number: ViewNumber::genesis(), - justify_qc: QuorumCertificate::genesis(&NodeState::mock()), + justify_qc: QuorumCertificate::genesis( + &ValidatedState::default(), + &NodeState::mock(), + ) + .await, upgrade_certificate: Some(UpgradeCertificate { data: upgrade_data.clone(), vote_commitment: upgrade_data.commit(), diff --git a/sequencer/src/persistence.rs b/sequencer/src/persistence.rs index b545e1a75..c8a9f5076 100644 --- a/sequencer/src/persistence.rs +++ b/sequencer/src/persistence.rs @@ -104,6 +104,7 @@ pub trait SequencerPersistence: Sized + Send + Sync + 'static { &self, state: NodeState, ) -> anyhow::Result> { + let genesis_validated_state = ValidatedState::genesis(&state).0; let highest_voted_view = match self .load_latest_acted_view() .await @@ -137,12 +138,15 @@ pub trait SequencerPersistence: Sized + Send + Sync + 'static { } None => { tracing::info!("no saved leaf, starting from genesis leaf"); - (Leaf::genesis(&state), QuorumCertificate::genesis(&state)) + ( + Leaf::genesis(&genesis_validated_state, &state).await, + QuorumCertificate::genesis(&genesis_validated_state, &state).await, + ) } }; let validated_state = if leaf.block_header().height == 0 { // If we are starting from genesis, we can provide the full state. - Some(Arc::new(ValidatedState::genesis(&state).0)) + Some(Arc::new(genesis_validated_state)) } else { // Otherwise, we will have to construct a sparse state and fetch missing data during // catchup. @@ -273,8 +277,8 @@ mod persistence_tests { assert_eq!(storage.load_anchor_leaf().await.unwrap(), None); // Store a leaf. - let leaf1 = Leaf::genesis(&NodeState::mock()); - let qc1 = QuorumCertificate::genesis(&NodeState::mock()); + let leaf1 = Leaf::genesis(&ValidatedState::default(), &NodeState::mock()).await; + let qc1 = QuorumCertificate::genesis(&ValidatedState::default(), &NodeState::mock()).await; storage.save_anchor_leaf(&leaf1, &qc1).await.unwrap(); assert_eq!( storage.load_anchor_leaf().await.unwrap().unwrap(), @@ -359,7 +363,7 @@ mod persistence_tests { None ); - let leaf = Leaf::genesis(&NodeState::mock()); + let leaf = Leaf::genesis(&ValidatedState::default(), &NodeState::mock()).await; let payload = leaf.block_payload().unwrap(); let bytes = payload.encode().to_vec(); let disperse = vid_scheme(2).disperse(bytes).unwrap(); diff --git a/sequencer/src/reference_tests.rs b/sequencer/src/reference_tests.rs index 4d60dc5f8..76728eb8a 100644 --- a/sequencer/src/reference_tests.rs +++ b/sequencer/src/reference_tests.rs @@ -23,7 +23,7 @@ use crate::{ block::tables::NameSpaceTable, state::FeeInfo, ChainConfig, FeeAccount, Header, L1BlockInfo, - Payload, Transaction, TxTableEntryWord, ValidatedState, + Payload, SeqTypes, Transaction, TxTableEntryWord, ValidatedState, }; use async_compatibility_layer::logging::{setup_backtrace, setup_logging}; use committable::Committable; @@ -86,7 +86,7 @@ fn reference_header() -> Header { let builder_key = FeeAccount::generated_from_seed_indexed(Default::default(), 0).1; let fee_info = reference_fee_info(); let ns_table = reference_ns_table(); - let payload = as TestableBlock>::genesis(); + let payload = as TestableBlock>::genesis(); let payload_commitment = vid_commitment(&payload.encode(), 1); let builder_commitment = payload.builder_commitment(&ns_table); let builder_signature = FeeAccount::sign_fee( diff --git a/sequencer/src/state.rs b/sequencer/src/state.rs index 118863cc0..24ab36349 100644 --- a/sequencer/src/state.rs +++ b/sequencer/src/state.rs @@ -66,7 +66,7 @@ pub struct ValidatedState { pub fee_merkle_tree: FeeMerkleTree, } -#[derive(Clone, Debug, Default, Deserialize, Serialize)] +#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)] pub struct Delta { pub fees_delta: HashSet, } @@ -1324,8 +1324,8 @@ mod test { FeeAccountProof::prove(&tree, account2).unwrap(); } - #[test] - fn test_validation_max_block_size() { + #[async_std::test] + async fn test_validation_max_block_size() { setup_logging(); setup_backtrace(); @@ -1339,7 +1339,7 @@ mod test { base_fee: 0.into(), ..Default::default() }); - let parent = Leaf::genesis(&instance); + let parent = Leaf::genesis(&instance.genesis_state, &instance).await; let header = parent.block_header(); // Validation fails because the proposed block exceeds the maximum block size. @@ -1348,8 +1348,8 @@ mod test { tracing::info!(%err, "task failed successfully"); } - #[test] - fn test_validation_base_fee() { + #[async_std::test] + async fn test_validation_base_fee() { setup_logging(); setup_backtrace(); @@ -1363,7 +1363,7 @@ mod test { max_block_size: max_block_size.into(), ..Default::default() }); - let parent = Leaf::genesis(&instance); + let parent = Leaf::genesis(&instance.genesis_state, &instance).await; let header = parent.block_header(); // Validation fails because the genesis fee (0) is too low.