From b775a2e7f907f4b3f7e682f18be67516240d1715 Mon Sep 17 00:00:00 2001 From: Naman Garg <0708ng@gmail.com> Date: Wed, 17 Jul 2024 10:30:52 +0530 Subject: [PATCH 1/9] chore: add send-blob-preconf --- Justfile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Justfile b/Justfile index 698212fb..452da4c6 100644 --- a/Justfile +++ b/Justfile @@ -100,6 +100,16 @@ send-preconf: --private-key 53321db7c1e331d93a11a41d16f004d7ff63972ec8ec7c25db329728ceeb1710 \ --slot head +# manually send a blob preconfirmation to the bolt devnet +send-blob-preconf: + cd bolt-spammer && RUST_LOG=info cargo run -- \ + --provider-url $(kurtosis port print bolt-devnet el-1-geth-lighthouse rpc) \ + --beacon-client-url $(kurtosis port print bolt-devnet cl-1-lighthouse-geth http) \ + --bolt-sidecar-url http://$(kurtosis port print bolt-devnet mev-sidecar-api api) \ + --private-key 53321db7c1e331d93a11a41d16f004d7ff63972ec8ec7c25db329728ceeb1710 \ + --slot head \ + --blob + # build all the docker images locally build-images: @just _build-builder From b30d8327dbd97d670cfcb71cfa351b0779100139 Mon Sep 17 00:00:00 2001 From: Naman Garg <0708ng@gmail.com> Date: Wed, 17 Jul 2024 17:01:22 +0530 Subject: [PATCH 2/9] feat(spammer): migrate to alloy (error wip) --- bolt-spammer-helder/Cargo.lock | 2466 +++++++++++-------- bolt-spammer-helder/Cargo.toml | 4 +- bolt-spammer-helder/rustfmt.toml | 11 + bolt-spammer-helder/src/contract.rs | 176 +- bolt-spammer-helder/src/lib.rs | 5 +- bolt-spammer-helder/src/main.rs | 76 +- bolt-spammer-helder/src/onchain_registry.rs | 210 ++ bolt-spammer-helder/src/utils.rs | 80 +- 8 files changed, 1770 insertions(+), 1258 deletions(-) create mode 100644 bolt-spammer-helder/rustfmt.toml create mode 100644 bolt-spammer-helder/src/onchain_registry.rs diff --git a/bolt-spammer-helder/Cargo.lock b/bolt-spammer-helder/Cargo.lock index 12bacb27..417de513 100644 --- a/bolt-spammer-helder/Cargo.lock +++ b/bolt-spammer-helder/Cargo.lock @@ -3,80 +3,699 @@ version = 3 [[package]] -name = "Inflector" -version = "0.11.4" +name = "addr2line" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ - "lazy_static", - "regex", + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "alloy" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45855eb65e9cc70294ebea1279f6d8ee0636bf2ed3897683ebbae2739975ae8c" +dependencies = [ + "alloy-consensus 0.2.0", + "alloy-contract", + "alloy-core", + "alloy-eips 0.2.0", + "alloy-genesis 0.2.0", + "alloy-network", + "alloy-provider", + "alloy-pubsub", + "alloy-rpc-client", + "alloy-rpc-types 0.2.0", + "alloy-serde 0.2.0", + "alloy-signer", + "alloy-signer-local", + "alloy-transport", + "alloy-transport-http", + "alloy-transport-ipc", + "alloy-transport-ws", +] + +[[package]] +name = "alloy-chains" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1752d7d62e2665da650a36d84abbf239f812534475d51f072a49a533513b7cdd" +dependencies = [ + "alloy-rlp", + "num_enum", + "serde", + "strum", +] + +[[package]] +name = "alloy-consensus" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=17633df#17633df04920e07cd7afbd6ee825fcde677fa1d1" +dependencies = [ + "alloy-eips 0.1.0", + "alloy-primitives", + "alloy-rlp", + "alloy-serde 0.1.0", + "c-kzg", + "serde", + "sha2 0.10.8", +] + +[[package]] +name = "alloy-consensus" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58047cc851e58c26224521d1ecda466e3d746ebca0274cd5427aa660a88c353" +dependencies = [ + "alloy-eips 0.2.0", + "alloy-primitives", + "alloy-rlp", + "alloy-serde 0.2.0", + "c-kzg", + "serde", +] + +[[package]] +name = "alloy-contract" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa5d42d9f87896536234b0fac1a84ad9d9dc7a4b27839cac35d0899e64ddf083" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-network", + "alloy-primitives", + "alloy-provider", + "alloy-pubsub", + "alloy-rpc-types-eth", + "alloy-sol-types", + "alloy-transport", + "futures", + "futures-util", + "thiserror", +] + +[[package]] +name = "alloy-core" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "529fc6310dc1126c8de51c376cbc59c79c7f662bd742be7dc67055d5421a81b4" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-types", +] + +[[package]] +name = "alloy-dyn-abi" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413902aa18a97569e60f679c23f46a18db1656d87ab4d4e49d0e1e52042f66df" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "const-hex", + "itoa", + "serde", + "serde_json", + "winnow 0.6.6", +] + +[[package]] +name = "alloy-eips" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=17633df#17633df04920e07cd7afbd6ee825fcde677fa1d1" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-serde 0.1.0", + "c-kzg", + "once_cell", + "serde", +] + +[[package]] +name = "alloy-eips" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32a3e14fa0d152d00bd8daf605eb74ad397efb0f54bd7155585823dddb4401e" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-serde 0.2.0", + "c-kzg", + "derive_more", + "k256 0.13.3", + "once_cell", + "serde", + "sha2 0.10.8", +] + +[[package]] +name = "alloy-genesis" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=17633df#17633df04920e07cd7afbd6ee825fcde677fa1d1" +dependencies = [ + "alloy-primitives", + "alloy-serde 0.1.0", + "serde", +] + +[[package]] +name = "alloy-genesis" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cb76c8a3913f2466c5488f3a915e3a15d15596bdc935558c1a9be75e9ec508" +dependencies = [ + "alloy-primitives", + "alloy-serde 0.2.0", + "serde", +] + +[[package]] +name = "alloy-json-abi" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc05b04ac331a9f07e3a4036ef7926e49a8bf84a99a1ccfc7e2ab55a5fcbb372" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-json-rpc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e76a9feec2352c78545d1a37415699817bae8dc41654bd1bfe57d6cdd5433bd" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", + "thiserror", + "tracing", +] + +[[package]] +name = "alloy-network" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3223d71dc78f464b2743418d0be8b5c894313e272105a6206ad5e867d67b3ce2" +dependencies = [ + "alloy-consensus 0.2.0", + "alloy-eips 0.2.0", + "alloy-json-rpc", + "alloy-primitives", + "alloy-rpc-types-eth", + "alloy-serde 0.2.0", + "alloy-signer", + "alloy-sol-types", + "async-trait", + "auto_impl", + "futures-utils-wasm", + "thiserror", +] + +[[package]] +name = "alloy-primitives" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more", + "getrandom 0.2.14", + "hex-literal", + "itoa", + "k256 0.13.3", + "keccak-asm", + "proptest", + "rand 0.8.5", + "ruint", + "serde", + "tiny-keccak", +] + +[[package]] +name = "alloy-provider" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29da7457d853cb8199ec04b227d5d2ef598be3e59fc2bbad70c8be213292f32" +dependencies = [ + "alloy-chains", + "alloy-consensus 0.2.0", + "alloy-eips 0.2.0", + "alloy-json-rpc", + "alloy-network", + "alloy-primitives", + "alloy-pubsub", + "alloy-rpc-client", + "alloy-rpc-types-eth", + "alloy-transport", + "alloy-transport-http", + "alloy-transport-ipc", + "alloy-transport-ws", + "async-stream", + "async-trait", + "auto_impl", + "dashmap", + "futures", + "futures-utils-wasm", + "lru", + "pin-project", + "reqwest 0.12.3", + "serde", + "serde_json", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "alloy-pubsub" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64acfec654ade392cecfa9bba0408eb2a337d55f1b857925da79970cb70f3d6" +dependencies = [ + "alloy-json-rpc", + "alloy-primitives", + "alloy-transport", + "bimap", + "futures", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower", + "tracing", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a43b18702501396fa9bcdeecd533bc85fac75150d308fc0f6800a01e6234a003" +dependencies = [ + "alloy-rlp-derive", + "arrayvec", + "bytes", +] + +[[package]] +name = "alloy-rlp-derive" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83524c1f6162fcb5b0decf775498a125066c86dda6066ed609531b0e912f85a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "alloy-rpc-client" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a9e609524fa31c2c70eb24c0da60796809193ad4787a6dfe6d0db0d3ac112d" +dependencies = [ + "alloy-json-rpc", + "alloy-primitives", + "alloy-pubsub", + "alloy-transport", + "alloy-transport-http", + "alloy-transport-ipc", + "alloy-transport-ws", + "futures", + "pin-project", + "reqwest 0.12.3", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower", + "tracing", + "url", +] + +[[package]] +name = "alloy-rpc-types" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=17633df#17633df04920e07cd7afbd6ee825fcde677fa1d1" +dependencies = [ + "alloy-consensus 0.1.0", + "alloy-eips 0.1.0", + "alloy-genesis 0.1.0", + "alloy-primitives", + "alloy-rlp", + "alloy-serde 0.1.0", + "alloy-sol-types", + "itertools 0.12.1", + "jsonrpsee-types", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-rpc-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5d76f1e8b22f48b7b8f985782b68e7eb3938780e50e8b646a53e41a598cdf5" +dependencies = [ + "alloy-rpc-types-engine 0.2.0", + "alloy-rpc-types-eth", + "alloy-serde 0.2.0", + "serde", +] + +[[package]] +name = "alloy-rpc-types-engine" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=17633df#17633df04920e07cd7afbd6ee825fcde677fa1d1" +dependencies = [ + "alloy-consensus 0.1.0", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types 0.1.0", + "alloy-serde 0.1.0", + "jsonrpsee-types", + "serde", + "thiserror", +] + +[[package]] +name = "alloy-rpc-types-engine" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73445fbc5c02258e3d0d977835c92366a4d91545fd456c3fc8601c61810bc9f6" +dependencies = [ + "alloy-consensus 0.2.0", + "alloy-eips 0.2.0", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-eth", + "alloy-serde 0.2.0", + "jsonwebtoken", + "rand 0.8.5", + "serde", + "thiserror", +] + +[[package]] +name = "alloy-rpc-types-eth" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "605fa8462732bb8fd0645a9941e12961e079d45ae6a44634c826f8229c187bdf" +dependencies = [ + "alloy-consensus 0.2.0", + "alloy-eips 0.2.0", + "alloy-primitives", + "alloy-rlp", + "alloy-serde 0.2.0", + "alloy-sol-types", + "itertools 0.13.0", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-rpc-types-trace" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=17633df#17633df04920e07cd7afbd6ee825fcde677fa1d1" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types 0.1.0", + "alloy-serde 0.1.0", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-serde" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=17633df#17633df04920e07cd7afbd6ee825fcde677fa1d1" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-serde" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15c5b9057acc02aee1b8aac2b5a0729cb0f73d080082c111313e5d1f92a96630" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-signer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37f10592696f4ab8b687d5a8ab55e998a14ea0ca5f8eb20ad74a96ad671bb54a" +dependencies = [ + "alloy-primitives", + "async-trait", + "auto_impl", + "elliptic-curve 0.13.8", + "k256 0.13.3", + "thiserror", +] + +[[package]] +name = "alloy-signer-local" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b537f3e55f30753578f4623d5f66ddad8fa582af3fa6b15bad23dd1b9775228" +dependencies = [ + "alloy-consensus 0.2.0", + "alloy-network", + "alloy-primitives", + "alloy-signer", + "async-trait", + "k256 0.13.3", + "rand 0.8.5", + "thiserror", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b40397ddcdcc266f59f959770f601ce1280e699a91fc1862f29cef91707cd09" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" +dependencies = [ + "alloy-json-abi", + "alloy-sol-macro-input", + "const-hex", + "heck 0.5.0", + "indexmap 2.2.6", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.59", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" +dependencies = [ + "alloy-json-abi", + "const-hex", + "dunce", + "heck 0.5.0", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.59", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbcba3ca07cf7975f15d871b721fb18031eec8bce51103907f6dcce00b255d98" +dependencies = [ + "serde", + "winnow 0.6.6", +] + +[[package]] +name = "alloy-sol-types" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "const-hex", + "serde", ] [[package]] -name = "addr2line" -version = "0.21.0" +name = "alloy-transport" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "5b44b0f6f4a2593b258fa7b6cae8968e6a4c404d9ef4f5bc74401f2d04fa23fa" dependencies = [ - "gimli", + "alloy-json-rpc", + "base64 0.22.0", + "futures-util", + "futures-utils-wasm", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "tracing", + "url", ] [[package]] -name = "adler" -version = "1.0.2" +name = "alloy-transport-http" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "6d8f1eefa8cb9e7550740ee330feba4fed303a77ad3085707546f9152a88c380" +dependencies = [ + "alloy-json-rpc", + "alloy-transport", + "reqwest 0.12.3", + "serde_json", + "tower", + "tracing", + "url", +] [[package]] -name = "aes" -version = "0.8.4" +name = "alloy-transport-ipc" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +checksum = "31007c56dc65bd81392112dda4a14c20ac7e30bb4cb2e9176192e8d9fab1983f" dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", + "alloy-json-rpc", + "alloy-pubsub", + "alloy-transport", + "bytes", + "futures", + "interprocess", + "pin-project", + "serde_json", + "tokio", + "tokio-util", + "tracing", ] [[package]] -name = "aho-corasick" -version = "1.1.3" +name = "alloy-transport-ws" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "15ccc1c8f8ae415e93ec0e7851bd4cdf4afdd48793d13a91b860317da1f36104" dependencies = [ - "memchr", + "alloy-pubsub", + "alloy-transport", + "futures", + "http 1.1.0", + "rustls", + "serde_json", + "tokio", + "tokio-tungstenite", + "tracing", + "ws_stream_wasm", ] [[package]] -name = "alloy-primitives" -version = "0.7.6" +name = "alloy-trie" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f783611babedbbe90db3478c120fb5f5daacceffc210b39adc0af4fe0da70bad" +checksum = "beb28aa4ecd32fdfa1b1bdd111ff7357dd562c6b2372694cf9e613434fcba659" dependencies = [ + "alloy-primitives", "alloy-rlp", - "bytes", - "cfg-if", - "const-hex", "derive_more", - "hex-literal", - "itoa", - "k256 0.13.3", - "keccak-asm", - "proptest", - "rand 0.8.5", - "ruint", + "hashbrown 0.14.3", + "nybbles", "serde", - "tiny-keccak", + "smallvec", + "tracing", ] [[package]] -name = "alloy-rlp" -version = "0.3.7" +name = "android-tzdata" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a43b18702501396fa9bcdeecd533bc85fac75150d308fc0f6800a01e6234a003" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "arrayvec", - "bytes", + "libc", ] [[package]] @@ -269,15 +888,6 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" -[[package]] -name = "ascii-canvas" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" -dependencies = [ - "term", -] - [[package]] name = "async-channel" version = "1.9.0" @@ -303,6 +913,28 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + [[package]] name = "async-trait" version = "0.1.80" @@ -325,6 +957,16 @@ dependencies = [ "rustc_version 0.4.0", ] +[[package]] +name = "aurora-engine-modexp" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aef7712851e524f35fbbb74fa6599c5cd8692056a1c36f9ca0d2001b670e7e5" +dependencies = [ + "hex", + "num", +] + [[package]] name = "auto_impl" version = "1.2.0" @@ -413,10 +1055,19 @@ dependencies = [ ] [[package]] -name = "bech32" -version = "0.9.1" +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +dependencies = [ + "serde", +] + +[[package]] +name = "bimap" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" [[package]] name = "bit-set" @@ -444,6 +1095,9 @@ name = "bitflags" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +dependencies = [ + "serde", +] [[package]] name = "bitvec" @@ -453,6 +1107,7 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", + "serde", "tap", "wyz", ] @@ -491,18 +1146,20 @@ dependencies = [ name = "bolt-spammer-helder" version = "0.1.0" dependencies = [ + "alloy", "beacon-api-client", "clap", "dotenvy", - "ethers", "eyre", "rand 0.8.5", "reqwest 0.12.3", + "reth-primitives", "serde", "serde_json", "tokio", "tracing", "tracing-subscriber", + "url", ] [[package]] @@ -511,16 +1168,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "sha2 0.10.8", - "tinyvec", -] - [[package]] name = "bumpalo" version = "3.16.0" @@ -533,6 +1180,12 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +[[package]] +name = "bytemuck" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" + [[package]] name = "byteorder" version = "1.5.0" @@ -548,27 +1201,6 @@ 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 = "1.0.2" @@ -583,38 +1215,6 @@ dependencies = [ "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.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.22", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "cc" version = "1.0.94" @@ -637,17 +1237,11 @@ version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ + "android-tzdata", + "iana-time-zone", "num-traits", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", + "serde", + "windows-targets 0.52.5", ] [[package]] @@ -690,58 +1284,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" -[[package]] -name = "coins-bip32" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" -dependencies = [ - "bs58 0.5.1", - "coins-core", - "digest 0.10.7", - "hmac", - "k256 0.13.3", - "serde", - "sha2 0.10.8", - "thiserror", -] - -[[package]] -name = "coins-bip39" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" -dependencies = [ - "bitvec", - "coins-bip32", - "hmac", - "once_cell", - "pbkdf2 0.12.2", - "rand 0.8.5", - "sha2 0.10.8", - "thiserror", -] - -[[package]] -name = "coins-core" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" -dependencies = [ - "base64 0.21.7", - "bech32", - "bs58 0.5.1", - "digest 0.10.7", - "generic-array", - "hex", - "ripemd", - "serde", - "serde_derive", - "sha2 0.10.8", - "sha3", - "thiserror", -] - [[package]] name = "colorchoice" version = "1.0.0" @@ -777,16 +1319,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] -name = "constant_time_eq" -version = "0.1.5" +name = "convert_case" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "convert_case" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] [[package]] name = "core-foundation" @@ -823,14 +1368,20 @@ dependencies = [ ] [[package]] -name = "crc32fast" -version = "1.4.0" +name = "crc" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" dependencies = [ - "cfg-if", + "crc-catalog", ] +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crossbeam-deque" version = "0.8.5" @@ -875,34 +1426,73 @@ dependencies = [ ] [[package]] -name = "crypto-bigint" -version = "0.5.5" +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.59", ] [[package]] -name = "crypto-common" -version = "0.1.6" +name = "darling_macro" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "generic-array", - "typenum", + "darling_core", + "quote", + "syn 2.0.59", ] [[package]] -name = "ctr" -version = "0.9.2" +name = "dashmap" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ - "cipher", + "cfg-if", + "hashbrown 0.14.3", + "lock_api", + "once_cell", + "parking_lot_core", ] [[package]] @@ -938,6 +1528,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", + "serde", ] [[package]] @@ -957,7 +1548,7 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "convert_case", + "convert_case 0.4.0", "proc-macro2", "quote", "rustc_version 0.4.0", @@ -986,46 +1577,10 @@ dependencies = [ ] [[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "doctest-file" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] +checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" [[package]] name = "dotenvy" @@ -1039,6 +1594,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + [[package]] name = "ecdsa" version = "0.14.8" @@ -1110,15 +1671,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ena" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" -dependencies = [ - "log", -] - [[package]] name = "encoding_rs" version = "0.8.34" @@ -1135,7 +1687,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26fa0a0be8915790626d5759eb51fe47435a8eac92c2f212bd2da9aa7f30ea56" dependencies = [ "base64 0.13.1", - "bs58 0.4.0", + "bs58", "bytes", "hex", "k256 0.11.6", @@ -1160,11 +1712,23 @@ dependencies = [ "log", "rand 0.8.5", "rlp", + "secp256k1 0.27.0", "serde", "sha3", "zeroize", ] +[[package]] +name = "enumn" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -1181,28 +1745,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "eth-keystore" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" -dependencies = [ - "aes", - "ctr", - "digest 0.10.7", - "hex", - "hmac", - "pbkdf2 0.11.0", - "rand 0.8.5", - "scrypt", - "serde", - "serde_json", - "sha2 0.10.8", - "sha3", - "thiserror", - "uuid", -] - [[package]] name = "ethabi" version = "18.0.0" @@ -1241,286 +1783,65 @@ version = "0.1.1" source = "git+https://github.com/ralexstokes/ethereum-consensus?rev=cf3c404#cf3c404043230559660810bc0c9d6d5a8498d819" dependencies = [ "blst", - "bs58 0.4.0", + "bs58", "c-kzg", "enr 0.6.2", "hex", "integer-sqrt", "multiaddr", - "multihash", - "rand 0.8.5", - "serde", - "serde_json", - "serde_yaml", - "sha2 0.10.8", - "ssz_rs", - "thiserror", - "tokio", - "tokio-stream", -] - -[[package]] -name = "ethereum-types" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" -dependencies = [ - "ethbloom", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "primitive-types", - "scale-info", - "uint", -] - -[[package]] -name = "ethers" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816841ea989f0c69e459af1cf23a6b0033b19a55424a1ea3a30099becdb8dec0" -dependencies = [ - "ethers-addressbook", - "ethers-contract", - "ethers-core", - "ethers-etherscan", - "ethers-middleware", - "ethers-providers", - "ethers-signers", - "ethers-solc", -] - -[[package]] -name = "ethers-addressbook" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5495afd16b4faa556c3bba1f21b98b4983e53c1755022377051a975c3b021759" -dependencies = [ - "ethers-core", - "once_cell", - "serde", - "serde_json", -] - -[[package]] -name = "ethers-contract" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fceafa3578c836eeb874af87abacfb041f92b4da0a78a5edd042564b8ecdaaa" -dependencies = [ - "const-hex", - "ethers-contract-abigen", - "ethers-contract-derive", - "ethers-core", - "ethers-providers", - "futures-util", - "once_cell", - "pin-project", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "ethers-contract-abigen" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04ba01fbc2331a38c429eb95d4a570166781f14290ef9fdb144278a90b5a739b" -dependencies = [ - "Inflector", - "const-hex", - "dunce", - "ethers-core", - "ethers-etherscan", - "eyre", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "reqwest 0.11.27", - "serde", - "serde_json", - "syn 2.0.59", - "toml", - "walkdir", -] - -[[package]] -name = "ethers-contract-derive" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87689dcabc0051cde10caaade298f9e9093d65f6125c14575db3fd8c669a168f" -dependencies = [ - "Inflector", - "const-hex", - "ethers-contract-abigen", - "ethers-core", - "proc-macro2", - "quote", - "serde_json", - "syn 2.0.59", -] - -[[package]] -name = "ethers-core" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" -dependencies = [ - "arrayvec", - "bytes", - "cargo_metadata", - "chrono", - "const-hex", - "elliptic-curve 0.13.8", - "ethabi", - "generic-array", - "k256 0.13.3", - "num_enum", - "once_cell", - "open-fastrlp", - "rand 0.8.5", - "rlp", - "serde", - "serde_json", - "strum", - "syn 2.0.59", - "tempfile", - "thiserror", - "tiny-keccak", - "unicode-xid", -] - -[[package]] -name = "ethers-etherscan" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79e5973c26d4baf0ce55520bd732314328cabe53193286671b47144145b9649" -dependencies = [ - "chrono", - "ethers-core", - "reqwest 0.11.27", - "semver 1.0.22", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "ethers-middleware" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f9fdf09aec667c099909d91908d5eaf9be1bd0e2500ba4172c1d28bfaa43de" -dependencies = [ - "async-trait", - "auto_impl", - "ethers-contract", - "ethers-core", - "ethers-etherscan", - "ethers-providers", - "ethers-signers", - "futures-channel", - "futures-locks", - "futures-util", - "instant", - "reqwest 0.11.27", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", - "tracing-futures", - "url", -] - -[[package]] -name = "ethers-providers" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6434c9a33891f1effc9c75472e12666db2fa5a0fec4b29af6221680a6fe83ab2" -dependencies = [ - "async-trait", - "auto_impl", - "base64 0.21.7", - "bytes", - "const-hex", - "enr 0.10.0", - "ethers-core", - "futures-core", - "futures-timer", - "futures-util", - "hashers", - "http 0.2.12", - "instant", - "jsonwebtoken", - "once_cell", - "pin-project", - "reqwest 0.11.27", + "multihash", + "rand 0.8.5", "serde", "serde_json", + "serde_yaml", + "sha2 0.10.8", + "ssz_rs", "thiserror", "tokio", - "tokio-tungstenite", - "tracing", - "tracing-futures", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "ws_stream_wasm", + "tokio-stream", ] [[package]] -name = "ethers-signers" -version = "2.0.14" +name = "ethereum-types" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ - "async-trait", - "coins-bip32", - "coins-bip39", - "const-hex", - "elliptic-curve 0.13.8", - "eth-keystore", - "ethers-core", - "rand 0.8.5", - "sha2 0.10.8", - "thiserror", - "tracing", + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "scale-info", + "uint", ] [[package]] -name = "ethers-solc" +name = "ethers-core" version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66244a771d9163282646dbeffe0e6eca4dda4146b6498644e678ac6089b11edd" +checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" dependencies = [ - "cfg-if", + "arrayvec", + "bytes", + "chrono", "const-hex", - "dirs", - "dunce", - "ethers-core", - "glob", - "home", - "md-5", - "num_cpus", - "once_cell", - "path-slash", - "rayon", - "regex", - "semver 1.0.22", + "elliptic-curve 0.13.8", + "ethabi", + "generic-array", + "k256 0.13.3", + "num_enum", + "open-fastrlp", + "rand 0.8.5", + "rlp", "serde", "serde_json", - "solang-parser", - "svm-rs", + "strum", + "tempfile", "thiserror", "tiny-keccak", - "tokio", - "tracing", - "walkdir", - "yansi", + "unicode-xid", ] [[package]] @@ -1597,22 +1918,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - [[package]] name = "fnv" version = "1.0.7" @@ -1643,16 +1948,6 @@ 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" @@ -1722,16 +2017,6 @@ dependencies = [ "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.30" @@ -1755,16 +2040,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" -dependencies = [ - "gloo-timers", - "send_wrapper 0.4.0", -] - [[package]] name = "futures-util" version = "0.3.30" @@ -1784,13 +2059,10 @@ dependencies = [ ] [[package]] -name = "fxhash" -version = "0.2.1" +name = "futures-utils-wasm" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] +checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" [[package]] name = "generic-array" @@ -1821,8 +2093,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -1837,18 +2111,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[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 = "group" version = "0.12.1" @@ -1920,14 +2182,10 @@ name = "hashbrown" version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "hashers" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" dependencies = [ - "fxhash", + "ahash", + "allocator-api2", + "serde", ] [[package]] @@ -1972,15 +2230,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "http" version = "0.2.12" @@ -2113,20 +2362,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.28", - "rustls", - "tokio", - "tokio-rustls", -] - [[package]] name = "hyper-tls" version = "0.5.0" @@ -2176,6 +2411,35 @@ dependencies = [ "tracing", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[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 = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.5.0" @@ -2238,6 +2502,7 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", + "serde", ] [[package]] @@ -2248,6 +2513,7 @@ checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", "hashbrown 0.14.3", + "serde", ] [[package]] @@ -2256,15 +2522,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", -] - [[package]] name = "instant" version = "0.1.12" @@ -2283,6 +2540,21 @@ dependencies = [ "num-traits", ] +[[package]] +name = "interprocess" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67bafc2f5dbdad79a6d925649758d5472647b416028099f0b829d1b67fdd47d3" +dependencies = [ + "doctest-file", + "futures-core", + "libc", + "recvmsg", + "tokio", + "widestring", + "windows-sys 0.52.0", +] + [[package]] name = "ipnet" version = "2.9.0" @@ -2300,9 +2572,18 @@ dependencies = [ [[package]] name = "itertools" -version = "0.11.0" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] @@ -2331,15 +2612,29 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "jsonrpsee-types" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "150d6168405890a7a3231a3c74843f58b8959471f6df76078db2619ddee1d07d" +dependencies = [ + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "jsonwebtoken" -version = "8.3.0" +version = "9.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" dependencies = [ "base64 0.21.7", + "js-sys", "pem", - "ring 0.16.20", + "ring", "serde", "serde_json", "simple_asn1", @@ -2390,41 +2685,14 @@ dependencies = [ "sha3-asm", ] -[[package]] -name = "lalrpop" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" -dependencies = [ - "ascii-canvas", - "bit-set", - "ena", - "itertools 0.11.0", - "lalrpop-util", - "petgraph", - "regex", - "regex-syntax", - "string_cache", - "term", - "tiny-keccak", - "unicode-xid", - "walkdir", -] - -[[package]] -name = "lalrpop-util" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" -dependencies = [ - "regex-automata", -] - [[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 = "libc" @@ -2438,16 +2706,6 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.5.0", - "libc", -] - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -2477,13 +2735,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] -name = "md-5" -version = "0.10.6" +name = "lru" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" dependencies = [ - "cfg-if", - "digest 0.10.7", + "hashbrown 0.14.3", ] [[package]] @@ -2537,6 +2794,27 @@ dependencies = [ "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", + "quote", + "syn 1.0.109", +] + [[package]] name = "multiaddr" version = "0.14.0" @@ -2544,7 +2822,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c580bfdd8803cce319b047d239559a22f809094aaea4ac13902a1fdcfcd4261" dependencies = [ "arrayref", - "bs58 0.4.0", + "bs58", "byteorder", "data-encoding", "multihash", @@ -2600,12 +2878,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -2616,14 +2888,37 @@ dependencies = [ "winapi", ] +[[package]] +name = "num" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3135b08af27d103b0a51f2ae0f8632117b7b185ccf931445affa8df530576a41" +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" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ - "autocfg", - "num-integer", "num-traits", ] @@ -2642,6 +2937,28 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.18" @@ -2683,6 +3000,19 @@ dependencies = [ "syn 2.0.59", ] +[[package]] +name = "nybbles" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95f06be0417d97f81fe4e5c86d7d01b392655a9cac9c19a848aa033e18937b23" +dependencies = [ + "alloy-rlp", + "const-hex", + "proptest", + "serde", + "smallvec", +] + [[package]] name = "object" version = "0.32.2" @@ -2773,12 +3103,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - [[package]] name = "overload" version = "0.1.1" @@ -2840,58 +3164,20 @@ dependencies = [ "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.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[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.8", -] - -[[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 = "pem" -version = "1.1.1" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" dependencies = [ - "base64 0.13.1", + "base64 0.22.0", + "serde", ] [[package]] @@ -2911,16 +3197,6 @@ dependencies = [ "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.2.6", -] - [[package]] name = "pharos" version = "0.5.3" @@ -2931,57 +3207,6 @@ dependencies = [ "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", - "quote", - "syn 2.0.59", -] - -[[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.5" @@ -3052,22 +3277,6 @@ 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 = "prettyplease" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac2cf0f2e4f42b49f5ffd07dae8d746508ef7526c13940e5f524012ae6c6550" -dependencies = [ - "proc-macro2", - "syn 2.0.59", -] - [[package]] name = "primitive-types" version = "0.12.2" @@ -3284,6 +3493,12 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "recvmsg" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" + [[package]] name = "redox_syscall" version = "0.4.1" @@ -3293,17 +3508,6 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_users" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" -dependencies = [ - "getrandom 0.2.14", - "libredox", - "thiserror", -] - [[package]] name = "regex" version = "1.10.4" @@ -3348,7 +3552,6 @@ dependencies = [ "http 0.2.12", "http-body 0.4.6", "hyper 0.14.28", - "hyper-rustls", "hyper-tls 0.5.0", "ipnet", "js-sys", @@ -3358,7 +3561,6 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", "rustls-pemfile 1.0.4", "serde", "serde_json", @@ -3367,7 +3569,6 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", - "tokio-rustls", "tokio-util", "tower-service", "url", @@ -3375,7 +3576,6 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots", "winreg 0.50.0", ] @@ -3421,6 +3621,163 @@ dependencies = [ "winreg 0.52.0", ] +[[package]] +name = "reth-codecs" +version = "0.2.0-beta.5" +source = "git+https://github.com/paradigmxyz/reth?rev=71c404d#71c404d9cb7a678d4c0f6442a9c2b8449529fe2a" +dependencies = [ + "alloy-primitives", + "bytes", + "reth-codecs-derive", +] + +[[package]] +name = "reth-codecs-derive" +version = "0.2.0-beta.5" +source = "git+https://github.com/paradigmxyz/reth?rev=71c404d#71c404d9cb7a678d4c0f6442a9c2b8449529fe2a" +dependencies = [ + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "reth-ethereum-forks" +version = "0.2.0-beta.5" +source = "git+https://github.com/paradigmxyz/reth?rev=71c404d#71c404d9cb7a678d4c0f6442a9c2b8449529fe2a" +dependencies = [ + "alloy-chains", + "alloy-primitives", + "alloy-rlp", + "crc", + "serde", + "thiserror", +] + +[[package]] +name = "reth-primitives" +version = "0.2.0-beta.5" +source = "git+https://github.com/paradigmxyz/reth?rev=71c404d#71c404d9cb7a678d4c0f6442a9c2b8449529fe2a" +dependencies = [ + "alloy-chains", + "alloy-eips 0.1.0", + "alloy-genesis 0.1.0", + "alloy-primitives", + "alloy-rlp", + "alloy-trie", + "byteorder", + "bytes", + "c-kzg", + "cfg-if", + "derive_more", + "enr 0.10.0", + "itertools 0.12.1", + "modular-bitfield", + "nybbles", + "once_cell", + "rayon", + "reth-codecs", + "reth-ethereum-forks", + "reth-rpc-types", + "revm", + "revm-primitives", + "roaring", + "secp256k1 0.27.0", + "serde", + "serde_json", + "serde_with", + "sha2 0.10.8", + "strum", + "tempfile", + "thiserror", + "zstd", +] + +[[package]] +name = "reth-rpc-types" +version = "0.2.0-beta.5" +source = "git+https://github.com/paradigmxyz/reth?rev=71c404d#71c404d9cb7a678d4c0f6442a9c2b8449529fe2a" +dependencies = [ + "alloy-genesis 0.1.0", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types 0.1.0", + "alloy-rpc-types-engine 0.1.0", + "alloy-rpc-types-trace", + "enr 0.10.0", + "jsonrpsee-types", + "secp256k1 0.27.0", + "serde", + "serde_json", + "serde_with", + "thiserror", + "url", +] + +[[package]] +name = "revm" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72a454c1c650b2b2e23f0c461af09e6c31e1d15e1cbebe905a701c46b8a50afc" +dependencies = [ + "auto_impl", + "cfg-if", + "dyn-clone", + "revm-interpreter", + "revm-precompile", + "serde", + "serde_json", +] + +[[package]] +name = "revm-interpreter" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d322f2730cd300e99d271a1704a2dfb8973d832428f5aa282aaa40e2473b5eec" +dependencies = [ + "revm-primitives", + "serde", +] + +[[package]] +name = "revm-precompile" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "931f692f3f4fc72ec39d5d270f8e9d208c4a6008de7590ee96cf948e3b6d3f8d" +dependencies = [ + "aurora-engine-modexp", + "c-kzg", + "k256 0.13.3", + "once_cell", + "revm-primitives", + "ripemd", + "secp256k1 0.28.2", + "sha2 0.10.8", + "substrate-bn", +] + +[[package]] +name = "revm-primitives" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbbc9640790cebcb731289afb7a7d96d16ad94afeb64b5d0b66443bd151e79d6" +dependencies = [ + "alloy-primitives", + "auto_impl", + "bitflags 2.5.0", + "bitvec", + "c-kzg", + "cfg-if", + "derive_more", + "dyn-clone", + "enumn", + "hashbrown 0.14.3", + "hex", + "once_cell", + "serde", +] + [[package]] name = "rfc6979" version = "0.3.1" @@ -3442,21 +3799,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", -] - [[package]] name = "ring" version = "0.17.8" @@ -3468,7 +3810,7 @@ dependencies = [ "getrandom 0.2.14", "libc", "spin 0.9.8", - "untrusted 0.9.0", + "untrusted", "windows-sys 0.52.0", ] @@ -3503,6 +3845,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "roaring" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f4b84ba6e838ceb47b41de5194a60244fac43d9fe03b71dbe8c5a201081d6d1" +dependencies = [ + "bytemuck", + "byteorder", +] + [[package]] name = "ruint" version = "1.12.3" @@ -3578,14 +3930,16 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.10" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +checksum = "ebbbdb961df0ad3f2652da8f3fdc4b36122f568f968f45ad3316f26c025c677b" dependencies = [ - "log", - "ring 0.17.8", + "once_cell", + "ring", + "rustls-pki-types", "rustls-webpki", - "sct", + "subtle", + "zeroize", ] [[package]] @@ -3615,12 +3969,13 @@ checksum = "ecd36cc4259e3e4514335c4a138c6b43171a8d61d8f5c9348f9fc7529416f247" [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.102.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] @@ -3647,24 +4002,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" -[[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -dependencies = [ - "cipher", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "scale-info" version = "2.11.2" @@ -3704,28 +4041,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scrypt" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" -dependencies = [ - "hmac", - "pbkdf2 0.11.0", - "salsa20", - "sha2 0.10.8", -] - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", -] - [[package]] name = "sec1" version = "0.3.0" @@ -3754,6 +4069,43 @@ dependencies = [ "zeroize", ] +[[package]] +name = "secp256k1" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +dependencies = [ + "secp256k1-sys 0.8.1", +] + +[[package]] +name = "secp256k1" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "rand 0.8.5", + "secp256k1-sys 0.9.2", +] + +[[package]] +name = "secp256k1-sys" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" +dependencies = [ + "cc", +] + +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + [[package]] name = "security-framework" version = "2.10.0" @@ -3791,9 +4143,6 @@ name = "semver" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" -dependencies = [ - "serde", -] [[package]] name = "semver-parser" @@ -3804,12 +4153,6 @@ 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" @@ -3842,6 +4185,7 @@ version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" dependencies = [ + "indexmap 2.2.6", "itoa", "ryu", "serde", @@ -3858,15 +4202,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "serde_spanned" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3879,6 +4214,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" +dependencies = [ + "base64 0.22.0", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.6", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.59", +] + [[package]] name = "serde_yaml" version = "0.8.26" @@ -3996,12 +4361,6 @@ dependencies = [ "time", ] -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - [[package]] name = "slab" version = "0.4.9" @@ -4016,6 +4375,9 @@ name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] [[package]] name = "socket2" @@ -4027,20 +4389,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "solang-parser" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" -dependencies = [ - "itertools 0.11.0", - "lalrpop", - "lalrpop-util", - "phf", - "thiserror", - "unicode-xid", -] - [[package]] name = "spin" version = "0.5.2" @@ -4101,19 +4449,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", -] - [[package]] name = "strsim" version = "0.11.1" @@ -4143,30 +4478,23 @@ dependencies = [ ] [[package]] -name = "subtle" -version = "2.5.0" +name = "substrate-bn" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "72b5bbfa79abbae15dd642ea8176a21a635ff3c00059961d1ea27ad04e5b441c" +dependencies = [ + "byteorder", + "crunchy", + "lazy_static", + "rand 0.8.5", + "rustc-hex", +] [[package]] -name = "svm-rs" -version = "0.3.5" +name = "subtle" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11297baafe5fa0c99d5722458eac6a5e25c01eb1b8e5cd137f54079093daa7a4" -dependencies = [ - "dirs", - "fs2", - "hex", - "once_cell", - "reqwest 0.11.27", - "semver 1.0.22", - "serde", - "serde_json", - "sha2 0.10.8", - "thiserror", - "url", - "zip", -] +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" @@ -4190,6 +4518,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c837dc8852cb7074e46b444afb81783140dab12c58867b49fb3898fbafedf7ea" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.59", +] + [[package]] name = "sync_wrapper" version = "0.1.2" @@ -4247,17 +4587,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "term" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" -dependencies = [ - "dirs-next", - "rustversion", - "winapi", -] - [[package]] name = "thiserror" version = "1.0.58" @@ -4394,11 +4723,12 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ "rustls", + "rustls-pki-types", "tokio", ] @@ -4411,17 +4741,19 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", + "tokio-util", ] [[package]] name = "tokio-tungstenite" -version = "0.20.1" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" dependencies = [ "futures-util", "log", "rustls", + "rustls-pki-types", "tokio", "tokio-rustls", "tungstenite", @@ -4442,26 +4774,11 @@ dependencies = [ "tracing", ] -[[package]] -name = "toml" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.22.9", -] - [[package]] name = "toml_datetime" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" -dependencies = [ - "serde", -] [[package]] name = "toml_edit" @@ -4496,19 +4813,6 @@ dependencies = [ "winnow 0.5.40", ] -[[package]] -name = "toml_edit" -version = "0.22.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" -dependencies = [ - "indexmap 2.2.6", - "serde", - "serde_spanned", - "toml_datetime", - "winnow 0.6.6", -] - [[package]] name = "tower" version = "0.4.13" @@ -4570,16 +4874,6 @@ dependencies = [ "valuable", ] -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - [[package]] name = "tracing-log" version = "0.2.0" @@ -4613,21 +4907,21 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.20.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" dependencies = [ "byteorder", "bytes", "data-encoding", - "http 0.2.12", + "http 1.1.0", "httparse", "log", "rand 0.8.5", "rustls", + "rustls-pki-types", "sha1", "thiserror", - "url", "utf-8", ] @@ -4682,6 +4976,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + [[package]] name = "unicode-xid" version = "0.2.4" @@ -4694,12 +4994,6 @@ 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 = "untrusted" version = "0.9.0" @@ -4708,9 +5002,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -4730,16 +5024,6 @@ 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.14", - "serde", -] - [[package]] name = "valuable" version = "0.1.0" @@ -4773,16 +5057,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -4895,9 +5169,18 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "widestring" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" [[package]] name = "winapi" @@ -4915,21 +5198,21 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" -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-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -5119,7 +5402,7 @@ dependencies = [ "log", "pharos", "rustc_version 0.4.0", - "send_wrapper 0.6.0", + "send_wrapper", "thiserror", "wasm-bindgen", "wasm-bindgen-futures", @@ -5145,10 +5428,24 @@ dependencies = [ ] [[package]] -name = "yansi" -version = "0.5.1" +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] [[package]] name = "zeroize" @@ -5170,42 +5467,21 @@ dependencies = [ "syn 2.0.59", ] -[[package]] -name = "zip" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" -dependencies = [ - "aes", - "byteorder", - "bzip2", - "constant_time_eq", - "crc32fast", - "crossbeam-utils", - "flate2", - "hmac", - "pbkdf2 0.11.0", - "sha1", - "time", - "zstd", -] - [[package]] name = "zstd" -version = "0.11.2+zstd.1.5.2" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +checksum = "fa556e971e7b568dc775c136fc9de8c779b1c2fc3a63defaafadffdbd3181afa" dependencies = [ - "libc", "zstd-sys", ] diff --git a/bolt-spammer-helder/Cargo.toml b/bolt-spammer-helder/Cargo.toml index a1434c28..52091501 100644 --- a/bolt-spammer-helder/Cargo.toml +++ b/bolt-spammer-helder/Cargo.toml @@ -8,7 +8,6 @@ edition = "2021" [dependencies] tokio = { version = "1.37.0", features = ["full"] } eyre = "0.6.12" -ethers = "2.0.14" rand = "0.8.5" clap = { version = "4.5.4", features = ["derive", "env"] } tracing = "0.1.40" @@ -18,3 +17,6 @@ serde_json = "1.0.115" reqwest = "0.12.3" beacon-api-client = { git = "https://github.com/ralexstokes/ethereum-consensus", rev = "cf3c404" } dotenvy = "0.15.7" +alloy = { version = "0.2.0", features = ["full"] } +url = "2.5.2" +reth-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "71c404d" } \ No newline at end of file diff --git a/bolt-spammer-helder/rustfmt.toml b/bolt-spammer-helder/rustfmt.toml new file mode 100644 index 00000000..68c3c930 --- /dev/null +++ b/bolt-spammer-helder/rustfmt.toml @@ -0,0 +1,11 @@ +reorder_imports = true +imports_granularity = "Crate" +use_small_heuristics = "Max" +comment_width = 100 +wrap_comments = true +binop_separator = "Back" +trailing_comma = "Vertical" +trailing_semicolon = false +use_field_init_shorthand = true +format_code_in_doc_comments = true +doc_comment_code_block_width = 100 diff --git a/bolt-spammer-helder/src/contract.rs b/bolt-spammer-helder/src/contract.rs index c56a8009..4e8a1e43 100644 --- a/bolt-spammer-helder/src/contract.rs +++ b/bolt-spammer-helder/src/contract.rs @@ -1,98 +1,98 @@ -use ethers::{ - abi::{Abi, Token}, - contract::{Contract, ContractError}, - providers::{Http, Provider}, - types::Address, -}; -use eyre::{eyre, Result}; -use std::{path::PathBuf, sync::Arc}; +// use ethers::{ +// abi::{Abi, Token}, +// contract::{Contract, ContractError}, +// providers::{Http, Provider}, +// types::Address, +// }; +// use eyre::{eyre, Result}; +// use std::{path::PathBuf, sync::Arc}; -use beacon_api_client::ProposerDuty; +// use beacon_api_client::ProposerDuty; -/// Returns the next pre-confirmation slot and proposer RPC URL from the registry contract -/// -/// Fails if no registered validators are found in the lookahead -pub async fn next_preconfer_from_registry( - proposer_duties: Vec, - abi_path: PathBuf, - registry_address: Address, - eth_provider: Arc>, -) -> Result<(String, u64)> { - let contract_abi: Abi = serde_json::from_str(&std::fs::read_to_string(abi_path)?)?; - let registry_contract = Contract::new(registry_address, contract_abi, eth_provider); - let mut next_preconfer_slot = 0; - let mut proposer_rpc = String::new(); - for duty in proposer_duties { - let res = registry_contract - .method::("getOperatorForValidator", duty.validator_index as u64)? - .call() - .await; - match res { - Ok(token_raw) => { - next_preconfer_slot = duty.slot; - proposer_rpc = try_parse_url_from_token(token_raw)?; - tracing::info!( - "pre-confirmation will be sent for slot {} to validator with index {} at url {}", - duty.slot, - duty.validator_index, - proposer_rpc, - ); - break; - } - // Such validator index is not registered, continue - Err(ContractError::Revert(_)) => { - tracing::warn!( - "validator index {} not registered, skipping", - duty.validator_index - ); - continue; - } - Err(e) => { - return Err(eyre!( - "unexpected error while calling registry contract: {:?}", - e - )); - } - } - } +// /// Returns the next pre-confirmation slot and proposer RPC URL from the registry contract +// /// +// /// Fails if no registered validators are found in the lookahead +// pub async fn next_preconfer_from_registry( +// proposer_duties: Vec, +// abi_path: PathBuf, +// registry_address: Address, +// eth_provider: Arc>, +// ) -> Result<(String, u64)> { +// let contract_abi: Abi = serde_json::from_str(&std::fs::read_to_string(abi_path)?)?; +// let registry_contract = Contract::new(registry_address, contract_abi, eth_provider); +// let mut next_preconfer_slot = 0; +// let mut proposer_rpc = String::new(); +// for duty in proposer_duties { +// let res = registry_contract +// .method::("getOperatorForValidator", duty.validator_index as u64)? +// .call() +// .await; +// match res { +// Ok(token_raw) => { +// next_preconfer_slot = duty.slot; +// proposer_rpc = try_parse_url_from_token(token_raw)?; +// tracing::info!( +// "pre-confirmation will be sent for slot {} to validator with index {} at url {}", +// duty.slot, +// duty.validator_index, +// proposer_rpc, +// ); +// break; +// } +// // Such validator index is not registered, continue +// Err(ContractError::Revert(_)) => { +// tracing::warn!( +// "validator index {} not registered, skipping", +// duty.validator_index +// ); +// continue; +// } +// Err(e) => { +// return Err(eyre!( +// "unexpected error while calling registry contract: {:?}", +// e +// )); +// } +// } +// } - if next_preconfer_slot == 0 { - return Err(eyre!("no registered validators found in the lookahead")); - }; +// if next_preconfer_slot == 0 { +// return Err(eyre!("no registered validators found in the lookahead")); +// }; - Ok((proposer_rpc, next_preconfer_slot)) -} +// Ok((proposer_rpc, next_preconfer_slot)) +// } -/// Tries to parse the registered validator's sidecars URL from the token returned -/// by the view call to the registry smart contract -/// -/// Reference: https://github.com/chainbound/bolt/blob/e71c61aa97dcd7b08fad23067caf18bc90a582cd/bolt-contracts/src/interfaces/IBoltRegistry.sol#L6-L16 -pub fn try_parse_url_from_token(token: Token) -> Result { - let Token::Tuple(registrant_struct_fields) = token else { - return Err(eyre!("register call result is not a struct")); - }; +// /// Tries to parse the registered validator's sidecars URL from the token returned +// /// by the view call to the registry smart contract +// /// +// /// Reference: https://github.com/chainbound/bolt/blob/e71c61aa97dcd7b08fad23067caf18bc90a582cd/bolt-contracts/src/interfaces/IBoltRegistry.sol#L6-L16 +// pub fn try_parse_url_from_token(token: Token) -> Result { +// let Token::Tuple(registrant_struct_fields) = token else { +// return Err(eyre!("register call result is not a struct")); +// }; - let Some(metadata_token) = registrant_struct_fields.last() else { - return Err(eyre!("register call result is a struct with no fields")); - }; +// let Some(metadata_token) = registrant_struct_fields.last() else { +// return Err(eyre!("register call result is a struct with no fields")); +// }; - let Token::Tuple(metadata_fields) = metadata_token else { - return Err(eyre!( - "register call result is a struct without the `metadata` field" - )); - }; +// let Token::Tuple(metadata_fields) = metadata_token else { +// return Err(eyre!( +// "register call result is a struct without the `metadata` field" +// )); +// }; - let Some(rpc_token) = metadata_fields.first() else { - return Err(eyre!( - "register call result has a `metadata` field, but the struct is empty" - )); - }; +// let Some(rpc_token) = metadata_fields.first() else { +// return Err(eyre!( +// "register call result has a `metadata` field, but the struct is empty" +// )); +// }; - let Token::String(rpc) = rpc_token else { - return Err(eyre!( - "register call result has a `metadata` field, but its `rpc` property is not a string" - )); - }; +// let Token::String(rpc) = rpc_token else { +// return Err(eyre!( +// "register call result has a `metadata` field, but its `rpc` property is not a string" +// )); +// }; - Ok(rpc.clone()) -} +// Ok(rpc.clone()) +// } diff --git a/bolt-spammer-helder/src/lib.rs b/bolt-spammer-helder/src/lib.rs index abc17392..faf4efac 100644 --- a/bolt-spammer-helder/src/lib.rs +++ b/bolt-spammer-helder/src/lib.rs @@ -1,3 +1,6 @@ pub mod constants; -pub mod contract; +/// The on-chain registry view for querying active Bolt sidecars +pub mod onchain_registry; +use onchain_registry::BoltRegistry; + pub mod utils; diff --git a/bolt-spammer-helder/src/main.rs b/bolt-spammer-helder/src/main.rs index 23691019..d21f1502 100644 --- a/bolt-spammer-helder/src/main.rs +++ b/bolt-spammer-helder/src/main.rs @@ -1,40 +1,31 @@ use std::{path::PathBuf, str::FromStr, sync::Arc}; +use alloy::{ + hex, + network::EthereumWallet, + primitives::{utils::keccak256, B256}, + providers::{Provider, ProviderBuilder}, + signers::{local::PrivateKeySigner, Signer}, +}; use beacon_api_client::mainnet::Client as BeaconApiClient; use bolt_spammer_helder::{ constants::SLOTS_PER_EPOCH, - contract::next_preconfer_from_registry, + onchain_registry::BoltRegistry, utils::{current_slot, generate_random_tx, prepare_rpc_request, sign_transaction}, }; use clap::Parser; -use ethers::{ - middleware::{Middleware, SignerMiddleware}, - providers::{Http, Provider}, - signers::LocalWallet, - types::{Address, H256}, - utils::hex, -}; use eyre::Result; use reqwest::Url; +use reth_primitives::Address; use tracing::info; #[derive(Parser)] struct Opts { - #[clap( - short = 'p', - long, - default_value = "https://rpc.helder-devnets.xyz", - env - )] + #[clap(short = 'p', long, default_value = "https://rpc.helder-devnets.xyz", env)] el_provider_url: String, #[clap(short = 'c', long, default_value = "http://localhost:4000", env)] beacon_client_url: Url, - #[clap( - short = 'r', - long, - default_value = "0xdF11D829eeC4C192774F3Ec171D822f6Cb4C14d9", - env - )] + #[clap(short = 'r', long, default_value = "0xdF11D829eeC4C192774F3Ec171D822f6Cb4C14d9", env)] registry_address: Address, #[clap(short = 'k', long, env)] private_key: String, @@ -51,9 +42,9 @@ async fn main() -> Result<()> { tracing::info!("loaded environment variables from {:?}", path); let opts = Opts::parse(); - let wallet = LocalWallet::from_str(&opts.private_key)?; - let eth_provider = Arc::new(Provider::::try_from(opts.el_provider_url)?); - let transaction_signer = SignerMiddleware::new(eth_provider.clone(), wallet); + let wallet: PrivateKeySigner = opts.private_key.parse().expect("should parse private key"); + let eth_provider = ProviderBuilder::new().on_http(opts.el_provider_url.parse()?); + let transaction_signer: EthereumWallet = wallet.into(); let beacon_api_client = BeaconApiClient::new(opts.beacon_client_url); @@ -74,37 +65,34 @@ async fn main() -> Result<()> { .filter(|duty| duty.slot > current_slot) .collect::>(); - let (proposer_rpc, next_preconfer_slot) = match next_preconfer_from_registry( - proposer_duties, - opts.registry_abi_path, - opts.registry_address, - eth_provider.clone(), - ) - .await - { - Ok(res) => res, - Err(e) => { - tracing::warn!(?e); - return Ok(()); - } - }; + let registry_url = Url::from_str(&opts.el_provider_url)?; + let registry = BoltRegistry::new(registry_url, opts.registry_address); + + let (proposer_rpc, next_preconfer_slot) = + match registry.next_preconfer_from_registry(proposer_duties).await { + Ok(Some(res)) => res, + Ok(None) => { + // Handle the case where there is no next preconfer slot + return Ok(()); + } + Err(e) => { + tracing::warn!(?e); + return Ok(()); + } + }; let mut tx = generate_random_tx(); - transaction_signer.fill_transaction(&mut tx, None).await?; - let (tx_hash, tx_rlp) = sign_transaction(transaction_signer.signer(), tx).await?; + let (tx_hash, tx_rlp) = sign_transaction(&transaction_signer, tx).await?; let message_digest = { let mut data = Vec::new(); data.extend_from_slice(&next_preconfer_slot.to_le_bytes()); data.extend_from_slice(hex::decode(tx_hash.trim_start_matches("0x"))?.as_slice()); - H256::from(ethers::utils::keccak256(data)) + B256::from(keccak256(data)) }; - let signature = transaction_signer - .signer() - .sign_hash(message_digest)? - .to_string(); + let signature = wallet.sign_message(&message_digest).unwrap(); let request = prepare_rpc_request( "bolt_inclusionPreconfirmation", diff --git a/bolt-spammer-helder/src/onchain_registry.rs b/bolt-spammer-helder/src/onchain_registry.rs new file mode 100644 index 00000000..62bfdd0b --- /dev/null +++ b/bolt-spammer-helder/src/onchain_registry.rs @@ -0,0 +1,210 @@ +use std::str::FromStr; + +use alloy::{ + contract::{Error as ContractError, Result as ContractResult}, + primitives::{Address, Bytes}, + providers::{ProviderBuilder, RootProvider}, + sol, + sol_types::{Error as SolError, SolInterface}, + transports::{http::Http, TransportError}, +}; +use reqwest::Client; +use url::Url; + +use beacon_api_client::ProposerDuty; +use BoltRegistryContract::{BoltRegistryContractErrors, BoltRegistryContractInstance, Registrant}; + +#[derive(Debug, Clone)] +pub struct BoltRegistry(BoltRegistryContractInstance, RootProvider>>); + +impl BoltRegistry { + pub fn new>(execution_client_url: U, registry_address: Address) -> Self { + let provider = ProviderBuilder::new().on_http(execution_client_url.into()); + let registry = BoltRegistryContract::new(registry_address, provider); + + Self(registry) + } + + /// Gets the sidecar RPC URL for a given validator index. + /// + /// Returns Ok(None) if the operator is not found in the registry. + pub async fn get_sidecar_rpc_url_for_validator( + &self, + validator_index: u64, + ) -> ContractResult> { + let registrant = self.get_registrant_for_validator(validator_index).await?; + Ok(registrant.map(|r| r.metadata.rpc)) + } + + /// Gets the operator for a given validator index. + /// + /// Returns Ok(None) if the operator is not found in the registry. + pub async fn get_registrant_for_validator( + &self, + validator_index: u64, + ) -> ContractResult> { + let returndata = self.0.getOperatorForValidator(validator_index).call().await; + + // TODO: clean this after https://github.com/alloy-rs/alloy/issues/787 is merged + let error = match returndata.map(|data| data._0) { + Ok(registrant) => return Ok(Some(registrant)), + Err(error) => match error { + ContractError::TransportError(TransportError::ErrorResp(err)) => { + let data = err.data.unwrap_or_default(); + let data = data.get().trim_matches('"'); + let data = Bytes::from_str(data).unwrap_or_default(); + + BoltRegistryContractErrors::abi_decode(&data, true)? + } + e => return Err(e), + }, + }; + + if matches!(error, BoltRegistryContractErrors::NotFound(_)) { + Ok(None) + } else { + Err(SolError::custom(format!( + "unexpected Solidity error selector: {:?}", + error.selector() + )) + .into()) + } + } + + /// Gets the next pre-confirmation slot and proposer RPC URL from the registry contract + /// + /// Returns Ok(None) if no registered validators are found in the lookahead + pub async fn next_preconfer_from_registry( + &self, + proposer_duties: Vec, + ) -> ContractResult> { + let mut next_preconfer_slot = 0; + let mut proposer_rpc = String::new(); + + for duty in proposer_duties { + let res = self.get_registrant_for_validator(duty.validator_index as u64).await; + match res { + Ok(Some(token_raw)) => { + next_preconfer_slot = duty.slot; + proposer_rpc = token_raw.metadata.rpc; + tracing::info!( + "pre-confirmation will be sent for slot {} to validator with index {} at url {}", + duty.slot, + duty.validator_index, + proposer_rpc, + ); + break; + } + Ok(None) => { + // Handle the case where the result is Ok but contains None. + // You might want to continue to the next iteration, log something, or handle it + // in another way. + tracing::info!( + "No registrant found for validator index {}", + duty.validator_index + ); + continue; + } + Err(e) => { + return Err(e); + } + } + } + + if next_preconfer_slot == 0 { + return Ok(None); + }; + + Ok(Some((proposer_rpc, next_preconfer_slot))) + } +} + +sol! { + #[sol(rpc)] + interface BoltRegistryContract { + #[derive(Debug, Default)] + struct Registrant { + address operator; + uint64[] validatorIndexes; + uint256 enteredAt; + uint256 exitInitiatedAt; + uint256 balance; + Status status; + MetaData metadata; + } + + #[derive(Debug, Default)] + enum Status { + #[default] + INACTIVE, + ACTIVE, + FROZEN, + EXITING + } + + #[derive(Debug, Default)] + struct MetaData { + string rpc; + bytes extra; + } + + function getOperatorForValidator(uint64 _validatorIndex) external view returns (Registrant memory); + + error NotFound(); + error Unauthorized(); + } +} + +#[cfg(test)] +mod tests { + use std::str::FromStr; + + use alloy::{primitives::U256, sol_types::SolCall}; + use BoltRegistryContract::{MetaData, Status}; + + use super::*; + + #[test] + fn test_abigen() { + assert_eq!(BoltRegistryContract::getOperatorForValidatorCall::SELECTOR, [238, 124, 139, 77]) + } + + #[tokio::test] + async fn test_get_operators_helder() -> eyre::Result<()> { + let registry = BoltRegistry::new( + Url::parse("http://remotebeast:4485")?, + Address::from_str("0xdF11D829eeC4C192774F3Ec171D822f6Cb4C14d9")?, + ); + + let registrant = registry.get_registrant_for_validator(0).await; + assert!(matches!(registrant, Ok(None))); + + let registrant = match registry.get_registrant_for_validator(2150).await { + Ok(Some(registrant)) => registrant, + e => panic!("unexpected error reading from registry: {:?}", e), + }; + + let expected = Registrant { + operator: Address::from_str("0xad3cd1b81c80f4a495d6552ae6423508492a27f8")?, + validatorIndexes: (2145..2245).collect(), + enteredAt: U256::from(1720183620), + exitInitiatedAt: U256::from(0), + balance: U256::from(10000000000000000000u128), + status: Status::ACTIVE, + metadata: MetaData { + rpc: "http://135.181.191.125:8000".to_string(), + extra: Bytes::from_str("0x")?, + }, + }; + + assert_eq!(registrant.metadata.rpc, expected.metadata.rpc); + assert_eq!(registrant.metadata.extra, expected.metadata.extra); + assert_eq!(registrant.operator, expected.operator); + assert_eq!(registrant.validatorIndexes, expected.validatorIndexes); + assert_eq!(registrant.enteredAt, expected.enteredAt); + assert_eq!(registrant.exitInitiatedAt, expected.exitInitiatedAt); + assert_eq!(registrant.balance, expected.balance); + + Ok(()) + } +} diff --git a/bolt-spammer-helder/src/utils.rs b/bolt-spammer-helder/src/utils.rs index ef0862f8..35ff2516 100644 --- a/bolt-spammer-helder/src/utils.rs +++ b/bolt-spammer-helder/src/utils.rs @@ -1,43 +1,69 @@ -use beacon_api_client::{mainnet::Client as BeaconApiClient, BlockId}; -use ethers::{ - signers::Signer, - types::{transaction::eip2718::TypedTransaction, Eip1559TransactionRequest}, - utils::hex, +// use alloy::alloy_eips::eip2718::Encodable2718; +use alloy::{ + consensus::{BlobTransactionSidecar, SidecarBuilder, SimpleCoder, TxEnvelope}, + hex, + network::{eip2718::Encodable2718, EthereumWallet, TransactionBuilder}, + primitives::{Address, U256}, + rpc::types::TransactionRequest, }; +use beacon_api_client::{mainnet::Client as BeaconApiClient, BlockId}; +use std::str::FromStr; +// use ethers::{ +// signers::Signer, +// types::{transaction::eip2718::TypedTransaction, Eip1559TransactionRequest}, +// utils::hex, +// }; use eyre::Result; use rand::{thread_rng, Rng}; +use reth_primitives::TransactionSigned; use serde_json::Value; use crate::constants::{DEAD_ADDRESS, HELDER_TESTNET_CHAIN_ID, NOICE_GAS_PRICE}; /// Generates random ETH transfer to `DEAD_ADDRESS` with a random payload. -pub fn generate_random_tx() -> TypedTransaction { - let tx = Eip1559TransactionRequest::new() - .to(DEAD_ADDRESS) - .value("0x69420") - .chain_id(HELDER_TESTNET_CHAIN_ID) - .data(vec![thread_rng().gen::(); 32]); +pub fn generate_random_tx() -> TransactionRequest { + let tx: TransactionRequest = TransactionRequest::default() + .with_to(Address::from_str(DEAD_ADDRESS).unwrap()) + .with_chain_id(HELDER_TESTNET_CHAIN_ID) + .with_value(U256::from(thread_rng().gen_range(1..100))) + .with_gas_price(NOICE_GAS_PRICE); + + tx +} + +/// Generate random transaction with blob (eip4844) +pub fn generate_random_blob_tx() -> TransactionRequest { + let sidecar: SidecarBuilder = SidecarBuilder::from_slice(b"Blobs are fun!"); + let sidecar: BlobTransactionSidecar = sidecar.build().unwrap(); - let mut typed: TypedTransaction = tx.into(); + let dead_address = Address::from_str(DEAD_ADDRESS).unwrap(); - typed.set_gas_price(NOICE_GAS_PRICE); + let tx: TransactionRequest = TransactionRequest::default() + .with_to(dead_address) + .with_chain_id(HELDER_TESTNET_CHAIN_ID) + .with_value(U256::from(100)) + .with_gas_price(NOICE_GAS_PRICE) + .with_blob_sidecar(sidecar); - typed + tx } /// Signs a [TypedTransaction] with the given [Signer], returning a tuple /// with the transaction hash and the RLP-encoded signed transaction. -pub async fn sign_transaction( - signer: &S, - tx: TypedTransaction, +pub async fn sign_transaction( + signer: &EthereumWallet, + tx: TransactionRequest, ) -> Result<(String, String)> { - let Ok(signature) = signer.sign_transaction(&tx).await else { - eyre::bail!("Failed to sign transaction") - }; + let signed: TxEnvelope = tx.build(signer).await.unwrap(); + let tx_signed_bytes = signed.encoded_2718(); + let tx_signed = TransactionSigned::decode_enveloped(&mut tx_signed_bytes.as_slice()).unwrap(); + // let Ok(signature) = signer.sign_transaction(&tx).await else { + // eyre::bail!("Failed to sign transaction") + // }; - let rlp_signed_tx = tx.rlp_signed(&signature); - let tx_hash = format!("0x{:x}", tx.hash(&signature)); - let hex_rlp_signed_tx = format!("0x{}", hex::encode(rlp_signed_tx)); + // let rlp_signed_tx = tx.rlp_signed(&signature); + let tx_hash = tx_signed.hash().to_string(); + let hex_rlp_signed_tx = format!("0x{}", hex::encode(tx_signed_bytes)); Ok((tx_hash, hex_rlp_signed_tx)) } @@ -53,11 +79,7 @@ pub fn prepare_rpc_request(method: &str, params: Vec) -> Value { /// Returns the current slot pub async fn current_slot(beacon_api_client: &BeaconApiClient) -> Result { - let current_slot = beacon_api_client - .get_beacon_header(BlockId::Head) - .await? - .header - .message - .slot; + let current_slot = + beacon_api_client.get_beacon_header(BlockId::Head).await?.header.message.slot; Ok(current_slot) } From 960ab5df4949b59b3352e4ebb5eea55f33404941 Mon Sep 17 00:00:00 2001 From: Naman Garg <0708ng@gmail.com> Date: Wed, 17 Jul 2024 17:04:55 +0530 Subject: [PATCH 3/9] feat(spammer): add blob flag --- bolt-spammer-helder/src/main.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bolt-spammer-helder/src/main.rs b/bolt-spammer-helder/src/main.rs index d21f1502..db47206c 100644 --- a/bolt-spammer-helder/src/main.rs +++ b/bolt-spammer-helder/src/main.rs @@ -11,7 +11,10 @@ use beacon_api_client::mainnet::Client as BeaconApiClient; use bolt_spammer_helder::{ constants::SLOTS_PER_EPOCH, onchain_registry::BoltRegistry, - utils::{current_slot, generate_random_tx, prepare_rpc_request, sign_transaction}, + utils::{ + current_slot, generate_random_blob_tx, generate_random_tx, prepare_rpc_request, + sign_transaction, + }, }; use clap::Parser; use eyre::Result; @@ -31,6 +34,9 @@ struct Opts { private_key: String, #[clap(short = 'a', long, env, default_value = "./registry_abi.json")] registry_abi_path: PathBuf, + // Flag for blob mode + #[clap(short, long, default_value = "false")] + blob: bool, } #[tokio::main] @@ -81,7 +87,7 @@ async fn main() -> Result<()> { } }; - let mut tx = generate_random_tx(); + let mut tx = if opts.blob { generate_random_blob_tx() } else { generate_random_tx() }; let (tx_hash, tx_rlp) = sign_transaction(&transaction_signer, tx).await?; From c9016aecca17cfa781910c1a01c5196c8f79352c Mon Sep 17 00:00:00 2001 From: Naman Garg <0708ng@gmail.com> Date: Wed, 17 Jul 2024 17:19:06 +0530 Subject: [PATCH 4/9] chore: rename to contract --- bolt-spammer-helder/src/contract.rs | 308 +++++++++++++------- bolt-spammer-helder/src/lib.rs | 4 +- bolt-spammer-helder/src/main.rs | 4 +- bolt-spammer-helder/src/onchain_registry.rs | 210 ------------- 4 files changed, 214 insertions(+), 312 deletions(-) delete mode 100644 bolt-spammer-helder/src/onchain_registry.rs diff --git a/bolt-spammer-helder/src/contract.rs b/bolt-spammer-helder/src/contract.rs index 4e8a1e43..62bfdd0b 100644 --- a/bolt-spammer-helder/src/contract.rs +++ b/bolt-spammer-helder/src/contract.rs @@ -1,98 +1,210 @@ -// use ethers::{ -// abi::{Abi, Token}, -// contract::{Contract, ContractError}, -// providers::{Http, Provider}, -// types::Address, -// }; -// use eyre::{eyre, Result}; -// use std::{path::PathBuf, sync::Arc}; - -// use beacon_api_client::ProposerDuty; - -// /// Returns the next pre-confirmation slot and proposer RPC URL from the registry contract -// /// -// /// Fails if no registered validators are found in the lookahead -// pub async fn next_preconfer_from_registry( -// proposer_duties: Vec, -// abi_path: PathBuf, -// registry_address: Address, -// eth_provider: Arc>, -// ) -> Result<(String, u64)> { -// let contract_abi: Abi = serde_json::from_str(&std::fs::read_to_string(abi_path)?)?; -// let registry_contract = Contract::new(registry_address, contract_abi, eth_provider); -// let mut next_preconfer_slot = 0; -// let mut proposer_rpc = String::new(); -// for duty in proposer_duties { -// let res = registry_contract -// .method::("getOperatorForValidator", duty.validator_index as u64)? -// .call() -// .await; -// match res { -// Ok(token_raw) => { -// next_preconfer_slot = duty.slot; -// proposer_rpc = try_parse_url_from_token(token_raw)?; -// tracing::info!( -// "pre-confirmation will be sent for slot {} to validator with index {} at url {}", -// duty.slot, -// duty.validator_index, -// proposer_rpc, -// ); -// break; -// } -// // Such validator index is not registered, continue -// Err(ContractError::Revert(_)) => { -// tracing::warn!( -// "validator index {} not registered, skipping", -// duty.validator_index -// ); -// continue; -// } -// Err(e) => { -// return Err(eyre!( -// "unexpected error while calling registry contract: {:?}", -// e -// )); -// } -// } -// } - -// if next_preconfer_slot == 0 { -// return Err(eyre!("no registered validators found in the lookahead")); -// }; - -// Ok((proposer_rpc, next_preconfer_slot)) -// } - -// /// Tries to parse the registered validator's sidecars URL from the token returned -// /// by the view call to the registry smart contract -// /// -// /// Reference: https://github.com/chainbound/bolt/blob/e71c61aa97dcd7b08fad23067caf18bc90a582cd/bolt-contracts/src/interfaces/IBoltRegistry.sol#L6-L16 -// pub fn try_parse_url_from_token(token: Token) -> Result { -// let Token::Tuple(registrant_struct_fields) = token else { -// return Err(eyre!("register call result is not a struct")); -// }; - -// let Some(metadata_token) = registrant_struct_fields.last() else { -// return Err(eyre!("register call result is a struct with no fields")); -// }; - -// let Token::Tuple(metadata_fields) = metadata_token else { -// return Err(eyre!( -// "register call result is a struct without the `metadata` field" -// )); -// }; - -// let Some(rpc_token) = metadata_fields.first() else { -// return Err(eyre!( -// "register call result has a `metadata` field, but the struct is empty" -// )); -// }; - -// let Token::String(rpc) = rpc_token else { -// return Err(eyre!( -// "register call result has a `metadata` field, but its `rpc` property is not a string" -// )); -// }; - -// Ok(rpc.clone()) -// } +use std::str::FromStr; + +use alloy::{ + contract::{Error as ContractError, Result as ContractResult}, + primitives::{Address, Bytes}, + providers::{ProviderBuilder, RootProvider}, + sol, + sol_types::{Error as SolError, SolInterface}, + transports::{http::Http, TransportError}, +}; +use reqwest::Client; +use url::Url; + +use beacon_api_client::ProposerDuty; +use BoltRegistryContract::{BoltRegistryContractErrors, BoltRegistryContractInstance, Registrant}; + +#[derive(Debug, Clone)] +pub struct BoltRegistry(BoltRegistryContractInstance, RootProvider>>); + +impl BoltRegistry { + pub fn new>(execution_client_url: U, registry_address: Address) -> Self { + let provider = ProviderBuilder::new().on_http(execution_client_url.into()); + let registry = BoltRegistryContract::new(registry_address, provider); + + Self(registry) + } + + /// Gets the sidecar RPC URL for a given validator index. + /// + /// Returns Ok(None) if the operator is not found in the registry. + pub async fn get_sidecar_rpc_url_for_validator( + &self, + validator_index: u64, + ) -> ContractResult> { + let registrant = self.get_registrant_for_validator(validator_index).await?; + Ok(registrant.map(|r| r.metadata.rpc)) + } + + /// Gets the operator for a given validator index. + /// + /// Returns Ok(None) if the operator is not found in the registry. + pub async fn get_registrant_for_validator( + &self, + validator_index: u64, + ) -> ContractResult> { + let returndata = self.0.getOperatorForValidator(validator_index).call().await; + + // TODO: clean this after https://github.com/alloy-rs/alloy/issues/787 is merged + let error = match returndata.map(|data| data._0) { + Ok(registrant) => return Ok(Some(registrant)), + Err(error) => match error { + ContractError::TransportError(TransportError::ErrorResp(err)) => { + let data = err.data.unwrap_or_default(); + let data = data.get().trim_matches('"'); + let data = Bytes::from_str(data).unwrap_or_default(); + + BoltRegistryContractErrors::abi_decode(&data, true)? + } + e => return Err(e), + }, + }; + + if matches!(error, BoltRegistryContractErrors::NotFound(_)) { + Ok(None) + } else { + Err(SolError::custom(format!( + "unexpected Solidity error selector: {:?}", + error.selector() + )) + .into()) + } + } + + /// Gets the next pre-confirmation slot and proposer RPC URL from the registry contract + /// + /// Returns Ok(None) if no registered validators are found in the lookahead + pub async fn next_preconfer_from_registry( + &self, + proposer_duties: Vec, + ) -> ContractResult> { + let mut next_preconfer_slot = 0; + let mut proposer_rpc = String::new(); + + for duty in proposer_duties { + let res = self.get_registrant_for_validator(duty.validator_index as u64).await; + match res { + Ok(Some(token_raw)) => { + next_preconfer_slot = duty.slot; + proposer_rpc = token_raw.metadata.rpc; + tracing::info!( + "pre-confirmation will be sent for slot {} to validator with index {} at url {}", + duty.slot, + duty.validator_index, + proposer_rpc, + ); + break; + } + Ok(None) => { + // Handle the case where the result is Ok but contains None. + // You might want to continue to the next iteration, log something, or handle it + // in another way. + tracing::info!( + "No registrant found for validator index {}", + duty.validator_index + ); + continue; + } + Err(e) => { + return Err(e); + } + } + } + + if next_preconfer_slot == 0 { + return Ok(None); + }; + + Ok(Some((proposer_rpc, next_preconfer_slot))) + } +} + +sol! { + #[sol(rpc)] + interface BoltRegistryContract { + #[derive(Debug, Default)] + struct Registrant { + address operator; + uint64[] validatorIndexes; + uint256 enteredAt; + uint256 exitInitiatedAt; + uint256 balance; + Status status; + MetaData metadata; + } + + #[derive(Debug, Default)] + enum Status { + #[default] + INACTIVE, + ACTIVE, + FROZEN, + EXITING + } + + #[derive(Debug, Default)] + struct MetaData { + string rpc; + bytes extra; + } + + function getOperatorForValidator(uint64 _validatorIndex) external view returns (Registrant memory); + + error NotFound(); + error Unauthorized(); + } +} + +#[cfg(test)] +mod tests { + use std::str::FromStr; + + use alloy::{primitives::U256, sol_types::SolCall}; + use BoltRegistryContract::{MetaData, Status}; + + use super::*; + + #[test] + fn test_abigen() { + assert_eq!(BoltRegistryContract::getOperatorForValidatorCall::SELECTOR, [238, 124, 139, 77]) + } + + #[tokio::test] + async fn test_get_operators_helder() -> eyre::Result<()> { + let registry = BoltRegistry::new( + Url::parse("http://remotebeast:4485")?, + Address::from_str("0xdF11D829eeC4C192774F3Ec171D822f6Cb4C14d9")?, + ); + + let registrant = registry.get_registrant_for_validator(0).await; + assert!(matches!(registrant, Ok(None))); + + let registrant = match registry.get_registrant_for_validator(2150).await { + Ok(Some(registrant)) => registrant, + e => panic!("unexpected error reading from registry: {:?}", e), + }; + + let expected = Registrant { + operator: Address::from_str("0xad3cd1b81c80f4a495d6552ae6423508492a27f8")?, + validatorIndexes: (2145..2245).collect(), + enteredAt: U256::from(1720183620), + exitInitiatedAt: U256::from(0), + balance: U256::from(10000000000000000000u128), + status: Status::ACTIVE, + metadata: MetaData { + rpc: "http://135.181.191.125:8000".to_string(), + extra: Bytes::from_str("0x")?, + }, + }; + + assert_eq!(registrant.metadata.rpc, expected.metadata.rpc); + assert_eq!(registrant.metadata.extra, expected.metadata.extra); + assert_eq!(registrant.operator, expected.operator); + assert_eq!(registrant.validatorIndexes, expected.validatorIndexes); + assert_eq!(registrant.enteredAt, expected.enteredAt); + assert_eq!(registrant.exitInitiatedAt, expected.exitInitiatedAt); + assert_eq!(registrant.balance, expected.balance); + + Ok(()) + } +} diff --git a/bolt-spammer-helder/src/lib.rs b/bolt-spammer-helder/src/lib.rs index faf4efac..b03c3a66 100644 --- a/bolt-spammer-helder/src/lib.rs +++ b/bolt-spammer-helder/src/lib.rs @@ -1,6 +1,6 @@ pub mod constants; /// The on-chain registry view for querying active Bolt sidecars -pub mod onchain_registry; -use onchain_registry::BoltRegistry; +pub mod contract; +use contract::BoltRegistry; pub mod utils; diff --git a/bolt-spammer-helder/src/main.rs b/bolt-spammer-helder/src/main.rs index db47206c..ff35c4e9 100644 --- a/bolt-spammer-helder/src/main.rs +++ b/bolt-spammer-helder/src/main.rs @@ -10,7 +10,7 @@ use alloy::{ use beacon_api_client::mainnet::Client as BeaconApiClient; use bolt_spammer_helder::{ constants::SLOTS_PER_EPOCH, - onchain_registry::BoltRegistry, + contract::BoltRegistry, utils::{ current_slot, generate_random_blob_tx, generate_random_tx, prepare_rpc_request, sign_transaction, @@ -98,7 +98,7 @@ async fn main() -> Result<()> { B256::from(keccak256(data)) }; - let signature = wallet.sign_message(&message_digest).unwrap(); + let signature = wallet.sign_message(&message_digest).await?; let request = prepare_rpc_request( "bolt_inclusionPreconfirmation", diff --git a/bolt-spammer-helder/src/onchain_registry.rs b/bolt-spammer-helder/src/onchain_registry.rs deleted file mode 100644 index 62bfdd0b..00000000 --- a/bolt-spammer-helder/src/onchain_registry.rs +++ /dev/null @@ -1,210 +0,0 @@ -use std::str::FromStr; - -use alloy::{ - contract::{Error as ContractError, Result as ContractResult}, - primitives::{Address, Bytes}, - providers::{ProviderBuilder, RootProvider}, - sol, - sol_types::{Error as SolError, SolInterface}, - transports::{http::Http, TransportError}, -}; -use reqwest::Client; -use url::Url; - -use beacon_api_client::ProposerDuty; -use BoltRegistryContract::{BoltRegistryContractErrors, BoltRegistryContractInstance, Registrant}; - -#[derive(Debug, Clone)] -pub struct BoltRegistry(BoltRegistryContractInstance, RootProvider>>); - -impl BoltRegistry { - pub fn new>(execution_client_url: U, registry_address: Address) -> Self { - let provider = ProviderBuilder::new().on_http(execution_client_url.into()); - let registry = BoltRegistryContract::new(registry_address, provider); - - Self(registry) - } - - /// Gets the sidecar RPC URL for a given validator index. - /// - /// Returns Ok(None) if the operator is not found in the registry. - pub async fn get_sidecar_rpc_url_for_validator( - &self, - validator_index: u64, - ) -> ContractResult> { - let registrant = self.get_registrant_for_validator(validator_index).await?; - Ok(registrant.map(|r| r.metadata.rpc)) - } - - /// Gets the operator for a given validator index. - /// - /// Returns Ok(None) if the operator is not found in the registry. - pub async fn get_registrant_for_validator( - &self, - validator_index: u64, - ) -> ContractResult> { - let returndata = self.0.getOperatorForValidator(validator_index).call().await; - - // TODO: clean this after https://github.com/alloy-rs/alloy/issues/787 is merged - let error = match returndata.map(|data| data._0) { - Ok(registrant) => return Ok(Some(registrant)), - Err(error) => match error { - ContractError::TransportError(TransportError::ErrorResp(err)) => { - let data = err.data.unwrap_or_default(); - let data = data.get().trim_matches('"'); - let data = Bytes::from_str(data).unwrap_or_default(); - - BoltRegistryContractErrors::abi_decode(&data, true)? - } - e => return Err(e), - }, - }; - - if matches!(error, BoltRegistryContractErrors::NotFound(_)) { - Ok(None) - } else { - Err(SolError::custom(format!( - "unexpected Solidity error selector: {:?}", - error.selector() - )) - .into()) - } - } - - /// Gets the next pre-confirmation slot and proposer RPC URL from the registry contract - /// - /// Returns Ok(None) if no registered validators are found in the lookahead - pub async fn next_preconfer_from_registry( - &self, - proposer_duties: Vec, - ) -> ContractResult> { - let mut next_preconfer_slot = 0; - let mut proposer_rpc = String::new(); - - for duty in proposer_duties { - let res = self.get_registrant_for_validator(duty.validator_index as u64).await; - match res { - Ok(Some(token_raw)) => { - next_preconfer_slot = duty.slot; - proposer_rpc = token_raw.metadata.rpc; - tracing::info!( - "pre-confirmation will be sent for slot {} to validator with index {} at url {}", - duty.slot, - duty.validator_index, - proposer_rpc, - ); - break; - } - Ok(None) => { - // Handle the case where the result is Ok but contains None. - // You might want to continue to the next iteration, log something, or handle it - // in another way. - tracing::info!( - "No registrant found for validator index {}", - duty.validator_index - ); - continue; - } - Err(e) => { - return Err(e); - } - } - } - - if next_preconfer_slot == 0 { - return Ok(None); - }; - - Ok(Some((proposer_rpc, next_preconfer_slot))) - } -} - -sol! { - #[sol(rpc)] - interface BoltRegistryContract { - #[derive(Debug, Default)] - struct Registrant { - address operator; - uint64[] validatorIndexes; - uint256 enteredAt; - uint256 exitInitiatedAt; - uint256 balance; - Status status; - MetaData metadata; - } - - #[derive(Debug, Default)] - enum Status { - #[default] - INACTIVE, - ACTIVE, - FROZEN, - EXITING - } - - #[derive(Debug, Default)] - struct MetaData { - string rpc; - bytes extra; - } - - function getOperatorForValidator(uint64 _validatorIndex) external view returns (Registrant memory); - - error NotFound(); - error Unauthorized(); - } -} - -#[cfg(test)] -mod tests { - use std::str::FromStr; - - use alloy::{primitives::U256, sol_types::SolCall}; - use BoltRegistryContract::{MetaData, Status}; - - use super::*; - - #[test] - fn test_abigen() { - assert_eq!(BoltRegistryContract::getOperatorForValidatorCall::SELECTOR, [238, 124, 139, 77]) - } - - #[tokio::test] - async fn test_get_operators_helder() -> eyre::Result<()> { - let registry = BoltRegistry::new( - Url::parse("http://remotebeast:4485")?, - Address::from_str("0xdF11D829eeC4C192774F3Ec171D822f6Cb4C14d9")?, - ); - - let registrant = registry.get_registrant_for_validator(0).await; - assert!(matches!(registrant, Ok(None))); - - let registrant = match registry.get_registrant_for_validator(2150).await { - Ok(Some(registrant)) => registrant, - e => panic!("unexpected error reading from registry: {:?}", e), - }; - - let expected = Registrant { - operator: Address::from_str("0xad3cd1b81c80f4a495d6552ae6423508492a27f8")?, - validatorIndexes: (2145..2245).collect(), - enteredAt: U256::from(1720183620), - exitInitiatedAt: U256::from(0), - balance: U256::from(10000000000000000000u128), - status: Status::ACTIVE, - metadata: MetaData { - rpc: "http://135.181.191.125:8000".to_string(), - extra: Bytes::from_str("0x")?, - }, - }; - - assert_eq!(registrant.metadata.rpc, expected.metadata.rpc); - assert_eq!(registrant.metadata.extra, expected.metadata.extra); - assert_eq!(registrant.operator, expected.operator); - assert_eq!(registrant.validatorIndexes, expected.validatorIndexes); - assert_eq!(registrant.enteredAt, expected.enteredAt); - assert_eq!(registrant.exitInitiatedAt, expected.exitInitiatedAt); - assert_eq!(registrant.balance, expected.balance); - - Ok(()) - } -} From deef806b335b56746431be94a4428769bb04c96f Mon Sep 17 00:00:00 2001 From: Naman Garg <0708ng@gmail.com> Date: Wed, 17 Jul 2024 17:28:56 +0530 Subject: [PATCH 5/9] misc: comments --- bolt-spammer-helder/src/main.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/bolt-spammer-helder/src/main.rs b/bolt-spammer-helder/src/main.rs index ff35c4e9..37e851b3 100644 --- a/bolt-spammer-helder/src/main.rs +++ b/bolt-spammer-helder/src/main.rs @@ -34,7 +34,7 @@ struct Opts { private_key: String, #[clap(short = 'a', long, env, default_value = "./registry_abi.json")] registry_abi_path: PathBuf, - // Flag for blob mode + // Flag for generating a blob tx instead of a regular tx #[clap(short, long, default_value = "false")] blob: bool, } @@ -54,6 +54,8 @@ async fn main() -> Result<()> { let beacon_api_client = BeaconApiClient::new(opts.beacon_client_url); + let registry = BoltRegistry::new(Url::from_str(&opts.el_provider_url)?, opts.registry_address); + let current_slot = current_slot(&beacon_api_client).await?; tracing::info!( @@ -71,14 +73,11 @@ async fn main() -> Result<()> { .filter(|duty| duty.slot > current_slot) .collect::>(); - let registry_url = Url::from_str(&opts.el_provider_url)?; - let registry = BoltRegistry::new(registry_url, opts.registry_address); - let (proposer_rpc, next_preconfer_slot) = match registry.next_preconfer_from_registry(proposer_duties).await { Ok(Some(res)) => res, Ok(None) => { - // Handle the case where there is no next preconfer slot + tracing::info!("no next preconfer slot found"); return Ok(()); } Err(e) => { @@ -98,7 +97,7 @@ async fn main() -> Result<()> { B256::from(keccak256(data)) }; - let signature = wallet.sign_message(&message_digest).await?; + let signature = wallet.sign_message().await?; let request = prepare_rpc_request( "bolt_inclusionPreconfirmation", From b598bba88052ef5150c22f942980c6e0f589f8c6 Mon Sep 17 00:00:00 2001 From: Naman Garg <0708ng@gmail.com> Date: Wed, 17 Jul 2024 17:35:57 +0530 Subject: [PATCH 6/9] misc --- bolt-spammer-helder/src/lib.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/bolt-spammer-helder/src/lib.rs b/bolt-spammer-helder/src/lib.rs index b03c3a66..abc17392 100644 --- a/bolt-spammer-helder/src/lib.rs +++ b/bolt-spammer-helder/src/lib.rs @@ -1,6 +1,3 @@ pub mod constants; -/// The on-chain registry view for querying active Bolt sidecars pub mod contract; -use contract::BoltRegistry; - pub mod utils; From 82c45111c15e796dc9ae316e45c8d619692c577a Mon Sep 17 00:00:00 2001 From: Naman Garg <0708ng@gmail.com> Date: Wed, 17 Jul 2024 18:14:31 +0530 Subject: [PATCH 7/9] chore(sidecar): add test --- bolt-spammer-helder/src/contract.rs | 32 +++++++++++++++++++++++++++++ bolt-spammer-helder/src/main.rs | 13 +++++------- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/bolt-spammer-helder/src/contract.rs b/bolt-spammer-helder/src/contract.rs index 62bfdd0b..ea9688c7 100644 --- a/bolt-spammer-helder/src/contract.rs +++ b/bolt-spammer-helder/src/contract.rs @@ -207,4 +207,36 @@ mod tests { Ok(()) } + + #[tokio::test] + async fn test_next_preconfer_from_registry() -> eyre::Result<()> { + let registry = BoltRegistry::new( + Url::parse("http://remotebeast:4485")?, + Address::from_str("0xdF11D829eeC4C192774F3Ec171D822f6Cb4C14d9")?, + ); + + // Mock proposer duties + let proposer_duties = vec![ + ProposerDuty { public_key: Default::default(), validator_index: 2145, slot: 12345 }, + ProposerDuty { public_key: Default::default(), validator_index: 2150, slot: 12346 }, + ]; + + // Calling the next_preconfer_from_registry function + let result = registry.next_preconfer_from_registry(proposer_duties).await?; + + // Expected result + let expected_rpc = "http://135.181.191.125:8000".to_string(); + let expected_slot = 12345; + + // Asserting the result + match result { + Some((rpc, slot)) => { + assert_eq!(rpc, expected_rpc); + assert_eq!(slot, expected_slot); + } + None => panic!("Expected some value but got None"), + } + + Ok(()) + } } diff --git a/bolt-spammer-helder/src/main.rs b/bolt-spammer-helder/src/main.rs index 37e851b3..4ced9f7d 100644 --- a/bolt-spammer-helder/src/main.rs +++ b/bolt-spammer-helder/src/main.rs @@ -1,10 +1,8 @@ -use std::{path::PathBuf, str::FromStr, sync::Arc}; +use std::{path::PathBuf, str::FromStr}; use alloy::{ hex, network::EthereumWallet, - primitives::{utils::keccak256, B256}, - providers::{Provider, ProviderBuilder}, signers::{local::PrivateKeySigner, Signer}, }; use beacon_api_client::mainnet::Client as BeaconApiClient; @@ -49,8 +47,7 @@ async fn main() -> Result<()> { let opts = Opts::parse(); let wallet: PrivateKeySigner = opts.private_key.parse().expect("should parse private key"); - let eth_provider = ProviderBuilder::new().on_http(opts.el_provider_url.parse()?); - let transaction_signer: EthereumWallet = wallet.into(); + let transaction_signer: EthereumWallet = wallet.clone().into(); let beacon_api_client = BeaconApiClient::new(opts.beacon_client_url); @@ -86,7 +83,7 @@ async fn main() -> Result<()> { } }; - let mut tx = if opts.blob { generate_random_blob_tx() } else { generate_random_tx() }; + let tx = if opts.blob { generate_random_blob_tx() } else { generate_random_tx() }; let (tx_hash, tx_rlp) = sign_transaction(&transaction_signer, tx).await?; @@ -94,10 +91,10 @@ async fn main() -> Result<()> { let mut data = Vec::new(); data.extend_from_slice(&next_preconfer_slot.to_le_bytes()); data.extend_from_slice(hex::decode(tx_hash.trim_start_matches("0x"))?.as_slice()); - B256::from(keccak256(data)) + data }; - let signature = wallet.sign_message().await?; + let signature = wallet.sign_message(message_digest.as_ref()).await?; let request = prepare_rpc_request( "bolt_inclusionPreconfirmation", From 5562d818621d6c422c51af8fae9ea54b613e80f8 Mon Sep 17 00:00:00 2001 From: Naman Garg <0708ng@gmail.com> Date: Wed, 17 Jul 2024 18:22:36 +0530 Subject: [PATCH 8/9] misc: remove comments --- bolt-spammer-helder/src/utils.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/bolt-spammer-helder/src/utils.rs b/bolt-spammer-helder/src/utils.rs index 35ff2516..9c8e4cda 100644 --- a/bolt-spammer-helder/src/utils.rs +++ b/bolt-spammer-helder/src/utils.rs @@ -1,6 +1,6 @@ // use alloy::alloy_eips::eip2718::Encodable2718; use alloy::{ - consensus::{BlobTransactionSidecar, SidecarBuilder, SimpleCoder, TxEnvelope}, + consensus::{BlobTransactionSidecar, SidecarBuilder, SimpleCoder}, hex, network::{eip2718::Encodable2718, EthereumWallet, TransactionBuilder}, primitives::{Address, U256}, @@ -54,14 +54,12 @@ pub async fn sign_transaction( signer: &EthereumWallet, tx: TransactionRequest, ) -> Result<(String, String)> { - let signed: TxEnvelope = tx.build(signer).await.unwrap(); + let Ok(signed) = tx.build(signer).await else { + return Err(eyre::eyre!("Failed to sign transaction")); + }; let tx_signed_bytes = signed.encoded_2718(); let tx_signed = TransactionSigned::decode_enveloped(&mut tx_signed_bytes.as_slice()).unwrap(); - // let Ok(signature) = signer.sign_transaction(&tx).await else { - // eyre::bail!("Failed to sign transaction") - // }; - // let rlp_signed_tx = tx.rlp_signed(&signature); let tx_hash = tx_signed.hash().to_string(); let hex_rlp_signed_tx = format!("0x{}", hex::encode(tx_signed_bytes)); From e890b51df25c57a8953ffbcd9cd5ca7a6cc676e7 Mon Sep 17 00:00:00 2001 From: Naman Garg <0708ng@gmail.com> Date: Wed, 17 Jul 2024 18:30:17 +0530 Subject: [PATCH 9/9] misc: tidy remove comments --- bolt-spammer-helder/src/contract.rs | 3 +-- bolt-spammer-helder/src/utils.rs | 15 ++++----------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/bolt-spammer-helder/src/contract.rs b/bolt-spammer-helder/src/contract.rs index ea9688c7..69241f47 100644 --- a/bolt-spammer-helder/src/contract.rs +++ b/bolt-spammer-helder/src/contract.rs @@ -8,10 +8,9 @@ use alloy::{ sol_types::{Error as SolError, SolInterface}, transports::{http::Http, TransportError}, }; +use beacon_api_client::ProposerDuty; use reqwest::Client; use url::Url; - -use beacon_api_client::ProposerDuty; use BoltRegistryContract::{BoltRegistryContractErrors, BoltRegistryContractInstance, Registrant}; #[derive(Debug, Clone)] diff --git a/bolt-spammer-helder/src/utils.rs b/bolt-spammer-helder/src/utils.rs index 9c8e4cda..196fced0 100644 --- a/bolt-spammer-helder/src/utils.rs +++ b/bolt-spammer-helder/src/utils.rs @@ -1,4 +1,5 @@ -// use alloy::alloy_eips::eip2718::Encodable2718; +use std::str::FromStr; + use alloy::{ consensus::{BlobTransactionSidecar, SidecarBuilder, SimpleCoder}, hex, @@ -7,12 +8,6 @@ use alloy::{ rpc::types::TransactionRequest, }; use beacon_api_client::{mainnet::Client as BeaconApiClient, BlockId}; -use std::str::FromStr; -// use ethers::{ -// signers::Signer, -// types::{transaction::eip2718::TypedTransaction, Eip1559TransactionRequest}, -// utils::hex, -// }; use eyre::Result; use rand::{thread_rng, Rng}; use reth_primitives::TransactionSigned; @@ -22,13 +17,11 @@ use crate::constants::{DEAD_ADDRESS, HELDER_TESTNET_CHAIN_ID, NOICE_GAS_PRICE}; /// Generates random ETH transfer to `DEAD_ADDRESS` with a random payload. pub fn generate_random_tx() -> TransactionRequest { - let tx: TransactionRequest = TransactionRequest::default() + TransactionRequest::default() .with_to(Address::from_str(DEAD_ADDRESS).unwrap()) .with_chain_id(HELDER_TESTNET_CHAIN_ID) .with_value(U256::from(thread_rng().gen_range(1..100))) - .with_gas_price(NOICE_GAS_PRICE); - - tx + .with_gas_price(NOICE_GAS_PRICE) } /// Generate random transaction with blob (eip4844)