From 999bbd8f73df6361e7acb6513e41492b4d16623b Mon Sep 17 00:00:00 2001 From: Alex Stokes Date: Mon, 31 Jul 2023 19:39:18 -0600 Subject: [PATCH] add mev-boost builder using `reth` execution client --- .gitignore | 1 + Cargo.lock | 8397 ++++++++++++++--- Cargo.toml | 19 +- bin/mev/Cargo.toml | 8 + bin/mev/src/cmd/build.rs | 42 - bin/mev/src/cmd/build/mod.rs | 21 + bin/mev/src/cmd/build/reth_ext.rs | 99 + bin/mev/src/cmd/config.rs | 5 +- example.config.toml | 18 +- mev-boost-rs/src/lib.rs | 1 - mev-boost-rs/src/relay.rs | 76 - mev-boost-rs/src/relay_mux.rs | 2 +- mev-boost-rs/src/service.rs | 16 +- mev-build-rs/Cargo.toml | 12 + mev-build-rs/src/lib.rs | 4 +- mev-build-rs/src/mempool_builder.rs | 270 - mev-build-rs/src/reth_builder/build.rs | 140 + mev-build-rs/src/reth_builder/builder.rs | 394 + mev-build-rs/src/reth_builder/error.rs | 33 + mev-build-rs/src/reth_builder/mod.rs | 13 + .../src/reth_builder/payload_builder.rs | 251 + mev-build-rs/src/reth_builder/reth_compat.rs | 64 + mev-build-rs/src/reth_builder/reth_ext.rs | 72 + mev-build-rs/src/reth_builder/service.rs | 233 + mev-build-rs/src/reth_builder/types.rs | 18 + mev-build-rs/src/service.rs | 143 - mev-relay-rs/src/service.rs | 7 +- mev-rs/Cargo.toml | 13 +- .../src/blinded_block_relayer/api/client.rs | 1 - mev-rs/src/blinded_block_relayer/mod.rs | 1 - mev-rs/src/engine_api_proxy/client.rs | 143 - mev-rs/src/engine_api_proxy/mod.rs | 15 - mev-rs/src/engine_api_proxy/server.rs | 207 - mev-rs/src/engine_api_proxy/types.rs | 265 - mev-rs/src/error.rs | 2 + mev-rs/src/lib.rs | 5 +- mev-rs/src/network.rs | 1 + mev-rs/src/relay.rs | 113 + mev-rs/src/types/mod.rs | 2 + 39 files changed, 8776 insertions(+), 2351 deletions(-) delete mode 100644 bin/mev/src/cmd/build.rs create mode 100644 bin/mev/src/cmd/build/mod.rs create mode 100644 bin/mev/src/cmd/build/reth_ext.rs delete mode 100644 mev-boost-rs/src/relay.rs delete mode 100644 mev-build-rs/src/mempool_builder.rs create mode 100644 mev-build-rs/src/reth_builder/build.rs create mode 100644 mev-build-rs/src/reth_builder/builder.rs create mode 100644 mev-build-rs/src/reth_builder/error.rs create mode 100644 mev-build-rs/src/reth_builder/mod.rs create mode 100644 mev-build-rs/src/reth_builder/payload_builder.rs create mode 100644 mev-build-rs/src/reth_builder/reth_compat.rs create mode 100644 mev-build-rs/src/reth_builder/reth_ext.rs create mode 100644 mev-build-rs/src/reth_builder/service.rs create mode 100644 mev-build-rs/src/reth_builder/types.rs delete mode 100644 mev-build-rs/src/service.rs delete mode 100644 mev-rs/src/engine_api_proxy/client.rs delete mode 100644 mev-rs/src/engine_api_proxy/mod.rs delete mode 100644 mev-rs/src/engine_api_proxy/server.rs delete mode 100644 mev-rs/src/engine_api_proxy/types.rs create mode 100644 mev-rs/src/relay.rs diff --git a/.gitignore b/.gitignore index eb5a316c..8a354fce 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ target +local* diff --git a/Cargo.lock b/Cargo.lock index f224ca50..532ddbcd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,16 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + [[package]] name = "addr2line" version = "0.20.0" @@ -17,6 +27,85 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher 0.3.0", + "cpufeatures", + "ctr 0.8.0", + "opaque-debug", +] + +[[package]] +name = "aes" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" +dependencies = [ + "aead", + "aes 0.7.5", + "cipher 0.3.0", + "ctr 0.8.0", + "ghash", + "subtle", +] + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom 0.2.10", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "getrandom 0.2.10", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + [[package]] name = "aho-corasick" version = "1.0.2" @@ -26,6 +115,47 @@ dependencies = [ "memchr", ] +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f938f00332d63a5b0ac687bd6f46d03884638948921d9f8b50c59563d421ae25" +dependencies = [ + "arrayvec", + "bytes", + "smol_str", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anstream" version = "0.3.2" @@ -62,7 +192,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -72,23 +202,170 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] -name = "anvil-rpc" -version = "0.1.0" -source = "git+https://github.com/foundry-rs/foundry?rev=b45456717ffae1af65acdc71099f8cb95e6683a0#b45456717ffae1af65acdc71099f8cb95e6683a0" +name = "anyhow" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" + +[[package]] +name = "aquamarine" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df752953c49ce90719c7bf1fc587bc8227aed04732ea0c0f85e5397d7fdbd1a1" dependencies = [ - "serde", - "serde_json", + "include_dir", + "itertools 0.10.5", + "proc-macro-error", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", ] [[package]] -name = "anyhow" -version = "1.0.71" +name = "arbitrary" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "e2d098ff73c1ca148721f37baad5ea6a465a13f9573aba8641fbbbae8164a54e" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "array-init" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23589ecb866b460d3a0f1278834750268c607e8e28a1b982c907219f3178cd72" +dependencies = [ + "nodrop", +] [[package]] name = "arrayref" @@ -96,6 +373,12 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + [[package]] name = "ascii-canvas" version = "3.0.0" @@ -126,6 +409,22 @@ dependencies = [ "futures-core", ] +[[package]] +name = "async-compression" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b74f44609f0f91493e3082d3734d98497e094777144380ea4db9f9905dd5b6" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "zstd 0.12.4", + "zstd-safe 6.0.6", +] + [[package]] name = "async-executor" version = "1.5.1" @@ -171,7 +470,7 @@ dependencies = [ "polling", "rustix 0.37.23", "slab", - "socket2", + "socket2 0.4.9", "waker-fn", ] @@ -208,7 +507,7 @@ dependencies = [ "futures-lite", "rustix 0.37.23", "signal-hook", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -255,9 +554,9 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", ] [[package]] @@ -272,9 +571,38 @@ version = "0.1.71" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] + +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version 0.4.0", +] + +[[package]] +name = "atomic-polyfill" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28" +dependencies = [ + "critical-section", +] + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", ] [[package]] @@ -283,6 +611,30 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" +[[package]] +name = "attohttpc" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb8867f378f33f78a811a8eb9bf108ad99430d7aad43315dd9319c827ef6247" +dependencies = [ + "http", + "log", + "url", + "wildmatch", +] + +[[package]] +name = "auto_impl" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" +dependencies = [ + "proc-macro-error", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -338,6 +690,18 @@ dependencies = [ "tower-service", ] +[[package]] +name = "backon" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c1a6197b2120bb2185a267f6515038558b019e92b832bb0320e96d66268dcf9" +dependencies = [ + "fastrand", + "futures-core", + "pin-project", + "tokio", +] + [[package]] name = "backtrace" version = "0.3.68" @@ -359,6 +723,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base64" version = "0.13.1" @@ -383,20 +753,20 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb53b6b315f924c7f113b162e53b3901c05fc9966baf84d201dfcc7432a4bb38" dependencies = [ - "lalrpop", - "lalrpop-util", + "lalrpop 0.19.12", + "lalrpop-util 0.19.12", "regex", ] [[package]] name = "beacon-api-client" version = "0.1.0" -source = "git+https://github.com/ralexstokes/beacon-api-client?rev=d838d93#d838d930f80fdfcadfe32147bcb2e805aec074bc" +source = "git+https://github.com/ralexstokes/beacon-api-client?rev=565d4e429ded4ffde944a96ec190ae00b1aba548#565d4e429ded4ffde944a96ec190ae00b1aba548" dependencies = [ "clap", "ethereum-consensus", "http", - "itertools", + "itertools 0.10.5", "reqwest", "serde", "serde_json", @@ -408,16 +778,81 @@ dependencies = [ ] [[package]] -name = "bit-set" -version = "0.5.3" +name = "bech32" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" -dependencies = [ - "bit-vec", -] +checksum = "2dabbe35f96fb9507f7330793dc490461b2962659ac5d427181e451a623751d1" [[package]] -name = "bit-vec" +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +dependencies = [ + "serde", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.64.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2 1.0.66", + "quote 1.0.32", + "regex", + "rustc-hash", + "shlex", + "syn 1.0.109", +] + +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease", + "proc-macro2 1.0.66", + "quote 1.0.32", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.28", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" @@ -434,6 +869,16 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +[[package]] +name = "bitvec" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" +dependencies = [ + "either", + "radium 0.3.0", +] + [[package]] name = "bitvec" version = "1.0.1" @@ -441,7 +886,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", - "radium", + "radium 0.7.0", + "serde", "tap", "wyz", ] @@ -464,6 +910,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + [[package]] name = "blocking" version = "1.3.1" @@ -492,11 +947,170 @@ dependencies = [ "zeroize", ] +[[package]] +name = "boa_ast" +version = "0.17.0" +source = "git+https://github.com/boa-dev/boa#1e10f07c1c2c9fdc5bc33d6992272d8a8dd33d76" +dependencies = [ + "bitflags 2.3.3", + "boa_interner", + "boa_macros", + "indexmap 2.0.0", + "num-bigint", + "rustc-hash", +] + +[[package]] +name = "boa_engine" +version = "0.17.0" +source = "git+https://github.com/boa-dev/boa#1e10f07c1c2c9fdc5bc33d6992272d8a8dd33d76" +dependencies = [ + "bitflags 2.3.3", + "boa_ast", + "boa_gc", + "boa_icu_provider", + "boa_interner", + "boa_macros", + "boa_parser", + "boa_profiler", + "chrono", + "dashmap", + "fast-float", + "icu_normalizer", + "indexmap 2.0.0", + "itertools 0.11.0", + "num-bigint", + "num-integer", + "num-traits", + "num_enum", + "once_cell", + "pollster", + "rand 0.8.5", + "regress", + "rustc-hash", + "ryu-js", + "serde", + "serde_json", + "sptr", + "static_assertions", + "tap", + "thin-vec", + "thiserror", +] + +[[package]] +name = "boa_gc" +version = "0.17.0" +source = "git+https://github.com/boa-dev/boa#1e10f07c1c2c9fdc5bc33d6992272d8a8dd33d76" +dependencies = [ + "boa_macros", + "boa_profiler", + "thin-vec", +] + +[[package]] +name = "boa_icu_provider" +version = "0.17.0" +source = "git+https://github.com/boa-dev/boa#1e10f07c1c2c9fdc5bc33d6992272d8a8dd33d76" +dependencies = [ + "icu_collections", + "icu_normalizer", + "icu_properties", + "icu_provider", + "once_cell", + "zerovec", +] + +[[package]] +name = "boa_interner" +version = "0.17.0" +source = "git+https://github.com/boa-dev/boa#1e10f07c1c2c9fdc5bc33d6992272d8a8dd33d76" +dependencies = [ + "boa_gc", + "boa_macros", + "hashbrown 0.14.0", + "indexmap 2.0.0", + "once_cell", + "phf", + "rustc-hash", + "static_assertions", +] + +[[package]] +name = "boa_macros" +version = "0.17.0" +source = "git+https://github.com/boa-dev/boa#1e10f07c1c2c9fdc5bc33d6992272d8a8dd33d76" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", + "synstructure 0.13.0", +] + +[[package]] +name = "boa_parser" +version = "0.17.0" +source = "git+https://github.com/boa-dev/boa#1e10f07c1c2c9fdc5bc33d6992272d8a8dd33d76" +dependencies = [ + "bitflags 2.3.3", + "boa_ast", + "boa_icu_provider", + "boa_interner", + "boa_macros", + "boa_profiler", + "fast-float", + "icu_properties", + "num-bigint", + "num-traits", + "once_cell", + "regress", + "rustc-hash", +] + +[[package]] +name = "boa_profiler" +version = "0.17.0" +source = "git+https://github.com/boa-dev/boa#1e10f07c1c2c9fdc5bc33d6992272d8a8dd33d76" + +[[package]] +name = "brotli" +version = "3.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + [[package]] name = "bs58" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +dependencies = [ + "sha2 0.9.9", +] + +[[package]] +name = "bstr" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05" +dependencies = [ + "memchr", + "serde", +] [[package]] name = "bumpalo" @@ -504,6 +1118,12 @@ version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + [[package]] name = "byteorder" version = "1.4.3" @@ -515,1778 +1135,6083 @@ name = "bytes" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +dependencies = [ + "serde", +] [[package]] -name = "castaway" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" - -[[package]] -name = "cc" -version = "1.0.79" +name = "bzip2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] [[package]] -name = "cfg-if" -version = "1.0.0" +name = "bzip2-sys" +version = "0.1.11+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] [[package]] -name = "clap" -version = "4.3.11" +name = "camino" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1640e5cc7fb47dbb8338fd471b105e7ed6c3cb2aeb00c2e067127ffd3764a05d" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" dependencies = [ - "clap_builder", - "clap_derive", - "once_cell", + "serde", ] [[package]] -name = "clap_builder" -version = "4.3.11" +name = "cargo-platform" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c59138d527eeaf9b53f35a77fcc1fad9d883116070c63d5de1c7dc7b00c72b" +checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", + "serde", ] [[package]] -name = "clap_derive" -version = "4.3.2" +name = "cargo_metadata" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f" +checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.25", + "camino", + "cargo-platform", + "semver 1.0.18", + "serde", + "serde_json", + "thiserror", ] [[package]] -name = "clap_lex" -version = "0.5.0" +name = "cassowary" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] -name = "colorchoice" -version = "1.0.0" +name = "castaway" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" [[package]] -name = "concurrent-queue" -version = "2.2.0" +name = "cc" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" dependencies = [ - "crossbeam-utils", + "jobserver", ] [[package]] -name = "const-oid" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6340df57935414636969091153f35f68d9f00bbc8fb4a9c6054706c213e6c6bc" - -[[package]] -name = "core-foundation" -version = "0.9.3" +name = "cexpr" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ - "core-foundation-sys", - "libc", + "nom", ] [[package]] -name = "core-foundation-sys" -version = "0.8.4" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "core2" -version = "0.4.0" +name = "chrono" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ - "memchr", + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "winapi", ] [[package]] -name = "cpufeatures" -version = "0.2.9" +name = "cipher" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "libc", + "generic-array", ] [[package]] -name = "crossbeam-utils" -version = "0.8.16" +name = "cipher" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "cfg-if", + "crypto-common", + "inout", ] [[package]] -name = "crunchy" -version = "0.2.2" +name = "clang-sys" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading", +] [[package]] -name = "crypto-bigint" -version = "0.4.9" +name = "clap" +version = "4.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", + "clap_builder", + "clap_derive", + "once_cell", ] [[package]] -name = "crypto-common" -version = "0.1.6" +name = "clap_builder" +version = "4.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" dependencies = [ - "generic-array", - "typenum", + "anstream", + "anstyle", + "clap_lex", + "strsim 0.10.0", ] [[package]] -name = "curl" -version = "0.4.44" +name = "clap_derive" +version = "4.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22" +checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" dependencies = [ - "curl-sys", - "libc", - "openssl-probe", - "openssl-sys", - "schannel", - "socket2", - "winapi", + "heck", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", ] [[package]] -name = "curl-sys" -version = "0.4.63+curl-8.1.2" +name = "clap_lex" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeb0fef7046022a1e2ad67a004978f0e3cacb9e3123dc62ce768f92197b771dc" -dependencies = [ - "cc", - "libc", - "libnghttp2-sys", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "winapi", -] +checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" [[package]] -name = "data-encoding" -version = "2.4.0" +name = "cobs" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" [[package]] -name = "der" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +name = "codecs-derive" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "const-oid", - "zeroize", + "convert_case 0.6.0", + "parity-scale-codec", + "proc-macro2 1.0.66", + "quote 1.0.32", + "serde", + "syn 2.0.28", ] [[package]] -name = "diff" -version = "0.1.13" +name = "coins-bip32" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +checksum = "b30a84aab436fcb256a2ab3c80663d8aec686e6bae12827bb05fef3e1e439c9f" +dependencies = [ + "bincode", + "bs58", + "coins-core", + "digest 0.10.7", + "getrandom 0.2.10", + "hmac", + "k256 0.13.1", + "lazy_static", + "serde", + "sha2 0.10.7", + "thiserror", +] [[package]] -name = "digest" -version = "0.9.0" +name = "coins-bip39" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "84f4d04ee18e58356accd644896aeb2094ddeafb6a713e056cef0c0a8e468c15" dependencies = [ - "generic-array", + "bitvec 0.17.4", + "coins-bip32", + "getrandom 0.2.10", + "hmac", + "once_cell", + "pbkdf2 0.12.2", + "rand 0.8.5", + "sha2 0.10.7", + "thiserror", ] [[package]] -name = "digest" -version = "0.10.7" +name = "coins-core" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "9b949a1c63fb7eb591eb7ba438746326aedf0ae843e51ec92ba6bec5bb382c4f" dependencies = [ - "block-buffer 0.10.4", - "crypto-common", - "subtle", + "base64 0.21.2", + "bech32", + "bs58", + "digest 0.10.7", + "generic-array", + "hex", + "ripemd", + "serde", + "serde_derive", + "sha2 0.10.7", + "sha3", + "thiserror", ] [[package]] -name = "dirs-next" -version = "2.0.0" +name = "colorchoice" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "comfy-table" +version = "7.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ab77dbd8adecaf3f0db40581631b995f312a8a5ae3aa9993188bb8f23d83a5b" dependencies = [ - "cfg-if", - "dirs-sys-next", + "crossterm 0.26.1", + "strum 0.24.1", + "strum_macros 0.24.3", + "unicode-width", ] [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "concurrent-queue" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" dependencies = [ - "libc", - "redox_users", - "winapi", + "crossbeam-utils", ] [[package]] -name = "ecdsa" -version = "0.14.8" +name = "confy" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +checksum = "e37668cb35145dcfaa1931a5f37fde375eeae8068b4c0d2f289da28a270b2d2c" dependencies = [ - "der", - "elliptic-curve", - "rfc6979", - "signature", + "directories", + "serde", + "thiserror", + "toml 0.5.11", ] [[package]] -name = "either" -version = "1.8.1" +name = "const-oid" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "6340df57935414636969091153f35f68d9f00bbc8fb4a9c6054706c213e6c6bc" [[package]] -name = "elliptic-curve" -version = "0.12.3" +name = "const-str" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" -dependencies = [ - "base16ct", - "crypto-bigint", - "der", - "digest 0.10.7", - "ff", - "generic-array", - "group", - "pkcs8", - "rand_core", - "sec1", - "subtle", - "zeroize", -] +checksum = "aca749d3d3f5b87a0d6100509879f9cf486ab510803a4a4e1001da1ff61c2bd6" [[package]] -name = "ena" -version = "0.14.2" +name = "constant_time_eq" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" dependencies = [ - "log", + "unicode-segmentation", ] [[package]] -name = "encoding_rs" -version = "0.8.32" +name = "core-foundation" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ - "cfg-if", + "core-foundation-sys", + "libc", ] [[package]] -name = "enr" -version = "0.6.2" +name = "core-foundation-sys" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fa0a0be8915790626d5759eb51fe47435a8eac92c2f212bd2da9aa7f30ea56" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" dependencies = [ - "base64 0.13.1", - "bs58", - "bytes", - "hex", - "k256", - "log", - "rand", - "rlp", - "serde", - "sha3", - "zeroize", + "memchr", ] [[package]] -name = "errno" -version = "0.3.1" +name = "cpufeatures" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ - "errno-dragonfly", "libc", - "windows-sys", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "crc" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" dependencies = [ - "cc", - "libc", + "crc-catalog", ] [[package]] -name = "ethereum-consensus" -version = "0.1.1" -source = "git+https://github.com/ralexstokes/ethereum-consensus?rev=2bcb975#2bcb97563bb8dcb15802d1a280b58f21577ea3e2" +name = "crc-catalog" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ - "async-stream", - "blst", - "bs58", - "enr", - "hex", - "integer-sqrt", - "multiaddr", - "multihash", - "rand", - "serde", - "serde_json", - "serde_yaml", - "sha2 0.9.9", - "ssz_rs", - "thiserror", - "tokio", - "tokio-stream", + "cfg-if", ] [[package]] -name = "event-listener" -version = "2.5.3" +name = "critical-section" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52" [[package]] -name = "fastrand" -version = "1.9.0" +name = "crossbeam-channel" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ - "instant", + "cfg-if", + "crossbeam-utils", ] [[package]] -name = "ff" -version = "0.12.1" +name = "crossbeam-deque" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ - "rand_core", - "subtle", + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", ] [[package]] -name = "fixedbitset" -version = "0.4.2" +name = "crossbeam-epoch" +version = "0.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] [[package]] -name = "fnv" -version = "1.0.7" +name = "crossbeam-utils" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] [[package]] -name = "foreign-types" -version = "0.3.2" +name = "crossterm" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" dependencies = [ - "foreign-types-shared", + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio", + "parking_lot 0.12.1", + "signal-hook", + "signal-hook-mio", + "winapi", ] [[package]] -name = "foreign-types-shared" -version = "0.1.1" +name = "crossterm" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio", + "parking_lot 0.12.1", + "signal-hook", + "signal-hook-mio", + "winapi", +] [[package]] -name = "form_urlencoded" -version = "1.2.0" +name = "crossterm_winapi" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" dependencies = [ - "percent-encoding", + "winapi", ] [[package]] -name = "funty" -version = "2.0.0" +name = "crunchy" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] -name = "futures" -version = "0.3.28" +name = "crypto-bigint" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", ] [[package]] -name = "futures-channel" -version = "0.3.28" +name = "crypto-bigint" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" dependencies = [ - "futures-core", - "futures-sink", + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", ] [[package]] -name = "futures-core" -version = "0.3.28" +name = "crypto-common" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] [[package]] -name = "futures-executor" -version = "0.3.28" +name = "ctr" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" dependencies = [ - "futures-core", - "futures-task", - "futures-util", + "cipher 0.3.0", ] [[package]] -name = "futures-io" -version = "0.3.28" +name = "ctr" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", +] [[package]] -name = "futures-lite" -version = "1.13.0" +name = "curl" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22" dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2 0.4.9", + "winapi", ] [[package]] -name = "futures-macro" -version = "0.3.28" +name = "curl-sys" +version = "0.4.63+curl-8.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "aeb0fef7046022a1e2ad67a004978f0e3cacb9e3123dc62ce768f92197b771dc" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "cc", + "libc", + "libnghttp2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "winapi", ] [[package]] -name = "futures-sink" -version = "0.3.28" +name = "curve25519-dalek" +version = "4.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "436ace70fc06e06f7f689d2624dc4e2f0ea666efb5aa704215f7249ae6e047a7" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "platforms", + "rustc_version 0.4.0", + "subtle", + "zeroize", +] [[package]] -name = "futures-task" -version = "0.3.28" +name = "curve25519-dalek-derive" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] [[package]] -name = "futures-util" -version = "0.3.28" +name = "darling" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", + "darling_core 0.10.2", + "darling_macro 0.10.2", ] [[package]] -name = "generic-array" -version = "0.14.7" +name = "darling" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ - "typenum", - "version_check", + "darling_core 0.20.3", + "darling_macro 0.20.3", ] [[package]] -name = "getrandom" -version = "0.2.10" +name = "darling_core" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" dependencies = [ - "cfg-if", - "libc", - "wasi", + "fnv", + "ident_case", + "proc-macro2 1.0.66", + "quote 1.0.32", + "strsim 0.9.3", + "syn 1.0.109", ] [[package]] -name = "gimli" -version = "0.27.3" +name = "darling_core" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2 1.0.66", + "quote 1.0.32", + "strsim 0.10.0", + "syn 2.0.28", +] [[package]] -name = "glob" -version = "0.3.1" +name = "darling_macro" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" +dependencies = [ + "darling_core 0.10.2", + "quote 1.0.32", + "syn 1.0.109", +] [[package]] -name = "gloo-timers" -version = "0.2.6" +name = "darling_macro" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", + "darling_core 0.20.3", + "quote 1.0.32", + "syn 2.0.28", ] [[package]] -name = "group" -version = "0.12.1" +name = "dashmap" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +checksum = "6943ae99c34386c84a470c499d3414f66502a41340aa895406e0d2e4a207b91d" dependencies = [ - "ff", - "rand_core", - "subtle", + "cfg-if", + "hashbrown 0.14.0", + "lock_api", + "once_cell", + "parking_lot_core 0.9.8", ] [[package]] -name = "h2" -version = "0.3.20" +name = "data-encoding" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" + +[[package]] +name = "delay_map" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4355c25cbf99edcb6b4a0e906f6bdc6956eda149e84455bea49696429b2f8e8" dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", + "futures", "tokio-util", - "tracing", ] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "der" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +dependencies = [ + "const-oid", + "zeroize", +] [[package]] -name = "heck" -version = "0.4.1" +name = "der" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "0c7ed52955ce76b1554f509074bb357d3fb8ac9b51288a65a3fd480d1dfba946" +dependencies = [ + "const-oid", + "zeroize", +] [[package]] -name = "hermit-abi" -version = "0.3.2" +name = "deranged" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "8810e7e2cf385b1e9b50d68264908ec367ba642c96d02edfe61c39e88e2a3c01" +dependencies = [ + "serde", +] [[package]] -name = "hex" -version = "0.4.3" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] [[package]] -name = "hmac" -version = "0.12.1" +name = "derive_arbitrary" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "53e0efad4403bfc52dc201159c4b842a246a14b98c64b55dfd0f2d89729dfeb8" dependencies = [ - "digest 0.10.7", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", ] [[package]] -name = "http" -version = "0.2.9" +name = "derive_builder" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0" dependencies = [ - "bytes", - "fnv", - "itoa", + "darling 0.10.2", + "derive_builder_core", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", ] [[package]] -name = "http-body" -version = "0.4.5" +name = "derive_builder_core" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef" dependencies = [ - "bytes", - "http", - "pin-project-lite", + "darling 0.10.2", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", ] [[package]] -name = "httparse" -version = "1.8.0" +name = "derive_more" +version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2 1.0.66", + "quote 1.0.32", + "rustc_version 0.4.0", + "syn 1.0.109", +] [[package]] -name = "httpdate" -version = "1.0.2" +name = "diff" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" [[package]] -name = "httpmock" -version = "0.6.8" +name = "digest" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b02e044d3b4c2f94936fb05f9649efa658ca788f44eb6b87554e2033fc8ce93" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "assert-json-diff", - "async-object-pool", - "async-trait", - "base64 0.21.2", - "basic-cookies", - "crossbeam-utils", - "form_urlencoded", - "futures-util", - "hyper", - "isahc", - "lazy_static", - "levenshtein", - "log", - "regex", - "serde", - "serde_json", - "serde_regex", - "similar", - "tokio", - "url", + "generic-array", ] [[package]] -name = "hyper" -version = "0.14.27" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", ] [[package]] -name = "hyper-tls" -version = "0.5.0" +name = "directories" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", + "dirs-sys 0.3.7", ] [[package]] -name = "idna" -version = "0.4.0" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "dirs-sys 0.4.1", ] [[package]] -name = "indexmap" -version = "1.9.3" +name = "dirs-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "autocfg", - "hashbrown", + "cfg-if", + "dirs-sys-next", ] [[package]] -name = "instant" -version = "0.1.12" +name = "dirs-sys" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" dependencies = [ - "cfg-if", + "libc", + "redox_users", + "winapi", ] [[package]] -name = "integer-sqrt" -version = "0.1.5" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "num-traits", + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", ] [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ - "hermit-abi", "libc", - "windows-sys", + "redox_users", + "winapi", ] [[package]] -name = "ipnet" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" - -[[package]] -name = "is-terminal" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +name = "discv5" +version = "0.3.1" +source = "git+https://github.com/sigp/discv5#a9f1e99321aec746fb9d6e8df889aa515a5e1254" dependencies = [ - "hermit-abi", - "rustix 0.38.3", - "windows-sys", + "aes 0.7.5", + "aes-gcm", + "arrayvec", + "delay_map", + "enr 0.9.0", + "fnv", + "futures", + "hashlink", + "hex", + "hkdf", + "lazy_static", + "lru 0.7.8", + "more-asserts", + "parking_lot 0.11.2", + "rand 0.8.5", + "rlp", + "smallvec 1.11.0", + "socket2 0.4.9", + "tokio", + "tracing", + "tracing-subscriber", + "uint", + "zeroize", ] [[package]] -name = "isahc" -version = "1.7.2" +name = "displaydoc" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ - "async-channel", - "castaway", - "crossbeam-utils", - "curl", - "curl-sys", - "encoding_rs", - "event-listener", - "futures-lite", - "http", - "log", - "mime", - "once_cell", - "polling", - "slab", - "sluice", - "tracing", - "tracing-futures", - "url", - "waker-fn", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "dns-lookup" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "53ecafc952c4528d9b51a458d1a8904b81783feff9fde08ab6ed2545ff396872" dependencies = [ - "either", + "cfg-if", + "libc", + "socket2 0.4.9", + "winapi", ] [[package]] -name = "itoa" -version = "1.0.8" +name = "dunce" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" [[package]] -name = "js-sys" -version = "0.3.64" +name = "dyn-clone" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" -dependencies = [ - "wasm-bindgen", -] +checksum = "304e6508efa593091e97a9abbc10f90aa7ca635b6d2784feff3c89d41dd12272" [[package]] -name = "k256" -version = "0.11.6" +name = "ecdsa" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "sha2 0.10.7", + "der 0.6.1", + "elliptic-curve 0.12.3", + "rfc6979 0.3.1", + "signature 1.6.4", ] [[package]] -name = "keccak" -version = "0.1.4" +name = "ecdsa" +version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" dependencies = [ - "cpufeatures", + "der 0.7.7", + "digest 0.10.7", + "elliptic-curve 0.13.5", + "rfc6979 0.4.0", + "signature 2.1.0", + "spki 0.7.2", ] [[package]] -name = "kv-log-macro" -version = "1.0.7" +name = "ed25519" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +checksum = "5fb04eee5d9d907f29e80ee6b0e78f7e2c82342c63e3580d8c4f69d9d5aad963" dependencies = [ - "log", + "pkcs8 0.10.2", + "signature 2.1.0", ] [[package]] -name = "lalrpop" -version = "0.19.12" +name = "ed25519-dalek" +version = "2.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1cbf952127589f2851ab2046af368fd20645491bb4b376f04b7f94d7a9837b" +checksum = "faa8e9049d5d72bfc12acbc05914731b5322f79b5e2f195e9f2d705fca22ab4c" dependencies = [ - "ascii-canvas", - "bit-set", - "diff", - "ena", - "is-terminal", - "itertools", - "lalrpop-util", - "petgraph", - "regex", - "regex-syntax 0.6.29", - "string_cache", - "term", - "tiny-keccak", - "unicode-xid", + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.7", + "zeroize", ] [[package]] -name = "lalrpop-util" -version = "0.19.12" +name = "educe" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3c48237b9604c5a4702de6b824e02006c3214327564636aef27c1028a8fa0ed" +checksum = "079044df30bb07de7d846d41a184c4b00e66ebdac93ee459253474f3a47e50ae" dependencies = [ - "regex", + "enum-ordinalize", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", ] [[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "levenshtein" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" - -[[package]] -name = "libc" -version = "0.2.147" +name = "either" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] -name = "libnghttp2-sys" -version = "0.1.7+1.45.0" +name = "elliptic-curve" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ - "cc", - "libc", + "base16ct 0.1.1", + "crypto-bigint 0.4.9", + "der 0.6.1", + "digest 0.10.7", + "ff 0.12.1", + "generic-array", + "group 0.12.1", + "pkcs8 0.9.0", + "rand_core 0.6.4", + "sec1 0.3.0", + "subtle", + "zeroize", ] [[package]] -name = "libz-sys" -version = "1.1.9" +name = "elliptic-curve" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" +checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", + "base16ct 0.2.0", + "crypto-bigint 0.5.2", + "digest 0.10.7", + "ff 0.13.0", + "generic-array", + "group 0.13.0", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "sec1 0.7.3", + "subtle", + "zeroize", ] [[package]] -name = "linked-hash-map" -version = "0.5.6" +name = "ena" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +dependencies = [ + "log", +] [[package]] -name = "linux-raw-sys" -version = "0.3.8" +name = "encoding_rs" +version = "0.8.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +dependencies = [ + "cfg-if", +] [[package]] -name = "linux-raw-sys" -version = "0.4.3" +name = "endian-type" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" +checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] -name = "lock_api" -version = "0.4.10" +name = "enr" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "26fa0a0be8915790626d5759eb51fe47435a8eac92c2f212bd2da9aa7f30ea56" dependencies = [ - "autocfg", - "scopeguard", + "base64 0.13.1", + "bs58", + "bytes", + "hex", + "k256 0.11.6", + "log", + "rand 0.8.5", + "rlp", + "serde", + "sha3", + "zeroize", ] [[package]] -name = "log" -version = "0.4.19" +name = "enr" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "cf56acd72bb22d2824e66ae8e9e5ada4d0de17a69c7fd35569dde2ada8ec9116" +dependencies = [ + "base64 0.13.1", + "bytes", + "hex", + "k256 0.13.1", + "log", + "rand 0.8.5", + "rlp", + "secp256k1", + "serde", + "sha3", + "zeroize", +] + +[[package]] +name = "enr" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0be7b2ac146c1f99fe245c02d16af0696450d8e06c135db75e10eeb9e642c20d" +dependencies = [ + "base64 0.21.2", + "bytes", + "ed25519-dalek", + "hex", + "k256 0.13.1", + "log", + "rand 0.8.5", + "rlp", + "serde", + "serde-hex", + "sha3", + "zeroize", +] + +[[package]] +name = "enum-as-inner" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4" +dependencies = [ + "heck", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "enum-as-inner" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" +dependencies = [ + "heck", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "enum-ordinalize" +version = "3.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4f76552f53cefc9a7f64987c3701b99d982f7690606fd67de1d09712fbf52f1" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] + +[[package]] +name = "enumn" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b893c4eb2dc092c811165f84dc7447fae16fb66521717968c34c509b39b1a5c5" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "eth-keystore" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" +dependencies = [ + "aes 0.8.3", + "ctr 0.9.2", + "digest 0.10.7", + "hex", + "hmac", + "pbkdf2 0.11.0", + "rand 0.8.5", + "scrypt", + "serde", + "serde_json", + "sha2 0.10.7", + "sha3", + "thiserror", + "uuid 0.8.2", +] + +[[package]] +name = "ethabi" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" +dependencies = [ + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3", + "thiserror", + "uint", +] + +[[package]] +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethereum-consensus" +version = "0.1.1" +source = "git+https://github.com/ralexstokes/ethereum-consensus?rev=4d4e3fb57584d9c3bba6b4fc488f23db4937ae79#4d4e3fb57584d9c3bba6b4fc488f23db4937ae79" +dependencies = [ + "async-stream", + "blst", + "bs58", + "enr 0.6.2", + "hex", + "integer-sqrt", + "multiaddr", + "multihash", + "rand 0.8.5", + "serde", + "serde_json", + "serde_yaml", + "sha2 0.9.9", + "ssz_rs", + "thiserror", + "tokio", + "tokio-stream", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "scale-info", + "uint", +] + +[[package]] +name = "ethers" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b4026b97da8281276744741fac7eb385da905f6093c583331fa2953fdd4253" +dependencies = [ + "ethers-addressbook", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-middleware", + "ethers-providers", + "ethers-signers", + "ethers-solc", +] + +[[package]] +name = "ethers-addressbook" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edcb6ffefc230d8c42874c51b28dc11dbb8de50b27a8fdf92648439d6baa68dc" +dependencies = [ + "ethers-core", + "once_cell", + "serde", + "serde_json", +] + +[[package]] +name = "ethers-contract" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d4719a44c3d37ab07c6dea99ab174068d8c35e441b60b6c20ce4e48357273e8" +dependencies = [ + "ethers-contract-abigen", + "ethers-contract-derive", + "ethers-core", + "ethers-providers", + "ethers-signers", + "futures-util", + "hex", + "once_cell", + "pin-project", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "ethers-contract-abigen" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "155ea1b84d169d231317ed86e307af6f2bed6b40dd17e5e94bc84da21cadb21c" +dependencies = [ + "Inflector", + "dunce", + "ethers-core", + "ethers-etherscan", + "eyre", + "hex", + "prettyplease", + "proc-macro2 1.0.66", + "quote 1.0.32", + "regex", + "reqwest", + "serde", + "serde_json", + "syn 2.0.28", + "toml 0.7.6", + "walkdir", +] + +[[package]] +name = "ethers-contract-derive" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8567ff196c4a37c1a8c90ec73bda0ad2062e191e4f0a6dc4d943e2ec4830fc88" +dependencies = [ + "Inflector", + "ethers-contract-abigen", + "ethers-core", + "hex", + "proc-macro2 1.0.66", + "quote 1.0.32", + "serde_json", + "syn 2.0.28", +] + +[[package]] +name = "ethers-core" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60ca2514feb98918a0a31de7e1983c29f2267ebf61b2dc5d4294f91e5b866623" +dependencies = [ + "arrayvec", + "bytes", + "cargo_metadata", + "chrono", + "elliptic-curve 0.13.5", + "ethabi", + "generic-array", + "hex", + "k256 0.13.1", + "num_enum", + "once_cell", + "open-fastrlp", + "rand 0.8.5", + "rlp", + "serde", + "serde_json", + "strum 0.25.0", + "syn 2.0.28", + "tempfile", + "thiserror", + "tiny-keccak", + "unicode-xid 0.2.4", +] + +[[package]] +name = "ethers-etherscan" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22b3a8269d3df0ed6364bc05b4735b95f4bf830ce3aef87d5e760fb0e93e5b91" +dependencies = [ + "ethers-core", + "reqwest", + "semver 1.0.18", + "serde", + "serde_json", + "thiserror", + "tracing", +] + +[[package]] +name = "ethers-middleware" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0c339aad74ae5c451d27e0e49c7a3c7d22620b119b4f9291d7aa21f72d7f366" +dependencies = [ + "async-trait", + "auto_impl", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-providers", + "ethers-signers", + "futures-channel", + "futures-locks", + "futures-util", + "instant", + "reqwest", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-futures", + "url", +] + +[[package]] +name = "ethers-providers" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b411b119f1cf0efb69e2190883dee731251882bb21270f893ee9513b3a697c48" +dependencies = [ + "async-trait", + "auto_impl", + "base64 0.21.2", + "bytes", + "enr 0.8.1", + "ethers-core", + "futures-core", + "futures-timer", + "futures-util", + "hashers", + "hex", + "http", + "instant", + "once_cell", + "pin-project", + "reqwest", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-tungstenite", + "tracing", + "tracing-futures", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "ws_stream_wasm", +] + +[[package]] +name = "ethers-signers" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4864d387456a9c09a1157fa10e1528b29d90f1d859443acf06a1b23365fb518c" +dependencies = [ + "async-trait", + "coins-bip32", + "coins-bip39", + "elliptic-curve 0.13.5", + "eth-keystore", + "ethers-core", + "hex", + "rand 0.8.5", + "sha2 0.10.7", + "thiserror", + "tracing", +] + +[[package]] +name = "ethers-solc" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6c2b9625a2c639d46625f88acc2092a3cb35786c37f7c2128b3ca20f639b3c" +dependencies = [ + "cfg-if", + "dunce", + "ethers-core", + "glob", + "hex", + "home", + "md-5", + "num_cpus", + "once_cell", + "path-slash", + "rayon", + "regex", + "semver 1.0.18", + "serde", + "serde_json", + "solang-parser", + "svm-rs", + "thiserror", + "tiny-keccak", + "tokio", + "tracing", + "walkdir", + "yansi", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "eyre" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fast-float" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fdlimit" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" +dependencies = [ + "libc", +] + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" + +[[package]] +name = "futures-executor" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-locks" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" +dependencies = [ + "futures-channel", + "futures-task", +] + +[[package]] +name = "futures-macro" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] + +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + +[[package]] +name = "futures-task" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" + +[[package]] +name = "futures-timer" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" +dependencies = [ + "gloo-timers", + "send_wrapper 0.4.0", +] + +[[package]] +name = "futures-util" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "gimli" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aca8bbd8e0707c1887a8bbb7e6b40e228f251ff5d62c8220a4a7a53c73aff006" +dependencies = [ + "aho-corasick 1.0.2", + "bstr", + "fnv", + "log", + "regex", +] + +[[package]] +name = "gloo-net" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a66b4e3c7d9ed8d315fd6b97c8b1f74a7c6ecbbc2320e65ae7ed38b7068cc620" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "http", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff 0.12.1", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.0", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 1.9.3", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hash-db" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.3", + "serde", +] + +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + +[[package]] +name = "hashers" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" +dependencies = [ + "fxhash", +] + +[[package]] +name = "hashlink" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" +dependencies = [ + "hashbrown 0.11.2", +] + +[[package]] +name = "hdrhistogram" +version = "7.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" +dependencies = [ + "byteorder", + "num-traits", +] + +[[package]] +name = "heapless" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743" +dependencies = [ + "atomic-polyfill 0.1.11", + "hash32", + "rustc_version 0.4.0", + "serde", + "spin 0.9.8", + "stable_deref_trait", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "hex-literal" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hkdf" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "httpmock" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b02e044d3b4c2f94936fb05f9649efa658ca788f44eb6b87554e2033fc8ce93" +dependencies = [ + "assert-json-diff", + "async-object-pool", + "async-trait", + "base64 0.21.2", + "basic-cookies", + "crossbeam-utils", + "form_urlencoded", + "futures-util", + "hyper", + "isahc", + "lazy_static", + "levenshtein", + "log", + "regex", + "serde", + "serde_json", + "serde_regex", + "similar", + "tokio", + "url", +] + +[[package]] +name = "human_bytes" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27e2b089f28ad15597b48d8c0a8fe94eeb1c1cb26ca99b6f66ac9582ae10c5e6" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "humantime-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" +dependencies = [ + "humantime", + "serde", +] + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.9", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +dependencies = [ + "futures-util", + "http", + "hyper", + "log", + "rustls", + "rustls-native-certs", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-system-resolver" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eea26c5d0b6ab9d72219f65000af310f042a740926f7b2fa3553e774036e2e7" +dependencies = [ + "derive_builder", + "dns-lookup", + "hyper", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8302d8dfd6044d3ddb3f807a5ef3d7bbca9a574959c6d6e4dc39aa7012d0d5" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3003f85dccfc0e238ff567693248c59153a46f4e6125ba4020b973cef4d1d335" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", +] + +[[package]] +name = "icu_normalizer" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "652869735c9fb9f5a64ba180ee16f2c848390469c116deef517ecc53f4343598" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_properties", + "icu_provider", + "smallvec 1.11.0", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_properties" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce0e1aa26851f16c9e04412a5911c86b7f8768dac8f8d4c5f1c568a7e5d7a434" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_provider" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dc312a7b6148f7dfe098047ae2494d12d4034f48ade58d4f353000db376e305" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "serde", + "stable_deref_trait", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b728b9421e93eff1d9f8681101b78fa745e0748c95c655c83f337044a7e10" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "igd" +version = "0.12.0" +source = "git+https://github.com/stevefan1999-personal/rust-igd#c2d1f83eb1612a462962453cb0703bc93258b173" +dependencies = [ + "attohttpc", + "bytes", + "futures", + "http", + "hyper", + "log", + "rand 0.8.5", + "tokio", + "url", + "xmltree", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "include_dir" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown 0.14.0", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.3", + "widestring", + "windows-sys 0.48.0", + "winreg 0.50.0", +] + +[[package]] +name = "ipnet" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" + +[[package]] +name = "iri-string" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21859b667d66a4c1dacd9df0863b3efb65785474255face87f5bca39dd8407c0" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix 0.38.3", + "windows-sys 0.48.0", +] + +[[package]] +name = "isahc" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +dependencies = [ + "async-channel", + "castaway", + "crossbeam-utils", + "curl", + "curl-sys", + "encoding_rs", + "event-listener", + "futures-lite", + "http", + "log", + "mime", + "once_cell", + "polling", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" + +[[package]] +name = "jemalloc-ctl" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cffc705424a344c054e135d12ee591402f4539245e8bbd64e6c9eaa9458b63c" +dependencies = [ + "jemalloc-sys", + "libc", + "paste", +] + +[[package]] +name = "jemalloc-sys" +version = "0.5.4+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac6c1946e1cea1788cbfde01c993b52a10e2da07f4bac608228d1bed20bfebf2" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "jemallocator" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0de374a9f8e63150e6f5e8a60cc14c668226d7a347d8aee1a45766e3c4dd3bc" +dependencies = [ + "jemalloc-sys", + "libc", +] + +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jsonrpsee" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5f3783308bddc49d0218307f66a09330c106fbd792c58bac5c8dc294fdd0f98" +dependencies = [ + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-http-client", + "jsonrpsee-proc-macros", + "jsonrpsee-server", + "jsonrpsee-types", + "jsonrpsee-wasm-client", + "jsonrpsee-ws-client", + "tracing", +] + +[[package]] +name = "jsonrpsee-client-transport" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abc5630e4fa0096f00ec7b44d520701fda4504170cb85e22dca603ae5d7ad0d7" +dependencies = [ + "futures-channel", + "futures-util", + "gloo-net", + "http", + "jsonrpsee-core", + "pin-project", + "rustls-native-certs", + "soketto", + "thiserror", + "tokio", + "tokio-rustls", + "tokio-util", + "tracing", + "webpki-roots 0.24.0", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aaa4c4d5fb801dcc316d81f76422db259809037a86b3194ae538dd026b05ed7" +dependencies = [ + "anyhow", + "async-lock", + "async-trait", + "beef", + "futures-timer", + "futures-util", + "globset", + "hyper", + "jsonrpsee-types", + "parking_lot 0.12.1", + "rand 0.8.5", + "rustc-hash", + "serde", + "serde_json", + "soketto", + "thiserror", + "tokio", + "tokio-stream", + "tracing", + "wasm-bindgen-futures", +] + +[[package]] +name = "jsonrpsee-http-client" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa7165efcbfbc951d180162ff28fe91b657ed81925e37a35e4a396ce12109f96" +dependencies = [ + "async-trait", + "hyper", + "hyper-rustls", + "jsonrpsee-core", + "jsonrpsee-types", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "tracing", +] + +[[package]] +name = "jsonrpsee-proc-macros" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dc12b1d4f16a86e8c522823c4fab219c88c03eb7c924ec0501a64bf12e058b" +dependencies = [ + "heck", + "proc-macro-crate", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "jsonrpsee-server" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e79d78cfd5abd8394da10753723093c3ff64391602941c9c4b1d80a3414fd53" +dependencies = [ + "futures-util", + "hyper", + "jsonrpsee-core", + "jsonrpsee-types", + "serde", + "serde_json", + "soketto", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tracing", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00aa7cc87bc42e04e26c8ac3e7186142f7fd2949c763d9b6a7e64a69672d8fb2" +dependencies = [ + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", + "tracing", +] + +[[package]] +name = "jsonrpsee-wasm-client" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fe953c2801356f214d3f4051f786b3d11134512a46763ee8c39a9e3fa2cc1c0" +dependencies = [ + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", +] + +[[package]] +name = "jsonrpsee-ws-client" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c71b2597ec1c958c6d5bc94bb61b44d74eb28e69dc421731ab0035706f13882" +dependencies = [ + "http", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", +] + +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.2", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "k256" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" +dependencies = [ + "cfg-if", + "ecdsa 0.14.8", + "elliptic-curve 0.12.3", + "sha2 0.10.7", +] + +[[package]] +name = "k256" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +dependencies = [ + "cfg-if", + "ecdsa 0.16.8", + "elliptic-curve 0.13.5", + "once_cell", + "sha2 0.10.7", + "signature 2.1.0", +] + +[[package]] +name = "keccak" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "lalrpop" +version = "0.19.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a1cbf952127589f2851ab2046af368fd20645491bb4b376f04b7f94d7a9837b" +dependencies = [ + "ascii-canvas", + "bit-set", + "diff", + "ena", + "is-terminal", + "itertools 0.10.5", + "lalrpop-util 0.19.12", + "petgraph", + "regex", + "regex-syntax 0.6.29", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid 0.2.4", +] + +[[package]] +name = "lalrpop" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" +dependencies = [ + "ascii-canvas", + "bit-set", + "diff", + "ena", + "is-terminal", + "itertools 0.10.5", + "lalrpop-util 0.20.0", + "petgraph", + "regex", + "regex-syntax 0.7.3", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid 0.2.4", +] + +[[package]] +name = "lalrpop-util" +version = "0.19.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3c48237b9604c5a4702de6b824e02006c3214327564636aef27c1028a8fa0ed" +dependencies = [ + "regex", +] + +[[package]] +name = "lalrpop-util" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin 0.5.2", +] + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "levenshtein" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" + +[[package]] +name = "libc" +version = "0.2.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libm" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" + +[[package]] +name = "libnghttp2-sys" +version = "0.1.7+1.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "libproc" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b18cbf29f8ff3542ba22bdce9ac610fcb75d74bb4e2b306b2a2762242025b4f" +dependencies = [ + "bindgen 0.64.0", + "errno 0.2.8", + "libc", +] + +[[package]] +name = "libz-sys" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linked_hash_set" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" + +[[package]] +name = "litemap" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a04a5b2b6f54acba899926491d0a6c59d98012938ca2ab5befb281c034e8f94" + +[[package]] +name = "lock_api" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" dependencies = [ "value-bag", ] [[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +name = "lru" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lru" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" +dependencies = [ + "hashbrown 0.13.2", +] + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "mach2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8" +dependencies = [ + "libc", +] + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "matchit" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metrics" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b9b8653cec6897f73b519a43fba5ee3d50f62fe9af80b428accdcc093b4a849" +dependencies = [ + "ahash 0.7.6", + "metrics-macros 0.6.0", + "portable-atomic 0.3.20", +] + +[[package]] +name = "metrics" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fde3af1a009ed76a778cb84fdef9e7dbbdf5775ae3e4cc1f434a6a307f6f76c5" +dependencies = [ + "ahash 0.8.3", + "metrics-macros 0.7.0", + "portable-atomic 1.4.2", +] + +[[package]] +name = "metrics-exporter-prometheus" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8603921e1f54ef386189335f288441af761e0fc61bcb552168d9cedfe63ebc70" +dependencies = [ + "hyper", + "indexmap 1.9.3", + "ipnet", + "metrics 0.20.1", + "metrics-util", + "parking_lot 0.12.1", + "portable-atomic 0.3.20", + "quanta", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "metrics-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "731f8ecebd9f3a4aa847dfe75455e4757a45da40a7793d2f0b1f9b6ed18b23f3" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "metrics-macros" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddece26afd34c31585c74a4db0630c376df271c285d682d1e55012197830b6df" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] + +[[package]] +name = "metrics-process" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "006271a8019ad7a9a28cfac2cc40e3ee104d54be763c4a0901e228a63f49d706" +dependencies = [ + "libproc", + "mach2", + "metrics 0.21.1", + "once_cell", + "procfs", + "rlimit", + "windows", +] + +[[package]] +name = "metrics-util" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d24dc2dbae22bff6f1f9326ffce828c9f07ef9cc1e8002e5279f845432a30a" +dependencies = [ + "aho-corasick 0.7.20", + "crossbeam-epoch", + "crossbeam-utils", + "hashbrown 0.12.3", + "indexmap 1.9.3", + "metrics 0.20.1", + "num_cpus", + "ordered-float", + "parking_lot 0.12.1", + "portable-atomic 0.3.20", + "quanta", + "radix_trie", + "sketches-ddsketch", +] + +[[package]] +name = "mev" +version = "0.3.0" +dependencies = [ + "anyhow", + "clap", + "ethereum-consensus", + "eyre", + "mev-boost-rs", + "mev-build-rs", + "mev-relay-rs", + "mev-rs", + "reth", + "reth-payload-builder", + "reth-primitives", + "reth-rpc-types", + "serde", + "tokio", + "toml 0.5.11", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "mev-boost-rs" +version = "0.3.0" +dependencies = [ + "async-trait", + "beacon-api-client", + "ethereum-consensus", + "futures", + "httpmock", + "mev-build-rs", + "mev-relay-rs", + "mev-rs", + "parking_lot 0.12.1", + "pin-project", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "mev-build-rs" +version = "0.3.0" +dependencies = [ + "async-trait", + "beacon-api-client", + "ethereum-consensus", + "ethers", + "futures", + "mev-rs", + "parking_lot 0.12.1", + "pin-project", + "reth-interfaces", + "reth-payload-builder", + "reth-primitives", + "reth-provider", + "reth-revm", + "reth-transaction-pool", + "revm", + "serde", + "ssz_rs", + "thiserror", + "tokio", + "tokio-stream", + "tracing", + "url", +] + +[[package]] +name = "mev-relay-rs" +version = "0.3.0" +dependencies = [ + "async-trait", + "beacon-api-client", + "ethereum-consensus", + "futures", + "http", + "mev-build-rs", + "mev-rs", + "parking_lot 0.12.1", + "pin-project", + "serde", + "thiserror", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "mev-rs" +version = "0.3.0" +dependencies = [ + "async-trait", + "axum", + "beacon-api-client", + "ethereum-consensus", + "hyper", + "parking_lot 0.12.1", + "rand 0.8.5", + "serde", + "serde_json", + "ssz_rs", + "thiserror", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[package]] +name = "modular-bitfield" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" +dependencies = [ + "modular-bitfield-impl", + "static_assertions", +] + +[[package]] +name = "modular-bitfield-impl" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "more-asserts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" + +[[package]] +name = "multiaddr" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c580bfdd8803cce319b047d239559a22f809094aaea4ac13902a1fdcfcd4261" +dependencies = [ + "arrayref", + "bs58", + "byteorder", + "data-encoding", + "multihash", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint", + "url", +] + +[[package]] +name = "multihash" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" +dependencies = [ + "core2", + "digest 0.10.7", + "multihash-derive", + "sha2 0.10.7", + "unsigned-varint", +] + +[[package]] +name = "multihash-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" +dependencies = [ + "proc-macro-crate", + "proc-macro-error", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", + "synstructure 0.12.6", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nibble_vec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" +dependencies = [ + "smallvec 1.11.0", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "num-complex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + +[[package]] +name = "object" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +dependencies = [ + "atomic-polyfill 1.0.3", + "critical-section", +] + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "open-fastrlp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", + "ethereum-types", + "open-fastrlp-derive", +] + +[[package]] +name = "open-fastrlp-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" +dependencies = [ + "bytes", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "openssl" +version = "0.10.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-src" +version = "111.26.0+1.1.1u" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efc62c9f12b22b8f5208c23a7200a442b2e5999f8bdf80233852122b5a4f6f37" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-float" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "page_size" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebde548fbbf1ea81a99b128872779c437752fb99f217c45245e1a61dcd9edcd" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8e946cc0cc711189c0b0249fb8b599cbeeab9784d83c415719368bb8d4ac64" +dependencies = [ + "arrayvec", + "bitvec 1.0.1", + "byte-slice-cast", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a296c3079b5fefbc499e1de58dc26c09b1b9a5952d26694ee89f04a43ebbb3e" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] + +[[package]] +name = "parity-tokio-ipc" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9981e32fb75e004cc148f5fb70342f393830e0a4aa62e3cc93b50976218d42b6" +dependencies = [ + "futures", + "libc", + "log", + "rand 0.7.3", + "tokio", + "winapi", +] + +[[package]] +name = "parking" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.8", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec 1.11.0", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.3.5", + "smallvec 1.11.0", + "windows-targets 0.48.1", +] + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", + "hmac", + "password-hash", + "sha2 0.10.7", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "hmac", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "pest" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "petgraph" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +dependencies = [ + "fixedbitset", + "indexmap 1.9.3", +] + +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version 0.4.0", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared 0.11.2", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der 0.6.1", + "spki 0.6.0", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.7", + "spki 0.7.2", +] + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "plain_hasher" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e19e6491bdde87c2c43d70f4c194bc8a758f2eb732df00f61e43f7362e3b4cc" +dependencies = [ + "crunchy", +] + +[[package]] +name = "platforms" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "pollster" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" + +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e30165d31df606f5726b090ec7592c308a0eaf61721ff64c9a3018e344a8753e" +dependencies = [ + "portable-atomic 1.4.2", +] + +[[package]] +name = "portable-atomic" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f32154ba0af3a075eefa1eda8bb414ee928f62303a54ea85b8d6638ff1a6ee9e" + +[[package]] +name = "postcard" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9ee729232311d3cd113749948b689627618133b1c5012b77342c1950b25eaeb" +dependencies = [ + "cobs", + "heapless", + "serde", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "pretty_assertions" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "prettyplease" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64d9ba0963cdcea2e1b2230fbae2bab30eb25a174be395c41e764bfb65dd62" +dependencies = [ + "proc-macro2 1.0.66", + "syn 2.0.28", +] + +[[package]] +name = "primitive-types" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +dependencies = [ + "thiserror", + "toml 0.5.11", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +dependencies = [ + "unicode-xid 0.1.0", +] + +[[package]] +name = "proc-macro2" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "procfs" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "943ca7f9f29bab5844ecd8fdb3992c5969b6622bb9609b9502fef9b4310e3f1f" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "hex", + "lazy_static", + "rustix 0.36.15", +] + +[[package]] +name = "proptest" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e35c06b98bf36aba164cc17cb25f7e232f5c4aeea73baa14b8a9f0d92dbfa65" +dependencies = [ + "bit-set", + "bitflags 1.3.2", + "byteorder", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.6.29", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "proptest-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90b46295382dc76166cb7cf2bb4a97952464e4b7ed5a43e6cd34e1fec3349ddc" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", +] + +[[package]] +name = "public-ip" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4c40db5262d93298c363a299f8bc1b3a956a78eecddba3bc0e58b76e2f419a" +dependencies = [ + "dns-lookup", + "futures-core", + "futures-util", + "http", + "hyper", + "hyper-system-resolver", + "pin-project-lite", + "thiserror", + "tokio", + "tracing", + "tracing-futures", + "trust-dns-client", + "trust-dns-proto 0.20.4", +] + +[[package]] +name = "quanta" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e31331286705f455e56cca62e0e717158474ff02b7936c1fa596d983f4ae27" +dependencies = [ + "crossbeam-utils", + "libc", + "mach", + "once_cell", + "raw-cpuid", + "wasi 0.10.2+wasi-snapshot-preview1", + "web-sys", + "winapi", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +dependencies = [ + "proc-macro2 0.4.30", +] + +[[package]] +name = "quote" +version = "1.0.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" +dependencies = [ + "proc-macro2 1.0.66", +] + +[[package]] +name = "radium" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "radix_trie" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" +dependencies = [ + "endian-type", + "nibble_vec", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.10", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "raw-cpuid" +version = "10.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom 0.2.10", + "redox_syscall 0.2.16", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +dependencies = [ + "aho-corasick 1.0.2", + "memchr", + "regex-automata 0.3.2", + "regex-syntax 0.7.3", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d3daa6976cffb758ec878f108ba0e062a45b2d6ca3a2cca965338855476caf" +dependencies = [ + "aho-corasick 1.0.2", + "memchr", + "regex-syntax 0.7.3", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab07dc67230e4a4718e70fd5c20055a4334b121f1f9db8fe63ef39ce9b8c846" + +[[package]] +name = "regress" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82a9ecfa0cb04d0b04dddb99b8ccf4f66bc8dfd23df694b398570bd8ae3a50fb" +dependencies = [ + "hashbrown 0.13.2", + "memchr", +] + +[[package]] +name = "reqwest" +version = "0.11.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +dependencies = [ + "base64 0.21.2", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 0.22.6", + "winreg 0.10.1", +] + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "reth" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "backon", + "clap", + "comfy-table", + "confy", + "const-str", + "crossterm 0.25.0", + "dirs-next", + "eyre", + "fdlimit", + "futures", + "hex", + "human_bytes", + "humantime", + "hyper", + "jemalloc-ctl", + "jemallocator", + "metrics-exporter-prometheus", + "metrics-process", + "metrics-util", + "pin-project", + "pretty_assertions", + "proptest", + "reth-auto-seal-consensus", + "reth-basic-payload-builder", + "reth-beacon-consensus", + "reth-blockchain-tree", + "reth-config", + "reth-consensus-common", + "reth-db", + "reth-discv4", + "reth-downloaders", + "reth-interfaces", + "reth-metrics", + "reth-net-nat", + "reth-network", + "reth-network-api", + "reth-payload-builder", + "reth-primitives", + "reth-provider", + "reth-prune", + "reth-revm", + "reth-revm-inspectors", + "reth-rlp", + "reth-rpc", + "reth-rpc-api", + "reth-rpc-builder", + "reth-rpc-engine-api", + "reth-rpc-types", + "reth-stages", + "reth-tasks", + "reth-tracing", + "reth-transaction-pool", + "reth-trie", + "secp256k1", + "serde", + "serde_json", + "shellexpand", + "tempfile", + "thiserror", + "tokio", + "toml 0.7.6", + "tracing", + "tui", + "vergen", +] + +[[package]] +name = "reth-auto-seal-consensus" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "futures-util", + "reth-beacon-consensus", + "reth-interfaces", + "reth-primitives", + "reth-provider", + "reth-revm", + "reth-stages", + "reth-transaction-pool", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "reth-basic-payload-builder" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "regex-automata 0.1.10", + "futures-core", + "futures-util", + "reth-metrics", + "reth-payload-builder", + "reth-primitives", + "reth-provider", + "reth-revm", + "reth-rlp", + "reth-tasks", + "reth-transaction-pool", + "revm", + "tokio", + "tracing", ] [[package]] -name = "matchit" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" +name = "reth-beacon-consensus" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "futures", + "reth-consensus-common", + "reth-db", + "reth-interfaces", + "reth-metrics", + "reth-payload-builder", + "reth-primitives", + "reth-provider", + "reth-prune", + "reth-rpc-types", + "reth-stages", + "reth-tasks", + "schnellru", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] [[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +name = "reth-blockchain-tree" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "aquamarine", + "linked_hash_set", + "lru 0.10.1", + "parking_lot 0.12.1", + "reth-db", + "reth-interfaces", + "reth-metrics", + "reth-primitives", + "reth-provider", + "reth-stages", + "tracing", +] [[package]] -name = "mev" -version = "0.3.0" +name = "reth-codecs" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "anyhow", - "clap", - "mev-boost-rs", - "mev-build-rs", - "mev-relay-rs", - "mev-rs", + "arbitrary", + "bytes", + "codecs-derive", + "proptest", + "proptest-derive", + "revm-primitives", +] + +[[package]] +name = "reth-config" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "confy", + "reth-discv4", + "reth-downloaders", + "reth-net-nat", + "reth-network", + "reth-primitives", + "reth-stages", + "secp256k1", + "serde", + "serde_json", + "tempfile", +] + +[[package]] +name = "reth-consensus-common" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "reth-interfaces", + "reth-primitives", + "reth-provider", +] + +[[package]] +name = "reth-db" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "arbitrary", + "bytes", + "derive_more", + "eyre", + "futures", + "heapless", + "modular-bitfield", + "page_size", + "parity-scale-codec", + "parking_lot 0.12.1", + "postcard", + "proptest", + "proptest-derive", + "rand 0.8.5", + "reth-codecs", + "reth-interfaces", + "reth-libmdbx", + "reth-metrics", + "reth-primitives", + "serde", + "tempfile", + "thiserror", + "tokio-stream", + "vergen", +] + +[[package]] +name = "reth-discv4" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "discv5", + "enr 0.8.1", + "generic-array", + "hex", + "reth-net-common", + "reth-net-nat", + "reth-primitives", + "reth-rlp", + "reth-rlp-derive", + "secp256k1", "serde", + "thiserror", "tokio", - "toml", + "tokio-stream", "tracing", - "tracing-subscriber", ] [[package]] -name = "mev-boost-rs" -version = "0.3.0" +name = "reth-dns-discovery" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ "async-trait", - "beacon-api-client", - "ethereum-consensus", + "data-encoding", + "enr 0.8.1", + "linked_hash_set", + "parking_lot 0.12.1", + "reth-net-common", + "reth-primitives", + "reth-rlp", + "schnellru", + "secp256k1", + "serde", + "serde_with", + "thiserror", + "tokio", + "tokio-stream", + "tracing", + "trust-dns-resolver", +] + +[[package]] +name = "reth-downloaders" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ "futures", - "httpmock", - "mev-build-rs", - "mev-relay-rs", - "mev-rs", - "parking_lot", + "futures-util", + "itertools 0.11.0", "pin-project", - "rand", - "serde", - "serde_json", + "rayon", + "reth-db", + "reth-interfaces", + "reth-metrics", + "reth-primitives", + "reth-rlp", + "reth-tasks", + "tempfile", "thiserror", "tokio", + "tokio-stream", + "tokio-util", "tracing", - "tracing-subscriber", - "url", ] [[package]] -name = "mev-build-rs" -version = "0.3.0" +name = "reth-ecies" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "async-trait", - "beacon-api-client", - "ethereum-consensus", + "aes 0.8.3", + "block-padding", + "byteorder", + "cipher 0.4.4", + "ctr 0.9.2", + "digest 0.10.7", + "educe", "futures", - "mev-rs", - "parking_lot", + "generic-array", + "hmac", "pin-project", - "serde", + "rand 0.8.5", + "reth-net-common", + "reth-primitives", + "reth-rlp", + "secp256k1", + "sha2 0.10.7", + "sha3", "thiserror", "tokio", + "tokio-stream", + "tokio-util", "tracing", - "url", + "typenum", ] [[package]] -name = "mev-relay-rs" -version = "0.3.0" +name = "reth-eth-wire" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ "async-trait", - "beacon-api-client", - "ethereum-consensus", + "bytes", + "ethers-core", "futures", - "http", - "mev-build-rs", - "mev-rs", - "parking_lot", "pin-project", + "reth-codecs", + "reth-ecies", + "reth-metrics", + "reth-primitives", + "reth-rlp", "serde", + "smol_str", + "snap", "thiserror", "tokio", + "tokio-stream", + "tokio-util", "tracing", - "url", ] [[package]] -name = "mev-rs" -version = "0.3.0" +name = "reth-interfaces" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "anvil-rpc", "async-trait", - "axum", - "beacon-api-client", - "ethereum-consensus", - "hyper", - "parking_lot", - "reqwest", - "serde", - "serde_json", - "ssz_rs", + "auto_impl", + "clap", + "futures", + "modular-bitfield", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "reth-codecs", + "reth-eth-wire", + "reth-network-api", + "reth-primitives", + "reth-rpc-types", + "revm-primitives", + "secp256k1", "thiserror", "tokio", + "tokio-stream", "tracing", ] [[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +name = "reth-ipc" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "async-trait", + "bytes", + "futures", + "jsonrpsee", + "parity-tokio-ipc", + "pin-project", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tracing", +] [[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +name = "reth-libmdbx" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "adler", + "bitflags 2.3.3", + "byteorder", + "derive_more", + "indexmap 1.9.3", + "libc", + "parking_lot 0.12.1", + "reth-mdbx-sys", + "thiserror", ] [[package]] -name = "mio" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +name = "reth-mdbx-sys" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ + "bindgen 0.65.1", + "cc", "libc", - "wasi", - "windows-sys", ] [[package]] -name = "multiaddr" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c580bfdd8803cce319b047d239559a22f809094aaea4ac13902a1fdcfcd4261" +name = "reth-metrics" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "arrayref", - "bs58", - "byteorder", - "data-encoding", - "multihash", - "percent-encoding", + "futures", + "metrics 0.20.1", + "reth-metrics-derive", + "tokio", +] + +[[package]] +name = "reth-metrics-derive" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "once_cell", + "proc-macro2 1.0.66", + "quote 1.0.32", + "regex", + "syn 2.0.28", +] + +[[package]] +name = "reth-net-common" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "pin-project", + "reth-primitives", + "tokio", +] + +[[package]] +name = "reth-net-nat" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "igd", + "pin-project-lite", + "public-ip", + "serde_with", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "reth-network" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "aquamarine", + "async-trait", + "auto_impl", + "enr 0.8.1", + "fnv", + "futures", + "humantime-serde", + "linked-hash-map", + "linked_hash_set", + "parking_lot 0.12.1", + "pin-project", + "rand 0.8.5", + "reth-discv4", + "reth-dns-discovery", + "reth-ecies", + "reth-eth-wire", + "reth-interfaces", + "reth-metrics", + "reth-net-common", + "reth-network-api", + "reth-primitives", + "reth-provider", + "reth-rlp", + "reth-rlp-derive", + "reth-rpc-types", + "reth-tasks", + "reth-transaction-pool", + "secp256k1", "serde", - "static_assertions", - "unsigned-varint", - "url", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", ] [[package]] -name = "multihash" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" +name = "reth-network-api" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "core2", - "digest 0.10.7", - "multihash-derive", + "async-trait", + "reth-eth-wire", + "reth-primitives", + "reth-rpc-types", + "serde", + "thiserror", + "tokio", +] + +[[package]] +name = "reth-payload-builder" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "futures-util", + "reth-interfaces", + "reth-metrics", + "reth-primitives", + "reth-revm-primitives", + "reth-rlp", + "reth-rpc-types", + "revm-primitives", "sha2 0.10.7", - "unsigned-varint", + "thiserror", + "tokio", + "tokio-stream", + "tracing", ] [[package]] -name = "multihash-derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" +name = "reth-primitives" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", + "arbitrary", + "bytes", + "crc", + "crunchy", + "derive_more", + "ethers-core", + "fixed-hash", + "hash-db", + "hex", + "hex-literal 0.3.4", + "impl-serde", + "modular-bitfield", + "once_cell", + "paste", + "plain_hasher", + "proptest", + "proptest-derive", + "reth-codecs", + "reth-rlp", + "reth-rlp-derive", + "revm-primitives", + "ruint", + "secp256k1", + "serde", + "serde_json", + "serde_with", + "strum 0.25.0", + "sucds", + "thiserror", + "tiny-keccak", + "tokio", + "tokio-stream", + "tracing", + "triehash", + "url", + "zstd 0.12.4", ] [[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +name = "reth-provider" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", + "auto_impl", + "derive_more", + "itertools 0.11.0", + "parking_lot 0.12.1", + "pin-project", + "reth-db", + "reth-interfaces", + "reth-primitives", + "reth-revm-primitives", + "reth-rlp", + "reth-trie", + "tokio", + "tokio-stream", + "tracing", ] [[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +name = "reth-prune" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "itertools 0.11.0", + "rayon", + "reth-db", + "reth-interfaces", + "reth-metrics", + "reth-primitives", + "reth-provider", + "thiserror", + "tracing", +] [[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +name = "reth-revm" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "overload", - "winapi", + "reth-consensus-common", + "reth-interfaces", + "reth-primitives", + "reth-provider", + "reth-revm-inspectors", + "reth-revm-primitives", + "revm", + "tracing", ] [[package]] -name = "num-bigint" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +name = "reth-revm-inspectors" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "boa_engine", + "boa_gc", + "hashbrown 0.13.2", + "reth-primitives", + "reth-rpc-types", + "revm", + "serde", + "serde_json", + "thiserror", + "tokio", ] [[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +name = "reth-revm-primitives" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "autocfg", - "num-traits", + "reth-primitives", + "revm", ] [[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +name = "reth-rlp" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "autocfg", + "arrayvec", + "auto_impl", + "bytes", + "ethereum-types", + "reth-rlp-derive", + "revm-primitives", + "smol_str", ] [[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +name = "reth-rlp-derive" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "hermit-abi", - "libc", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", ] [[package]] -name = "object" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +name = "reth-rpc" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "memchr", + "async-trait", + "bytes", + "ethers-core", + "futures", + "hex", + "http", + "http-body", + "hyper", + "jsonrpsee", + "jsonwebtoken", + "pin-project", + "rand 0.8.5", + "rayon", + "reth-consensus-common", + "reth-interfaces", + "reth-metrics", + "reth-network-api", + "reth-primitives", + "reth-provider", + "reth-revm", + "reth-rlp", + "reth-rpc-api", + "reth-rpc-engine-api", + "reth-rpc-types", + "reth-tasks", + "reth-transaction-pool", + "revm", + "revm-primitives", + "schnellru", + "secp256k1", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tracing", + "tracing-futures", ] [[package]] -name = "once_cell" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +name = "reth-rpc-api" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "jsonrpsee", + "reth-primitives", + "reth-rpc-types", + "serde_json", +] [[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +name = "reth-rpc-builder" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "hyper", + "jsonrpsee", + "reth-interfaces", + "reth-ipc", + "reth-metrics", + "reth-network-api", + "reth-primitives", + "reth-provider", + "reth-rpc", + "reth-rpc-api", + "reth-rpc-engine-api", + "reth-rpc-types", + "reth-tasks", + "reth-transaction-pool", + "serde", + "strum 0.25.0", + "thiserror", + "tower", + "tower-http", + "tracing", +] [[package]] -name = "openssl" -version = "0.10.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +name = "reth-rpc-engine-api" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", + "async-trait", + "jsonrpsee-core", + "jsonrpsee-types", + "reth-beacon-consensus", + "reth-interfaces", + "reth-payload-builder", + "reth-primitives", + "reth-provider", + "reth-rpc-api", + "reth-rpc-types", + "reth-tasks", + "thiserror", + "tokio", + "tracing", ] [[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +name = "reth-rpc-types" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "itertools 0.11.0", + "jsonrpsee-types", + "reth-primitives", + "reth-rlp", + "serde", + "serde_json", + "thiserror", ] [[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +name = "reth-stages" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "aquamarine", + "async-trait", + "futures-util", + "itertools 0.11.0", + "num-traits", + "pin-project", + "rayon", + "reth-codecs", + "reth-db", + "reth-interfaces", + "reth-metrics", + "reth-primitives", + "reth-provider", + "reth-trie", + "serde", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] [[package]] -name = "openssl-src" -version = "111.26.0+1.1.1u" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc62c9f12b22b8f5208c23a7200a442b2e5999f8bdf80233852122b5a4f6f37" +name = "reth-tasks" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "cc", + "dyn-clone", + "futures-util", + "reth-metrics", + "thiserror", + "tokio", + "tracing", + "tracing-futures", ] [[package]] -name = "openssl-sys" -version = "0.9.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +name = "reth-tracing" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" dependencies = [ - "cc", - "libc", - "openssl-src", - "pkg-config", - "vcpkg", + "tracing", + "tracing-appender", + "tracing-journald", + "tracing-subscriber", ] [[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +name = "reth-transaction-pool" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "aquamarine", + "async-trait", + "auto_impl", + "bitflags 1.3.2", + "fnv", + "futures-util", + "parking_lot 0.12.1", + "paste", + "rand 0.8.5", + "reth-interfaces", + "reth-metrics", + "reth-primitives", + "reth-provider", + "reth-rlp", + "reth-tasks", + "serde", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] [[package]] -name = "parking" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +name = "reth-trie" +version = "0.1.0-alpha.4" +source = "git+https://github.com/paradigmxyz/reth?rev=e3457b8#e3457b8866de12c4c1c2cf23c829787d8c7c2fc0" +dependencies = [ + "derive_more", + "hex", + "reth-db", + "reth-interfaces", + "reth-primitives", + "reth-rlp", + "thiserror", + "tokio", + "tracing", +] [[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +name = "revm" +version = "3.3.0" +source = "git+https://github.com/bluealloy/revm/?branch=release/v25#88337924f4d16ed1f5e4cde12a03d0cb755cd658" dependencies = [ - "lock_api", - "parking_lot_core", + "auto_impl", + "revm-interpreter", + "revm-precompile", ] [[package]] -name = "parking_lot_core" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +name = "revm-interpreter" +version = "1.1.2" +source = "git+https://github.com/bluealloy/revm/?branch=release/v25#88337924f4d16ed1f5e4cde12a03d0cb755cd658" dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.3.5", - "smallvec", - "windows-targets", + "derive_more", + "enumn", + "revm-primitives", + "sha3", ] [[package]] -name = "percent-encoding" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +name = "revm-precompile" +version = "2.0.3" +source = "git+https://github.com/bluealloy/revm/?branch=release/v25#88337924f4d16ed1f5e4cde12a03d0cb755cd658" +dependencies = [ + "k256 0.13.1", + "num", + "once_cell", + "revm-primitives", + "ripemd", + "secp256k1", + "sha2 0.10.7", + "sha3", + "substrate-bn", +] [[package]] -name = "petgraph" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +name = "revm-primitives" +version = "1.1.2" +source = "git+https://github.com/bluealloy/revm/?branch=release/v25#88337924f4d16ed1f5e4cde12a03d0cb755cd658" dependencies = [ - "fixedbitset", - "indexmap", + "arbitrary", + "auto_impl", + "bitvec 1.0.1", + "bytes", + "derive_more", + "enumn", + "fixed-hash", + "hashbrown 0.13.2", + "hex", + "hex-literal 0.4.1", + "primitive-types", + "proptest", + "proptest-derive", + "rlp", + "ruint", + "serde", + "sha3", ] [[package]] -name = "phf_shared" -version = "0.10.0" +name = "rfc6979" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" dependencies = [ - "siphasher", + "crypto-bigint 0.4.9", + "hmac", + "zeroize", ] [[package]] -name = "pin-project" -version = "1.1.2" +name = "rfc6979" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "pin-project-internal", + "hmac", + "subtle", ] [[package]] -name = "pin-project-internal" -version = "1.1.2" +name = "ring" +version = "0.16.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted", + "web-sys", + "winapi", ] [[package]] -name = "pin-project-lite" -version = "0.2.10" +name = "ripemd" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] [[package]] -name = "pin-utils" -version = "0.1.0" +name = "rlimit" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "f8a29d87a652dc4d43c586328706bb5cdff211f3f39a530f240b53f7221dab8e" +dependencies = [ + "libc", +] [[package]] -name = "pkcs8" -version = "0.9.0" +name = "rlp" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ - "der", - "spki", + "bytes", + "rlp-derive", + "rustc-hex", ] [[package]] -name = "pkg-config" -version = "0.3.27" +name = "rlp-derive" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] [[package]] -name = "polling" -version = "2.8.0" +name = "ruint" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +checksum = "95294d6e3a6192f3aabf91c38f56505a625aa495533442744185a36d75a790c4" dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys", + "alloy-rlp", + "arbitrary", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp", + "num-bigint", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand 0.8.5", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", ] [[package]] -name = "ppv-lite86" -version = "0.2.17" +name = "ruint-macro" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "e666a5496a0b2186dbcd0ff6106e29e093c15591bde62c20d3842007c6978a09" [[package]] -name = "precomputed-hash" -version = "0.1.1" +name = "rustc-demangle" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] -name = "proc-macro-crate" -version = "1.1.3" +name = "rustc-hash" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" -dependencies = [ - "thiserror", - "toml", -] +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "rustc-hex" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "rustc_version" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" dependencies = [ - "proc-macro2", - "quote", - "version_check", + "semver 0.11.0", ] [[package]] -name = "proc-macro2" -version = "1.0.64" +name = "rustc_version" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "unicode-ident", + "semver 1.0.18", ] [[package]] -name = "quote" -version = "1.0.29" +name = "rustix" +version = "0.36.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "c37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941" dependencies = [ - "proc-macro2", + "bitflags 1.3.2", + "errno 0.3.1", + "io-lifetimes", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.45.0", ] [[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" +name = "rustix" +version = "0.37.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" dependencies = [ + "bitflags 1.3.2", + "errno 0.3.1", + "io-lifetimes", "libc", - "rand_chacha", - "rand_core", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "rustix" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "ac5ffa1efe7548069688cd7028f32591853cd7b5b756d41bcffd2353e4fc75b4" dependencies = [ - "ppv-lite86", - "rand_core", + "bitflags 2.3.3", + "errno 0.3.1", + "libc", + "linux-raw-sys 0.4.3", + "windows-sys 0.48.0", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "rustls" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "79ea77c539259495ce8ca47f53e66ae0330a8819f67e23ac96ca02f50e7b7d36" dependencies = [ - "getrandom", + "log", + "ring", + "rustls-webpki 0.101.2", + "sct", ] [[package]] -name = "redox_syscall" -version = "0.2.16" +name = "rustls-native-certs" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ - "bitflags 1.3.2", + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", ] [[package]] -name = "redox_syscall" -version = "0.3.5" +name = "rustls-pemfile" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "bitflags 1.3.2", + "base64 0.21.2", ] [[package]] -name = "redox_users" -version = "0.4.3" +name = "rustls-webpki" +version = "0.100.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" dependencies = [ - "getrandom", - "redox_syscall 0.2.16", - "thiserror", + "ring", + "untrusted", ] [[package]] -name = "regex" -version = "1.9.1" +name = "rustls-webpki" +version = "0.101.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +checksum = "513722fd73ad80a71f72b61009ea1b584bcfa1483ca93949c8f290298837fa59" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.3.2", - "regex-syntax 0.7.3", + "ring", + "untrusted", ] [[package]] -name = "regex-automata" -version = "0.1.10" +name = "rustversion" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] +checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f" [[package]] -name = "regex-automata" -version = "0.3.2" +name = "rusty-fork" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d3daa6976cffb758ec878f108ba0e062a45b2d6ca3a2cca965338855476caf" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.7.3", + "fnv", + "quick-error", + "tempfile", + "wait-timeout", ] [[package]] -name = "regex-syntax" -version = "0.6.29" +name = "ryu" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" [[package]] -name = "regex-syntax" -version = "0.7.3" +name = "ryu-js" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab07dc67230e4a4718e70fd5c20055a4334b121f1f9db8fe63ef39ce9b8c846" +checksum = "6518fc26bced4d53678a22d6e423e9d8716377def84545fe328236e3af070e7f" [[package]] -name = "reqwest" -version = "0.11.18" +name = "salsa20" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "base64 0.21.2", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", + "cipher 0.4.4", ] [[package]] -name = "rfc6979" -version = "0.3.1" +name = "same-file" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ - "crypto-bigint", - "hmac", - "zeroize", + "winapi-util", ] [[package]] -name = "rlp" -version = "0.5.2" +name = "scale-info" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" dependencies = [ - "bytes", - "rustc-hex", + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", ] [[package]] -name = "rustc-demangle" -version = "0.1.23" +name = "scale-info-derive" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", +] [[package]] -name = "rustc-hex" -version = "2.1.0" +name = "schannel" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] [[package]] -name = "rustix" -version = "0.37.23" +name = "schnellru" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys", + "ahash 0.8.3", + "cfg-if", + "hashbrown 0.13.2", ] [[package]] -name = "rustix" -version = "0.38.3" +name = "scopeguard" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac5ffa1efe7548069688cd7028f32591853cd7b5b756d41bcffd2353e4fc75b4" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" dependencies = [ - "bitflags 2.3.3", - "errno", - "libc", - "linux-raw-sys 0.4.3", - "windows-sys", + "hmac", + "pbkdf2 0.11.0", + "salsa20", + "sha2 0.10.7", ] [[package]] -name = "rustversion" -version = "1.0.13" +name = "sct" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] [[package]] -name = "ryu" -version = "1.0.14" +name = "sec1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +dependencies = [ + "base16ct 0.1.1", + "der 0.6.1", + "generic-array", + "pkcs8 0.9.0", + "subtle", + "zeroize", +] [[package]] -name = "schannel" -version = "0.1.22" +name = "sec1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ - "windows-sys", + "base16ct 0.2.0", + "der 0.7.7", + "generic-array", + "pkcs8 0.10.2", + "subtle", + "zeroize", ] [[package]] -name = "scopeguard" -version = "1.1.0" +name = "secp256k1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +dependencies = [ + "rand 0.8.5", + "secp256k1-sys", + "serde", +] [[package]] -name = "sec1" -version = "0.3.0" +name = "secp256k1-sys" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", + "cc", ] [[package]] @@ -2312,31 +7237,81 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" -version = "1.0.170" +version = "1.0.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56657f512baabca8f840542f9ca8152aecf182c473c26e46e58d6aab4f6e439" +checksum = "0ea67f183f058fe88a4e3ec6e2788e003840893b91bac4559cabedd00863b3ed" dependencies = [ "serde_derive", ] +[[package]] +name = "serde-hex" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca37e3e4d1b39afd7ff11ee4e947efae85adfddf4841787bfa47c470e96dc26d" +dependencies = [ + "array-init", + "serde", + "smallvec 0.6.14", +] + [[package]] name = "serde_derive" -version = "1.0.170" +version = "1.0.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77d477848e6b23adba0db397777d5aad864555bc17fd9c89abb3b8009788b7b8" +checksum = "24e744d7782b686ab3b73267ef05697159cc0e5abbed3f47f9933165e5219036" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", ] [[package]] name = "serde_json" -version = "1.0.100" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1e14e89be7aa4c4b78bdbdc9eb5bf8517829a600ae8eaa39a6e1d960b5185c" +checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c" dependencies = [ "itoa", "ryu", @@ -2363,6 +7338,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2375,18 +7359,70 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +dependencies = [ + "base64 0.13.1", + "chrono", + "hex", + "indexmap 1.9.3", + "serde", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +dependencies = [ + "darling 0.20.3", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] + [[package]] name = "serde_yaml" version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" dependencies = [ - "indexmap", + "indexmap 1.9.3", "ryu", "serde", "yaml-rust", ] +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + [[package]] name = "sha2" version = "0.9.9" @@ -2430,6 +7466,21 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shellexpand" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" + [[package]] name = "signal-hook" version = "0.3.15" @@ -2440,6 +7491,17 @@ dependencies = [ "signal-hook-registry", ] +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -2456,7 +7518,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ "digest 0.10.7", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "signature" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", ] [[package]] @@ -2465,12 +7537,30 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror", + "time", +] + [[package]] name = "siphasher" version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +[[package]] +name = "sketches-ddsketch" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68a406c1882ed7f29cd5e248c9848a80e7cb6ae0fea82346d2746f2f941c07e1" + [[package]] name = "slab" version = "0.4.8" @@ -2491,12 +7581,36 @@ dependencies = [ "futures-io", ] +[[package]] +name = "smallvec" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" +dependencies = [ + "maybe-uninit", +] + [[package]] name = "smallvec" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +[[package]] +name = "smol_str" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" +dependencies = [ + "serde", +] + +[[package]] +name = "snap" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" + [[package]] name = "socket2" version = "0.4.9" @@ -2507,6 +7621,61 @@ dependencies = [ "winapi", ] +[[package]] +name = "socket2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "soketto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +dependencies = [ + "base64 0.13.1", + "bytes", + "futures", + "http", + "httparse", + "log", + "rand 0.8.5", + "sha-1", +] + +[[package]] +name = "solang-parser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c792fe9fae2a2f716846f214ca10d5a1e21133e0bf36cef34bcc4a852467b21" +dependencies = [ + "itertools 0.10.5", + "lalrpop 0.20.0", + "lalrpop-util 0.20.0", + "phf", + "thiserror", + "unicode-xid 0.2.4", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + [[package]] name = "spki" version = "0.6.0" @@ -2514,16 +7683,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" dependencies = [ "base64ct", - "der", + "der 0.6.1", +] + +[[package]] +name = "spki" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +dependencies = [ + "base64ct", + "der 0.7.7", ] +[[package]] +name = "sptr" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" + [[package]] name = "ssz_rs" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "057291e5631f280978fa9c8009390663ca4613359fc1318e36a8c24c392f6d1f" dependencies = [ - "bitvec", + "bitvec 1.0.1", "hex", "num-bigint", "serde", @@ -2537,11 +7722,17 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f07d54c4d01a1713eb363b55ba51595da15f6f1211435b71466460da022aa140" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.32", "syn 1.0.109", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -2556,11 +7747,17 @@ checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", - "parking_lot", - "phf_shared", + "parking_lot 0.12.1", + "phf_shared 0.10.0", "precomputed-hash", ] +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" + [[package]] name = "strsim" version = "0.10.0" @@ -2568,10 +7765,104 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] -name = "subtle" -version = "2.5.0" +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.1", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2 1.0.66", + "quote 1.0.32", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "strum_macros" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6069ca09d878a33f883cc06aaa9718ede171841d3832450354410b718b097232" +dependencies = [ + "heck", + "proc-macro2 1.0.66", + "quote 1.0.32", + "rustversion", + "syn 2.0.28", +] + +[[package]] +name = "substrate-bn" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b5bbfa79abbae15dd642ea8176a21a635ff3c00059961d1ea27ad04e5b441c" +dependencies = [ + "byteorder", + "crunchy", + "lazy_static", + "rand 0.8.5", + "rustc-hex", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "sucds" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c1c7f814471a34d2355f9eb25ef3517ec491ac243612b1c83137739998c5444" +dependencies = [ + "anyhow", +] + +[[package]] +name = "svm-rs" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a04fc4f5cd35c700153b233f5575ccb3237e0f941fa5049d9e98254d10bf2fe" +dependencies = [ + "fs2", + "hex", + "home", + "once_cell", + "reqwest", + "semver 1.0.18", + "serde", + "serde_json", + "sha2 0.10.7", + "thiserror", + "url", + "zip", +] + +[[package]] +name = "syn" +version = "0.15.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid 0.1.0", +] [[package]] name = "syn" @@ -2579,19 +7870,19 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.32", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.25" +version = "2.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2" +checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.32", "unicode-ident", ] @@ -2607,10 +7898,22 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.32", "syn 1.0.109", - "unicode-xid", + "unicode-xid 0.2.4", +] + +[[package]] +name = "synstructure" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "285ba80e733fac80aa4270fbcdf83772a79b80aa35c97075320abfee4a915b06" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", + "unicode-xid 0.2.4", ] [[package]] @@ -2630,7 +7933,7 @@ dependencies = [ "fastrand", "redox_syscall 0.3.5", "rustix 0.37.23", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2644,24 +7947,30 @@ dependencies = [ "winapi", ] +[[package]] +name = "thin-vec" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac81b6fd6beb5884b0cf3321b8117e6e5d47ecb6fc89f414cfdcca8b2fe2dd8" + [[package]] name = "thiserror" -version = "1.0.43" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42" +checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.43" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" +checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", ] [[package]] @@ -2683,6 +7992,36 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "time" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79eabcd964882a646b3584543ccabeae7869e9ac32a46f6f22b7a5bd405308b" +dependencies = [ + "deranged", + "itoa", + "libc", + "num_threads", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + +[[package]] +name = "time-macros" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb71511c991639bb078fd5bf97757e03914361c48100d52878b8e52b46fb92cd" +dependencies = [ + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -2692,6 +8031,16 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ac3f5b6856e931e15e07b478e98c8045239829a65f9156d4fa7e7788197a5ef" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -2719,12 +8068,12 @@ dependencies = [ "libc", "mio", "num_cpus", - "parking_lot", + "parking_lot 0.12.1", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.4.9", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2733,9 +8082,9 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", ] [[package]] @@ -2748,6 +8097,16 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.14" @@ -2757,6 +8116,22 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec509ac96e9a0c43427c74f003127d953a265737636129424288d27cb5c4b12c" +dependencies = [ + "futures-util", + "log", + "rustls", + "tokio", + "tokio-rustls", + "tungstenite", + "webpki-roots 0.23.1", ] [[package]] @@ -2767,8 +8142,10 @@ checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", "pin-project-lite", + "slab", "tokio", "tracing", ] @@ -2782,6 +8159,40 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +dependencies = [ + "indexmap 2.0.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "tower" version = "0.4.13" @@ -2790,12 +8201,47 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", + "hdrhistogram", + "indexmap 1.9.3", "pin-project", "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ae70283aba8d2a8b411c695c437fe25b8b5e44e23e780662002fc72fb47a82" +dependencies = [ + "async-compression", + "base64 0.21.2", + "bitflags 2.3.3", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "httpdate", + "iri-string", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", "tokio", + "tokio-util", + "tower", "tower-layer", "tower-service", "tracing", + "uuid 1.4.1", ] [[package]] @@ -2823,15 +8269,26 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e" +dependencies = [ + "crossbeam-channel", + "time", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", ] [[package]] @@ -2850,10 +8307,23 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ + "futures", + "futures-task", "pin-project", "tracing", ] +[[package]] +name = "tracing-journald" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba316a74e8fc3c3896a850dba2375928a9fa171b085ecddfc7c054d39970f3fd" +dependencies = [ + "libc", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "tracing-log" version = "0.1.3" @@ -2876,25 +8346,192 @@ dependencies = [ "once_cell", "regex", "sharded-slab", - "smallvec", + "smallvec 1.11.0", "thread_local", "tracing", "tracing-core", "tracing-log", ] +[[package]] +name = "triehash" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1631b201eb031b563d2e85ca18ec8092508e262a3196ce9bd10a67ec87b9f5c" +dependencies = [ + "hash-db", + "rlp", +] + +[[package]] +name = "trust-dns-client" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b4ef9b9bde0559b78a4abb00339143750085f05e5a453efb7b8bef1061f09dc" +dependencies = [ + "cfg-if", + "data-encoding", + "futures-channel", + "futures-util", + "lazy_static", + "log", + "radix_trie", + "rand 0.8.5", + "thiserror", + "time", + "tokio", + "trust-dns-proto 0.20.4", +] + +[[package]] +name = "trust-dns-proto" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca94d4e9feb6a181c690c4040d7a24ef34018d8313ac5044a61d21222ae24e31" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner 0.3.4", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.2.3", + "ipnet", + "lazy_static", + "log", + "rand 0.8.5", + "smallvec 1.11.0", + "thiserror", + "tinyvec", + "tokio", + "url", +] + +[[package]] +name = "trust-dns-proto" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner 0.5.1", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.2.3", + "ipnet", + "lazy_static", + "rand 0.8.5", + "smallvec 1.11.0", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "trust-dns-resolver" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" +dependencies = [ + "cfg-if", + "futures-util", + "ipconfig", + "lazy_static", + "lru-cache", + "parking_lot 0.12.1", + "resolv-conf", + "smallvec 1.11.0", + "thiserror", + "tokio", + "tracing", + "trust-dns-proto 0.22.0", +] + [[package]] name = "try-lock" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +[[package]] +name = "tui" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1" +dependencies = [ + "bitflags 1.3.2", + "cassowary", + "crossterm 0.25.0", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "tungstenite" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15fba1a6d6bb030745759a9a2a588bfe8490fc8b4751a277db3a0be1c9ebbf67" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.8.5", + "rustls", + "sha1", + "thiserror", + "url", + "utf-8", + "webpki", +] + [[package]] name = "typenum" version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.13" @@ -2916,17 +8553,51 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" + [[package]] name = "unicode-xid" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array", + "subtle", +] + [[package]] name = "unsigned-varint" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" +checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" @@ -2935,16 +8606,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" dependencies = [ "form_urlencoded", - "idna", + "idna 0.4.0", "percent-encoding", ] +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52df8b7fb78e7910d776fccf2e42ceaf3604d55e8e7eb2dbd183cb1441d8a692" + +[[package]] +name = "utf8_iter" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a8922555b9500e3d865caed19330172cd67cbf82203f1a3311d8c305cc9f33" + [[package]] name = "utf8parse" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.10", + "serde", +] + +[[package]] +name = "uuid" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +dependencies = [ + "getrandom 0.2.10", +] + [[package]] name = "valuable" version = "0.1.0" @@ -2963,18 +8671,48 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vergen" +version = "8.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbc5ad0d9d26b2c49a5ab7da76c3e79d3ee37e7821799f8223fcb8f2f391a2e7" +dependencies = [ + "anyhow", + "rustversion", + "time", +] + [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + [[package]] name = "waker-fn" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +[[package]] +name = "walkdir" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -2984,6 +8722,18 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -3009,9 +8759,9 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2", - "quote", - "syn 2.0.25", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", "wasm-bindgen-shared", ] @@ -3033,7 +8783,7 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ - "quote", + "quote 1.0.32", "wasm-bindgen-macro-support", ] @@ -3043,9 +8793,9 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3066,6 +8816,43 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki", +] + +[[package]] +name = "webpki-roots" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +dependencies = [ + "rustls-webpki 0.100.1", +] + +[[package]] +name = "webpki-roots" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" +dependencies = [ + "rustls-webpki 0.101.2", +] + [[package]] name = "which" version = "4.4.0" @@ -3077,6 +8864,18 @@ dependencies = [ "once_cell", ] +[[package]] +name = "widestring" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" + +[[package]] +name = "wildmatch" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f44b95f62d34113cf558c93511ac93027e03e9c29a60dd0fd70e6e025c7270a" + [[package]] name = "winapi" version = "0.3.9" @@ -3093,19 +8892,61 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -3114,57 +8955,108 @@ version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +[[package]] +name = "winnow" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bd122eb777186e60c3fdf765a58ac76e41c582f1f535fbf3314434c6b58f3f7" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.10.1" @@ -3174,6 +9066,47 @@ dependencies = [ "winapi", ] +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60e49e42bdb1d5dc76f4cd78102f8f0714d32edfa3efb82286eb0f0b1fc0da0f" + +[[package]] +name = "ws_stream_wasm" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version 0.4.0", + "send_wrapper 0.6.0", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "wyz" version = "0.5.1" @@ -3183,6 +9116,21 @@ dependencies = [ "tap", ] +[[package]] +name = "xml-rs" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47430998a7b5d499ccee752b41567bc3afc57e1327dc855b1a2aa44ce29b5fa1" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", +] + [[package]] name = "yaml-rust" version = "0.4.5" @@ -3192,6 +9140,57 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yoke" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1848075a23a28f9773498ee9a0f2cf58fcbad4f8c0ccf84a210ab33c6ae495de" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af46c169923ed7516eef0aa32b56d2651b229f57458ebe46b49ddd6efef5b7a2" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", + "synstructure 0.12.6", +] + +[[package]] +name = "zerofrom" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df54d76c3251de27615dfcce21e636c172dafb2549cd7fd93e21c66f6ca6bea2" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4eae7c1f7d4b8eafce526bc0771449ddc2f250881ae31c50d22c032b5a1c499" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", + "synstructure 0.12.6", +] + [[package]] name = "zeroize" version = "1.6.0" @@ -3207,7 +9206,99 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.25", + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 2.0.28", +] + +[[package]] +name = "zerovec" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "198f54134cd865f437820aa3b43d0ad518af4e68ee161b444cdd15d8e567c8ea" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "486558732d5dde10d0f8cb2936507c1bb21bc539d924c949baf5f36a58e51bac" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.32", + "syn 1.0.109", + "synstructure 0.12.6", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes 0.8.3", + "byteorder", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2 0.11.0", + "sha1", + "time", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe 6.0.6", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-safe" +version = "6.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.8+zstd.1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +dependencies = [ + "cc", + "libc", + "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 10fa7777..c074907b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,21 @@ members = ["bin/mev", "mev-boost-rs", "mev-relay-rs", "mev-build-rs", "mev-rs"] default-members = ["bin/mev"] [workspace.dependencies] -ethereum-consensus = { git = "https://github.com/ralexstokes/ethereum-consensus", rev = "2bcb975" } -beacon-api-client = { git = "https://github.com/ralexstokes/beacon-api-client", rev = "d838d93" } +ethereum-consensus = { git = "https://github.com/ralexstokes/ethereum-consensus", rev = "4d4e3fb57584d9c3bba6b4fc488f23db4937ae79" } +beacon-api-client = { git = "https://github.com/ralexstokes/beacon-api-client", rev = "565d4e429ded4ffde944a96ec190ae00b1aba548" } ssz_rs = "0.9.0" + +reth-payload-builder = { git = "https://github.com/paradigmxyz/reth", rev = "e3457b8" } +reth-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "e3457b8" } +reth-provider = { git = "https://github.com/paradigmxyz/reth", rev = "e3457b8" } +reth-rpc-types = { git = "https://github.com/paradigmxyz/reth", rev = "e3457b8" } +reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth", rev = "e3457b8" } +reth-interfaces = { git = "https://github.com/paradigmxyz/reth", rev = "e3457b8" } +reth = { git = "https://github.com/paradigmxyz/reth", rev = "e3457b8" } +reth-revm = { git = "https://github.com/paradigmxyz/reth", rev = "e3457b8" } + +revm = { git = "https://github.com/bluealloy/revm/", branch = "release/v25" } + +[patch.crates-io] +revm = { git = "https://github.com/bluealloy/revm/", branch = "release/v25" } +revm-primitives = { git = "https://github.com/bluealloy/revm/", branch = "release/v25" } diff --git a/bin/mev/Cargo.toml b/bin/mev/Cargo.toml index ad9c4a81..3ef3a989 100644 --- a/bin/mev/Cargo.toml +++ b/bin/mev/Cargo.toml @@ -21,3 +21,11 @@ toml = "0.5.9" clap = { version = "4.1.4", features = ["derive", "env"] } anyhow = "1.0.57" + +reth-payload-builder = { workspace = true } +reth-primitives = { workspace = true } +reth-rpc-types = { workspace = true } +reth = { workspace = true } +eyre = "0.6.8" + +ethereum-consensus = { workspace = true } diff --git a/bin/mev/src/cmd/build.rs b/bin/mev/src/cmd/build.rs deleted file mode 100644 index 66c8f726..00000000 --- a/bin/mev/src/cmd/build.rs +++ /dev/null @@ -1,42 +0,0 @@ -use crate::cmd::config::Config; -use anyhow::{anyhow, Result}; -use clap::{Args, Subcommand}; -use mev_build_rs::Service; -use mev_rs::Network; - -#[derive(Debug, Args)] -#[clap(about = "🛠️ building blocks since 2023", subcommand_negates_reqs = true)] -pub struct Command { - #[clap(env, required = true)] - config_file: Option, - - #[clap(subcommand)] - command: Option, -} - -#[derive(Debug, Subcommand)] -pub enum Commands { - Mempool { config_file: String }, -} - -impl Command { - pub async fn execute(&self, network: Network) -> Result<()> { - let config_file = if let Some(subcommand) = self.command.as_ref() { - match subcommand { - Commands::Mempool { config_file } => config_file, - } - } else { - self.config_file.as_ref().unwrap() - }; - - let config = Config::from_toml_file(config_file)?; - - if let Some(mut config) = config.builder { - config.network = network; - let service = Service::from(config).spawn(None).await?; - Ok(service.await?) - } else { - Err(anyhow!("missing builder config from file provided")) - } - } -} diff --git a/bin/mev/src/cmd/build/mod.rs b/bin/mev/src/cmd/build/mod.rs new file mode 100644 index 00000000..e49f17cb --- /dev/null +++ b/bin/mev/src/cmd/build/mod.rs @@ -0,0 +1,21 @@ +mod reth_ext; + +use anyhow::Result; +use clap::Args; +use mev_rs::Network; +use reth_ext::{launch_reth, RethNodeExt}; + +#[derive(Debug, Args)] +#[clap(about = "🛠️ building blocks since 2023")] +pub struct Command { + #[clap(env, default_value = "config.toml")] + config_file: String, +} + +impl Command { + pub async fn execute(&self, network: Network) -> Result<()> { + let ext = RethNodeExt { config_file: self.config_file.clone(), network }; + launch_reth(ext).await; + Ok(()) + } +} diff --git a/bin/mev/src/cmd/build/reth_ext.rs b/bin/mev/src/cmd/build/reth_ext.rs new file mode 100644 index 00000000..3a790c44 --- /dev/null +++ b/bin/mev/src/cmd/build/reth_ext.rs @@ -0,0 +1,99 @@ +use crate::cmd::config::Config; +use clap::{Args, Parser}; +use mev_build_rs::reth_builder::{Config as BuildConfig, Service}; +use mev_rs::Network; +use reth::{ + cli::ext::{RethCliExt, RethNodeCommandExt}, + node::NodeCommand, + runner::CliContext, + tasks::TaskManager, +}; +use reth_payload_builder::PayloadBuilderService; + +struct RethExt; + +impl RethCliExt for RethExt { + type Node = RethNodeExt; +} + +#[derive(Debug, Args)] +pub struct RethNodeExt { + #[clap(skip)] + pub config_file: String, + #[clap(skip)] + pub network: Network, +} + +impl RethNodeExt { + pub fn to_config(&self) -> BuildConfig { + let config = Config::from_toml_file(&self.config_file).unwrap(); + let mut config = config.build.unwrap(); + config.network = self.network.clone(); + config + } +} + +impl RethNodeCommandExt for RethNodeExt { + fn spawn_payload_builder_service( + &mut self, + _conf: &Conf, + provider: Provider, + pool: Pool, + executor: Tasks, + chain_spec: std::sync::Arc, + ) -> eyre::Result + where + Conf: reth::cli::config::PayloadBuilderConfig, + Provider: reth::providers::StateProviderFactory + + reth::providers::BlockReaderIdExt + + Clone + + Unpin + + 'static, + Pool: reth::transaction_pool::TransactionPool + Unpin + 'static, + Tasks: reth::tasks::TaskSpawner + Clone + Unpin + 'static, + { + let build_config = self.to_config(); + let (service, builder) = + Service::from(build_config, None, pool.clone(), provider.clone(), chain_spec.clone()) + .unwrap(); + + let (payload_service, payload_builder) = PayloadBuilderService::new(builder); + + let fut = Box::pin(async move { + match service.spawn().await { + Ok(handle) => match handle.await { + Ok(()) => (), + Err(err) => { + tracing::error!(err = ?err); + } + }, + Err(err) => { + tracing::error!(err = ?err, "could not launch mempool builder"); + } + } + }); + + executor.spawn_critical("mempool builder", fut); + executor.spawn_critical("payload builder service", Box::pin(payload_service)); + + Ok(payload_builder) + } +} + +pub(crate) async fn launch_reth(ext: RethNodeExt) { + let task_manager = TaskManager::new(tokio::runtime::Handle::current()); + let task_executor = task_manager.executor(); + let ctx = CliContext { task_executor }; + + let mut node = NodeCommand::::parse_from([ + "", "--chain", "sepolia", + "--http", + // "--authrpc.jwtsecret", + // "/secrets/jwt.hex", + ]); + // NOTE: shim to pass in config + node.ext = ext; + if let Err(err) = node.execute(ctx).await { + tracing::warn!("{err:?}"); + } +} diff --git a/bin/mev/src/cmd/config.rs b/bin/mev/src/cmd/config.rs index 080db9a0..2697da5a 100644 --- a/bin/mev/src/cmd/config.rs +++ b/bin/mev/src/cmd/config.rs @@ -1,7 +1,7 @@ use anyhow::{Context, Result}; use clap::Args; use mev_boost_rs::Config as BoostConfig; -use mev_build_rs::Config as BuildConfig; +use mev_build_rs::reth_builder::Config as BuildConfig; use mev_relay_rs::Config as RelayConfig; use mev_rs::Network; use serde::Deserialize; @@ -10,7 +10,8 @@ use std::{fmt, path::Path}; #[derive(Debug, Deserialize)] pub struct Config { pub boost: Option, - pub builder: Option, + #[serde(rename = "builder")] + pub build: Option, pub relay: Option, } diff --git a/example.config.toml b/example.config.toml index a58ac7ef..30a4c995 100644 --- a/example.config.toml +++ b/example.config.toml @@ -1,9 +1,7 @@ [boost] host = "0.0.0.0" port = 18550 -relays = [ - "http://127.0.0.1:28545", -] +relays = ["http://127.0.0.1:28545"] [relay] host = "0.0.0.0" @@ -12,12 +10,12 @@ beacon_node_url = "http://127.0.0.1:5052" secret_key = "0x24b6e79cbc6267c6e527b4bf7a71747d42a58b10279366cf0c7bb4e2aa455901" [builder] +network = "sepolia" host = "0.0.0.0" -port = 28546 -beacon_api_endpoint = "http://127.0.0.1:5052" +port = 13377 secret_key = "0x14b6e79cbc6267c6e527b4bf7a71747d42a58b10279366cf0c7bb4e2aa455901" - -[builder.engine_api_proxy] -host = "0.0.0.0" -port = 8551 -engine_api_endpoint = "http://127.0.0.1:8552" +relays = [ + "https://0x845bd072b7cd566f02faeb0a4033ce9399e42839ced64e8b2adcfc859ed1e8e1a5a293336a49feac6d9a5edb779be53a@boost-relay-sepolia.flashbots.net", +] +extra_data = "hello world" +execution_mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" diff --git a/mev-boost-rs/src/lib.rs b/mev-boost-rs/src/lib.rs index 2c964373..d0408e35 100644 --- a/mev-boost-rs/src/lib.rs +++ b/mev-boost-rs/src/lib.rs @@ -1,4 +1,3 @@ -mod relay; mod relay_mux; mod service; diff --git a/mev-boost-rs/src/relay.rs b/mev-boost-rs/src/relay.rs deleted file mode 100644 index 072a5cfd..00000000 --- a/mev-boost-rs/src/relay.rs +++ /dev/null @@ -1,76 +0,0 @@ -use beacon_api_client::Client as BeaconClient; -use ethereum_consensus::{ - crypto::Error as CryptoError, primitives::BlsPublicKey, serde::try_bytes_from_hex_str, -}; -use std::ops::Deref; -use url::Url; - -use mev_rs::blinded_block_provider::Client; - -#[derive(Clone, Debug)] -pub struct RelayEndpoint { - url: Url, - public_key: BlsPublicKey, -} - -impl TryFrom for RelayEndpoint { - type Error = CryptoError; - - fn try_from(url: Url) -> Result { - let public_key = try_bytes_from_hex_str(url.username())?; - let public_key = BlsPublicKey::try_from(&public_key[..])?; - - Ok(Self { url, public_key }) - } -} - -#[derive(Clone)] -pub struct Relay { - api: Client, - pub(crate) public_key: BlsPublicKey, -} - -impl Deref for Relay { - type Target = Client; - - fn deref(&self) -> &Self::Target { - &self.api - } -} - -impl From for Relay { - fn from(value: RelayEndpoint) -> Self { - let RelayEndpoint { url, public_key } = value; - Self { api: Client::new(BeaconClient::new(url)), public_key } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - use ethereum_consensus::crypto::SecretKey; - - const URL: &str = "https://relay.com"; - - #[test] - fn parse_relay_endpoint() { - let mut rng = rand::thread_rng(); - let sk = SecretKey::random(&mut rng).unwrap(); - let public_key = sk.public_key(); - - let mut url = Url::parse(URL).unwrap(); - url.set_username(&public_key.to_string()).unwrap(); - - let endpoint = RelayEndpoint::try_from(url.clone()).unwrap(); - assert_eq!(endpoint.url, url); - assert_eq!(endpoint.public_key, public_key); - } - - #[test] - #[should_panic] - fn parse_relay_endpoint_missing_public_key() { - let url = Url::parse(URL).unwrap(); - RelayEndpoint::try_from(url).unwrap(); - } -} diff --git a/mev-boost-rs/src/relay_mux.rs b/mev-boost-rs/src/relay_mux.rs index 3a87288c..757ca0e7 100644 --- a/mev-boost-rs/src/relay_mux.rs +++ b/mev-boost-rs/src/relay_mux.rs @@ -1,4 +1,3 @@ -use crate::relay::Relay; use async_trait::async_trait; use ethereum_consensus::{ primitives::{BlsPublicKey, Slot, U256}, @@ -6,6 +5,7 @@ use ethereum_consensus::{ }; use futures::{stream, StreamExt}; use mev_rs::{ + relay::Relay, types::{ BidRequest, ExecutionPayload, SignedBlindedBeaconBlock, SignedBuilderBid, SignedValidatorRegistration, diff --git a/mev-boost-rs/src/service.rs b/mev-boost-rs/src/service.rs index 19ed8a07..478d61f6 100644 --- a/mev-boost-rs/src/service.rs +++ b/mev-boost-rs/src/service.rs @@ -1,10 +1,11 @@ -use crate::{ +use crate::relay_mux::RelayMux; +use ethereum_consensus::{networks, state_transition::Context}; +use futures::StreamExt; +use mev_rs::{ + blinded_block_provider::Server as BlindedBlockProviderServer, relay::{Relay, RelayEndpoint}, - relay_mux::RelayMux, + Error, Network, }; -use ethereum_consensus::state_transition::Context; -use futures::StreamExt; -use mev_rs::{blinded_block_provider::Server as BlindedBlockProviderServer, Error, Network}; use serde::Deserialize; use std::{future::Future, net::Ipv4Addr, pin::Pin, task::Poll}; use tokio::task::{JoinError, JoinHandle}; @@ -69,7 +70,10 @@ impl Service { let context = if let Some(context) = context { context } else { Context::try_from(&network)? }; let relays = relays.into_iter().map(Relay::from); - let clock = context.clock(None); + let clock = context.clock().unwrap_or_else(|| { + let genesis_time = networks::typical_genesis_time(&context); + context.clock_at(genesis_time) + }); let relay_mux = RelayMux::new(relays, context); let relay_mux_clone = relay_mux.clone(); diff --git a/mev-build-rs/Cargo.toml b/mev-build-rs/Cargo.toml index 142b5a24..e5f7485a 100644 --- a/mev-build-rs/Cargo.toml +++ b/mev-build-rs/Cargo.toml @@ -8,6 +8,7 @@ license = "MIT OR Apache-2.0" [dependencies] tokio = { version = "1.0", features = ["full"] } +tokio-stream = "0.1.14" tracing = "0.1" futures = "0.3.21" async-trait = "0.1.53" @@ -20,5 +21,16 @@ serde = { version = "1.0", features = ["derive"] } ethereum-consensus = { workspace = true } beacon-api-client = { workspace = true } +ssz_rs = { workspace = true } mev-rs = { path = "../mev-rs" } + +revm = { workspace = true } +reth-payload-builder = { workspace = true } +reth-primitives = { workspace = true } +reth-transaction-pool = { workspace = true } +reth-provider = { workspace = true } +reth-interfaces = { workspace = true } +reth-revm = { workspace = true } + +ethers = "2.0" diff --git a/mev-build-rs/src/lib.rs b/mev-build-rs/src/lib.rs index 447b8816..f8613a2e 100644 --- a/mev-build-rs/src/lib.rs +++ b/mev-build-rs/src/lib.rs @@ -1,6 +1,4 @@ -mod mempool_builder; mod null_builder; -mod service; +pub mod reth_builder; pub use null_builder::*; -pub use service::{Config, Service}; diff --git a/mev-build-rs/src/mempool_builder.rs b/mev-build-rs/src/mempool_builder.rs deleted file mode 100644 index b42dcdba..00000000 --- a/mev-build-rs/src/mempool_builder.rs +++ /dev/null @@ -1,270 +0,0 @@ -use async_trait::async_trait; -use beacon_api_client::{mainnet::Client, BeaconProposerRegistration, ProposerDuty}; -use ethereum_consensus::{ - clock::{convert_timestamp_to_slot, get_current_unix_time_in_secs}, - crypto::SecretKey, - primitives::{BlsPublicKey, Epoch, ExecutionAddress, Hash32, Root, Slot}, - state_transition::Context, -}; -use mev_rs::{ - engine_api_proxy::{client::Client as EngineApiClient, server::Proxy, types::BuildJob}, - types::{ - BidRequest, BuilderBid, ExecutionPayload, ExecutionPayloadHeader, SignedBlindedBeaconBlock, - SignedBuilderBid, SignedValidatorRegistration, - }, - BlindedBlockProvider, Error, ProposerScheduler, ValidatorRegistry, -}; -use parking_lot::Mutex; -use std::{collections::HashMap, ops::Deref, sync::Arc}; -use tokio::{sync::mpsc, task::JoinHandle}; - -#[derive(Clone)] -pub struct Builder(Arc); - -impl Deref for Builder { - type Target = Inner; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -pub struct Inner { - secret_key: SecretKey, - public_key: BlsPublicKey, - genesis_validators_root: Root, - validator_registry: ValidatorRegistry, - proposer_scheduler: ProposerScheduler, - engine_api_client: EngineApiClient, - proxy: Arc, - context: Context, - state: Mutex, -} - -#[derive(Default, Debug, Hash, PartialEq, Eq)] -struct Coordinate { - slot: Slot, - parent_hash: Hash32, -} - -#[derive(Default, Debug)] -struct State { - did_update_validator_registry: bool, - build_jobs: HashMap, - payloads: HashMap, -} - -impl Builder { - pub fn new( - secret_key: SecretKey, - genesis_validators_root: Root, - client: Client, - context: Context, - engine_api_client: EngineApiClient, - proxy: Arc, - ) -> Self { - let public_key = secret_key.public_key(); - let validator_registry = ValidatorRegistry::new(client.clone()); - let proposer_scheduler = ProposerScheduler::new(client); - - Self(Arc::new(Inner { - secret_key, - public_key, - genesis_validators_root, - validator_registry, - proposer_scheduler, - engine_api_client, - proxy, - context, - state: Default::default(), - })) - } - - pub async fn process_duties(&self, duties: &[ProposerDuty]) -> Result<(), Error> { - let mut preparations = vec![]; - for duty in duties { - if let Some(preferences) = self.validator_registry.get_preferences(&duty.public_key) { - let public_key = &preferences.public_key; - match self.validator_registry.get_validator_index(public_key) { - Some(validator_index) => { - let preparation = BeaconProposerRegistration { - validator_index, - fee_recipient: preferences.fee_recipient, - }; - preparations.push(preparation); - } - None => { - tracing::warn!("could not find index for public key {public_key}") - } - } - } - } - self.proposer_scheduler.dispatch_proposer_preparations(&preparations).await?; - Ok(()) - } - - pub async fn poll_proposer_duties(&self, epoch: Epoch) { - match self.proposer_scheduler.fetch_duties(epoch).await { - Ok(duties) => { - if let Err(err) = self.process_duties(&duties).await { - tracing::warn!("could not process duties in epoch {epoch}: {err}"); - } - } - Err(err) => tracing::warn!("could not load proposer duties in epoch {epoch}: {err}"), - } - } - - async fn on_epoch(&self, epoch: Epoch) { - // TODO: only get on changes to set - if let Err(err) = self.validator_registry.load().await { - tracing::warn!("could not load validator set in epoch {epoch}: {err}") - } - self.poll_proposer_duties(epoch).await; - self.poll_proposer_duties(epoch + 1).await; - } - - pub async fn initialize(&self, current_epoch: Epoch) { - self.on_epoch(current_epoch).await; - - let public_key = &self.public_key; - tracing::info!("builder initialized with public key {public_key}"); - } - - pub async fn on_slot(&self, slot: Slot) { - let next_epoch = slot % self.context.slots_per_epoch == 0; - let did_update_validator_registry = { - let mut state = self.state.lock(); - let did_update = state.did_update_validator_registry; - state.did_update_validator_registry = false; - did_update - }; - if next_epoch || did_update_validator_registry { - let epoch = slot / self.context.slots_per_epoch; - self.on_epoch(epoch).await; - } - let mut state = self.state.lock(); - // TODO better windowing on build job garbage collecting - state.build_jobs.retain(|coordinate, _| coordinate.slot >= slot - 3); - state.payloads.retain(|bid_request, _| bid_request.slot >= slot - 3); - } - - pub fn process_build_job( - &self, - job @ BuildJob { head_block_hash, timestamp, .. }: &BuildJob, - ) -> Result<(), Error> { - let parent_hash = head_block_hash.clone(); - let genesis_time = self - .context - .genesis_time() - // TODO update method on Context - .unwrap_or(self.context.min_genesis_time + self.context.genesis_delay); - let slot = - convert_timestamp_to_slot(*timestamp, genesis_time, self.context.seconds_per_slot) - .expect("after genesis"); - let coordinate = Coordinate { slot, parent_hash }; - let mut state = self.state.lock(); - tracing::trace!("at {coordinate:?}, inserting build job from engine API: {job:?}"); - state.build_jobs.insert(coordinate, job.clone()); - Ok(()) - } - - pub fn spawn(self, mut build_jobs: mpsc::Receiver) -> JoinHandle<()> { - // TODO move "IO" to wrapping type - tokio::spawn(async move { - loop { - match build_jobs.recv().await { - Some(job) => { - if let Err(err) = self.process_build_job(&job) { - tracing::warn!("could not process build job {job:?}: {err}") - } - } - None => return, - } - } - }) - } -} - -fn verify_job_for_proposer( - validator_registry: &ValidatorRegistry, - fee_recipient: &ExecutionAddress, - public_key: &BlsPublicKey, -) -> Result<(), Error> { - let preferences = validator_registry - .get_preferences(public_key) - .ok_or_else(|| Error::ValidatorNotRegistered(public_key.clone()))?; - - if &preferences.fee_recipient != fee_recipient { - Err(Error::UnknownFeeRecipient(public_key.clone(), fee_recipient.clone())) - } else { - Ok(()) - } -} - -#[async_trait] -impl BlindedBlockProvider for Builder { - async fn register_validators( - &self, - registrations: &mut [SignedValidatorRegistration], - ) -> Result<(), Error> { - let current_time = get_current_unix_time_in_secs(); - self.validator_registry.validate_registrations( - registrations, - current_time, - &self.context, - )?; - // NOTE: TODO clean up flow here - let mut state = self.state.lock(); - state.did_update_validator_registry = true; - Ok(()) - } - - async fn fetch_best_bid(&self, bid_request: &BidRequest) -> Result { - let build_job = { - let coordinate = - Coordinate { slot: bid_request.slot, parent_hash: bid_request.parent_hash.clone() }; - let mut state = self.state.lock(); - state - .build_jobs - .remove(&coordinate) - .ok_or_else(|| Error::NoBidPrepared(Box::new(bid_request.clone())))? - }; - verify_job_for_proposer( - &self.validator_registry, - &build_job.suggested_fee_recipient, - &bid_request.public_key, - )?; - let payload_id = &build_job.payload_id; - let auth_token = { - let token = self.proxy.token.lock(); - token.clone() - }; - let version = build_job.version; - let (mut payload, value) = - self.engine_api_client.get_payload_with_value(payload_id, &auth_token, version).await?; - let header = ExecutionPayloadHeader::try_from(&mut payload)?; - let mut state = self.state.lock(); - state.payloads.insert(bid_request.clone(), payload); - - let bid = BuilderBid::from((header, value, &self.public_key)); - let signed_bid = bid.sign(&self.secret_key, &self.context)?; - Ok(signed_bid) - } - - async fn open_bid( - &self, - signed_block: &mut SignedBlindedBeaconBlock, - ) -> Result { - let slot = signed_block.slot(); - let public_key = self.proposer_scheduler.get_proposer_for(slot)?; - signed_block.verify_signature(&public_key, self.genesis_validators_root, &self.context)?; - - let parent_hash = signed_block.parent_hash(); - let bid_request = BidRequest { slot, parent_hash: parent_hash.clone(), public_key }; - let mut state = self.state.lock(); - state - .payloads - .remove(&bid_request) - .ok_or_else(|| Error::MissingPayload(signed_block.block_hash().clone())) - } -} diff --git a/mev-build-rs/src/reth_builder/build.rs b/mev-build-rs/src/reth_builder/build.rs new file mode 100644 index 00000000..65e00525 --- /dev/null +++ b/mev-build-rs/src/reth_builder/build.rs @@ -0,0 +1,140 @@ +use crate::reth_builder::{error::Error, reth_compat::*, types::RelayIndex}; +use ethereum_consensus::{ + crypto::{hash, SecretKey}, + primitives::{BlsPublicKey, Bytes32, ExecutionAddress, Slot}, + state_transition::Context, +}; +use ethers::signers::LocalWallet; +use mev_rs::{ + signing::sign_builder_message, + types::{BidTrace, ExecutionPayload, SignedBidSubmission}, +}; +use reth_primitives::{Bytes, ChainSpec, SealedBlock, Withdrawal, H256, U256}; +use revm::primitives::{BlockEnv, CfgEnv}; +use ssz_rs::prelude::*; +use std::sync::{Arc, Mutex}; + +pub type BuildIdentifier = Bytes32; + +fn make_submission( + signing_key: &SecretKey, + builder_public_key: &BlsPublicKey, + context: &Context, + build_context: &BuildContext, + payload: &SealedBlock, + payment: &U256, +) -> Result { + let mut message = BidTrace { + slot: build_context.slot, + parent_hash: to_bytes32(payload.parent_hash), + block_hash: to_bytes32(payload.hash), + builder_public_key: builder_public_key.clone(), + proposer_public_key: build_context.proposer.clone(), + proposer_fee_recipient: build_context.proposer_fee_recipient.clone(), + gas_limit: payload.gas_limit, + gas_used: payload.gas_used, + value: to_u256(payment), + }; + let execution_payload = match to_execution_payload(payload) { + ExecutionPayload::Bellatrix(_) => unimplemented!(), + ExecutionPayload::Capella(payload) => payload, + ExecutionPayload::Deneb(_) => unimplemented!(), + }; + let signature = sign_builder_message(&mut message, signing_key, context)?; + Ok(SignedBidSubmission { message, execution_payload, signature }) +} + +#[derive(Debug, Clone)] +pub struct BuildContext { + pub slot: Slot, + pub parent_hash: H256, + pub proposer: BlsPublicKey, + pub timestamp: u64, + pub proposer_fee_recipient: ExecutionAddress, + pub prev_randao: H256, + pub withdrawals: Vec, + pub relays: Vec, + pub chain_spec: Arc, + pub block_env: BlockEnv, + pub cfg_env: CfgEnv, + pub extra_data: Bytes, + pub parent_block: Arc, + pub builder_wallet: LocalWallet, + // Amount of gas to reserve after building a payload + // e.g. used for end-of-block proposer payments + pub gas_reserve: u64, + // Amount of the block's value to bid to the proposer + pub bid_percent: f64, + // Amount to add to the block's value to bid to the proposer + pub subsidy: U256, +} + +pub fn compute_build_id(slot: Slot, parent_hash: H256, proposer: &BlsPublicKey) -> BuildIdentifier { + let mut data = Vec::with_capacity(88); + slot.serialize(&mut data).expect("can serialize"); + parent_hash.serialize(&mut data).expect("can serialize"); + proposer.serialize(&mut data).expect("can serialize"); + hash(data) +} + +impl BuildContext { + pub fn id(&self) -> BuildIdentifier { + compute_build_id(self.slot, self.parent_hash, &self.proposer) + } + + pub fn base_fee(&self) -> u64 { + self.block_env.basefee.to::() + } + + pub fn number(&self) -> u64 { + self.block_env.number.to::() + } + + pub fn gas_limit(&self) -> u64 { + self.block_env.gas_limit.try_into().unwrap_or(u64::MAX) + } +} + +#[derive(Debug)] +pub struct Build { + pub context: BuildContext, + pub state: Mutex, +} + +type State = PayloadWithPayments; + +impl Build { + pub fn new(context: BuildContext) -> Self { + Self { context, state: Mutex::new(Default::default()) } + } + + pub fn value(&self) -> U256 { + let state = self.state.lock().unwrap(); + state.proposer_payment + } + + pub fn prepare_bid( + &self, + secret_key: &SecretKey, + public_key: &BlsPublicKey, + context: &Context, + ) -> Result<(SignedBidSubmission, U256), Error> { + let build_context = &self.context; + let state = self.state.lock().unwrap(); + let payload = + state.payload.as_ref().ok_or_else(|| Error::PayloadNotPrepared(build_context.id()))?; + let payment = &state.proposer_payment; + let builder_payment = state.builder_payment; + Ok(( + make_submission(secret_key, public_key, context, build_context, payload, payment)?, + builder_payment, + )) + } +} + +#[derive(Debug, Default)] +pub struct PayloadWithPayments { + pub payload: Option, + pub proposer_payment: U256, + pub builder_payment: U256, +} diff --git a/mev-build-rs/src/reth_builder/builder.rs b/mev-build-rs/src/reth_builder/builder.rs new file mode 100644 index 00000000..5f1d3c5d --- /dev/null +++ b/mev-build-rs/src/reth_builder/builder.rs @@ -0,0 +1,394 @@ +use crate::reth_builder::{build::*, error::Error, payload_builder::*, types::*}; +use ethereum_consensus::{ + clock::{Clock, SystemTimeProvider}, + crypto::SecretKey, + primitives::{BlsPublicKey, Epoch, Slot}, + state_transition::Context, +}; +use ethers::signers::{LocalWallet, Signer}; +use mev_rs::{blinded_block_relayer::BlindedBlockRelayer, types::ProposerSchedule, Relay}; +use reth_payload_builder::PayloadBuilderAttributes; +use reth_primitives::{BlockNumberOrTag, Bytes, ChainSpec, H256, U256}; +use reth_provider::{BlockReaderIdExt, BlockSource, StateProviderFactory}; +use reth_transaction_pool::TransactionPool; +use ssz_rs::prelude::*; +use std::{ + cmp::Ordering, + collections::{BTreeMap, HashMap}, + ops::Deref, + sync::{Arc, Mutex}, +}; +use tokio::sync::{mpsc, oneshot}; +use tokio_stream::{wrappers::ReceiverStream, Stream}; + +/// `Builder` builds blocks for proposers registered to connected relays. +#[derive(Clone)] +pub struct Builder(Arc>); + +impl Deref for Builder { + type Target = Inner; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +pub struct Inner { + secret_key: SecretKey, + public_key: BlsPublicKey, + + context: Arc, + clock: Clock, + + relays: Vec, + + pool: Pool, + client: Client, + chain_spec: Arc, + extra_data: Bytes, + builder_wallet: LocalWallet, + + payload_attributes_tx: mpsc::Sender, + state: Mutex, +} + +#[derive(Default, Debug)] +struct State { + payload_attributes_rx: Option>, + // TODO: merge in `ProposerScheduler` here? + proposer_schedule: + BTreeMap>>>, + builds: HashMap>, +} + +impl Builder { + pub fn new( + secret_key: SecretKey, + context: Arc, + clock: Clock, + relays: Vec, + pool: Pool, + client: Client, + chain_spec: Arc, + extra_data: Bytes, + builder_wallet: LocalWallet, + ) -> Self { + let public_key = secret_key.public_key(); + + let (tx, rx) = mpsc::channel::(16); + + let state = State { + payload_attributes_rx: Some(rx), + proposer_schedule: Default::default(), + builds: Default::default(), + }; + + Self(Arc::new(Inner { + secret_key, + public_key, + context, + clock, + relays, + pool, + client, + chain_spec, + builder_wallet, + extra_data, + payload_attributes_tx: tx, + state: Mutex::new(state), + })) + } + + fn process_validator_schedule_for_relay( + &self, + relay: RelayIndex, + schedule: &[ProposerSchedule], + ) { + tracing::trace!(schedule_count = ?schedule.len(), relay = ?relay); + + let mut state = self.state.lock().unwrap(); + for duty in schedule { + tracing::trace!(slot = ?duty.slot, "processing schedule"); + let slot = state.proposer_schedule.entry(duty.slot).or_default(); + // TODO: consider verifying data; for now, we trust the relay we work with... + let registration = &duty.entry; + let public_key = registration.message.public_key.clone(); + let preferences_by_slot = slot.entry(public_key).or_default(); + let preferences = registration.into(); + let registered_relays = preferences_by_slot.entry(preferences).or_default(); + registered_relays.push(relay); + } + } + + async fn on_epoch(&self, _epoch: Epoch) { + for (index, relay) in self.relays.iter().enumerate() { + match relay.get_proposal_schedule().await { + Ok(schedule) => self.process_validator_schedule_for_relay(index, &schedule), + Err(err) => tracing::warn!("error fetching proposer schedule from relay: {err}"), + } + } + } + + pub async fn initialize(&self, current_epoch: Epoch) { + self.on_epoch(current_epoch).await; + + let public_key = &self.public_key; + let relays = &self.relays; + let address = self.builder_wallet.address(); + tracing::info!( + "builder initialized with BLS public key {public_key}, address {address} and relay set {relays:#?}" + ); + } + + pub async fn on_slot(&self, slot: Slot) { + let next_epoch = slot % self.context.slots_per_epoch == 0; + if next_epoch { + let epoch = slot / self.context.slots_per_epoch; + self.on_epoch(epoch).await; + } + tracing::info!("processing slot {slot}"); + + let mut state = self.state.lock().unwrap(); + if let Some((earliest_slot, _)) = state.proposer_schedule.first_key_value() { + for entry in *earliest_slot..slot { + state.proposer_schedule.remove(&entry); + } + } + state.builds.retain(|_, build| build.context.slot >= slot - 1); + } + + pub fn on_payload_attributes(&self, payload_attributes: PayloadBuilderAttributes) { + if let Err(err) = self.payload_attributes_tx.blocking_send(payload_attributes) { + tracing::warn!(err = ?err, "could not accept payload attributes"); + } + } + + pub fn stream_payload_attributes( + &self, + ) -> Result, Error> { + let mut state = self.state.lock().unwrap(); + let rx = state.payload_attributes_rx.take(); + if let Some(rx) = rx { + Ok(ReceiverStream::new(rx)) + } else { + Err(Error::Internal("can only yield payload attributes stream once")) + } + } + + pub fn build_for(&self, id: &BuildIdentifier) -> Option> { + self.state.lock().unwrap().builds.get(id).cloned() + } + + // TODO: pull out into "bidder" component + // TODO: support dynamic bidding, over "static" bidding with fixed percent payment + pub async fn submit_bid(&self, id: &BuildIdentifier) -> Result<(), Error> { + let build = self.build_for(id).ok_or_else(|| Error::MissingBuild(id.clone()))?; + + let context = &build.context; + + let (signed_submission, builder_payment) = + build.prepare_bid(&self.secret_key, &self.public_key, &self.context)?; + + // TODO: make calls concurrently + for index in &context.relays { + let relay = &self.relays[*index]; + tracing::info!(id = ?id, proposer_payment = ?signed_submission.message.value, builder_payment = ?builder_payment, relay = ?relay, bid = ?signed_submission, "submitting bid"); + match relay.submit_bid(&signed_submission).await { + Ok(_) => tracing::info!(id = ?id, relay = ?relay, "successfully submitted bid"), + Err(err) => { + tracing::warn!(err = ?err, id = ?id, relay = ?relay, "error submitting bid"); + } + } + } + + Ok(()) + } +} + +const GAS_BOUND_DIVISOR: u64 = 1024; + +fn compute_preferred_gas_limit(target_gas_limit: u64, parent_gas_limit: u64) -> u64 { + match target_gas_limit.cmp(&parent_gas_limit) { + Ordering::Equal => target_gas_limit, + Ordering::Greater => { + let bound = parent_gas_limit + parent_gas_limit / GAS_BOUND_DIVISOR; + target_gas_limit.min(bound) + } + Ordering::Less => { + let bound = parent_gas_limit - parent_gas_limit / GAS_BOUND_DIVISOR; + target_gas_limit.max(bound) + } + } +} + +#[cfg(test)] +mod tests { + use super::compute_preferred_gas_limit; + + #[test] + fn test_compute_preferred_gas_limit() { + for t in &[ + (30_000_000, 30_000_000, 30_000_000), + (30_029_000, 30_000_000, 30_029_000), + (30_029_300, 30_000_000, 30_029_296), + (29_970_710, 30_000_000, 29_970_710), + (29_970_700, 30_000_000, 29_970_704), + ] { + assert_eq!(compute_preferred_gas_limit(t.0, t.1), t.2) + } + } +} + +pub enum PayloadAttributesProcessingOutcome { + NewBuild(BuildIdentifier), + Duplicate(PayloadBuilderAttributes), +} + +impl Builder { + // NOTE: this is held inside a lock currently, minimize work here + fn construct_build_context( + &self, + slot: Slot, + parent_hash: H256, + proposer: &BlsPublicKey, + payload_attributes: PayloadBuilderAttributes, + validator_preferences: &ValidatorPreferences, + relays: &[RelayIndex], + ) -> Result { + let parent_block = if parent_hash.is_zero() { + // use latest block if parent is zero: genesis block + self.client + .block_by_number_or_tag(BlockNumberOrTag::Latest)? + .ok_or_else(|| Error::MissingParentBlock(payload_attributes.parent))? + .seal_slow() + } else { + let block = self + .client + .find_block_by_hash(payload_attributes.parent, BlockSource::Any)? + .ok_or_else(|| Error::MissingParentBlock(payload_attributes.parent))?; + + // we already know the hash, so we can seal it + block.seal(payload_attributes.parent) + }; + + // configure evm env based on parent block + let (cfg_env, mut block_env) = + payload_attributes.cfg_and_block_env(&self.chain_spec, &parent_block); + + let gas_limit = + compute_preferred_gas_limit(validator_preferences.gas_limit, parent_block.gas_limit); + block_env.gas_limit = U256::from(gas_limit); + + // TODO: configurable "fee collection strategy" + // fee collection strategy: drive all fees to builder + block_env.coinbase = self.builder_wallet.address().into(); + + let context = BuildContext { + slot, + parent_hash, + proposer: proposer.clone(), + timestamp: payload_attributes.timestamp, + proposer_fee_recipient: validator_preferences.fee_recipient.clone(), + prev_randao: payload_attributes.prev_randao, + withdrawals: payload_attributes.withdrawals, + relays: relays.into(), + chain_spec: self.chain_spec.clone(), + block_env, + cfg_env, + extra_data: self.extra_data.clone(), + parent_block: Arc::new(parent_block), + builder_wallet: self.builder_wallet.clone(), + gas_reserve: 21000, + bid_percent: 0.9, + subsidy: U256::from(10u64).pow(U256::from(18)), + }; + Ok(context) + } + + // Determine if a new build build should be created for the given context + // fixed by `slot` and `payload_attributes`. + // If a new build should be created, then do so and return the unique identifier + // to the caller. If no new build should be created, `None` is returned. + pub fn process_payload_attributes( + &self, + payload_attributes: PayloadBuilderAttributes, + ) -> Result { + let slot = self.clock.slot_at_time(payload_attributes.timestamp).expect("past genesis"); + let mut state = self.state.lock().unwrap(); + let eligible_proposals = state + .proposer_schedule + .get(&slot) + .ok_or_else(|| Error::NoRegisteredValidatorsForSlot(slot))?; + + // TODO: should defer to our own view of consensus: + // currently, if there is more than one element in `eligible_proposals` + // then there are multiple views across our relay set... + // let's simplify the return type here by picking the "majority view"... + let (proposer, preferences) = eligible_proposals + .iter() + .max_by(|(_, relay_set_a), (_, relay_set_b)| relay_set_a.len().cmp(&relay_set_b.len())) + .ok_or_else(|| Error::NoRegisteredValidatorsForSlot(slot))?; + // TODO: think about handling divergent relay views + // similarly, let's just service the "majority" relays for now... + let (validator_preferences, relays) = preferences + .iter() + .max_by(|(_, relay_set_a), (_, relay_set_b)| relay_set_a.len().cmp(&relay_set_b.len())) + .ok_or_else(|| Error::NoRegisteredValidatorsForSlot(slot))?; + + let parent_hash = payload_attributes.parent; + let build_identifier = compute_build_id(slot, parent_hash, proposer); + + if state.builds.contains_key(&build_identifier) { + return Ok(PayloadAttributesProcessingOutcome::Duplicate(payload_attributes)) + } + + let context = self.construct_build_context( + slot, + parent_hash, + proposer, + payload_attributes, + validator_preferences, + relays, + )?; + + let build = Arc::new(Build::new(context)); + state.builds.insert(build_identifier.clone(), build); + Ok(PayloadAttributesProcessingOutcome::NewBuild(build_identifier)) + } + + // Drives the build referenced by `id`. Inside a context where blocking is ok. + pub fn construct_best_payload( + &self, + id: &BuildIdentifier, + mut done: oneshot::Receiver<()>, + ) -> Result<(), Error> { + let build = self.build_for(id).ok_or_else(|| Error::MissingBuild(id.clone()))?; + loop { + // TODO: pass in `done` to check more frequently... + let current_value = build.value(); + match build_payload(&build.context, current_value, &self.client, &self.pool) { + Ok(BuildOutcome::BetterOrEqual(payload_with_payments)) => { + let mut state = build.state.lock().unwrap(); + *state = payload_with_payments; + } + Ok(BuildOutcome::Worse { threshold, provided }) => { + tracing::info!( + threshold = ?threshold, + provided = ?provided, + "discarding built payload that did not exceed current value" + ); + } + Err(err) => tracing::warn!("error building payload: {err}"), + } + match done.try_recv() { + Ok(_) => return Ok(()), + Err(oneshot::error::TryRecvError::Empty) => {} + Err(oneshot::error::TryRecvError::Closed) => { + return Err(Error::UnexpectedChannelClosure) + } + } + // TODO: handle backpressure on how frequently we go to build... + std::thread::sleep(std::time::Duration::from_secs(1)) + } + } +} diff --git a/mev-build-rs/src/reth_builder/error.rs b/mev-build-rs/src/reth_builder/error.rs new file mode 100644 index 00000000..815c2b4a --- /dev/null +++ b/mev-build-rs/src/reth_builder/error.rs @@ -0,0 +1,33 @@ +use crate::reth_builder::build::BuildIdentifier; +use ethereum_consensus::{primitives::Slot, state_transition::Error as ConsensusError}; +use reth_interfaces::Error as RethError; +use reth_primitives::H256; +use revm::primitives::EVMError; +use ssz_rs::prelude::*; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + #[error("no validators registered for slot {0}")] + NoRegisteredValidatorsForSlot(Slot), + #[error("already building for identifier {0:?}")] + DuplicatebuildRequest(BuildIdentifier), + #[error("channel was unexpectedly closed")] + UnexpectedChannelClosure, + #[error("missing a build request with identifier {0}")] + MissingBuild(BuildIdentifier), + #[error("missing parent block {0}")] + MissingParentBlock(H256), + #[error("payload requsted but build {0} has not produced one yet")] + PayloadNotPrepared(BuildIdentifier), + #[error("{0}")] + Ssz(#[from] SimpleSerializeError), + #[error("{0}")] + Consensus(#[from] ConsensusError), + #[error(transparent)] + Reth(#[from] RethError), + #[error("evm execution error: {0:?}")] + Execution(EVMError), + #[error("{0}")] + Internal(&'static str), +} diff --git a/mev-build-rs/src/reth_builder/mod.rs b/mev-build-rs/src/reth_builder/mod.rs new file mode 100644 index 00000000..b42c8448 --- /dev/null +++ b/mev-build-rs/src/reth_builder/mod.rs @@ -0,0 +1,13 @@ +/// Build payloads suitable for submission to `mev-boost` relays +/// using `reth` as an execution client. +mod build; +mod builder; +mod error; +mod payload_builder; +mod reth_compat; +mod reth_ext; +mod service; +mod types; + +pub use builder::Builder; +pub use service::{Config, Service}; diff --git a/mev-build-rs/src/reth_builder/payload_builder.rs b/mev-build-rs/src/reth_builder/payload_builder.rs new file mode 100644 index 00000000..916b15c7 --- /dev/null +++ b/mev-build-rs/src/reth_builder/payload_builder.rs @@ -0,0 +1,251 @@ +/// Payload building logic is heavily inspired by +/// the `reth-basic-payload-builder` package in the `reth` codebase. +use crate::reth_builder::{ + build::{BuildContext, PayloadWithPayments}, + error::Error, +}; +use ethers::{ + signers::Signer, + types::{ + transaction::eip2718::TypedTransaction, Eip1559TransactionRequest, H160 as ethers_H160, + }, +}; +use reth_primitives::{ + constants::{BEACON_NONCE, EMPTY_OMMER_ROOT}, + proofs, Block, Bytes, ChainSpec, Header, IntoRecoveredTransaction, Receipt, TransactionSigned, + TransactionSignedEcRecovered, Withdrawal, H256, U256, +}; +use reth_provider::PostState; +use reth_revm::{ + database::{State, SubState}, + env::tx_env_with_recovered, + executor::{ + commit_state_changes, increment_account_balance, post_block_withdrawals_balance_increments, + }, + into_reth_log, +}; +use revm::{ + db::{CacheDB, DatabaseRef}, + primitives::{EVMError, Env, InvalidTransaction, ResultAndState}, +}; + +fn process_withdrawals( + withdrawals: &[Withdrawal], + chain_spec: &ChainSpec, + db: &mut CacheDB, + post_state: &mut PostState, + timestamp: u64, + block_number: u64, +) -> Result::Error> { + let balance_increments = + post_block_withdrawals_balance_increments(chain_spec, timestamp, withdrawals); + + for (address, increment) in balance_increments { + increment_account_balance(db, post_state, block_number, address, increment)?; + } + + let withdrawals_root = proofs::calculate_withdrawals_root(withdrawals); + Ok(withdrawals_root) +} + +pub enum BuildOutcome { + BetterOrEqual(PayloadWithPayments), + // The `provided` value that did not exceed the `threshold` value requested + Worse { threshold: U256, provided: U256 }, +} + +pub fn build_payload< + Provider: reth_provider::StateProviderFactory, + Pool: reth_transaction_pool::TransactionPool, +>( + context: &BuildContext, + threshold_value: U256, + provider: &Provider, + pool: &Pool, +) -> Result { + let parent_hash = context.parent_hash; + + let state = State::new(provider.state_by_block_hash(parent_hash)?); + // TODO: add `CacheDB` for reads + let mut db = SubState::new(state); + let mut post_state = PostState::default(); + + let base_fee = context.base_fee(); + let block_number = context.number(); + let block_gas_limit = context.gas_limit(); + + let mut cumulative_gas_used = 0; + let mut total_fees = U256::ZERO; + + let mut executed_txs = vec![]; + let mut best_txs = pool.best_transactions_with_base_fee(base_fee); + + while let Some(pool_tx) = best_txs.next() { + // NOTE: we withhold the `gas_reserve` so the "bidder" has some guaranteed room + // to play with the payload after it is built. + if cumulative_gas_used + pool_tx.gas_limit() > block_gas_limit - context.gas_reserve { + best_txs.mark_invalid(&pool_tx); + continue + } + + let tx = pool_tx.to_recovered_transaction(); + + let env = Env { + cfg: context.cfg_env.clone(), + block: context.block_env.clone(), + tx: tx_env_with_recovered(&tx), + }; + + let mut evm = revm::EVM::with_env(env); + evm.database(&mut db); + + let ResultAndState { result, state } = match evm.transact() { + Ok(result) => result, + Err(err) => match err { + EVMError::Transaction(err) => { + if !matches!(err, InvalidTransaction::NonceTooLow { .. }) { + best_txs.mark_invalid(&pool_tx); + } + continue + } + err => return Err(Error::Execution(err)), + }, + }; + + commit_state_changes(&mut db, &mut post_state, block_number, state, true); + + let gas_used = result.gas_used(); + cumulative_gas_used += gas_used; + + post_state.add_receipt( + block_number, + Receipt { + tx_type: tx.tx_type(), + success: result.is_success(), + cumulative_gas_used, + logs: result.logs().into_iter().map(into_reth_log).collect(), + }, + ); + + let fee = tx.effective_tip_per_gas(base_fee).expect("fee is valid; executed succeeded"); + total_fees += U256::from(fee) * U256::from(gas_used); + + executed_txs.push(tx.into_signed()); + } + + if total_fees < threshold_value { + return Ok(BuildOutcome::Worse { threshold: threshold_value, provided: total_fees }) + } + + // NOTE: next chunk of code implements end-of-block proposer payments + // TODO: refactor/encapsulate this lol + let integral_percent = (context.bid_percent * 100.0) as u64; + let payment = total_fees * U256::from(integral_percent) / U256::from(100); + let revenue = total_fees - payment; + let total_payment = context.subsidy + payment; + + let sender = context.builder_wallet.address(); + let signer_account = db.load_account(sender.into())?; + let nonce = signer_account.info.nonce; + + let fee_recipient = ethers_H160::from_slice(context.proposer_fee_recipient.as_ref()); + let tx = Eip1559TransactionRequest::new() + .from(sender) + .to(fee_recipient) + .gas(21000) + .max_fee_per_gas(base_fee) + .max_priority_fee_per_gas(0) + .value(total_payment) + .data(ethers::types::Bytes::default()) + .access_list(ethers::types::transaction::eip2930::AccessList::default()) + .nonce(nonce) + .chain_id(context.cfg_env.chain_id.to::()); + let tx = TypedTransaction::Eip1559(tx); + let wallet = &context.builder_wallet; + let signature = wallet.sign_transaction_sync(&tx).expect("can make transaction"); + let tx_encoded = tx.rlp_signed(&signature); + + let payment_tx = TransactionSigned::decode_enveloped(Bytes::from(tx_encoded.as_ref())) + .expect("can decode valid txn"); + + let payment_tx = + TransactionSignedEcRecovered::from_signed_transaction(payment_tx, sender.into()); + + let env = Env { + cfg: context.cfg_env.clone(), + block: context.block_env.clone(), + tx: tx_env_with_recovered(&payment_tx), + }; + + let mut evm = revm::EVM::with_env(env); + evm.database(&mut db); + + let ResultAndState { result, state } = evm.transact().map_err(Error::Execution)?; + + commit_state_changes(&mut db, &mut post_state, block_number, state, true); + + let gas_used = result.gas_used(); + cumulative_gas_used += gas_used; + + post_state.add_receipt( + block_number, + Receipt { + tx_type: payment_tx.tx_type(), + success: result.is_success(), + cumulative_gas_used, + logs: result.logs().into_iter().map(into_reth_log).collect(), + }, + ); + + executed_txs.push(payment_tx.into_signed()); + + let withdrawals_root = process_withdrawals( + &context.withdrawals, + &context.chain_spec, + &mut db, + &mut post_state, + context.timestamp, + block_number, + )?; + + let receipts_root = post_state.receipts_root(block_number); + let logs_bloom = post_state.logs_bloom(block_number); + let state_root = db.db.0.state_root(post_state)?; + let transactions_root = proofs::calculate_transaction_root(&executed_txs); + + let header = Header { + parent_hash, + ommers_hash: EMPTY_OMMER_ROOT, + beneficiary: context.block_env.coinbase, + state_root, + transactions_root, + withdrawals_root: Some(withdrawals_root), + receipts_root, + logs_bloom, + timestamp: context.timestamp, + mix_hash: H256::from_slice(context.prev_randao.as_ref()), + nonce: BEACON_NONCE, + base_fee_per_gas: Some(base_fee), + number: block_number, + gas_limit: block_gas_limit, + difficulty: U256::ZERO, + gas_used: cumulative_gas_used, + extra_data: context.extra_data.clone(), + blob_gas_used: None, + excess_blob_gas: None, + }; + + let payload = Block { + header, + body: executed_txs, + ommers: vec![], + withdrawals: Some(context.withdrawals.clone()), + }; + let payload = payload.seal_slow(); + + Ok(BuildOutcome::BetterOrEqual(PayloadWithPayments { + payload: Some(payload), + proposer_payment: total_payment, + builder_payment: revenue, + })) +} diff --git a/mev-build-rs/src/reth_builder/reth_compat.rs b/mev-build-rs/src/reth_builder/reth_compat.rs new file mode 100644 index 00000000..a4e2bd27 --- /dev/null +++ b/mev-build-rs/src/reth_builder/reth_compat.rs @@ -0,0 +1,64 @@ +use ethereum_consensus::{ + capella::mainnet as spec, + primitives::{Bytes32, ExecutionAddress}, + ssz::{ByteList, ByteVector}, +}; +use mev_rs::types::{capella, ExecutionPayload}; +use reth_primitives::{Bloom, SealedBlock, H160, H256, U256}; + +pub fn to_bytes32(value: H256) -> Bytes32 { + Bytes32::try_from(value.as_bytes()).unwrap() +} + +pub fn to_bytes20(value: H160) -> ExecutionAddress { + ExecutionAddress::try_from(value.as_bytes()).unwrap() +} + +pub fn to_byte_vector(value: Bloom) -> ByteVector<256> { + ByteVector::<256>::try_from(value.as_bytes()).unwrap() +} + +pub fn to_u256(value: &U256) -> ssz_rs::U256 { + ssz_rs::U256::try_from_bytes_le(&value.to_le_bytes::<32>()).unwrap() +} + +pub fn to_execution_payload(value: &SealedBlock) -> ExecutionPayload { + let hash = value.hash(); + let header = &value.header; + let transactions = &value.body; + let withdrawals = &value.withdrawals; + let transactions = transactions + .iter() + .map(|t| spec::Transaction::try_from(t.envelope_encoded().as_ref()).unwrap()) + .collect::>(); + let withdrawals = withdrawals + .as_ref() + .unwrap() + .iter() + .map(|w| spec::Withdrawal { + index: w.index as usize, + validator_index: w.validator_index as usize, + address: to_bytes20(w.address), + amount: w.amount, + }) + .collect::>(); + + let payload = capella::ExecutionPayload { + parent_hash: to_bytes32(header.parent_hash), + fee_recipient: to_bytes20(header.beneficiary), + state_root: to_bytes32(header.state_root), + receipts_root: to_bytes32(header.receipts_root), + logs_bloom: to_byte_vector(header.logs_bloom), + prev_randao: to_bytes32(header.mix_hash), + block_number: header.number, + gas_limit: header.gas_limit, + gas_used: header.gas_used, + timestamp: header.timestamp, + extra_data: ByteList::try_from(header.extra_data.as_ref()).unwrap(), + base_fee_per_gas: ssz_rs::U256::from(header.base_fee_per_gas.unwrap_or_default()), + block_hash: to_bytes32(hash), + transactions: TryFrom::try_from(transactions).unwrap(), + withdrawals: TryFrom::try_from(withdrawals).unwrap(), + }; + ExecutionPayload::Capella(payload) +} diff --git a/mev-build-rs/src/reth_builder/reth_ext.rs b/mev-build-rs/src/reth_builder/reth_ext.rs new file mode 100644 index 00000000..a5b9c62f --- /dev/null +++ b/mev-build-rs/src/reth_builder/reth_ext.rs @@ -0,0 +1,72 @@ +/// Implement the required functionality to interface with the `reth` payload builder +/// functionality, primarily `PayloadJobGenerator`. +/// +/// This module essentially implements a "no-op" builder from the point of view of `reth`, +/// and provides a touch point to signal new payload attributes to this crate's builder. +use crate::reth_builder::Builder; +use reth_payload_builder::{ + error::PayloadBuilderError, BuiltPayload, KeepPayloadJobAlive, PayloadBuilderAttributes, + PayloadId, PayloadJob, PayloadJobGenerator, +}; +use reth_primitives::{SealedBlock, U256}; +use reth_provider::{BlockReaderIdExt, StateProviderFactory}; +use reth_transaction_pool::TransactionPool; +use std::{ + future::{self, Future, Ready}, + sync::Arc, + task::Poll, +}; + +// `Send` and `Sync` so we can have builder implement the required `reth` payload builder traits. +unsafe impl Send for Builder {} +unsafe impl Sync for Builder {} + +pub struct Job { + payload_id: PayloadId, +} + +impl Future for Job { + type Output = Result<(), PayloadBuilderError>; + + fn poll( + self: std::pin::Pin<&mut Self>, + _cx: &mut std::task::Context<'_>, + ) -> std::task::Poll { + Poll::Ready(Ok(())) + } +} + +impl PayloadJobGenerator + for Builder +{ + type Job = Job; + + fn new_payload_job( + &self, + attr: PayloadBuilderAttributes, + ) -> Result { + let job = Job { payload_id: attr.payload_id() }; + self.on_payload_attributes(attr); + Ok(job) + } +} + +impl PayloadJob for Job { + type ResolvePayloadFuture = Ready, PayloadBuilderError>>; + + fn best_payload(&self) -> Result, PayloadBuilderError> { + let payload = Arc::new(build_default_payload(self.payload_id)); + Ok(payload) + } + + fn resolve(&mut self) -> (Self::ResolvePayloadFuture, KeepPayloadJobAlive) { + let payload = Arc::new(build_default_payload(self.payload_id)); + (future::ready(Ok(payload)), KeepPayloadJobAlive::No) + } +} + +fn build_default_payload(payload_id: PayloadId) -> BuiltPayload { + let payload = SealedBlock::default(); + let fees = U256::ZERO; + BuiltPayload::new(payload_id, payload, fees) +} diff --git a/mev-build-rs/src/reth_builder/service.rs b/mev-build-rs/src/reth_builder/service.rs new file mode 100644 index 00000000..c517dd62 --- /dev/null +++ b/mev-build-rs/src/reth_builder/service.rs @@ -0,0 +1,233 @@ +use crate::reth_builder::{ + build::BuildIdentifier, + builder::{Builder, PayloadAttributesProcessingOutcome}, +}; +use ethereum_consensus::{ + clock::{Clock, SystemTimeProvider}, + crypto::SecretKey, + networks, + state_transition::Context, +}; +use ethers::signers::{coins_bip39::English, MnemonicBuilder, Signer}; +use futures::StreamExt; +use mev_rs::{Error, Network, Relay, RelayEndpoint}; +use reth_primitives::{Bytes, ChainSpec}; +use serde::Deserialize; +use std::{future::Future, pin::Pin, sync::Arc, task::Poll, time::Duration}; +use tokio::{ + sync::{mpsc, oneshot}, + task::{JoinError, JoinHandle}, +}; +use url::Url; + +#[derive(Deserialize, Debug, Default)] +pub struct Config { + pub network: Network, + pub secret_key: SecretKey, + pub relays: Vec, + pub extra_data: String, + pub execution_mnemonic: String, +} + +pub struct Service { + builder: Builder, + clock: Clock, +} + +fn parse_relays(urls: &[String]) -> Vec { + let mut relays = vec![]; + for url in urls { + match url.parse::() { + Ok(endpoint) => match RelayEndpoint::try_from(endpoint) { + Ok(endpoint) => { + let relay = Relay::from(endpoint); + relays.push(relay); + } + Err(err) => tracing::warn!("could not parse relay from endpoint: {err}"), + }, + Err(err) => tracing::warn!("could not parse relay URL: {err}"), + } + } + if relays.is_empty() { + tracing::error!("no relays could be loaded from the configuration; please fix and restart"); + } + relays +} + +impl< + Pool: reth_transaction_pool::TransactionPool + 'static, + Client: reth_provider::StateProviderFactory + reth_provider::BlockReaderIdExt + Clone + 'static, + > Service +{ + pub fn from( + config: Config, + context: Option, + pool: Pool, + client: Client, + chain_spec: Arc, + ) -> Result<(Self, Builder), Error> { + let secret_key = config.secret_key; + let network = &config.network; + let context = + if let Some(context) = context { context } else { Context::try_from(network)? }; + let context = Arc::new(context); + let relays = parse_relays(&config.relays); + + let mut derivation_index = 0; + let phrase = if let Some((phrase, index_str)) = config.execution_mnemonic.split_once(':') { + derivation_index = index_str.parse::().expect("is valid"); + phrase + } else { + &config.execution_mnemonic + }; + let wallet = MnemonicBuilder::::default() + .phrase(phrase) + .index(derivation_index) + .unwrap() + .build() + .expect("is valid phrase"); + let builder_wallet = wallet.with_chain_id(chain_spec.chain.id()); + + let clock = context.clock().unwrap_or_else(|| { + let genesis_time = networks::typical_genesis_time(&context); + context.clock_at(genesis_time) + }); + + let builder = Builder::new( + secret_key, + context.clone(), + clock.clone(), + relays, + pool, + client, + chain_spec, + Bytes::from(config.extra_data.as_bytes()), + builder_wallet, + ); + Ok((Service { builder: builder.clone(), clock }, builder)) + } + + pub async fn spawn(self) -> Result { + let Self { builder, clock } = self; + + if clock.before_genesis() { + let genesis = clock.duration_until_next_slot(); + tracing::warn!(duration = ?genesis, "waiting until genesis"); + tokio::time::sleep(genesis).await; + } + + let current_epoch = clock.current_epoch().unwrap(); + builder.initialize(current_epoch).await; + + let builder_handle = builder.clone(); + let clock_handle = clock.clone(); + let clock = tokio::spawn(async move { + let builder = builder_handle; + let slots = clock.stream_slots(); + + tokio::pin!(slots); + + while let Some(slot) = slots.next().await { + builder.on_slot(slot).await; + } + }); + + let (to_bidder, mut from_builder) = + mpsc::channel::<(BuildIdentifier, oneshot::Sender<()>)>(16); + let builder_handle = builder.clone(); + let bidder = tokio::spawn(async move { + let builder = builder_handle; + let clock = clock_handle; + loop { + if let Some((id, done_tx)) = from_builder.recv().await { + // NOTE: current bidding strategy: + // - submit best payload once, 1 second before the slot + + // let build_context = + // builder.build_context_for(&id).expect("only asking for valid jobs"); + // let slot = build_context.slot; + // TODO: FIXME, expose `duration_until_slot(..)` + // for now, just assume next slot... + let target = clock.duration_until_next_slot(); + + let start = target - Duration::from_secs(1); + + tokio::time::sleep(start).await; + + if let Err(err) = builder.submit_bid(&id).await { + tracing::warn!("error submitting bid to relays: {err}"); + } + + // NOTE: `send` to stop job for this `build_identifier` + // TODO: handle job expiry and clean up + let _ = done_tx.send(()); + } + } + }); + + let payload_builder = tokio::spawn(async move { + let payload_attributes = match builder.stream_payload_attributes() { + Ok(stream) => stream, + Err(err) => { + tracing::error!(err = ?err, "could not open payload attributes stream"); + return + } + }; + + tokio::pin!(payload_attributes); + + while let Some(attrs) = payload_attributes.next().await { + match builder.process_payload_attributes(attrs) { + Ok(PayloadAttributesProcessingOutcome::NewBuild(build_identifier)) => { + let builder = builder.clone(); + let id = build_identifier.clone(); + let (done_tx, done_rx) = oneshot::channel(); + tokio::task::spawn_blocking(move || { + tracing::trace!(id = ?id, "starting build"); + if let Err(err) = builder.construct_best_payload(&id, done_rx) { + tracing::warn!(id = ?id, err = ?err, "failed to progress build"); + } + }); + let _ = to_bidder.send((build_identifier, done_tx)).await; + } + Ok(PayloadAttributesProcessingOutcome::Duplicate(attrs)) => { + tracing::trace!(attrs = ?attrs, "skipping processing of duplicate payload attributes") + } + Err(err) => { + tracing::warn!(err = ?err, "could not process payload attributes"); + } + } + } + }); + + Ok(ServiceHandle { clock, payload_builder, bidder }) + } +} + +#[pin_project::pin_project] +pub struct ServiceHandle { + #[pin] + clock: JoinHandle<()>, + #[pin] + payload_builder: JoinHandle<()>, + #[pin] + bidder: JoinHandle<()>, +} + +impl Future for ServiceHandle { + type Output = Result<(), JoinError>; + + fn poll(self: Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> Poll { + let this = self.project(); + + let clock = this.clock.poll(cx); + if clock.is_ready() { + return clock + } + let builder = this.payload_builder.poll(cx); + if builder.is_ready() { + return builder + } + this.bidder.poll(cx) + } +} diff --git a/mev-build-rs/src/reth_builder/types.rs b/mev-build-rs/src/reth_builder/types.rs new file mode 100644 index 00000000..3addb0b1 --- /dev/null +++ b/mev-build-rs/src/reth_builder/types.rs @@ -0,0 +1,18 @@ +use ethereum_consensus::{builder::SignedValidatorRegistration, primitives::ExecutionAddress}; + +pub type RelayIndex = usize; + +#[derive(Debug, Hash, PartialEq, Eq)] +pub struct ValidatorPreferences { + pub fee_recipient: ExecutionAddress, + pub gas_limit: u64, +} + +impl From<&SignedValidatorRegistration> for ValidatorPreferences { + fn from(value: &SignedValidatorRegistration) -> Self { + Self { + fee_recipient: value.message.fee_recipient.clone(), + gas_limit: value.message.gas_limit, + } + } +} diff --git a/mev-build-rs/src/service.rs b/mev-build-rs/src/service.rs deleted file mode 100644 index 87b13181..00000000 --- a/mev-build-rs/src/service.rs +++ /dev/null @@ -1,143 +0,0 @@ -use crate::mempool_builder::Builder; -use beacon_api_client::Client; -use ethereum_consensus::{crypto::SecretKey, state_transition::Context}; -use futures::StreamExt; -use mev_rs::{ - blinded_block_provider::Server as BlindedBlockProviderServer, - engine_api_proxy::{ - client::Client as EngineApiClient, - server::{ - Client as HttpClient, Config as EngineApiProxyConfig, Proxy, Server as EngineApiProxy, - }, - }, - Error, Network, -}; -use serde::Deserialize; -use std::{future::Future, net::Ipv4Addr, pin::Pin, sync::Arc, task::Poll}; -use tokio::{ - sync::mpsc, - task::{JoinError, JoinHandle}, -}; -use url::Url; - -const BUILD_JOB_BUFFER_SIZE: usize = 1; - -#[derive(Deserialize, Debug)] -pub struct Config { - pub host: Ipv4Addr, - pub port: u16, - pub beacon_api_endpoint: String, - #[serde(default)] - pub network: Network, - pub engine_api_proxy: EngineApiProxyConfig, - pub secret_key: SecretKey, -} - -impl Default for Config { - fn default() -> Self { - Self { - host: Ipv4Addr::UNSPECIFIED, - port: 28545, - beacon_api_endpoint: String::new(), - network: Default::default(), - engine_api_proxy: Default::default(), - secret_key: SecretKey::default(), - } - } -} - -pub struct Service { - config: Config, -} - -impl Service { - pub fn from(config: Config) -> Self { - Self { config } - } - - pub async fn spawn(self, context: Option) -> Result { - let Config { host, port, beacon_api_endpoint, network, engine_api_proxy, secret_key } = - self.config; - - let beacon_api_endpoint: Url = beacon_api_endpoint.parse().unwrap(); - let client = Client::new(beacon_api_endpoint); - - let context = - if let Some(context) = context { context } else { Context::try_from(&network)? }; - let (tx, rx) = mpsc::channel(BUILD_JOB_BUFFER_SIZE); - let engine_api_client = EngineApiClient::new(&engine_api_proxy.engine_api_endpoint); - let http_client = HttpClient::new(); - let proxy = Arc::new(Proxy::new(http_client, &engine_api_proxy.engine_api_endpoint, tx)); - let engine_api_proxy = EngineApiProxy::new(engine_api_proxy); - - let genesis_details = client.get_genesis_details().await?; - let genesis_validators_root = genesis_details.genesis_validators_root; - let clock = context.clock(Some(genesis_details.genesis_time)); - let builder = Builder::new( - secret_key, - genesis_validators_root, - client, - context, - engine_api_client, - proxy.clone(), - ); - - let block_provider = builder.clone(); - let engine_builder = builder.clone(); - - let current_epoch = clock.current_epoch().expect("after genesis"); - builder.initialize(current_epoch).await; - - let clock = tokio::spawn(async move { - let slots = clock.stream_slots(); - - tokio::pin!(slots); - - while let Some(slot) = slots.next().await { - builder.on_slot(slot).await; - } - }); - - let api_server = BlindedBlockProviderServer::new(host, port, block_provider).spawn(); - let engine_api_proxy = engine_api_proxy.spawn(proxy); - let builder = engine_builder.spawn(rx); - - Ok(ServiceHandle { clock, api_server, engine_api_proxy, builder }) - } -} - -/// Contains the handles to spawned [`Builder`] and [`BlindedBlockProviderServer`] tasks -/// -/// This struct is created by the [`Service::spawn`] function -#[pin_project::pin_project] -pub struct ServiceHandle { - #[pin] - clock: JoinHandle<()>, - #[pin] - api_server: JoinHandle<()>, - #[pin] - engine_api_proxy: JoinHandle<()>, - #[pin] - builder: JoinHandle<()>, -} - -impl Future for ServiceHandle { - type Output = Result<(), JoinError>; - - fn poll(self: Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> Poll { - let this = self.project(); - let clock = this.clock.poll(cx); - if clock.is_ready() { - return clock - } - let api_server = this.api_server.poll(cx); - if api_server.is_ready() { - return api_server - } - let engine_api_proxy = this.engine_api_proxy.poll(cx); - if engine_api_proxy.is_ready() { - return engine_api_proxy - } - this.builder.poll(cx) - } -} diff --git a/mev-relay-rs/src/service.rs b/mev-relay-rs/src/service.rs index c36e4800..3ceb9393 100644 --- a/mev-relay-rs/src/service.rs +++ b/mev-relay-rs/src/service.rs @@ -1,6 +1,6 @@ use crate::relay::Relay; use beacon_api_client::mainnet::Client; -use ethereum_consensus::{crypto::SecretKey, state_transition::Context}; +use ethereum_consensus::{crypto::SecretKey, networks, state_transition::Context}; use futures::StreamExt; use mev_rs::{blinded_block_provider::Server as BlindedBlockProviderServer, Error, Network}; use serde::Deserialize; @@ -58,7 +58,10 @@ impl Service { let context = if let Some(context) = context { context } else { Context::try_from(&network)? }; - let clock = context.clock(None); + let clock = context.clock().unwrap_or_else(|| { + let genesis_time = networks::typical_genesis_time(&context); + context.clock_at(genesis_time) + }); let context = Arc::new(context); let genesis_details = beacon_node.get_genesis_details().await?; let genesis_validators_root = genesis_details.genesis_validators_root; diff --git a/mev-rs/Cargo.toml b/mev-rs/Cargo.toml index 625af32a..ea77629d 100644 --- a/mev-rs/Cargo.toml +++ b/mev-rs/Cargo.toml @@ -7,15 +7,14 @@ license = "MIT OR Apache-2.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [features] -default = ["serde", "builder-api", "relay-api", "engine-proxy"] +default = ["serde", "builder-api", "relay-api"] builder-api = ["api"] relay-api = ["api"] api = ["tokio", "axum", "hyper", "beacon-api-client", "tracing", "serde_json"] -engine-proxy = ["serde", "api", "anvil-rpc", "reqwest", "serde_json"] [dependencies] tokio = { version = "1.0", optional = true } -axum = { version = "0.6.4", optional = true } +axum = { version = "0.6.4", optional = true } hyper = { version = "0.14", optional = true } tracing = { version = "0.1", optional = true } @@ -23,11 +22,13 @@ async-trait = "0.1.53" serde = { version = "1.0", features = ["derive"], optional = true } thiserror = "1.0.30" parking_lot = "0.12.1" +url = { version = "2.2.2", default-features = false } -anvil-rpc = { git = "https://github.com/foundry-rs/foundry", rev = "b45456717ffae1af65acdc71099f8cb95e6683a0", optional = true} -reqwest = { version = "0.11.14", optional = true } -serde_json = { version = "1.0.92", optional = true } +serde_json = { version = "1.0.92", optional = true } ssz_rs = { workspace = true } ethereum-consensus = { workspace = true } beacon-api-client = { workspace = true, optional = true } + +[dev-dependencies] +rand = "0.8.5" diff --git a/mev-rs/src/blinded_block_relayer/api/client.rs b/mev-rs/src/blinded_block_relayer/api/client.rs index 77c8ec43..aa0bfc30 100644 --- a/mev-rs/src/blinded_block_relayer/api/client.rs +++ b/mev-rs/src/blinded_block_relayer/api/client.rs @@ -23,7 +23,6 @@ impl BlindedBlockRelayer for Client { self.api.get("/relay/v1/builder/validators").await.map_err(From::from) } - // TODO support content types async fn submit_bid(&self, signed_submission: &SignedBidSubmission) -> Result<(), Error> { let response = self.api.http_post("/relay/v1/builder/blocks", signed_submission).await?; api_error_or_ok(response).await.map_err(From::from) diff --git a/mev-rs/src/blinded_block_relayer/mod.rs b/mev-rs/src/blinded_block_relayer/mod.rs index 11b375ef..00d39390 100644 --- a/mev-rs/src/blinded_block_relayer/mod.rs +++ b/mev-rs/src/blinded_block_relayer/mod.rs @@ -14,6 +14,5 @@ use async_trait::async_trait; pub trait BlindedBlockRelayer { async fn get_proposal_schedule(&self) -> Result, Error>; - // TODO: support cancellations? async fn submit_bid(&self, signed_submission: &SignedBidSubmission) -> Result<(), Error>; } diff --git a/mev-rs/src/engine_api_proxy/client.rs b/mev-rs/src/engine_api_proxy/client.rs deleted file mode 100644 index ff93e281..00000000 --- a/mev-rs/src/engine_api_proxy/client.rs +++ /dev/null @@ -1,143 +0,0 @@ -use crate::{ - engine_api_proxy::{ - types::{self, BuildVersion, ExecutionPayloadWithValue, PayloadId}, - Error, - }, - types::{bellatrix, capella, ExecutionPayload}, -}; -use anvil_rpc::request::{Id, RequestParams, RpcMethodCall, Version}; -use ethereum_consensus::{capella::Withdrawal, primitives::ValidatorIndex}; -use parking_lot::Mutex; -use serde::Deserialize; -use ssz_rs::prelude::U256; -use std::sync::Arc; - -const ENGINE_GET_PAYLOADV1_METHOD: &str = "engine_getPayloadV1"; -const ENGINE_GET_PAYLOADV2_METHOD: &str = "engine_getPayloadV2"; - -#[derive(Clone)] -pub struct Client { - client: reqwest::Client, - endpoint: String, - rpc_id: Arc>, -} - -impl Client { - pub fn new(endpoint: &str) -> Self { - let client = reqwest::Client::new(); - Self { client, endpoint: endpoint.to_string(), rpc_id: Arc::new(Mutex::new(0)) } - } - - pub async fn get_payload_with_value( - &self, - payload_id: &PayloadId, - auth_token: &str, - version: BuildVersion, - ) -> Result<(ExecutionPayload, U256), Error> { - let params = serde_json::to_value(payload_id)?; - let rpc_id = { *self.rpc_id.lock() }; - let method = match version { - BuildVersion::V1 => ENGINE_GET_PAYLOADV1_METHOD, - BuildVersion::V2 => ENGINE_GET_PAYLOADV2_METHOD, - }; - let call = RpcMethodCall { - jsonrpc: Version::V2, - method: method.to_string(), - params: RequestParams::Array(vec![params]), - id: Id::Number(rpc_id), - }; - let response = self - .client - .post(&self.endpoint) - .header("Authorization", auth_token) - .json(&call) - .send() - .await?; - { - let mut rpc_id = self.rpc_id.lock(); - *rpc_id += 1; - } - let response: serde_json::Value = response.json().await?; - let result = response.get("result").ok_or_else(|| Error::UnexpectedResponse)?; - match version { - BuildVersion::V1 => { - let payload = types::ExecutionPayloadV1::deserialize(result).unwrap(); - let payload = ExecutionPayload::Bellatrix(bellatrix::ExecutionPayload { - parent_hash: payload.parent_hash, - fee_recipient: payload.fee_recipient, - state_root: payload.state_root, - receipts_root: payload.receipts_root, - logs_bloom: payload.logs_bloom, - prev_randao: payload.prev_randao, - block_number: payload.block_number, - gas_limit: payload.gas_limit, - gas_used: payload.gas_used, - timestamp: payload.timestamp, - extra_data: payload.extra_data, - base_fee_per_gas: payload.base_fee_per_gas, - block_hash: payload.block_hash, - transactions: payload.transactions, - }); - // TODO try to get accurate value? - let value: U256 = 1_000_000_123.into(); - Ok((payload, value)) - } - BuildVersion::V2 => { - let payload_with_value = ExecutionPayloadWithValue::deserialize(result).unwrap(); - let payload = match payload_with_value.execution_payload { - types::ExecutionPayload::V1(payload) => { - ExecutionPayload::Bellatrix(bellatrix::ExecutionPayload { - parent_hash: payload.parent_hash, - fee_recipient: payload.fee_recipient, - state_root: payload.state_root, - receipts_root: payload.receipts_root, - logs_bloom: payload.logs_bloom, - prev_randao: payload.prev_randao, - block_number: payload.block_number, - gas_limit: payload.gas_limit, - gas_used: payload.gas_used, - timestamp: payload.timestamp, - extra_data: payload.extra_data, - base_fee_per_gas: payload.base_fee_per_gas, - block_hash: payload.block_hash, - transactions: payload.transactions, - }) - } - types::ExecutionPayload::V2(payload) => { - ExecutionPayload::Capella(capella::ExecutionPayload { - parent_hash: payload.parent_hash, - fee_recipient: payload.fee_recipient, - state_root: payload.state_root, - receipts_root: payload.receipts_root, - logs_bloom: payload.logs_bloom, - prev_randao: payload.prev_randao, - block_number: payload.block_number, - gas_limit: payload.gas_limit, - gas_used: payload.gas_used, - timestamp: payload.timestamp, - extra_data: payload.extra_data, - base_fee_per_gas: payload.base_fee_per_gas, - block_hash: payload.block_hash, - transactions: payload.transactions, - withdrawals: payload - .withdrawals - .into_iter() - .map(|w| Withdrawal { - index: w.index as usize, - validator_index: w.validator_index as ValidatorIndex, - address: w.address, - amount: w.amount, - }) - .collect::>() - .try_into() - // TODO error handling here... - .unwrap(), - }) - } - }; - let value = payload_with_value.block_value; - Ok((payload, value)) - } - } - } -} diff --git a/mev-rs/src/engine_api_proxy/mod.rs b/mev-rs/src/engine_api_proxy/mod.rs deleted file mode 100644 index 4eccb3da..00000000 --- a/mev-rs/src/engine_api_proxy/mod.rs +++ /dev/null @@ -1,15 +0,0 @@ -pub mod client; -pub mod server; -pub mod types; - -use thiserror::Error; - -#[derive(Debug, Error)] -pub enum Error { - #[error("unexpected data when decoding reseponse")] - UnexpectedResponse, - #[error("{0}")] - Json(#[from] serde_json::Error), - #[error("{0}")] - Http(#[from] reqwest::Error), -} diff --git a/mev-rs/src/engine_api_proxy/server.rs b/mev-rs/src/engine_api_proxy/server.rs deleted file mode 100644 index b351d624..00000000 --- a/mev-rs/src/engine_api_proxy/server.rs +++ /dev/null @@ -1,207 +0,0 @@ -use crate::engine_api_proxy::types::{ - BuildJob, BuildVersion, ForkchoiceUpdatedV1Params, ForkchoiceUpdatedV1Response, - ForkchoiceUpdatedV2Params, PayloadAttributes, -}; -use axum::{ - extract::State, - http::{uri::Uri, Request, Response}, - routing::{post, IntoMakeService}, - Router, -}; -use hyper::{body, client::HttpConnector, server::conn::AddrIncoming, Body}; -use parking_lot::Mutex; -use serde::{Deserialize, Serialize}; -use std::{ - net::{Ipv4Addr, SocketAddr}, - sync::Arc, -}; -use tokio::{sync::mpsc, task::JoinHandle}; - -pub type EngineApiProxyServer = axum::Server>; -pub type Client = hyper::client::Client; - -#[derive(Debug, Deserialize, Clone)] -pub struct Config { - pub host: Ipv4Addr, - pub port: u16, - pub engine_api_endpoint: String, -} - -impl Default for Config { - fn default() -> Self { - Self { - host: Ipv4Addr::LOCALHOST, - port: 8551, - engine_api_endpoint: "http://127.0.0.1:8552".into(), - } - } -} - -pub struct Server { - config: Config, -} - -impl Server { - pub fn new(config: Config) -> Self { - Self { config } - } - - pub fn serve(&self, proxy: Arc) -> EngineApiProxyServer { - let app = Router::new().route("/", post(handler)).with_state(proxy); - - let addr = SocketAddr::from((self.config.host, self.config.port)); - axum::Server::bind(&addr).serve(app.into_make_service()) - } - - pub fn spawn(self, proxy: Arc) -> JoinHandle<()> { - let server = self.serve(proxy); - let address = server.local_addr(); - tokio::spawn(async move { - tracing::info!("listening at {address}..."); - if let Err(err) = server.await { - tracing::error!("error while listening for incoming: {err}") - } - }) - } -} - -#[derive(Debug, Serialize, Deserialize)] -struct JsonRpcRequest { - method: String, - params: serde_json::Value, -} - -#[derive(Debug, Serialize, Deserialize)] -struct JsonRpcResponse { - result: serde_json::Value, -} - -async fn handler(State(proxy): State>, req: Request) -> Response { - proxy.process_message(req).await -} - -pub struct Proxy { - client: Client, - target_endpoint: String, - build_jobs: mpsc::Sender, - // TODO: this is a kludge, remove w/ proper token generation - pub token: Mutex, -} - -impl Proxy { - pub fn new(client: Client, target_endpoint: &str, build_jobs: mpsc::Sender) -> Self { - Self { - client, - target_endpoint: target_endpoint.to_string(), - build_jobs, - token: Default::default(), - } - } - - async fn process_message(&self, req: Request) -> Response { - let (parts, body) = req.into_parts(); - let token = parts.headers.get("Authorization").unwrap(); - { - let mut state = self.token.lock(); - *state = String::from(token.to_str().unwrap()); - } - let body_bytes = body::to_bytes(body).await.unwrap(); - - let request_rpc: JsonRpcRequest = serde_json::from_slice(&body_bytes).unwrap(); - - let body = Body::from(body_bytes); - let mut req = Request::from_parts(parts, body); - - *req.uri_mut() = Uri::try_from(&self.target_endpoint).unwrap(); - let response = self.client.request(req).await.unwrap(); - if request_rpc.method.contains("engine_forkchoiceUpdatedV") { - let (parts, body) = response.into_parts(); - - let body_bytes = body::to_bytes(body).await.unwrap(); - let response_rpc: JsonRpcResponse = serde_json::from_slice(&body_bytes).unwrap(); - if request_rpc.method.ends_with("V1") { - self.process_forkchoice_updated_call_v1(&request_rpc, &response_rpc).await; - } else { - // V2 - self.process_forkchoice_updated_call_v2(&request_rpc, &response_rpc).await; - } - - let body = Body::from(body_bytes); - - Response::from_parts(parts, body) - } else { - response - } - } - - async fn process_forkchoice_updated_call_v1( - &self, - request: &JsonRpcRequest, - response: &JsonRpcResponse, - ) { - let result = ForkchoiceUpdatedV1Response::deserialize(&response.result).unwrap(); - if let Some(payload_id) = result.payload_id { - let params = ForkchoiceUpdatedV1Params::deserialize(&request.params).unwrap(); - if let Some(payload_attributes) = params.payload_attributes { - let head_block_hash = params.forkchoice_state.head_block_hash; - let timestamp = payload_attributes.timestamp; - let suggested_fee_recipient = payload_attributes.suggested_fee_recipient; - let job = BuildJob { - head_block_hash, - timestamp, - suggested_fee_recipient, - payload_id, - version: BuildVersion::V1, - }; - if let Err(job) = self.build_jobs.send(job).await { - tracing::warn!("could not send build job to builder: {job}"); - } - } - } - } - - async fn process_forkchoice_updated_call_v2( - &self, - request: &JsonRpcRequest, - response: &JsonRpcResponse, - ) { - let result = ForkchoiceUpdatedV1Response::deserialize(&response.result).unwrap(); - if let Some(payload_id) = result.payload_id { - let params = ForkchoiceUpdatedV2Params::deserialize(&request.params).unwrap(); - if let Some(payload_attributes) = params.payload_attributes { - match payload_attributes { - PayloadAttributes::V1(payload_attributes) => { - let head_block_hash = params.forkchoice_state.head_block_hash; - let timestamp = payload_attributes.timestamp; - let suggested_fee_recipient = payload_attributes.suggested_fee_recipient; - let job = BuildJob { - head_block_hash, - timestamp, - suggested_fee_recipient, - payload_id, - version: BuildVersion::V1, - }; - if let Err(job) = self.build_jobs.send(job).await { - tracing::warn!("could not send build job to builder: {job}"); - } - } - PayloadAttributes::V2(payload_attributes) => { - let head_block_hash = params.forkchoice_state.head_block_hash; - let timestamp = payload_attributes.timestamp; - let suggested_fee_recipient = payload_attributes.suggested_fee_recipient; - let job = BuildJob { - head_block_hash, - timestamp, - suggested_fee_recipient, - payload_id, - version: BuildVersion::V2, - }; - if let Err(job) = self.build_jobs.send(job).await { - tracing::warn!("could not send build job to builder: {job}"); - } - } - } - } - } - } -} diff --git a/mev-rs/src/engine_api_proxy/types.rs b/mev-rs/src/engine_api_proxy/types.rs deleted file mode 100644 index 9a5f75f3..00000000 --- a/mev-rs/src/engine_api_proxy/types.rs +++ /dev/null @@ -1,265 +0,0 @@ -use ethereum_consensus::{ - bellatrix::mainnet::{ - Transaction, BYTES_PER_LOGS_BLOOM, MAX_EXTRA_DATA_BYTES, MAX_TRANSACTIONS_PER_PAYLOAD, - }, - deneb::mainnet::{Blob, MAX_BLOBS_PER_BLOCK}, - kzg::{KzgCommitment, KzgProof}, - primitives::{Bytes32, ExecutionAddress, Hash32}, - ssz::{ByteList, ByteVector}, -}; -use serde::{Deserialize, Serialize}; -use ssz_rs::prelude::*; - -pub type PayloadId = ByteVector<8>; - -pub fn u64_from_hex<'de, D>(deserializer: D) -> Result -where - D: serde::Deserializer<'de>, -{ - let data = ::deserialize(deserializer)?; - let data = data.strip_prefix("0x").unwrap_or(data.as_ref()); - let value = u64::from_str_radix(data, 16).unwrap(); - Ok(value) -} - -pub fn u256_from_be_hex<'de, D>(deserializer: D) -> Result -where - D: serde::Deserializer<'de>, -{ - let s = ::deserialize(deserializer)?; - let value = U256::from_hex(&s).unwrap(); - Ok(value) -} - -// Quick hack to signal if we should use `engine_getPayloadV{1,2}` -// TODO improve this... -#[derive(Debug, Clone, Default)] -pub enum BuildVersion { - #[default] - V1, - V2, -} - -// `BuildJob` uniquely describes a block building process on the local execution client. -#[derive(Debug, Clone)] -pub struct BuildJob { - pub head_block_hash: Hash32, - pub timestamp: u64, - pub suggested_fee_recipient: ExecutionAddress, - pub payload_id: PayloadId, - pub version: BuildVersion, -} - -#[derive(Deserialize, Debug, Clone)] -#[serde(rename_all = "camelCase")] -pub struct WithdrawalV1 { - #[serde(deserialize_with = "u64_from_hex")] - pub index: u64, - #[serde(deserialize_with = "u64_from_hex")] - pub validator_index: u64, - pub address: ExecutionAddress, - #[serde(deserialize_with = "u64_from_hex")] - pub amount: u64, -} - -#[derive(Deserialize, Debug)] -#[serde(rename_all = "camelCase")] -pub struct ForkchoiceStateV1 { - pub head_block_hash: Hash32, - pub safe_block_hash: Hash32, - pub finalized_block_hash: Hash32, -} - -#[derive(Deserialize, Debug)] -#[serde(rename_all = "camelCase")] -#[serde(deny_unknown_fields)] -pub struct PayloadAttributesV1 { - #[serde(deserialize_with = "u64_from_hex")] - pub timestamp: u64, - pub prev_randao: Hash32, - pub suggested_fee_recipient: ExecutionAddress, -} - -#[derive(Deserialize, Debug)] -#[serde(rename_all = "camelCase")] -#[serde(deny_unknown_fields)] -pub struct PayloadAttributesV2 { - #[serde(deserialize_with = "u64_from_hex")] - pub timestamp: u64, - pub prev_randao: Hash32, - pub suggested_fee_recipient: ExecutionAddress, - // TODO: add bound on vec here? - pub withdrawals: Vec, -} - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ForkchoiceUpdatedV1Params { - pub forkchoice_state: ForkchoiceStateV1, - pub payload_attributes: Option, -} - -#[derive(Debug, Deserialize)] -#[serde(untagged)] -pub enum PayloadAttributes { - V1(PayloadAttributesV1), - V2(PayloadAttributesV2), -} - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ForkchoiceUpdatedV2Params { - pub forkchoice_state: ForkchoiceStateV1, - pub payload_attributes: Option, -} - -#[derive(Serialize, Deserialize, Debug)] -#[serde(rename_all = "SCREAMING_SNAKE_CASE")] -pub enum PayloadStatus { - Valid, - Invalid, - Syncing, - Accepted, - InvalidBlockHash, -} - -#[derive(Serialize, Deserialize, Debug)] -#[serde(rename_all = "camelCase")] -pub struct PayloadStatusV1 { - pub status: PayloadStatus, - pub latest_valid_hash: Option, - pub validation_error: Option, -} - -#[derive(Serialize, Deserialize, Debug)] -#[serde(rename_all = "camelCase")] -pub struct ForkchoiceUpdatedV1Response { - pub payload_status: PayloadStatusV1, - pub payload_id: Option, -} - -#[derive(Debug, Deserialize)] -#[serde(untagged)] -pub enum ExecutionPayload { - V1(ExecutionPayloadV1), - V2(ExecutionPayloadV2), -} - -#[derive(Deserialize, Debug)] -#[serde(rename_all = "camelCase")] -// TODO: maybe rename this to `GetPayloadV2Response` for consistency with the V3 response type? -pub struct ExecutionPayloadWithValue { - pub execution_payload: ExecutionPayload, - #[serde(deserialize_with = "u256_from_be_hex")] - pub block_value: U256, -} - -#[derive(Deserialize, Debug)] -#[serde(rename_all = "camelCase")] -pub struct GetPayloadV3Response { - pub execution_payload: ExecutionPayloadV3, - #[serde(deserialize_with = "u256_from_be_hex")] - pub block_value: U256, - pub blobs_bundle: BlobsBundleV1, - pub should_override_builder: bool, -} - -#[derive(Clone, Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -#[serde(deny_unknown_fields)] -pub struct ExecutionPayloadV1 { - pub parent_hash: Hash32, - pub fee_recipient: ExecutionAddress, - pub state_root: Bytes32, - pub receipts_root: Bytes32, - pub logs_bloom: ByteVector, - pub prev_randao: Bytes32, - #[serde(deserialize_with = "u64_from_hex")] - pub block_number: u64, - #[serde(deserialize_with = "u64_from_hex")] - pub gas_limit: u64, - #[serde(deserialize_with = "u64_from_hex")] - pub gas_used: u64, - #[serde(deserialize_with = "u64_from_hex")] - pub timestamp: u64, - pub extra_data: ByteList, - #[serde(deserialize_with = "u256_from_be_hex")] - pub base_fee_per_gas: U256, - pub block_hash: Hash32, - pub transactions: List, -} - -#[derive(Clone, Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ExecutionPayloadV2 { - pub parent_hash: Hash32, - pub fee_recipient: ExecutionAddress, - pub state_root: Bytes32, - pub receipts_root: Bytes32, - pub logs_bloom: ByteVector, - pub prev_randao: Bytes32, - #[serde(deserialize_with = "u64_from_hex")] - pub block_number: u64, - #[serde(deserialize_with = "u64_from_hex")] - pub gas_limit: u64, - #[serde(deserialize_with = "u64_from_hex")] - pub gas_used: u64, - #[serde(deserialize_with = "u64_from_hex")] - pub timestamp: u64, - pub extra_data: ByteList, - #[serde(deserialize_with = "u256_from_be_hex")] - pub base_fee_per_gas: U256, - pub block_hash: Hash32, - pub transactions: List, - // TODO: add bound on vec here? - pub withdrawals: Vec, -} - -#[derive(Clone, Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ExecutionPayloadV3 { - pub parent_hash: Hash32, - pub fee_recipient: ExecutionAddress, - pub state_root: Bytes32, - pub receipts_root: Bytes32, - pub logs_bloom: ByteVector, - pub prev_randao: Bytes32, - #[serde(deserialize_with = "u64_from_hex")] - pub block_number: u64, - #[serde(deserialize_with = "u64_from_hex")] - pub gas_limit: u64, - #[serde(deserialize_with = "u64_from_hex")] - pub gas_used: u64, - #[serde(deserialize_with = "u64_from_hex")] - pub timestamp: u64, - pub extra_data: ByteList, - #[serde(deserialize_with = "u256_from_be_hex")] - pub base_fee_per_gas: U256, - pub block_hash: Hash32, - pub transactions: List, - pub withdrawals: Vec, - #[serde(deserialize_with = "u64_from_hex")] - pub data_gas_used: u64, - #[serde(deserialize_with = "u64_from_hex")] - pub excess_data_gas: u64, -} - -#[derive(Clone, Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct BlobsBundleV1 { - pub commitments: List, - pub proofs: List, - pub blobs: List, -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_deserialize_execution_payload_v1() { - let json = r#"{"parentHash":"0xd6cf483bb88f7dc8037d491b29b0d2a29c8fb83dbaf9edf10a44bfd715eddbe1","feeRecipient":"0xf97e180c050e5ab072211ad2c213eb5aee4df134","stateRoot":"0x4941344e792c80d2073120b975923af67f7e484c29515c5a26d1a3df7b7e9b6b","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","prevRandao":"0xa275b854d2ed9374f2ae1d538f35bbe17688b04a091f8697e0a95f83f18e8ffe","blockNumber":"0xfd5","gasLimit":"0x1c9c380","gasUsed":"0x0","timestamp":"0x63e52f22","extraData":"0x","baseFeePerGas":"0x7","blockHash":"0xcd126775c64e5a59607862101394b0ee2d1f77da645f5f31cf4161882e47ca1f","transactions":[]}"#; - let payload: ExecutionPayloadV1 = serde_json::from_str(json).unwrap(); - dbg!(payload); - } -} diff --git a/mev-rs/src/error.rs b/mev-rs/src/error.rs index 39414ad3..b389bc3e 100644 --- a/mev-rs/src/error.rs +++ b/mev-rs/src/error.rs @@ -34,6 +34,8 @@ pub enum Error { UnknownFeeRecipient(BlsPublicKey, ExecutionAddress), #[error("validator with public key {0} is not currently registered")] ValidatorNotRegistered(BlsPublicKey), + #[error("error submitting builder's bid with status code {0} and message `{1}`")] + BidSubmission(u16, String), #[error("{0}")] Consensus(#[from] ConsensusError), #[error("{0}")] diff --git a/mev-rs/src/lib.rs b/mev-rs/src/lib.rs index ecfa82cb..dfc77f34 100644 --- a/mev-rs/src/lib.rs +++ b/mev-rs/src/lib.rs @@ -1,10 +1,9 @@ pub mod blinded_block_provider; pub mod blinded_block_relayer; -#[cfg(feature = "engine-proxy")] -pub mod engine_api_proxy; mod error; mod network; mod proposer_scheduler; +pub mod relay; #[cfg(feature = "serde")] pub mod serde; pub mod signing; @@ -12,8 +11,10 @@ pub mod types; mod validator_registry; pub use blinded_block_provider::BlindedBlockProvider; +pub use blinded_block_relayer::BlindedBlockRelayer; pub use error::Error; pub use network::*; pub use proposer_scheduler::ProposerScheduler; +pub use relay::{Relay, RelayEndpoint}; pub use validator_registry::ValidatorRegistry; diff --git a/mev-rs/src/network.rs b/mev-rs/src/network.rs index e8dce304..bc5082da 100644 --- a/mev-rs/src/network.rs +++ b/mev-rs/src/network.rs @@ -2,6 +2,7 @@ use ethereum_consensus::state_transition::{Context, Error}; #[derive(Default, Debug, Clone)] #[cfg_attr(feature = "serde", derive(serde::Deserialize))] +#[cfg_attr(feature = "serde", serde(rename_all = "lowercase"))] pub enum Network { #[default] Mainnet, diff --git a/mev-rs/src/relay.rs b/mev-rs/src/relay.rs new file mode 100644 index 00000000..0b8032c8 --- /dev/null +++ b/mev-rs/src/relay.rs @@ -0,0 +1,113 @@ +use crate::{ + blinded_block_provider::Client as BlockProvider, + blinded_block_relayer::{BlindedBlockRelayer, Client as Relayer}, + error::Error, + types::{ProposerSchedule, SignedBidSubmission}, +}; +use async_trait::async_trait; +use beacon_api_client::Client as BeaconClient; +use ethereum_consensus::{ + crypto::Error as CryptoError, primitives::BlsPublicKey, serde::try_bytes_from_hex_str, +}; +use std::{fmt, ops::Deref}; +use url::Url; + +#[derive(Clone, Debug)] +pub struct RelayEndpoint { + url: Url, + public_key: BlsPublicKey, +} + +impl TryFrom for RelayEndpoint { + type Error = CryptoError; + + fn try_from(url: Url) -> Result { + let public_key = try_bytes_from_hex_str(url.username())?; + let public_key = BlsPublicKey::try_from(&public_key[..])?; + + Ok(Self { url, public_key }) + } +} + +#[derive(Clone)] +pub struct Relay { + provider: BlockProvider, + relayer: Relayer, + pub public_key: BlsPublicKey, + pub endpoint: Url, +} + +impl fmt::Debug for Relay { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("Relay").field("endpoint", &self.endpoint.to_string()).finish() + } +} + +impl Deref for Relay { + type Target = BlockProvider; + + fn deref(&self) -> &Self::Target { + &self.provider + } +} + +impl From for Relay { + fn from(value: RelayEndpoint) -> Self { + let RelayEndpoint { url, public_key } = value; + let endpoint = url.clone(); + let api_client = BeaconClient::new(url); + let provider = BlockProvider::new(api_client.clone()); + let relayer = Relayer::new(api_client.clone()); + Self { provider, relayer, public_key, endpoint } + } +} + +#[async_trait] +impl BlindedBlockRelayer for Relay { + async fn get_proposal_schedule(&self) -> Result, Error> { + self.relayer.get_proposal_schedule().await + } + + async fn submit_bid(&self, signed_submission: &SignedBidSubmission) -> Result<(), Error> { + self.relayer.submit_bid(signed_submission).await + } +} + +#[cfg(test)] +mod tests { + use super::*; + use ethereum_consensus::{crypto::SecretKey, serde::try_bytes_from_hex_str}; + + const URL: &str = "https://relay.com"; + const RELAY_URL: &str = "https://0x845bd072b7cd566f02faeb0a4033ce9399e42839ced64e8b2adcfc859ed1e8e1a5a293336a49feac6d9a5edb779be53a@boost-relay-sepolia.flashbots.net"; + + #[test] + fn parse_relay_endpoint() { + let mut rng = rand::thread_rng(); + let sk = SecretKey::random(&mut rng).unwrap(); + let public_key = sk.public_key(); + + let mut url = Url::parse(URL).unwrap(); + url.set_username(&public_key.to_string()).unwrap(); + + let endpoint = RelayEndpoint::try_from(url.clone()).unwrap(); + assert_eq!(endpoint.url, url); + assert_eq!(endpoint.public_key, public_key); + } + + #[test] + fn parse_live_relay() { + let url = Url::parse(RELAY_URL).unwrap(); + let endpoint = RelayEndpoint::try_from(url.clone()).unwrap(); + assert_eq!(endpoint.url, url); + let bytes = try_bytes_from_hex_str("0x845bd072b7cd566f02faeb0a4033ce9399e42839ced64e8b2adcfc859ed1e8e1a5a293336a49feac6d9a5edb779be53a").unwrap(); + assert_eq!(endpoint.public_key, BlsPublicKey::try_from(bytes.as_ref()).unwrap()); + } + + #[test] + #[should_panic] + fn parse_relay_endpoint_missing_public_key() { + let url = Url::parse(URL).unwrap(); + RelayEndpoint::try_from(url).unwrap(); + } +} diff --git a/mev-rs/src/types/mod.rs b/mev-rs/src/types/mod.rs index b7d007d9..d8cb9b2f 100644 --- a/mev-rs/src/types/mod.rs +++ b/mev-rs/src/types/mod.rs @@ -380,5 +380,7 @@ pub struct BidTrace { #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct SignedBidSubmission { pub message: BidTrace, + // TODO: support multiple forks + pub execution_payload: capella::ExecutionPayload, pub signature: BlsSignature, }