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 b9004d50..1e680f95 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.21.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.5" @@ -26,6 +115,53 @@ 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 = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[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.5.0" @@ -61,7 +197,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]] @@ -71,23 +207,170 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd" 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.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[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.33", + "syn 1.0.109", ] [[package]] -name = "anyhow" -version = "1.0.75" +name = "arbitrary" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +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.33", + "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.33", + "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.33", + "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.33", + "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" @@ -95,6 +378,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" @@ -125,6 +414,22 @@ dependencies = [ "futures-core", ] +[[package]] +name = "async-compression" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d495b6dc0184693324491a5ac05f559acc97bf937ab31d7a1c33dd0016be6d2b" +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" @@ -207,7 +512,7 @@ dependencies = [ "futures-lite", "rustix 0.37.23", "signal-hook", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -254,8 +559,8 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 2.0.31", ] @@ -271,17 +576,70 @@ version = "0.1.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 2.0.31", ] +[[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]] name = "atomic-waker" 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.33", + "syn 1.0.109", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -337,6 +695,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 1.9.0", + "futures-core", + "pin-project", + "tokio", +] + [[package]] name = "backtrace" version = "0.3.69" @@ -358,6 +728,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" @@ -382,8 +758,8 @@ 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", ] @@ -395,7 +771,7 @@ dependencies = [ "clap", "ethereum-consensus", "http", - "itertools", + "itertools 0.10.5", "reqwest", "serde", "serde_json", @@ -407,7 +783,86 @@ dependencies = [ ] [[package]] -name = "bit-set" +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +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.33", + "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.33", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.31", +] + +[[package]] +name = "bindgen" +version = "0.66.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" +dependencies = [ + "bitflags 2.4.0", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "prettyplease", + "proc-macro2 1.0.66", + "quote 1.0.33", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.31", + "which", +] + +[[package]] +name = "bit-set" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" @@ -441,6 +896,7 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", + "serde", "tap", "wyz", ] @@ -463,6 +919,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" @@ -490,18 +955,190 @@ dependencies = [ "zeroize", ] +[[package]] +name = "boa_ast" +version = "0.17.0" +source = "git+https://github.com/boa-dev/boa#4140e4b4af75b8f0136f3d02b36eec84a23dd15d" +dependencies = [ + "bitflags 2.4.0", + "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#4140e4b4af75b8f0136f3d02b36eec84a23dd15d" +dependencies = [ + "bitflags 2.4.0", + "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#4140e4b4af75b8f0136f3d02b36eec84a23dd15d" +dependencies = [ + "boa_macros", + "boa_profiler", + "hashbrown 0.14.0", + "thin-vec", +] + +[[package]] +name = "boa_icu_provider" +version = "0.17.0" +source = "git+https://github.com/boa-dev/boa#4140e4b4af75b8f0136f3d02b36eec84a23dd15d" +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#4140e4b4af75b8f0136f3d02b36eec84a23dd15d" +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#4140e4b4af75b8f0136f3d02b36eec84a23dd15d" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 2.0.31", + "synstructure 0.13.0", +] + +[[package]] +name = "boa_parser" +version = "0.17.0" +source = "git+https://github.com/boa-dev/boa#4140e4b4af75b8f0136f3d02b36eec84a23dd15d" +dependencies = [ + "bitflags 2.4.0", + "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#4140e4b4af75b8f0136f3d02b36eec84a23dd15d" + +[[package]] +name = "boyer-moore-magiclen" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c77eb6b3a37f71fcd40e49b56c028ea8795c0e550afd8021e3e6a2369653035" +dependencies = [ + "debug-helper", +] + +[[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" +[[package]] +name = "bs58" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" +dependencies = [ + "sha2 0.10.7", + "tinyvec", +] + [[package]] name = "bumpalo" 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" @@ -513,6 +1150,82 @@ name = "bytes" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "c-kzg" +version = "0.1.0" +source = "git+https://github.com/ethereum/c-kzg-4844#f5f6f863d475847876a2bd5ee252058d37c3a15d" +dependencies = [ + "bindgen 0.66.1", + "blst", + "cc", + "glob", + "hex", + "libc", + "serde", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.18", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] name = "castaway" @@ -526,15 +1239,68 @@ version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ + "jobserver", "libc", ] +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.48.5", +] + +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "4.4.2" @@ -554,7 +1320,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.10.0", ] [[package]] @@ -564,8 +1330,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" dependencies = [ "heck", - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 2.0.31", ] @@ -576,43 +1342,177 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" [[package]] -name = "colorchoice" -version = "1.0.0" +name = "cobs" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" [[package]] -name = "concurrent-queue" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +name = "codecs-derive" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "crossbeam-utils", + "convert_case 0.6.0", + "parity-scale-codec", + "proc-macro2 1.0.66", + "quote 1.0.33", + "serde", + "syn 2.0.31", ] [[package]] -name = "const-oid" -version = "0.9.5" +name = "coins-bip32" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" +dependencies = [ + "bs58 0.5.0", + "coins-core", + "digest 0.10.7", + "hmac", + "k256 0.13.1", + "serde", + "sha2 0.10.7", + "thiserror", +] [[package]] -name = "core-foundation" -version = "0.9.3" +name = "coins-bip39" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ - "core-foundation-sys", - "libc", + "bitvec", + "coins-bip32", + "hmac", + "once_cell", + "pbkdf2 0.12.2", + "rand 0.8.5", + "sha2 0.10.7", + "thiserror", ] [[package]] -name = "core-foundation-sys" -version = "0.8.4" +name = "coins-core" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] +checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" +dependencies = [ + "base64 0.21.3", + "bech32", + "bs58 0.5.0", + "digest 0.10.7", + "generic-array", + "hex", + "ripemd", + "serde", + "serde_derive", + "sha2 0.10.7", + "sha3", + "thiserror", +] + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "comfy-table" +version = "7.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ab77dbd8adecaf3f0db40581631b995f312a8a5ae3aa9993188bb8f23d83a5b" +dependencies = [ + "crossterm 0.26.1", + "strum 0.24.1", + "strum_macros 0.24.3", + "unicode-width", +] + +[[package]] +name = "concurrent-queue" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "confy" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e37668cb35145dcfaa1931a5f37fde375eeae8068b4c0d2f289da28a270b2d2c" +dependencies = [ + "directories", + "serde", + "thiserror", + "toml 0.5.11", +] + +[[package]] +name = "const-hex" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08849ed393c907c90016652a01465a12d86361cd38ad2a7de026c56a520cc259" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" + +[[package]] +name = "const-str" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aca749d3d3f5b87a0d6100509879f9cf486ab510803a4a4e1001da1ff61c2bd6" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +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 = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] name = "core2" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -630,6 +1530,70 @@ dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +dependencies = [ + "crc-catalog", +] + +[[package]] +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 = [ + "cfg-if", +] + +[[package]] +name = "critical-section" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + [[package]] name = "crossbeam-utils" version = "0.8.16" @@ -639,6 +1603,47 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio", + "parking_lot 0.12.1", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio", + "parking_lot 0.12.1", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + [[package]] name = "crunchy" version = "0.2.2" @@ -652,7 +1657,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" +dependencies = [ + "generic-array", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -667,6 +1684,24 @@ dependencies = [ "typenum", ] +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher 0.3.0", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", +] + [[package]] name = "curl" version = "0.4.44" @@ -699,1622 +1734,5504 @@ dependencies = [ ] [[package]] -name = "data-encoding" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" - -[[package]] -name = "der" -version = "0.6.1" +name = "curve25519-dalek" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +checksum = "622178105f911d937a42cdb140730ba4a3ed2becd8ae6ce39c7d28b5d75d4588" dependencies = [ - "const-oid", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "platforms", + "rustc_version 0.4.0", + "subtle", "zeroize", ] [[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "digest" -version = "0.9.0" +name = "curve25519-dalek-derive" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" dependencies = [ - "generic-array", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 2.0.31", ] [[package]] -name = "digest" -version = "0.10.7" +name = "darling" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" dependencies = [ - "block-buffer 0.10.4", - "crypto-common", - "subtle", + "darling_core 0.10.2", + "darling_macro 0.10.2", ] [[package]] -name = "dirs-next" -version = "2.0.0" +name = "darling" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ - "cfg-if", - "dirs-sys-next", + "darling_core 0.20.3", + "darling_macro 0.20.3", ] [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "darling_core" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" dependencies = [ - "libc", - "redox_users", - "winapi", + "fnv", + "ident_case", + "proc-macro2 1.0.66", + "quote 1.0.33", + "strsim 0.9.3", + "syn 1.0.109", ] [[package]] -name = "ecdsa" -version = "0.14.8" +name = "darling_core" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ - "der", - "elliptic-curve", - "rfc6979", - "signature", + "fnv", + "ident_case", + "proc-macro2 1.0.66", + "quote 1.0.33", + "strsim 0.10.0", + "syn 2.0.31", ] [[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elliptic-curve" -version = "0.12.3" +name = "darling_macro" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" dependencies = [ - "base16ct", - "crypto-bigint", - "der", - "digest 0.10.7", - "ff", - "generic-array", - "group", - "pkcs8", - "rand_core", - "sec1", - "subtle", - "zeroize", + "darling_core 0.10.2", + "quote 1.0.33", + "syn 1.0.109", ] [[package]] -name = "ena" -version = "0.14.2" +name = "darling_macro" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ - "log", + "darling_core 0.20.3", + "quote 1.0.33", + "syn 2.0.31", ] [[package]] -name = "encoding_rs" -version = "0.8.33" +name = "dashmap" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", + "hashbrown 0.14.0", + "lock_api", + "once_cell", + "parking_lot_core 0.9.8", ] [[package]] -name = "enr" -version = "0.6.2" +name = "data-encoding" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fa0a0be8915790626d5759eb51fe47435a8eac92c2f212bd2da9aa7f30ea56" -dependencies = [ - "base64 0.13.1", - "bs58", - "bytes", - "hex", - "k256", - "log", - "rand", - "rlp", - "serde", - "sha3", - "zeroize", -] +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] -name = "equivalent" -version = "1.0.1" +name = "debug-helper" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e" [[package]] -name = "errno" -version = "0.3.3" +name = "delay_map" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" +checksum = "e4355c25cbf99edcb6b4a0e906f6bdc6956eda149e84455bea49696429b2f8e8" dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys", + "futures", + "tokio-util", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "der" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ - "cc", - "libc", + "const-oid", + "zeroize", ] [[package]] -name = "ethereum-consensus" -version = "0.1.1" -source = "git+https://github.com/ralexstokes/ethereum-consensus?rev=8d6177ff1324e8c3ce1736b1549e88207146dc35#8d6177ff1324e8c3ce1736b1549e88207146dc35" +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" 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", ] [[package]] -name = "event-listener" -version = "2.5.3" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 1.0.109", +] [[package]] -name = "fastrand" -version = "1.9.0" +name = "derive_arbitrary" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +checksum = "53e0efad4403bfc52dc201159c4b842a246a14b98c64b55dfd0f2d89729dfeb8" dependencies = [ - "instant", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 2.0.31", ] [[package]] -name = "fastrand" -version = "2.0.0" +name = "derive_builder" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0" +dependencies = [ + "darling 0.10.2", + "derive_builder_core", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 1.0.109", +] [[package]] -name = "ff" -version = "0.12.1" +name = "derive_builder_core" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef" dependencies = [ - "rand_core", - "subtle", + "darling 0.10.2", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 1.0.109", ] [[package]] -name = "fixedbitset" -version = "0.4.2" +name = "derive_more" +version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2 1.0.66", + "quote 1.0.33", + "rustc_version 0.4.0", + "syn 1.0.109", +] [[package]] -name = "fnv" -version = "1.0.7" +name = "diff" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" [[package]] -name = "foreign-types" -version = "0.3.2" +name = "digest" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "foreign-types-shared", + "generic-array", ] [[package]] -name = "foreign-types-shared" -version = "0.1.1" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] [[package]] -name = "form_urlencoded" -version = "1.2.0" +name = "directories" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" dependencies = [ - "percent-encoding", + "dirs-sys 0.3.7", ] [[package]] -name = "funty" -version = "2.0.0" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", +] [[package]] -name = "futures" -version = "0.3.28" +name = "dirs-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", + "cfg-if", + "dirs-sys-next", ] [[package]] -name = "futures-channel" -version = "0.3.28" +name = "dirs-sys" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" dependencies = [ - "futures-core", - "futures-sink", + "libc", + "redox_users", + "winapi", ] [[package]] -name = "futures-core" -version = "0.3.28" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] [[package]] -name = "futures-executor" -version = "0.3.28" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ - "futures-core", - "futures-task", - "futures-util", + "libc", + "redox_users", + "winapi", ] [[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +name = "discv5" +version = "0.3.1" +source = "git+https://github.com/sigp/discv5#d2e30e04ee62418b9e57278cee907c02b99d5bd1" +dependencies = [ + "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 = "futures-lite" -version = "1.13.0" +name = "displaydoc" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 2.0.31", ] [[package]] -name = "futures-macro" -version = "0.3.28" +name = "dns-lookup" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53ecafc952c4528d9b51a458d1a8904b81783feff9fde08ab6ed2545ff396872" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", + "cfg-if", + "libc", + "socket2 0.4.9", + "winapi", ] [[package]] -name = "futures-sink" -version = "0.3.28" +name = "dunce" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" [[package]] -name = "futures-task" -version = "0.3.28" +name = "dyn-clone" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "bbfc4744c1b8f2a09adc0e55242f60b1af195d88596bd8700be74418c056c555" [[package]] -name = "futures-util" -version = "0.3.28" +name = "ecdsa" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", + "der 0.6.1", + "elliptic-curve 0.12.3", + "rfc6979 0.3.1", + "signature 1.6.4", ] [[package]] -name = "generic-array" -version = "0.14.7" +name = "ecdsa" +version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" dependencies = [ - "typenum", - "version_check", + "der 0.7.8", + "digest 0.10.7", + "elliptic-curve 0.13.5", + "rfc6979 0.4.0", + "signature 2.1.0", + "spki 0.7.2", ] [[package]] -name = "getrandom" -version = "0.2.10" +name = "ed25519" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "60f6d271ca33075c88028be6f04d502853d63a5ece419d269c15315d4fc1cf1d" dependencies = [ - "cfg-if", - "libc", - "wasi", + "pkcs8 0.10.2", + "signature 2.1.0", ] [[package]] -name = "gimli" -version = "0.28.0" +name = "ed25519-dalek" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.7", + "zeroize", +] [[package]] -name = "glob" -version = "0.3.1" +name = "educe" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "079044df30bb07de7d846d41a184c4b00e66ebdac93ee459253474f3a47e50ae" +dependencies = [ + "enum-ordinalize", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 1.0.109", +] [[package]] -name = "gloo-timers" -version = "0.2.6" +name = "either" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elliptic-curve" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", + "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 = "group" -version = "0.12.1" +name = "elliptic-curve" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" dependencies = [ - "ff", - "rand_core", + "base16ct 0.2.0", + "crypto-bigint 0.5.3", + "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 = "h2" -version = "0.3.21" +name = "ena" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 1.9.3", - "slab", - "tokio", - "tokio-util", - "tracing", + "log", ] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "encoding_rs" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] [[package]] -name = "hashbrown" -version = "0.14.0" +name = "endian-type" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] -name = "heck" -version = "0.4.1" +name = "enr" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "26fa0a0be8915790626d5759eb51fe47435a8eac92c2f212bd2da9aa7f30ea56" +dependencies = [ + "base64 0.13.1", + "bs58 0.4.0", + "bytes", + "hex", + "k256 0.11.6", + "log", + "rand 0.8.5", + "rlp", + "serde", + "sha3", + "zeroize", +] [[package]] -name = "hermit-abi" -version = "0.3.2" +name = "enr" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "0be7b2ac146c1f99fe245c02d16af0696450d8e06c135db75e10eeb9e642c20d" +dependencies = [ + "base64 0.21.3", + "bytes", + "ed25519-dalek", + "hex", + "k256 0.13.1", + "log", + "rand 0.8.5", + "rlp", + "secp256k1", + "serde", + "serde-hex", + "sha3", + "zeroize", +] [[package]] -name = "hex" -version = "0.4.3" +name = "enum-as-inner" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4" +dependencies = [ + "heck", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 1.0.109", +] [[package]] -name = "hmac" -version = "0.12.1" +name = "enum-as-inner" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ - "digest 0.10.7", + "heck", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 1.0.109", ] [[package]] -name = "http" -version = "0.2.9" +name = "enum-ordinalize" +version = "3.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "e4f76552f53cefc9a7f64987c3701b99d982f7690606fd67de1d09712fbf52f1" dependencies = [ - "bytes", - "fnv", - "itoa", + "num-bigint", + "num-traits", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 2.0.31", ] [[package]] -name = "http-body" -version = "0.4.5" +name = "enumn" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b" dependencies = [ - "bytes", - "http", - "pin-project-lite", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 2.0.31", ] [[package]] -name = "httparse" -version = "1.8.0" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "httpdate" -version = "1.0.3" +name = "errno" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] [[package]] -name = "httpmock" -version = "0.6.8" +name = "errno" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b02e044d3b4c2f94936fb05f9649efa658ca788f44eb6b87554e2033fc8ce93" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" dependencies = [ - "assert-json-diff", - "async-object-pool", - "async-trait", - "base64 0.21.3", - "basic-cookies", - "crossbeam-utils", - "form_urlencoded", - "futures-util", - "hyper", - "isahc", - "lazy_static", - "levenshtein", - "log", - "regex", - "serde", - "serde_json", - "serde_regex", - "similar", - "tokio", - "url", + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", ] [[package]] -name = "hyper" -version = "0.14.27" +name = "errno-dragonfly" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" 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", + "cc", + "libc", ] [[package]] -name = "hyper-tls" +name = "eth-keystore" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", + "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 = "idna" -version = "0.4.0" +name = "ethabi" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3", + "thiserror", + "uint", ] [[package]] -name = "indexmap" -version = "1.9.3" +name = "ethbloom" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" dependencies = [ - "autocfg", - "hashbrown 0.12.3", + "crunchy", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", ] [[package]] -name = "indexmap" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +name = "ethereum-consensus" +version = "0.1.1" +source = "git+https://github.com/ralexstokes/ethereum-consensus?rev=8d6177ff1324e8c3ce1736b1549e88207146dc35#8d6177ff1324e8c3ce1736b1549e88207146dc35" dependencies = [ - "equivalent", - "hashbrown 0.14.0", + "async-stream", + "blst", + "bs58 0.4.0", + "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 = "instant" -version = "0.1.12" +name = "ethereum-types" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ - "cfg-if", + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "scale-info", + "uint", ] [[package]] -name = "integer-sqrt" -version = "0.1.5" +name = "ethers" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +checksum = "1ad13497f6e0a24292fc7b408e30d22fe9dc262da1f40d7b542c3a44e7fc0476" dependencies = [ - "num-traits", + "ethers-addressbook", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-middleware", + "ethers-providers", + "ethers-signers", + "ethers-solc", ] [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "ethers-addressbook" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "c6e9e8acd0ed348403cc73a670c24daba3226c40b98dc1a41903766b3ab6240a" dependencies = [ - "hermit-abi", - "libc", - "windows-sys", + "ethers-core", + "once_cell", + "serde", + "serde_json", ] [[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" +name = "ethers-contract" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +checksum = "d79269278125006bb0552349c03593ffa9702112ca88bc7046cc669f148fb47c" dependencies = [ - "hermit-abi", - "rustix 0.38.11", - "windows-sys", + "const-hex", + "ethers-contract-abigen", + "ethers-contract-derive", + "ethers-core", + "ethers-providers", + "futures-util", + "once_cell", + "pin-project", + "serde", + "serde_json", + "thiserror", ] [[package]] -name = "isahc" -version = "1.7.2" +name = "ethers-contract-abigen" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +checksum = "ce95a43c939b2e4e2f3191c5ad4a1f279780b8a39139c9905b43a7433531e2ab" 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", + "Inflector", + "const-hex", + "dunce", + "ethers-core", + "ethers-etherscan", + "eyre", + "prettyplease", + "proc-macro2 1.0.66", + "quote 1.0.33", + "regex", + "reqwest", + "serde", + "serde_json", + "syn 2.0.31", + "toml 0.7.7", + "walkdir", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "ethers-contract-derive" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "8e9ce44906fc871b3ee8c69a695ca7ec7f70e50cb379c9b9cb5e532269e492f6" dependencies = [ - "either", + "Inflector", + "const-hex", + "ethers-contract-abigen", + "ethers-core", + "proc-macro2 1.0.66", + "quote 1.0.33", + "serde_json", + "syn 2.0.31", ] [[package]] -name = "itoa" -version = "1.0.9" +name = "ethers-core" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "c0a17f0708692024db9956b31d7a20163607d2745953f5ae8125ab368ba280ad" +dependencies = [ + "arrayvec", + "bytes", + "cargo_metadata", + "chrono", + "const-hex", + "elliptic-curve 0.13.5", + "ethabi", + "generic-array", + "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.31", + "tempfile", + "thiserror", + "tiny-keccak", + "unicode-xid 0.2.4", +] [[package]] -name = "js-sys" -version = "0.3.64" +name = "ethers-etherscan" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "0e53451ea4a8128fbce33966da71132cf9e1040dcfd2a2084fd7733ada7b2045" dependencies = [ - "wasm-bindgen", + "ethers-core", + "reqwest", + "semver 1.0.18", + "serde", + "serde_json", + "thiserror", + "tracing", ] [[package]] -name = "k256" -version = "0.11.6" +name = "ethers-middleware" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" +checksum = "473f1ccd0c793871bbc248729fa8df7e6d2981d6226e4343e3bbaa9281074d5d" dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "sha2 0.10.7", + "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 = "keccak" -version = "0.1.4" +name = "ethers-providers" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +checksum = "6838fa110e57d572336178b7c79e94ff88ef976306852d8cb87d9e5b1fc7c0b5" dependencies = [ - "cpufeatures", + "async-trait", + "auto_impl", + "base64 0.21.3", + "bytes", + "const-hex", + "enr 0.9.0", + "ethers-core", + "futures-core", + "futures-timer", + "futures-util", + "hashers", + "http", + "instant", + "jsonwebtoken", + "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 = "kv-log-macro" -version = "1.0.7" +name = "ethers-signers" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +checksum = "5ea44bec930f12292866166f9ddbea6aa76304850e4d8dcd66dc492b43d00ff1" dependencies = [ - "log", + "async-trait", + "coins-bip32", + "coins-bip39", + "const-hex", + "elliptic-curve 0.13.5", + "eth-keystore", + "ethers-core", + "rand 0.8.5", + "sha2 0.10.7", + "thiserror", + "tracing", ] [[package]] -name = "lalrpop" -version = "0.19.12" +name = "ethers-solc" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1cbf952127589f2851ab2046af368fd20645491bb4b376f04b7f94d7a9837b" +checksum = "de34e484e7ae3cab99fbfd013d6c5dc7f9013676a4e0e414d8b12e1213e8b3ba" dependencies = [ - "ascii-canvas", - "bit-set", - "diff", - "ena", - "is-terminal", - "itertools", - "lalrpop-util", - "petgraph", + "cfg-if", + "const-hex", + "dirs", + "dunce", + "ethers-core", + "glob", + "home", + "md-5", + "num_cpus", + "once_cell", + "path-slash", + "rayon", "regex", - "regex-syntax 0.6.29", - "string_cache", - "term", + "semver 1.0.18", + "serde", + "serde_json", + "solang-parser", + "svm-rs", + "thiserror", "tiny-keccak", - "unicode-xid", + "tokio", + "tracing", + "walkdir", + "yansi", ] [[package]] -name = "lalrpop-util" -version = "0.19.12" +name = "event-listener" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3c48237b9604c5a4702de6b824e02006c3214327564636aef27c1028a8fa0ed" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "eyre" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" dependencies = [ - "regex", + "indenter", + "once_cell", ] [[package]] -name = "lazy_static" -version = "1.4.0" +name = "fast-float" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" [[package]] -name = "levenshtein" -version = "1.0.5" +name = "fastrand" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] [[package]] -name = "libc" -version = "0.2.147" +name = "fastrand" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" [[package]] -name = "libnghttp2-sys" -version = "0.1.8+1.55.1" +name = "fastrlp" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fae956c192dadcdb5dace96db71fa0b827333cce7c7b38dc71446f024d8a340" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" dependencies = [ - "cc", - "libc", + "arrayvec", + "auto_impl", + "bytes", ] [[package]] -name = "libz-sys" -version = "1.1.12" +name = "fdlimit" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" dependencies = [ - "cc", "libc", - "pkg-config", - "vcpkg", ] [[package]] -name = "linked-hash-map" -version = "0.5.6" +name = "ff" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] [[package]] -name = "linux-raw-sys" -version = "0.3.8" +name = "ff" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] [[package]] -name = "linux-raw-sys" -version = "0.4.5" +name = "fiat-crypto" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d" [[package]] -name = "lock_api" -version = "0.4.10" +name = "fixed-hash" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ - "autocfg", - "scopeguard", + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", ] [[package]] -name = "log" -version = "0.4.20" +name = "fixedbitset" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" -dependencies = [ - "value-bag", -] +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] -name = "matchers" -version = "0.1.0" +name = "flate2" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" dependencies = [ - "regex-automata 0.1.10", + "crc32fast", + "miniz_oxide", ] [[package]] -name = "matchit" -version = "0.7.2" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed1202b2a6f884ae56f04cff409ab315c5ce26b5e58d7412e484f01fd52f52ef" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "memchr" -version = "2.6.3" +name = "foreign-types" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] [[package]] -name = "mev" +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 1.9.0", + "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.33", + "syn 2.0.31", +] + +[[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", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[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.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[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.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +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" +dependencies = [ + "ahash 0.8.3", + "allocator-api2", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[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.3", + "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 0.48.0", +] + +[[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.33", + "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.33", + "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.33", +] + +[[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", +] + +[[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.11", + "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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[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.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8002beb64691edce321fc16cdba91916b10d798f9d480a05467b0ee98463c03b" +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.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "310f9566a32ec8db214805127c4f17e7e8e91015e4a1407fc1d0e84df0086a73" +dependencies = [ + "futures-channel", + "futures-util", + "gloo-net", + "http", + "jsonrpsee-core", + "pin-project", + "rustls-native-certs", + "soketto", + "thiserror", + "tokio", + "tokio-rustls", + "tokio-util", + "tracing", + "url", + "webpki-roots 0.25.2", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4278372ecb78ebb522c36a242209a29162f4af0997a41158c8b60450b081baf1" +dependencies = [ + "anyhow", + "async-lock", + "async-trait", + "beef", + "futures-timer", + "futures-util", + "hyper", + "jsonrpsee-types", + "parking_lot 0.12.1", + "rand 0.8.5", + "rustc-hash", + "serde", + "serde_json", + "soketto", + "thiserror", + "tokio", + "tracing", + "wasm-bindgen-futures", +] + +[[package]] +name = "jsonrpsee-http-client" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2393386c97ce214851a9677568c5a38223ae4eada833617cb16d8464d1128f1b" +dependencies = [ + "async-trait", + "hyper", + "hyper-rustls", + "jsonrpsee-core", + "jsonrpsee-types", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "tracing", + "url", +] + +[[package]] +name = "jsonrpsee-proc-macros" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985d4a3753a08aaf120429924567795b2764c5c691489316a7fd076178e708b4" +dependencies = [ + "heck", + "proc-macro-crate", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 1.0.109", +] + +[[package]] +name = "jsonrpsee-server" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc6357836b1d7b1367fe6d9a9b8d6e5488d1f1db985dfca4cb4ceaa9f37679e" +dependencies = [ + "futures-util", + "http", + "hyper", + "jsonrpsee-core", + "jsonrpsee-types", + "route-recognizer", + "serde", + "serde_json", + "soketto", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tracing", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbea61f2d95b9592491228db0c4d2b1e43ea1154ed9713bb666169cf3919ea7d" +dependencies = [ + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", + "tracing", +] + +[[package]] +name = "jsonrpsee-wasm-client" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "051742038473f3aaada8fc1eb19c76a5354e37e886999d60061f1f303cfc45e8" +dependencies = [ + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", +] + +[[package]] +name = "jsonrpsee-ws-client" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9590173f77867bc96b5127e4a862e2edcb7f603c83616e9302d68aab983bc023" +dependencies = [ + "http", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", + "url", +] + +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.3", + "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.5", + "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.8+1.55.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fae956c192dadcdb5dace96db71fa0b827333cce7c7b38dc71446f024d8a340" +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.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" + +[[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.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +dependencies = [ + "value-bag", +] + +[[package]] +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 = "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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed1202b2a6f884ae56f04cff409ab315c5ce26b5e58d7412e484f01fd52f52ef" + +[[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.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" + +[[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.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fde3af1a009ed76a778cb84fdef9e7dbbdf5775ae3e4cc1f434a6a307f6f76c5" +dependencies = [ + "ahash 0.8.3", + "metrics-macros", + "portable-atomic", +] + +[[package]] +name = "metrics-exporter-prometheus" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a4964177ddfdab1e3a2b37aec7cf320e14169abb0ed73999f558136409178d5" +dependencies = [ + "base64 0.21.3", + "hyper", + "indexmap 1.9.3", + "ipnet", + "metrics", + "metrics-util", + "quanta", + "thiserror", + "tokio", + "tracing", +] + +[[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.33", + "syn 2.0.31", +] + +[[package]] +name = "metrics-process" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c93f6ad342d3f7bc14724147e2dbc6eb6fdbe5a832ace16ea23b73618e8cc17" +dependencies = [ + "libproc", + "mach2", + "metrics", + "once_cell", + "procfs", + "rlimit", + "windows 0.51.1", +] + +[[package]] +name = "metrics-util" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "111cb375987443c3de8d503580b536f77dc8416d32db62d9456db5d93bd7ac47" +dependencies = [ + "aho-corasick 0.7.20", + "crossbeam-epoch", + "crossbeam-utils", + "hashbrown 0.13.2", + "indexmap 1.9.3", + "metrics", + "num_cpus", + "ordered-float", + "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", + "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.33", + "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 0.4.0", + "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.33", + "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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +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.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0ceb" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 2.0.31", +] + +[[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.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +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.33", + "syn 1.0.109", +] + +[[package]] +name = "openssl" +version = "0.10.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" +dependencies = [ + "bitflags 2.4.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 2.0.31", +] + +[[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 = "300.1.3+3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd2c101a165fff9935e34def4669595ab1c7847943c42be86e21503e482be107" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" +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 = "3.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a54938017eacd63036332b4ae5c8a49fc8c0c1d6d629893057e4f13609edd06" +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.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d640b40e81625f53b59f9c5812d3fb9e7ce11971d3fb34268eb7a83adf98051" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ac464815d51fff2f64d690bf6ea4442d365e53495d50737685cfecfa3dd3f62" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.66", + "quote 1.0.33", + "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.5", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.0.0", +] + +[[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.33", + "syn 2.0.31", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 2.0.31", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[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.8", + "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.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8" + +[[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 = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b" + +[[package]] +name = "postcard" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d534c6e61df1c7166e636ca612d9820d486fe96ddad37f7abc671517b297488e" +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.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +dependencies = [ + "proc-macro2 1.0.66", + "syn 2.0.31", +] + +[[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.33", + "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.33", + "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.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab" +dependencies = [ + "crossbeam-utils", + "libc", + "mach2", + "once_cell", + "raw-cpuid", + "wasi 0.11.0+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.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2 1.0.66", +] + +[[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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" +dependencies = [ + "aho-corasick 1.0.5", + "memchr", + "regex-automata 0.3.8", + "regex-syntax 0.7.5", +] + +[[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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" +dependencies = [ + "aho-corasick 1.0.5", + "memchr", + "regex-syntax 0.7.5", +] + +[[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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "regress" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ed9969cad8051328011596bf549629f1b800cf1731e7964b1eef8dfc480d2c2" +dependencies = [ + "hashbrown 0.13.2", + "memchr", +] + +[[package]] +name = "reqwest" +version = "0.11.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +dependencies = [ + "base64 0.21.3", + "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.25.2", + "winreg", +] + +[[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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "aquamarine", + "backon", + "boyer-moore-magiclen", + "clap", + "comfy-table", + "confy", + "const-str", + "crossterm 0.25.0", + "dirs-next", + "eyre", + "fdlimit", + "futures", + "hex", + "human_bytes", + "humantime", + "hyper", + "jemalloc-ctl", + "jemallocator", + "metrics", + "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.7", + "tracing", + "tui", + "vergen", +] + +[[package]] +name = "reth-auto-seal-consensus" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "futures-core", + "futures-util", + "metrics", + "reth-metrics", + "reth-payload-builder", + "reth-primitives", + "reth-provider", + "reth-revm", + "reth-rlp", + "reth-tasks", + "reth-transaction-pool", + "revm", + "tokio", + "tracing", +] + +[[package]] +name = "reth-beacon-consensus" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "futures", + "metrics", + "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 = "reth-blockchain-tree" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "aquamarine", + "linked_hash_set", + "lru 0.10.1", + "metrics", + "parking_lot 0.12.1", + "reth-db", + "reth-interfaces", + "reth-metrics", + "reth-primitives", + "reth-provider", + "reth-stages", + "tracing", +] + +[[package]] +name = "reth-codecs" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" 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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "reth-interfaces", + "reth-primitives", + "reth-provider", +] + +[[package]] +name = "reth-db" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "arbitrary", + "bytes", + "derive_more", + "eyre", + "futures", + "heapless", + "metrics", + "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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "discv5", + "enr 0.9.0", + "generic-array", + "hex", + "parking_lot 0.12.1", + "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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ "async-trait", - "beacon-api-client", - "ethereum-consensus", + "data-encoding", + "enr 0.9.0", + "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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ "futures", - "httpmock", - "mev-build-rs", - "mev-relay-rs", - "mev-rs", - "parking_lot", + "futures-util", + "itertools 0.11.0", + "metrics", "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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" 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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ "async-trait", - "beacon-api-client", - "ethereum-consensus", + "bytes", + "ethers-core", "futures", - "http", - "mev-build-rs", - "mev-rs", - "parking_lot", + "metrics", "pin-project", + "reth-codecs", + "reth-discv4", + "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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" 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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "adler", + "bitflags 2.4.0", + "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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" 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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "arrayref", - "bs58", - "byteorder", - "data-encoding", - "multihash", - "percent-encoding", + "futures", + "metrics", + "reth-metrics-derive", + "tokio", +] + +[[package]] +name = "reth-metrics-derive" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "once_cell", + "proc-macro2 1.0.66", + "quote 1.0.33", + "regex", + "syn 2.0.31", +] + +[[package]] +name = "reth-net-common" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "pin-project", + "reth-primitives", + "tokio", +] + +[[package]] +name = "reth-net-nat" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "igd", + "pin-project-lite", + "public-ip", + "serde_with", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "reth-network" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "aquamarine", + "async-trait", + "auto_impl", + "enr 0.9.0", + "fnv", + "futures", + "humantime-serde", + "linked-hash-map", + "linked_hash_set", + "metrics", + "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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "core2", - "digest 0.10.7", - "multihash-derive", + "async-trait", + "reth-discv4", + "reth-eth-wire", + "reth-primitives", + "reth-rpc-types", + "serde", + "thiserror", + "tokio", +] + +[[package]] +name = "reth-payload-builder" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "futures-util", + "metrics", + "reth-interfaces", + "reth-metrics", + "reth-primitives", + "reth-revm-primitives", + "reth-rlp", + "reth-rpc-types", + "reth-transaction-pool", + "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.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", + "arbitrary", + "bytes", + "c-kzg", + "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", + "rayon", + "reth-codecs", + "reth-rlp", + "reth-rlp-derive", + "revm-primitives", + "ruint", + "secp256k1", + "serde", + "serde_json", + "serde_with", + "sha2 0.10.7", + "strum 0.25.0", + "sucds", + "tempfile", + "thiserror", + "tiny-keccak", + "tokio", + "tokio-stream", + "tracing", + "triehash", + "url", + "zstd 0.12.4", +] + +[[package]] +name = "reth-provider" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "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 = "reth-prune" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "itertools 0.11.0", + "metrics", + "rayon", + "reth-db", + "reth-interfaces", + "reth-metrics", + "reth-primitives", + "reth-provider", + "thiserror", + "tracing", +] + +[[package]] +name = "reth-revm" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "reth-consensus-common", + "reth-interfaces", + "reth-primitives", + "reth-provider", + "reth-revm-inspectors", + "reth-revm-primitives", + "revm", + "tracing", +] + +[[package]] +name = "reth-revm-inspectors" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "boa_engine", + "boa_gc", + "hashbrown 0.13.2", + "reth-primitives", + "reth-rpc-types", + "revm", + "serde", + "serde_json", + "thiserror", + "tokio", ] [[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +name = "reth-revm-primitives" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", + "reth-primitives", + "revm", ] [[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +name = "reth-rlp" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "overload", - "winapi", + "arrayvec", + "auto_impl", + "bytes", + "c-kzg", + "ethereum-types", + "reth-rlp-derive", + "revm-primitives", + "smol_str", ] [[package]] -name = "num-bigint" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +name = "reth-rlp-derive" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 2.0.31", ] [[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +name = "reth-rpc" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "autocfg", - "num-traits", + "async-trait", + "bytes", + "ethers-core", + "futures", + "hex", + "http", + "http-body", + "hyper", + "jsonrpsee", + "jsonwebtoken", + "lazy_static", + "metrics", + "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-rpc-types-compat", + "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 = "num-traits" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +name = "reth-rpc-api" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "autocfg", + "jsonrpsee", + "reth-primitives", + "reth-rpc-types", + "serde_json", ] [[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +name = "reth-rpc-builder" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "hermit-abi", - "libc", + "hyper", + "jsonrpsee", + "metrics", + "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 = "object" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +name = "reth-rpc-engine-api" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "memchr", + "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 = "once_cell" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +name = "reth-rpc-types" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "itertools 0.11.0", + "jsonrpsee-types", + "reth-primitives", + "reth-rlp", + "serde", + "serde_json", + "thiserror", +] [[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +name = "reth-rpc-types-compat" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "reth-primitives", + "reth-rlp", + "reth-rpc-types", +] [[package]] -name = "openssl" -version = "0.10.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" +name = "reth-stages" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "bitflags 2.4.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", + "aquamarine", + "async-trait", + "futures-util", + "itertools 0.11.0", + "metrics", + "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-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +name = "reth-tasks" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", + "dyn-clone", + "futures-util", + "metrics", + "reth-metrics", + "thiserror", + "tokio", + "tracing", + "tracing-futures", ] [[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +name = "reth-tracing" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" +dependencies = [ + "tracing", + "tracing-appender", + "tracing-journald", + "tracing-subscriber", +] [[package]] -name = "openssl-src" -version = "300.1.3+3.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd2c101a165fff9935e34def4669595ab1c7847943c42be86e21503e482be107" +name = "reth-transaction-pool" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "cc", + "aquamarine", + "async-trait", + "auto_impl", + "bitflags 2.4.0", + "fnv", + "futures-util", + "metrics", + "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 = "openssl-sys" -version = "0.9.93" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" +name = "reth-trie" +version = "0.1.0-alpha.8" +source = "git+https://github.com/paradigmxyz/reth?rev=900ada5aaa4b5d4a633df78764e7dd7169a13405#900ada5aaa4b5d4a633df78764e7dd7169a13405" dependencies = [ - "cc", - "libc", - "openssl-src", - "pkg-config", - "vcpkg", + "derive_more", + "hex", + "reth-db", + "reth-interfaces", + "reth-primitives", + "reth-rlp", + "thiserror", + "tokio", + "tracing", ] [[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +name = "revm" +version = "3.3.0" +source = "git+https://github.com/bluealloy/revm/?branch=release/v25#6084e0fa2d457931cd8c9d29934bca0812b5b8d6" +dependencies = [ + "auto_impl", + "revm-interpreter", + "revm-precompile", +] [[package]] -name = "parking" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +name = "revm-interpreter" +version = "1.1.2" +source = "git+https://github.com/bluealloy/revm/?branch=release/v25#6084e0fa2d457931cd8c9d29934bca0812b5b8d6" +dependencies = [ + "derive_more", + "enumn", + "revm-primitives", + "sha3", +] [[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +name = "revm-precompile" +version = "2.0.3" +source = "git+https://github.com/bluealloy/revm/?branch=release/v25#6084e0fa2d457931cd8c9d29934bca0812b5b8d6" dependencies = [ - "lock_api", - "parking_lot_core", + "k256 0.13.1", + "num", + "once_cell", + "revm-primitives", + "ripemd", + "secp256k1", + "sha2 0.10.7", + "sha3", + "substrate-bn", ] [[package]] -name = "parking_lot_core" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +name = "revm-primitives" +version = "1.1.2" +source = "git+https://github.com/bluealloy/revm/?branch=release/v25#6084e0fa2d457931cd8c9d29934bca0812b5b8d6" dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.3.5", - "smallvec", - "windows-targets", + "arbitrary", + "auto_impl", + "bitvec", + "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 = "percent-encoding" -version = "2.3.0" +name = "rfc6979" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +dependencies = [ + "crypto-bigint 0.4.9", + "hmac", + "zeroize", +] [[package]] -name = "petgraph" -version = "0.6.4" +name = "rfc6979" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "fixedbitset", - "indexmap 2.0.0", + "hmac", + "subtle", ] [[package]] -name = "phf_shared" -version = "0.10.0" +name = "ring" +version = "0.16.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" dependencies = [ - "siphasher", + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted", + "web-sys", + "winapi", ] [[package]] -name = "pin-project" -version = "1.1.3" +name = "ripemd" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "pin-project-internal", + "digest 0.10.7", ] [[package]] -name = "pin-project-internal" -version = "1.1.3" +name = "rlimit" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +checksum = "3560f70f30a0f16d11d01ed078a07740fe6b489667abc7c7b029155d9f21c3d8" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.31", + "libc", ] [[package]] -name = "pin-project-lite" -version = "0.2.13" +name = "rlp" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rlp-derive", + "rustc-hex", +] [[package]] -name = "pin-utils" +name = "rlp-derive" 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" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" dependencies = [ - "der", - "spki", + "proc-macro2 1.0.66", + "quote 1.0.33", + "syn 1.0.109", ] [[package]] -name = "pkg-config" -version = "0.3.27" +name = "route-recognizer" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" [[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.66" +name = "rustc_version" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "unicode-ident", + "semver 1.0.18", ] [[package]] -name = "quote" -version = "1.0.33" +name = "rustix" +version = "0.36.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "c37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941" dependencies = [ - "proc-macro2", + "bitflags 1.3.2", + "errno 0.3.3", + "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.3", + "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.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453" dependencies = [ - "ppv-lite86", - "rand_core", + "bitflags 2.4.0", + "errno 0.3.3", + "libc", + "linux-raw-sys 0.4.5", + "windows-sys 0.48.0", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "rustls" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" dependencies = [ - "getrandom", + "log", + "ring", + "rustls-webpki 0.101.4", + "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.3", ] [[package]] -name = "redox_users" -version = "0.4.3" +name = "rustls-webpki" +version = "0.100.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab" dependencies = [ - "getrandom", - "redox_syscall 0.2.16", - "thiserror", + "ring", + "untrusted", ] [[package]] -name = "regex" -version = "1.9.5" +name = "rustls-webpki" +version = "0.101.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" +checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.3.8", - "regex-syntax 0.7.5", + "ring", + "untrusted", ] [[package]] -name = "regex-automata" -version = "0.1.10" +name = "rustversion" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] -name = "regex-automata" -version = "0.3.8" +name = "rusty-fork" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.7.5", + "fnv", + "quick-error", + "tempfile", + "wait-timeout", ] [[package]] -name = "regex-syntax" -version = "0.6.29" +name = "ryu" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] -name = "regex-syntax" -version = "0.7.5" +name = "ryu-js" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" +checksum = "6518fc26bced4d53678a22d6e423e9d8716377def84545fe328236e3af070e7f" [[package]] -name = "reqwest" -version = "0.11.20" +name = "salsa20" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "base64 0.21.3", - "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.33", + "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.11" +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" dependencies = [ - "bitflags 2.4.0", - "errno", - "libc", - "linux-raw-sys 0.4.5", - "windows-sys", + "hmac", + "pbkdf2 0.11.0", + "salsa20", + "sha2 0.10.7", ] [[package]] -name = "rustversion" -version = "1.0.14" +name = "sct" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] [[package]] -name = "ryu" -version = "1.0.15" +name = "sec1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +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.8", + "generic-array", + "pkcs8 0.10.2", + "subtle", + "zeroize", ] -[[package]] -name = "scopeguard" -version = "1.2.0" +[[package]] +name = "secp256k1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +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]] @@ -2340,6 +7257,45 @@ 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.188" @@ -2349,14 +7305,25 @@ 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.188" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 2.0.31", ] @@ -2391,6 +7358,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" @@ -2403,6 +7379,34 @@ 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.33", + "syn 2.0.31", +] + [[package]] name = "serde_yaml" version = "0.8.26" @@ -2415,6 +7419,30 @@ dependencies = [ "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" @@ -2458,6 +7486,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.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + [[package]] name = "signal-hook" version = "0.3.17" @@ -2468,6 +7511,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" @@ -2484,7 +7538,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]] @@ -2493,12 +7557,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.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[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.9" @@ -2519,12 +7601,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" @@ -2542,7 +7648,52 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" dependencies = [ "libc", - "windows-sys", + "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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cb9fa2fa2fa6837be8a2495486ff92e3ffe68a99b6eeba288e139efdd842457" +dependencies = [ + "itertools 0.11.0", + "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]] @@ -2552,9 +7703,25 @@ 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.8", ] +[[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" @@ -2575,11 +7742,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.33", "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" @@ -2594,22 +7767,122 @@ 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.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "subtle" -version = "2.5.0" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +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.2", +] + +[[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.33", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "strum_macros" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" +dependencies = [ + "heck", + "proc-macro2 1.0.66", + "quote 1.0.33", + "rustversion", + "syn 2.0.31", +] + +[[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.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597e3a746727984cb7ea2487b6a40726cad0dbe86628e7d429aa6b8c4c153db4" +dependencies = [ + "dirs", + "fs2", + "hex", + "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" @@ -2617,8 +7890,8 @@ 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.33", "unicode-ident", ] @@ -2628,8 +7901,8 @@ version = "2.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.33", "unicode-ident", ] @@ -2645,10 +7918,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.33", "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.33", + "syn 2.0.31", + "unicode-xid 0.2.4", ] [[package]] @@ -2667,7 +7952,7 @@ dependencies = [ "fastrand 2.0.0", "redox_syscall 0.3.5", "rustix 0.38.11", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2681,6 +7966,12 @@ 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.48" @@ -2696,8 +7987,8 @@ version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 2.0.31", ] @@ -2720,6 +8011,36 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "time" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" +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.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" +dependencies = [ + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -2729,6 +8050,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" @@ -2755,12 +8086,12 @@ dependencies = [ "libc", "mio", "num_cpus", - "parking_lot", + "parking_lot 0.12.1", "pin-project-lite", "signal-hook-registry", "socket2 0.5.3", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2769,8 +8100,8 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 2.0.31", ] @@ -2784,6 +8115,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" @@ -2793,6 +8134,22 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2dbec703c26b00d74844519606ef15d09a7d6857860f84ad223dec002ddea2" +dependencies = [ + "futures-util", + "log", + "rustls", + "tokio", + "tokio-rustls", + "tungstenite", + "webpki-roots 0.23.1", ] [[package]] @@ -2803,8 +8160,10 @@ checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", "pin-project-lite", + "slab", "tokio", "tracing", ] @@ -2818,6 +8177,40 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0a3ab2091e52d7299a39d098e200114a972df0a7724add02a273aa9aada592" +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.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.0.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "tower" version = "0.4.13" @@ -2826,12 +8219,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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" +dependencies = [ + "async-compression", + "base64 0.21.3", + "bitflags 2.4.0", + "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]] @@ -2859,14 +8287,25 @@ 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", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 2.0.31", ] @@ -2886,10 +8325,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" @@ -2912,25 +8364,191 @@ 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.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e862a1c4128df0112ab625f55cd5c934bcb4312ba80b39ae4b4835a3fd58e649" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.8.5", + "rustls", + "sha1", + "thiserror", + "url", + "utf-8", +] + [[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.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.13" @@ -2952,18 +8570,52 @@ 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.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "url" version = "2.4.1" @@ -2971,16 +8623,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" 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" @@ -2999,18 +8688,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.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -3020,6 +8739,12 @@ 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.11.0+wasi-snapshot-preview1" @@ -3045,8 +8770,8 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 2.0.31", "wasm-bindgen-shared", ] @@ -3069,7 +8794,7 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ - "quote", + "quote 1.0.33", "wasm-bindgen-macro-support", ] @@ -3079,8 +8804,8 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 2.0.31", "wasm-bindgen-backend", "wasm-bindgen-shared", @@ -3102,6 +8827,45 @@ dependencies = [ "wasm-bindgen", ] +[[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.2", +] + +[[package]] +name = "webpki-roots" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.11", +] + +[[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" @@ -3118,19 +8882,80 @@ 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.5", +] + +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[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.5", +] + +[[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]] @@ -3139,57 +8964,108 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 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.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "winnow" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" @@ -3197,7 +9073,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if", - "windows-sys", + "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]] @@ -3209,6 +9116,21 @@ dependencies = [ "tap", ] +[[package]] +name = "xml-rs" +version = "0.8.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1eee6bf5926be7cf998d7381a9a23d833fd493f6a8034658a9505a4dc4b20444" + +[[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" @@ -3218,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.33", + "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.33", + "syn 1.0.109", + "synstructure 0.12.6", +] + [[package]] name = "zeroize" version = "1.6.0" @@ -3233,7 +9206,99 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 2.0.31", ] + +[[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.33", + "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 21d7a590..02f62605 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,3 +7,18 @@ default-members = ["bin/mev"] ethereum-consensus = { git = "https://github.com/ralexstokes/ethereum-consensus", rev = "8d6177ff1324e8c3ce1736b1549e88207146dc35" } beacon-api-client = { git = "https://github.com/ralexstokes/beacon-api-client", rev = "9f901fee4e9718070cd8d870e3ac100d9b6b388e" } ssz_rs = "0.9.0" + +reth-payload-builder = { git = "https://github.com/paradigmxyz/reth", rev = "900ada5aaa4b5d4a633df78764e7dd7169a13405" } +reth-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "900ada5aaa4b5d4a633df78764e7dd7169a13405" } +reth-provider = { git = "https://github.com/paradigmxyz/reth", rev = "900ada5aaa4b5d4a633df78764e7dd7169a13405" } +reth-rpc-types = { git = "https://github.com/paradigmxyz/reth", rev = "900ada5aaa4b5d4a633df78764e7dd7169a13405" } +reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth", rev = "900ada5aaa4b5d4a633df78764e7dd7169a13405" } +reth-interfaces = { git = "https://github.com/paradigmxyz/reth", rev = "900ada5aaa4b5d4a633df78764e7dd7169a13405" } +reth-revm = { git = "https://github.com/paradigmxyz/reth", rev = "900ada5aaa4b5d4a633df78764e7dd7169a13405" } + +reth = { git = "https://github.com/paradigmxyz/reth", rev = "900ada5aaa4b5d4a633df78764e7dd7169a13405" } +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..fd3bb433 100644 --- a/bin/mev/Cargo.toml +++ b/bin/mev/Cargo.toml @@ -21,3 +21,10 @@ 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 = { 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..48245865 --- /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_with, 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, config: None }; + launch_reth_with(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..acba046b --- /dev/null +++ b/bin/mev/src/cmd/build/reth_ext.rs @@ -0,0 +1,125 @@ +use crate::cmd::config::Config; +use clap::{Args, Parser}; +use ethereum_consensus::{networks, state_transition::Context}; +use mev_build_rs::reth_builder::{Config as BuildConfig, DeadlineBidder, Service}; +use mev_rs::Network; +use reth::{ + cli::ext::{RethCliExt, RethNodeCommandConfig}, + node::NodeCommand, + runner::CliContext, + tasks::TaskManager, +}; +use reth_payload_builder::PayloadBuilderService; +use std::{sync::Arc, time::Duration}; + +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, + #[clap(skip)] + pub config: Option, +} + +impl RethNodeExt { + pub fn get_build_config(&mut self) -> BuildConfig { + self.config.take().unwrap_or_else(|| { + let config = Config::from_toml_file(&self.config_file).unwrap(); + let config = config.build.unwrap(); + self.config = Some(config.clone()); + config + }) + } +} + +impl RethNodeCommandConfig 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.get_build_config(); + let network = &self.network; + let context = Arc::new(Context::try_from(network)?); + let clock = context.clock().unwrap_or_else(|| { + let genesis_time = networks::typical_genesis_time(&context); + context.clock_at(genesis_time) + }); + let deadline = Duration::from_millis(build_config.bidding_deadline_ms); + let bidder = Arc::new(DeadlineBidder::new(clock.clone(), deadline)); + let (service, builder) = Service::from( + build_config, + context, + clock, + pool.clone(), + provider.clone(), + bidder, + 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, "error awaiting builder service"); + } + }, + Err(err) => { + tracing::error!(err = %err, "could not launch builder"); + } + } + }); + + executor.spawn_critical("boost builder", fut); + executor.spawn_critical("payload builder service", Box::pin(payload_service)); + + Ok(payload_builder) + } +} + +pub(crate) async fn launch_reth_with(mut ext: RethNodeExt) { + let task_manager = TaskManager::new(tokio::runtime::Handle::current()); + let task_executor = task_manager.executor(); + let ctx = CliContext { task_executor }; + + let config = ext.get_build_config(); + + let network_name = format!("{0}", ext.network); + + let mut params = vec!["".into(), "--chain".into(), network_name.to_string(), "--http".into()]; + if let Some(path) = config.jwt_secret_path { + params.push("--authrpc.jwtsecret".into()); + params.push(path); + } + + let mut node = NodeCommand::::parse_from(params); + // 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/bin/mev/src/main.rs b/bin/mev/src/main.rs index 639317ac..4724ea2d 100644 --- a/bin/mev/src/main.rs +++ b/bin/mev/src/main.rs @@ -61,7 +61,10 @@ fn setup_logging() { async fn run_task_until_signal(task: impl Future>) -> Result<()> { tokio::select! { task = task => task, - _ = signal::ctrl_c() => Ok(()), + _ = signal::ctrl_c() => { + tracing::info!("shutting down..."); + Ok(()) + } } } diff --git a/example.config.toml b/example.config.toml index a58ac7ef..b19bc77e 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,22 @@ beacon_node_url = "http://127.0.0.1:5052" secret_key = "0x24b6e79cbc6267c6e527b4bf7a71747d42a58b10279366cf0c7bb4e2aa455901" [builder] -host = "0.0.0.0" -port = 28546 -beacon_api_endpoint = "http://127.0.0.1:5052" +# builder BLS secret key secret_key = "0x14b6e79cbc6267c6e527b4bf7a71747d42a58b10279366cf0c7bb4e2aa455901" - -[builder.engine_api_proxy] -host = "0.0.0.0" -port = 8551 -engine_api_endpoint = "http://127.0.0.1:8552" +# list of relays to connect to +relays = [ + "https://0x845bd072b7cd566f02faeb0a4033ce9399e42839ced64e8b2adcfc859ed1e8e1a5a293336a49feac6d9a5edb779be53a@boost-relay-sepolia.flashbots.net", +] +# extra data to write into built execution payload +extra_data = "hello world" +# wallet seed for builder to author payment transactions +execution_mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" +# number of milliseconds to submit bids ahead of the target slot +bidding_deadline_ms = 1000 +# amount of value to bid as a fraction of the payload's revenue +bid_percent = 0.9 +# amount to add to the bid on top of the payload's revenue, +# currently sourced from the builder's wallet authoring the payment transaction +subsidy_gwei = 100000000 # 0.1 eth +# path for the Engine API credentials shared between consensus and execution clients +jwt_secret_path = "/secrets/jwt.hex" 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 faca8c84..478d61f6 100644 --- a/mev-boost-rs/src/service.rs +++ b/mev-boost-rs/src/service.rs @@ -1,10 +1,11 @@ -use crate::{ - relay::{Relay, RelayEndpoint}, - relay_mux::RelayMux, -}; +use crate::relay_mux::RelayMux; use ethereum_consensus::{networks, state_transition::Context}; use futures::StreamExt; -use mev_rs::{blinded_block_provider::Server as BlindedBlockProviderServer, Error, Network}; +use mev_rs::{ + blinded_block_provider::Server as BlindedBlockProviderServer, + relay::{Relay, RelayEndpoint}, + Error, Network, +}; use serde::Deserialize; use std::{future::Future, net::Ipv4Addr, pin::Pin, task::Poll}; use tokio::task::{JoinError, JoinHandle}; 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 index 0a72cdca..bc0979d9 100644 --- a/mev-build-rs/src/mempool_builder.rs +++ b/mev-build-rs/src/mempool_builder.rs @@ -259,7 +259,8 @@ impl BlindedBlockProvider for Builder { signed_block: &mut SignedBlindedBeaconBlock, ) -> Result { let slot = signed_block.slot(); - let public_key = self.proposer_scheduler.get_proposer_for(slot)?; + let public_key = + self.proposer_scheduler.get_proposer_for(slot).ok_or(Error::MissingProposer(slot))?; signed_block.verify_signature(&public_key, self.genesis_validators_root, &self.context)?; let parent_hash = signed_block.parent_hash(); diff --git a/mev-build-rs/src/reth_builder/bidder.rs b/mev-build-rs/src/reth_builder/bidder.rs new file mode 100644 index 00000000..98275c36 --- /dev/null +++ b/mev-build-rs/src/reth_builder/bidder.rs @@ -0,0 +1,46 @@ +use crate::reth_builder::{build::Build, error::Error}; +use async_trait::async_trait; +use ethereum_consensus::clock::SystemClock; +use std::time::Duration; + +pub enum Bid { + Continue, + Done, +} + +#[async_trait] +pub trait Bidder { + // Determine if a bid should be made given the current state of the `build`. + // In a context where blocking is ok. + async fn bid_for(&self, build: &Build) -> Result, Error>; +} + +/// `DeadlineBidder` submits the best payload *once* at the `deadline` +/// expressed as a `Duration` *before* the start of the build's target slot. +/// +/// For example, if the `deadline` is 1 second, then the bidder will return +/// a value to bid one second before the start of the build's target slot. +pub struct DeadlineBidder { + clock: SystemClock, + deadline: Duration, +} + +impl DeadlineBidder { + pub fn new(clock: SystemClock, deadline: Duration) -> Self { + Self { clock, deadline } + } +} + +#[async_trait] +impl Bidder for DeadlineBidder { + async fn bid_for(&self, build: &Build) -> Result, Error> { + let slot = build.context.slot; + let target = self.clock.duration_until_slot(slot); + let duration = target.checked_sub(self.deadline).unwrap_or_default(); + let id = build.context.id(); + tracing::debug!(%id, slot, ?duration, "waiting to submit bid"); + tokio::time::sleep(duration).await; + + Ok(Some(Bid::Done)) + } +} 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..dad7e8ce --- /dev/null +++ b/mev-build-rs/src/reth_builder/build.rs @@ -0,0 +1,153 @@ +use crate::reth_builder::{ + error::Error, + reth_compat::{to_bytes32, to_execution_payload, to_u256}, + types::RelayIndex, +}; +use ethereum_consensus::{ + crypto::{hash, SecretKey}, + primitives::{BlsPublicKey, ExecutionAddress, Slot}, + ssz::ByteVector, + 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 = ByteVector<4>; + +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 }) +} + +// TODO: drop unnecessary things... +#[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 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"); + let summary = hash(data); + summary.as_ref()[..4].try_into().unwrap() +} + +impl BuildContext { + pub fn id(&self) -> BuildIdentifier { + // TODO: cache this + 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, +} + +#[derive(Default, Debug)] +pub struct State { + pub payload_with_payments: 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.payload_with_payments.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_with_payments = &state.payload_with_payments; + let payload = payload_with_payments + .payload + .as_ref() + .ok_or_else(|| Error::PayloadNotPrepared(build_context.id()))?; + let payment = &payload_with_payments.proposer_payment; + let builder_payment = payload_with_payments.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..4e2a32b8 --- /dev/null +++ b/mev-build-rs/src/reth_builder/builder.rs @@ -0,0 +1,488 @@ +use crate::reth_builder::{ + build::*, cancelled::Cancelled, error::Error, payload_builder::*, types::*, +}; +use ethereum_consensus::{ + clock::SystemClock, + 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}, + time::Duration, +}; +use tokio::sync::mpsc; +use tokio_stream::{wrappers::ReceiverStream, Stream}; + +// The amount to let the build progress into its target slot. +// The build will stop early if stopped by an outside process. +const BUILD_DEADLINE_INTO_SLOT: Duration = Duration::from_millis(500); + +// The frequency with which to try building a +// better payload in the context of one job. +const BUILD_PROGRESSION_INTERVAL: Duration = Duration::from_millis(500); + +const GAS_BOUND_DIVISOR: u64 = 1024; + +fn compute_preferred_gas_limit(preferred_gas_limit: u64, parent_gas_limit: u64) -> u64 { + match preferred_gas_limit.cmp(&parent_gas_limit) { + Ordering::Equal => preferred_gas_limit, + Ordering::Greater => { + let bound = parent_gas_limit + parent_gas_limit / GAS_BOUND_DIVISOR; + preferred_gas_limit.min(bound - 1) + } + Ordering::Less => { + let bound = parent_gas_limit - parent_gas_limit / GAS_BOUND_DIVISOR; + preferred_gas_limit.max(bound + 1) + } + } +} + +#[cfg(test)] +mod tests { + use super::{compute_preferred_gas_limit, GAS_BOUND_DIVISOR}; + use std::cmp::Ordering; + + fn verify_limits(gas_limit: u64, parent_gas_limit: u64) -> bool { + match gas_limit.cmp(&parent_gas_limit) { + Ordering::Equal => true, + Ordering::Greater => { + let bound = parent_gas_limit + parent_gas_limit / GAS_BOUND_DIVISOR; + gas_limit < bound + } + Ordering::Less => { + let bound = parent_gas_limit - parent_gas_limit / GAS_BOUND_DIVISOR; + gas_limit > bound + } + } + } + + #[test] + fn test_compute_preferred_gas_limit() { + for t in &[ + // preferred, parent, computed + (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_295), + (29_970_710, 30_000_000, 29_970_710), + (29_970_700, 30_000_000, 29_970_705), + ] { + assert_eq!(compute_preferred_gas_limit(t.0, t.1), t.2); + assert!(verify_limits(t.2, t.1)) + } + } +} + +/// `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: SystemClock, + + relays: Vec, + + pool: Pool, + client: Client, + chain_spec: Arc, + extra_data: Bytes, + builder_wallet: LocalWallet, + bid_percent: f64, + subsidy_gwei: u64, + + pub(crate) payload_attributes_tx: mpsc::Sender, + builds_tx: mpsc::Sender, + state: Mutex, +} + +#[derive(Default, Debug)] +struct State { + payload_attributes_rx: Option>, + builds_rx: Option>, + // TODO: merge in `ProposerScheduler` here? + proposer_schedule: + BTreeMap>>>, + builds: HashMap>, + // TODO: rework cancellation discipline here... + cancels: HashMap, +} + +impl Builder { + // TODO: clean up argument set + #[allow(clippy::too_many_arguments)] + pub fn new( + secret_key: SecretKey, + context: Arc, + clock: SystemClock, + relays: Vec, + pool: Pool, + client: Client, + chain_spec: Arc, + extra_data: Bytes, + builder_wallet: LocalWallet, + bid_percent: f64, + subsidy_gwei: u64, + ) -> Self { + let public_key = secret_key.public_key(); + + let (attrs_tx, attrs_rx) = mpsc::channel::(16); + let (builds_tx, builds_rx) = mpsc::channel::(16); + + let state = State { + payload_attributes_rx: Some(attrs_rx), + builds_rx: Some(builds_rx), + proposer_schedule: Default::default(), + builds: Default::default(), + cancels: Default::default(), + }; + + Self(Arc::new(Inner { + secret_key, + public_key, + context, + clock, + relays, + pool, + client, + chain_spec, + builder_wallet, + bid_percent, + subsidy_gwei, + extra_data, + payload_attributes_tx: attrs_tx, + builds_tx, + state: Mutex::new(state), + })) + } + + fn process_validator_schedule_for_relay( + &self, + relay: RelayIndex, + schedule: &[ProposerSchedule], + ) { + // NOTE: we are trusting the data we get from a relay here; + // this could conceivably be verified... + let mut slots = Vec::with_capacity(schedule.len()); + let mut state = self.state.lock().unwrap(); + for duty in schedule { + slots.push(duty.slot); + let slot = state.proposer_schedule.entry(duty.slot).or_default(); + 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(); + if !registered_relays.contains(&relay) { + // NOTE: given the API returns two epochs at a time, we can end up duplicating our + // data so let's only add the relay if it is not already here + registered_relays.push(relay); + } + } + tracing::info!(?slots, relay, "processed proposer schedule"); + } + + async fn on_epoch(&self, _epoch: Epoch) { + // TODO: concurrent fetch + 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!(err = %err, "error fetching proposer schedule from relay") + } + } + } + } + + 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!(%public_key, %address, ?relays, "builder initialized"); + } + + pub async fn on_slot(&self, slot: Slot) { + tracing::info!(slot, "processing slot"); + let next_epoch = slot % self.context.slots_per_epoch == 0; + if next_epoch { + let epoch = slot / self.context.slots_per_epoch; + tracing::info!(epoch, "processing epoch"); + self.on_epoch(epoch).await; + } + + 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); + } + + 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 stream_builds(&self) -> Result, Error> { + let mut state = self.state.lock().unwrap(); + let rx = state.builds_rx.take(); + if let Some(rx) = rx { + Ok(ReceiverStream::new(rx)) + } else { + Err(Error::Internal("can only yield builds stream once")) + } + } + + pub fn build_for(&self, id: &BuildIdentifier) -> Option> { + self.state.lock().unwrap().builds.get(id).cloned() + } + + fn cancel_for(&self, id: &BuildIdentifier) -> Option { + self.state.lock().unwrap().cancels.get(id).cloned() + } + + pub fn cancel_build(&self, id: &BuildIdentifier) { + self.state.lock().unwrap().cancels.remove(id); + } + + 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]; + let slot = signed_submission.message.slot; + let parent_hash = &signed_submission.message.parent_hash; + let block_hash = &signed_submission.message.block_hash; + let value = &signed_submission.message.value; + tracing::info!(id = %id, relay = ?relay, slot, %parent_hash, %block_hash, ?value, %builder_payment, "submitting bid"); + match relay.submit_bid(&signed_submission).await { + Ok(_) => tracing::info!(%id, ?relay, "successfully submitted bid"), + Err(err) => { + tracing::warn!(%err, %id,?relay, "error submitting bid"); + } + } + } + + Ok(()) + } +} + +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(parent_hash, BlockSource::Any)? + .ok_or_else(|| Error::MissingParentBlock(parent_hash))?; + + // we already know the hash, so we can seal it + block.seal(parent_hash) + }; + + // 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 subsidy = U256::from(self.subsidy_gwei); + let subsidy_in_wei = subsidy * U256::from(10u64.pow(9)); + 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(), + builder_wallet: self.builder_wallet.clone(), + // TODO: handle smart contract payments to fee recipient + gas_reserve: 21000, + bid_percent: self.bid_percent, + subsidy: subsidy_in_wei, + }; + 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(Duration::from_secs(payload_attributes.timestamp).as_nanos()) + .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)) + } + + tracing::info!(relays=?relays, slot, %build_identifier, attr_id = %payload_attributes.id, parent = %parent_hash, timestamp = %payload_attributes.timestamp, "constructing new build"); + + let context = self.construct_build_context( + slot, + parent_hash, + proposer, + payload_attributes, + validator_preferences, + relays, + )?; + + let build = Arc::new(Build::new(context)); + + // TODO: encapsulate these details + let current_value = build.value(); + let cancel = Cancelled::default(); + if let Ok(BuildOutcome::BetterOrEqual(payload_with_payments)) = + build_payload(&build.context, current_value, &self.client, &self.pool, &cancel) + { + let mut state = build.state.lock().unwrap(); + state.payload_with_payments = payload_with_payments; + } + state.builds.insert(build_identifier.clone(), build); + state.cancels.insert(build_identifier.clone(), cancel); + Ok(PayloadAttributesProcessingOutcome::NewBuild(build_identifier)) + } + + // Drives the build referenced by `id`. Inside a context where blocking is ok. + pub async fn start_build(&self, id: &BuildIdentifier) -> Result<(), Error> { + let build = self.build_for(id).ok_or_else(|| Error::MissingBuild(id.clone()))?; + if self.builds_tx.send(id.clone()).await.is_err() { + tracing::warn!(%id, "could not send build to stream of builds, listeners will ignore"); + } + + let deadline = self.clock.duration_until_slot(build.context.slot); + let deadline = tokio::time::sleep(deadline + BUILD_DEADLINE_INTO_SLOT); + tokio::pin!(deadline); + + let mut interval = tokio::time::interval(BUILD_PROGRESSION_INTERVAL); + + let cancel = self.cancel_for(id).ok_or_else(|| Error::MissingBuild(id.clone()))?; + + loop { + tokio::select! { + _ = tokio::signal::ctrl_c() => { + // NOTE: catch here as well, otherwise we get issues with + // leaking contexts beyond the top-level + // TODO: implement graceful shutdowns + tracing::trace!(%id, "aborting build due to signal"); + return Ok(()) + } + () = &mut deadline => { + tracing::trace!(%id, slot = build.context.slot, "deadline for build reached"); + return Ok(()) + } + _ = interval.tick() => { + let current_value = build.value(); + match build_payload(&build.context, current_value, &self.client, &self.pool, &cancel) { + Ok(BuildOutcome::BetterOrEqual(payload_with_payments)) => { + let mut state = build.state.lock().unwrap(); + state.payload_with_payments = payload_with_payments; + } + Ok(BuildOutcome::Worse { .. }) => continue, + Ok(BuildOutcome::Cancelled) => { + tracing::trace!(%id, "build cancelled"); + return Ok(()) + } + Err(err) => tracing::warn!(%err, "error building payload"), + } + } + } + } + } +} diff --git a/mev-build-rs/src/reth_builder/cancelled.rs b/mev-build-rs/src/reth_builder/cancelled.rs new file mode 100644 index 00000000..c543425d --- /dev/null +++ b/mev-build-rs/src/reth_builder/cancelled.rs @@ -0,0 +1,18 @@ +use std::sync::{atomic::AtomicBool, Arc}; + +// NOTE: cribbed from https://github.com/paradigmxyz/reth/blob/900ada5aaa4b5d4a633df78764e7dd7169a13405/crates/payload/basic/src/lib.rs#L514 +#[derive(Default, Clone, Debug)] +pub struct Cancelled(Arc); + +impl Cancelled { + /// Returns true if the job was cancelled. + pub fn is_cancelled(&self) -> bool { + self.0.load(std::sync::atomic::Ordering::Relaxed) + } +} + +impl Drop for Cancelled { + fn drop(&mut self) { + self.0.store(true, std::sync::atomic::Ordering::Relaxed); + } +} 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..7efdf4a5 --- /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 requested 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..3451f352 --- /dev/null +++ b/mev-build-rs/src/reth_builder/mod.rs @@ -0,0 +1,15 @@ +/// Build payloads suitable for submission to `mev-boost` relays +/// using `reth` as an execution client. +mod bidder; +mod build; +mod builder; +mod cancelled; +mod error; +mod payload_builder; +mod reth_compat; +mod reth_ext; +mod service; +mod types; + +pub use bidder::DeadlineBidder; +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..9fdf5c26 --- /dev/null +++ b/mev-build-rs/src/reth_builder/payload_builder.rs @@ -0,0 +1,321 @@ +/// Payload building logic is heavily inspired by +/// the `reth-basic-payload-builder` package in the `reth` codebase. +use crate::reth_builder::{ + build::{BuildContext, PayloadWithPayments}, + cancelled::Cancelled, + 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, StateProviderBox}; +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}, +}; +use std::fmt; + +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 }, + Cancelled, +} + +fn assemble_txs_from_pool( + context: &mut ExecutionContext, + pool: &Pool, +) -> Result<(), Error> { + let base_fee = context.build.base_fee(); + let block_gas_limit = context.build.gas_limit(); + + let mut best_txs = pool.best_transactions_with_base_fee(base_fee); + + let effective_gas_limit = block_gas_limit - context.build.gas_reserve; + while let Some(pool_tx) = best_txs.next() { + if context.is_cancelled() { + return Ok(()) + } + + // NOTE: we withhold the `gas_reserve` so the "bidder" has some guaranteed room + // to play with the payload after it is built. + if context.cumulative_gas_used + pool_tx.gas_limit() > effective_gas_limit { + best_txs.mark_invalid(&pool_tx); + continue + } + + let tx = pool_tx.to_recovered_transaction(); + + if let Err(err) = context.extend_transaction(tx) { + match err { + Error::Execution(EVMError::Transaction(err)) => { + if !matches!(err, InvalidTransaction::NonceTooLow { .. }) { + best_txs.mark_invalid(&pool_tx); + } + continue + } + _ => return Err(err), + } + } + } + Ok(()) +} + +fn assemble_payload_with_payments(mut context: ExecutionContext) -> Result { + let base_fee = context.build.base_fee(); + let block_number = context.build.number(); + let block_gas_limit = context.build.gas_limit(); + + let withdrawals_root = process_withdrawals( + &context.build.withdrawals, + &context.build.chain_spec, + &mut context.db, + &mut context.post_state, + context.build.timestamp, + block_number, + )?; + + if context.is_cancelled() { + return Ok(BuildOutcome::Cancelled) + } + + let receipts_root = context.post_state.receipts_root(block_number); + let logs_bloom = context.post_state.logs_bloom(block_number); + let state_root = context.db.db.0.state_root(context.post_state)?; + let transactions_root = proofs::calculate_transaction_root(&context.executed_txs); + + let header = Header { + parent_hash: context.build.parent_hash, + ommers_hash: EMPTY_OMMER_ROOT, + beneficiary: context.build.block_env.coinbase, + state_root, + transactions_root, + withdrawals_root: Some(withdrawals_root), + receipts_root, + logs_bloom, + timestamp: context.build.timestamp, + mix_hash: H256::from_slice(context.build.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: context.cumulative_gas_used, + extra_data: context.build.extra_data.clone(), + blob_gas_used: None, + excess_blob_gas: None, + parent_beacon_block_root: None, + }; + + let payload = Block { + header, + body: context.executed_txs, + ommers: vec![], + withdrawals: Some(context.build.withdrawals.clone()), + }; + + let payload_with_payments = PayloadWithPayments { + payload: Some(payload.seal_slow()), + proposer_payment: context.total_payment, + builder_payment: context.revenue, + }; + Ok(BuildOutcome::BetterOrEqual(payload_with_payments)) +} + +fn construct_payment_tx( + context: &mut ExecutionContext, +) -> Result { + let sender = context.build.builder_wallet.address(); + let signer_account = context.db.load_account(sender.into())?; + let nonce = signer_account.info.nonce; + + let fee_recipient = ethers_H160::from_slice(context.build.proposer_fee_recipient.as_ref()); + let tx = Eip1559TransactionRequest::new() + .from(sender) + .to(fee_recipient) + // TODO: support smart contract payments + .gas(21000) + .max_fee_per_gas(context.build.base_fee()) + .max_priority_fee_per_gas(0) + .value(context.total_payment) + .data(ethers::types::Bytes::default()) + .access_list(ethers::types::transaction::eip2930::AccessList::default()) + .nonce(nonce) + .chain_id(context.build.cfg_env.chain_id.to::()); + let tx = TypedTransaction::Eip1559(tx); + let wallet = &context.build.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"); + + Ok(TransactionSignedEcRecovered::from_signed_transaction(payment_tx, sender.into())) +} + +struct ExecutionContext<'a> { + build: &'a BuildContext, + cancel: &'a Cancelled, + db: CacheDB>>, + post_state: PostState, + cumulative_gas_used: u64, + total_fees: U256, + executed_txs: Vec, + total_payment: U256, + revenue: U256, +} + +impl<'a> fmt::Debug for ExecutionContext<'a> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("ExecutionContext") + .field("build", &self.build) + .field("cumulative_gas_used", &self.cumulative_gas_used) + .field("total_fees", &self.total_fees) + .field("total_payment", &self.total_payment) + .field("revenue", &self.revenue) + .finish() + } +} + +impl<'a> ExecutionContext<'a> { + fn try_from( + context: &'a BuildContext, + cancel: &'a Cancelled, + provider: &'a P, + ) -> Result { + let state = State::new(provider.state_by_block_hash(context.parent_hash)?); + let db = SubState::new(state); + Ok(ExecutionContext { + build: context, + cancel, + db, + post_state: Default::default(), + cumulative_gas_used: 0, + total_fees: U256::ZERO, + executed_txs: Default::default(), + total_payment: U256::ZERO, + revenue: U256::ZERO, + }) + } + + fn is_cancelled(&self) -> bool { + self.cancel.is_cancelled() + } + + fn compute_payment_from_fees(&mut self) { + let integral_percent = (self.build.bid_percent * 100.0) as u64; + let payment = self.total_fees * U256::from(integral_percent) / U256::from(100); + self.revenue = self.total_fees - payment; + self.total_payment = self.build.subsidy + payment; + } + + fn extend_transaction(&mut self, tx: TransactionSignedEcRecovered) -> Result<(), Error> { + let env = Env { + cfg: self.build.cfg_env.clone(), + block: self.build.block_env.clone(), + tx: tx_env_with_recovered(&tx), + }; + + let mut evm = revm::EVM::with_env(env); + evm.database(&mut self.db); + + let ResultAndState { result, state } = evm.transact().map_err(Error::Execution)?; + + let block_number = self.build.number(); + commit_state_changes(&mut self.db, &mut self.post_state, block_number, state, true); + + let gas_used = result.gas_used(); + self.cumulative_gas_used += gas_used; + + self.post_state.add_receipt( + block_number, + Receipt { + tx_type: tx.tx_type(), + success: result.is_success(), + cumulative_gas_used: self.cumulative_gas_used, + logs: result.logs().into_iter().map(into_reth_log).collect(), + }, + ); + + let base_fee = self.build.base_fee(); + let fee = tx.effective_tip_per_gas(base_fee).expect("fee is valid; execution succeeded"); + self.total_fees += U256::from(fee) * U256::from(gas_used); + + self.executed_txs.push(tx.into_signed()); + + Ok(()) + } +} + +pub fn build_payload< + Provider: reth_provider::StateProviderFactory, + Pool: reth_transaction_pool::TransactionPool, +>( + context: &BuildContext, + threshold_value: U256, + provider: &Provider, + pool: &Pool, + cancel: &Cancelled, +) -> Result { + let mut context = ExecutionContext::try_from(context, cancel, provider)?; + + if context.is_cancelled() { + return Ok(BuildOutcome::Cancelled) + } + assemble_txs_from_pool(&mut context, pool)?; + + if context.total_fees < threshold_value { + return Ok(BuildOutcome::Worse { threshold: threshold_value, provided: context.total_fees }) + } + + context.compute_payment_from_fees(); + + let payment_tx = construct_payment_tx(&mut context)?; + + if context.is_cancelled() { + return Ok(BuildOutcome::Cancelled) + } + + context.extend_transaction(payment_tx)?; + + if context.is_cancelled() { + return Ok(BuildOutcome::Cancelled) + } + + assemble_payload_with_payments(context) +} 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..66dd44e5 --- /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(crate) fn to_bytes32(value: H256) -> Bytes32 { + Bytes32::try_from(value.as_bytes()).unwrap() +} + +fn to_bytes20(value: H160) -> ExecutionAddress { + ExecutionAddress::try_from(value.as_bytes()).unwrap() +} + +fn to_byte_vector(value: Bloom) -> ByteVector<256> { + ByteVector::<256>::try_from(value.as_bytes()).unwrap() +} + +pub(crate) fn to_u256(value: &U256) -> ssz_rs::U256 { + ssz_rs::U256::try_from_bytes_le(&value.to_le_bytes::<32>()).unwrap() +} + +pub(crate) 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..1f63d47c --- /dev/null +++ b/mev-build-rs/src/reth_builder/reth_ext.rs @@ -0,0 +1,87 @@ +/// 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::Builder; +use futures::FutureExt; +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}, + pin::Pin, + 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 {} + +type Sender = dyn Future + Send + Sync; + +pub struct Job { + payload_id: PayloadId, + send_fut: Pin>, +} + +impl Future for Job { + type Output = Result<(), PayloadBuilderError>; + + fn poll( + self: Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll { + let this = self.get_mut(); + match this.send_fut.poll_unpin(cx) { + Poll::Ready(_) => Poll::Ready(Ok(())), + Poll::Pending => Poll::Pending, + } + } +} + +impl PayloadJobGenerator + for Builder +{ + type Job = Job; + + fn new_payload_job( + &self, + attr: PayloadBuilderAttributes, + ) -> Result { + let payload_id = attr.payload_id(); + let tx = self.payload_attributes_tx.clone(); + let send_fut = Box::pin(async move { + if let Err(err) = tx.send(attr).await { + let attr = err.0; + tracing::warn!(timestamp = ?attr.timestamp, id = %attr.payload_id(), "could not send attributes"); + } + }); + Ok(Job { payload_id, send_fut }) + } +} + +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..dc08d4bf --- /dev/null +++ b/mev-build-rs/src/reth_builder/service.rs @@ -0,0 +1,251 @@ +use crate::reth_builder::{ + bidder::{Bid, Bidder}, + builder::{Builder, PayloadAttributesProcessingOutcome}, + error::Error as BuilderError, +}; +use ethereum_consensus::{ + clock::{Clock, SystemTimeProvider}, + crypto::SecretKey, + state_transition::Context, +}; +use ethers::signers::{coins_bip39::English, MnemonicBuilder, Signer}; +use futures::StreamExt; +use mev_rs::{Error, Relay, RelayEndpoint}; +use reth_primitives::{Bytes, ChainSpec}; +use serde::Deserialize; +use std::{future::Future, pin::Pin, sync::Arc, task::Poll}; +use tokio::task::{JoinError, JoinHandle}; +use url::Url; + +const DEFAULT_BID_PERCENT: f64 = 0.9; + +#[derive(Deserialize, Debug, Default, Clone)] +pub struct Config { + pub secret_key: SecretKey, + pub relays: Vec, + pub extra_data: String, + pub execution_mnemonic: String, + // amount in milliseconds + pub bidding_deadline_ms: u64, + // amount to bid as a fraction of the block's value + pub bid_percent: Option, + // amount to add from the builder's wallet as a subsidy to the auction bid + pub subsidy_gwei: Option, + pub jwt_secret_path: Option, +} + +pub struct Service { + builder: Builder, + clock: Clock, + bidder: Arc, +} + +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, + B: Bidder + Send + Sync + 'static, + > Service +{ + pub fn from( + config: Config, + context: Arc, + clock: Clock, + pool: Pool, + client: Client, + bidder: Arc, + chain_spec: Arc, + ) -> Result<(Self, Builder), Error> { + let secret_key = config.secret_key; + 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 builder = Builder::new( + secret_key, + context.clone(), + clock.clone(), + relays, + pool, + client, + chain_spec, + Bytes::from(config.extra_data.as_bytes()), + builder_wallet, + config.bid_percent.unwrap_or(DEFAULT_BID_PERCENT), + config.subsidy_gwei.unwrap_or_default(), + ); + Ok((Service { builder: builder.clone(), clock, bidder }, builder)) + } + + pub async fn spawn(self) -> Result { + let Self { builder, clock, bidder } = 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(); + // NOTE: validator management + 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 builder_handle = builder.clone(); + let bidder = tokio::spawn(async move { + let builder = builder_handle; + let builds = match builder.stream_builds() { + Ok(stream) => stream, + Err(err) => { + tracing::error!(err = ?err, "could not open builds stream"); + return + } + }; + + tokio::pin!(builds); + + while let Some(id) = builds.next().await { + let build = builder.build_for(&id).expect("only asking for existing builds"); + + // TODO: constrain bidders to finite lifetime + let builder = builder.clone(); + let bidder = bidder.clone(); + tokio::task::spawn_blocking(move || { + tokio::runtime::Handle::current().block_on(Box::pin(async move { + loop { + match bidder.bid_for(&build).await { + Ok(Some(bid)) => { + if let Err(err) = builder.submit_bid(&id).await { + tracing::warn!(id = %id, slot=?build.context.slot, err = %err, "error submitting bid for build"); + } + match bid { + Bid::Continue => {} + Bid::Done => { + builder.cancel_build(&id); + break; + } + } + } + Ok(None) => continue, + Err(err) => { + tracing::warn!(id = %id, err = %err, "error determining bid for build"); + } + } + } + })); + }); + } + }); + + 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 { + let slot = clock_handle + .slot_at_time(std::time::Duration::from_secs(attrs.timestamp).as_nanos()) + .expect("after genesis"); + tracing::trace!(id = %attrs.payload_id(), slot, "got attrs from CL"); + match builder.process_payload_attributes(attrs) { + Ok(PayloadAttributesProcessingOutcome::NewBuild(build_identifier)) => { + let builder = builder.clone(); + let id = build_identifier.clone(); + tokio::task::spawn_blocking(move || { + tokio::runtime::Handle::current().block_on(Box::pin(async move { + if let Err(err) = builder.start_build(&id).await { + tracing::warn!(id = %id, err = ?err, "failed to start build"); + } + })); + }); + } + Ok(PayloadAttributesProcessingOutcome::Duplicate(_)) => continue, + Err(BuilderError::NoRegisteredValidatorsForSlot(_)) => continue, + 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 bb01ff1d..00000000 --- a/mev-build-rs/src/service.rs +++ /dev/null @@ -1,146 +0,0 @@ -use crate::mempool_builder::Builder; -use beacon_api_client::Client; -use ethereum_consensus::{crypto::SecretKey, networks, 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().unwrap_or_else(|| { - let genesis_time = networks::typical_genesis_time(&context); - context.clock_at(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/relay.rs b/mev-relay-rs/src/relay.rs index a531b27f..10419d6e 100644 --- a/mev-relay-rs/src/relay.rs +++ b/mev-relay-rs/src/relay.rs @@ -155,11 +155,7 @@ impl BlindedBlockProvider for Relay { &self, registrations: &mut [SignedValidatorRegistration], ) -> Result<(), Error> { - let current_time = match get_current_unix_time_in_nanos().try_into() { - Ok(time) => time, - Err(_) => return Err(Error::OverflowError), - }; - + let current_time = get_current_unix_time_in_nanos().try_into().expect("fits in type"); self.validator_registry.validate_registrations( registrations, current_time, 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 1245dde5..81a25771 100644 --- a/mev-rs/src/error.rs +++ b/mev-rs/src/error.rs @@ -1,7 +1,7 @@ use crate::types::BidRequest; use beacon_api_client::Error as ApiError; use ethereum_consensus::{ - primitives::{BlsPublicKey, ExecutionAddress, Hash32}, + primitives::{BlsPublicKey, ExecutionAddress, Hash32, Slot}, state_transition::Error as ConsensusError, }; use thiserror::Error; @@ -16,6 +16,8 @@ pub enum Error { NoBids, #[error("could not find relay with outstanding bid to accept")] MissingOpenBid, + #[error("could not find proposer for slot {0}")] + MissingProposer(Slot), #[error("could not register with any relay")] CouldNotRegister, #[error("no preferences found for validator with public key {0}")] @@ -42,11 +44,6 @@ pub enum Error { ValidatorRegistry(#[from] crate::validator_registry::Error), #[error("{0}")] ProposerScheduler(#[from] crate::proposer_scheduler::Error), - #[cfg(feature = "engine-proxy")] - #[error("{0}")] - EngineApi(#[from] crate::engine_api_proxy::Error), - #[error("Overflow error, value too large")] - OverflowError, } #[cfg(feature = "api")] 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 4b320e17..42aba1ec 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/proposer_scheduler.rs b/mev-rs/src/proposer_scheduler.rs index 794b7e7a..578eed2f 100644 --- a/mev-rs/src/proposer_scheduler.rs +++ b/mev-rs/src/proposer_scheduler.rs @@ -8,8 +8,6 @@ use thiserror::Error; #[derive(Debug, Error)] pub enum Error { - #[error("could find a proposer for the requested slot {0}")] - MissingProposer(Slot), #[error("api error: {0}")] Api(#[from] ApiError), } @@ -48,8 +46,8 @@ impl ProposerScheduler { Ok(duties) } - pub fn get_proposer_for(&self, slot: Slot) -> Result { + pub fn get_proposer_for(&self, slot: Slot) -> Option { let state = self.state.lock(); - state.proposer_schedule.get(&slot).cloned().ok_or_else(|| Error::MissingProposer(slot)) + state.proposer_schedule.get(&slot).cloned() } } diff --git a/mev-rs/src/relay.rs b/mev-rs/src/relay.rs new file mode 100644 index 00000000..9432a32a --- /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.write_str(self.endpoint.as_ref()) + } +} + +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, }