From 8c398987b51d20fda5a3ca4bfba936e3ec387b80 Mon Sep 17 00:00:00 2001 From: Mablr <59505383+mablr@users.noreply.github.com> Date: Mon, 10 Nov 2025 12:18:39 +0100 Subject: [PATCH 1/2] refactor(anvil): beacon api tests + use Alloy's `GenesisResponse` struct - Updated the `/eth/v1/beacon/genesis` endpoint to return a new `GenesisResponse`, and removed `GenesisDetails` struct. - Improved tests for the Beacon API, deserde with Alloy beacon response structs. --- Cargo.lock | 239 ++++++++++----- Cargo.toml | 3 +- crates/anvil/src/eth/beacon/data.rs | 15 - crates/anvil/src/eth/beacon/mod.rs | 2 - crates/anvil/src/server/beacon_handler.rs | 20 +- crates/anvil/tests/it/beacon_api.rs | 358 ++++++++++++++++++++++ crates/anvil/tests/it/eip4844.rs | 323 ------------------- crates/anvil/tests/it/main.rs | 1 + 8 files changed, 534 insertions(+), 427 deletions(-) delete mode 100644 crates/anvil/src/eth/beacon/data.rs create mode 100644 crates/anvil/tests/it/beacon_api.rs diff --git a/Cargo.lock b/Cargo.lock index b30bd8286b301..18794b576dafe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -83,12 +83,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90d103d3e440ad6f703dd71a5b58a6abd24834563bde8a5fabe706e00242f810" dependencies = [ - "alloy-eips", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-trie", - "alloy-tx-macros", + "alloy-tx-macros 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "auto_impl", "c-kzg", "derive_more", @@ -103,17 +103,41 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "alloy-consensus" +version = "1.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" +dependencies = [ + "alloy-eips 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", + "alloy-primitives", + "alloy-rlp", + "alloy-serde 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", + "alloy-trie", + "alloy-tx-macros 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", + "auto_impl", + "c-kzg", + "derive_more", + "either", + "k256", + "once_cell", + "rand 0.8.5", + "secp256k1 0.30.0", + "serde", + "serde_json", + "thiserror 2.0.17", +] + [[package]] name = "alloy-consensus-any" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48ead76c8c84ab3a50c31c56bc2c748c2d64357ad2131c32f9b10ab790a25e1a" dependencies = [ - "alloy-consensus", - "alloy-eips", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde", ] @@ -123,7 +147,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5903097e4c131ad2dd80d87065f23c715ccb9cdb905fa169dffab8e1e798bae" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-dyn-abi", "alloy-json-abi", "alloy-network", @@ -191,7 +215,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "420a02e98712e851daac5fa2c68bafb6f9a85602772f32b91a3ce6ffcfa04c9f" dependencies = [ "alloy-primitives", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde", "serde_json", ] @@ -221,7 +245,7 @@ dependencies = [ "alloy-eip7702", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "auto_impl", "c-kzg", "derive_more", @@ -234,6 +258,27 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "alloy-eips" +version = "1.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" +dependencies = [ + "alloy-eip2124", + "alloy-eip2930", + "alloy-eip7702", + "alloy-primitives", + "alloy-rlp", + "alloy-serde 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", + "auto_impl", + "c-kzg", + "derive_more", + "either", + "serde", + "serde_with", + "sha2", + "thiserror 2.0.17", +] + [[package]] name = "alloy-ens" version = "1.1.0" @@ -254,12 +299,12 @@ version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6223235f0b785a83dd10dc1599b7f3763c65e4f98b4e9e4e10e576bbbdf7dfa2" dependencies = [ - "alloy-consensus", - "alloy-eips", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-hardforks", "alloy-op-hardforks", "alloy-primitives", - "alloy-rpc-types-engine", + "alloy-rpc-types-engine 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-rpc-types-eth", "alloy-sol-types", "auto_impl", @@ -277,9 +322,9 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c25d5acb35706e683df1ea333c862bdb6b7c5548836607cd5bb56e501cca0b4f" dependencies = [ - "alloy-eips", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-primitives", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-trie", "serde", ] @@ -330,15 +375,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "612296e6b723470bb1101420a73c63dfd535aa9bf738ce09951aedbd4ab7292e" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-consensus-any", - "alloy-eips", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-json-rpc", "alloy-network-primitives", "alloy-primitives", "alloy-rpc-types-any", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-signer", "alloy-sol-types", "async-trait", @@ -356,10 +401,10 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0e7918396eecd69d9c907046ec8a93fb09b89e2f325d5e7ea9c4e3929aa0dd2" dependencies = [ - "alloy-consensus", - "alloy-eips", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-primitives", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde", ] @@ -369,8 +414,8 @@ version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ad8f3a679eb44ee21481edabd628d191c9a42d182ed29923b4d43a27a0f2cc8" dependencies = [ - "alloy-consensus", - "alloy-eips", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-evm", "alloy-op-hardforks", "alloy-primitives", @@ -430,8 +475,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55c1313a527a2e464d067c031f3c2ec073754ef615cc0eabca702fd0fe35729c" dependencies = [ "alloy-chains", - "alloy-consensus", - "alloy-eips", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-json-rpc", "alloy-network", "alloy-network-primitives", @@ -546,11 +591,11 @@ checksum = "33ff3df608dcabd6bdd197827ff2b8faaa6cefe0c462f7dc5e74108666a01f56" dependencies = [ "alloy-primitives", "alloy-rpc-types-anvil", - "alloy-rpc-types-engine", + "alloy-rpc-types-engine 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-rpc-types-eth", "alloy-rpc-types-trace", "alloy-rpc-types-txpool", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde", ] @@ -562,7 +607,7 @@ checksum = "ac2bc988d7455e02dfb53460e1caa61f932b3f8452e12424e68ba8dcf60bba90" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde", ] @@ -574,18 +619,17 @@ checksum = "cdbf6d1766ca41e90ac21c4bc5cbc5e9e965978a25873c3f90b3992d905db4cb" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "alloy-rpc-types-beacon" version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab94e446a003dcef86843eea60d05a6cec360eb8e1829e4cf388ef94d799b5cf" +source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" dependencies = [ - "alloy-eips", + "alloy-eips 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", "alloy-primitives", - "alloy-rpc-types-engine", + "alloy-rpc-types-engine 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", "derive_more", "serde", "serde_json", @@ -611,11 +655,11 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07da696cc7fbfead4b1dda8afe408685cae80975cbb024f843ba74d9639cd0d3" dependencies = [ - "alloy-consensus", - "alloy-eips", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more", "ethereum_ssz", "ethereum_ssz_derive", @@ -625,19 +669,35 @@ dependencies = [ "strum 0.27.2", ] +[[package]] +name = "alloy-rpc-types-engine" +version = "1.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" +dependencies = [ + "alloy-consensus 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", + "alloy-eips 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", + "alloy-primitives", + "alloy-rlp", + "alloy-serde 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", + "derive_more", + "rand 0.8.5", + "serde", + "strum 0.27.2", +] + [[package]] name = "alloy-rpc-types-eth" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a15e4831b71eea9d20126a411c1c09facf1d01d5cac84fd51d532d3c429cfc26" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-consensus-any", - "alloy-eips", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-network-primitives", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-sol-types", "itertools 0.14.0", "serde", @@ -654,7 +714,7 @@ checksum = "fb0c800e2ce80829fca1491b3f9063c29092850dc6cf19249d5f678f0ce71bb0" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde", "serde_json", "thiserror 2.0.17", @@ -668,7 +728,7 @@ checksum = "2f82e3068673a3cf93fbbc2f60a59059395cd54bbe39af895827faa5e641cc8f" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde", ] @@ -683,6 +743,16 @@ dependencies = [ "serde_json", ] +[[package]] +name = "alloy-serde" +version = "1.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + [[package]] name = "alloy-signer" version = "1.1.0" @@ -706,7 +776,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ed6b73b812ab342d09de85eb302598a3a0c4d744cbe982ed76e309dcec9ddfa" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-network", "alloy-primitives", "alloy-signer", @@ -725,7 +795,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba2bd8fcc42b831aa219deac7a0b642eb418446a402a4de3b302c6e9ad09702c" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-network", "alloy-primitives", "alloy-signer", @@ -743,7 +813,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbc99b13a9f90efcc9a4dbc817909a78b0cd52fe734f81ed48a7032a658fecd8" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-dyn-abi", "alloy-network", "alloy-primitives", @@ -763,7 +833,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e7d555ee5f27be29af4ae312be014b57c6cff9acb23fe2cf008500be6ca7e33" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-network", "alloy-primitives", "alloy-signer", @@ -783,7 +853,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f35ab4ebc1cdfa766332bcdf9b4f6d559a001edd9bea72c39fd88d62c976f1d7" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-network", "alloy-primitives", "alloy-signer", @@ -800,7 +870,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5271719b6594785b7cd317a60ccfd8822469627dc9d3167836d7441cb3b9b087" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-network", "alloy-primitives", "alloy-signer", @@ -987,6 +1057,17 @@ dependencies = [ "syn 2.0.109", ] +[[package]] +name = "alloy-tx-macros" +version = "1.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.109", +] + [[package]] name = "ammonia" version = "4.1.2" @@ -1107,11 +1188,11 @@ name = "anvil" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-contract", "alloy-dyn-abi", "alloy-eip5792", - "alloy-eips", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-evm", "alloy-genesis", "alloy-hardforks", @@ -1124,7 +1205,7 @@ dependencies = [ "alloy-rlp", "alloy-rpc-types", "alloy-rpc-types-beacon", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-signer", "alloy-signer-local", "alloy-sol-types", @@ -1174,16 +1255,16 @@ dependencies = [ name = "anvil-core" version = "1.4.4" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-dyn-abi", "alloy-eip5792", - "alloy-eips", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-evm", "alloy-network", "alloy-primitives", "alloy-rlp", "alloy-rpc-types", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "bytes", "foundry-common", "foundry-evm", @@ -2601,10 +2682,10 @@ name = "cast" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-contract", "alloy-dyn-abi", - "alloy-eips", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-ens", "alloy-hardforks", "alloy-json-abi", @@ -2615,7 +2696,7 @@ dependencies = [ "alloy-rlp", "alloy-rpc-types", "alloy-rpc-types-beacon", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-signer", "alloy-signer-local", "alloy-sol-types", @@ -4223,7 +4304,7 @@ dependencies = [ "alloy-primitives", "alloy-provider", "alloy-rpc-types", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-signer", "alloy-signer-local", "alloy-transport", @@ -4351,15 +4432,15 @@ name = "forge-script" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-dyn-abi", - "alloy-eips", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-json-abi", "alloy-network", "alloy-primitives", "alloy-provider", "alloy-rpc-types", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-signer", "clap", "dialoguer", @@ -4506,7 +4587,7 @@ name = "foundry-cheatcodes" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-dyn-abi", "alloy-ens", "alloy-evm", @@ -4570,7 +4651,7 @@ version = "1.4.4" dependencies = [ "alloy-chains", "alloy-dyn-abi", - "alloy-eips", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-ens", "alloy-json-abi", "alloy-primitives", @@ -4617,9 +4698,9 @@ name = "foundry-common" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-dyn-abi", - "alloy-eips", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-json-abi", "alloy-json-rpc", "alloy-network", @@ -4628,7 +4709,7 @@ dependencies = [ "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-sol-types", "alloy-transport", "alloy-transport-http", @@ -4672,12 +4753,12 @@ dependencies = [ name = "foundry-common-fmt" version = "1.4.4" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-dyn-abi", "alloy-network", "alloy-primitives", "alloy-rpc-types", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "chrono", "eyre", "foundry-macros", @@ -4897,7 +4978,7 @@ name = "foundry-evm-core" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-dyn-abi", "alloy-evm", "alloy-genesis", @@ -5024,7 +5105,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17e22c563793782d2b3ca99bac6de70cd2a98be8c9f575590ef3605da47b4deb" dependencies = [ "alloy-chains", - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-hardforks", "alloy-primitives", "alloy-provider", @@ -5107,7 +5188,7 @@ dependencies = [ name = "foundry-wallets" version = "1.4.4" dependencies = [ - "alloy-consensus", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-dyn-abi", "alloy-network", "alloy-primitives", @@ -7057,13 +7138,13 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42e9de945efe3c2fbd207e69720c9c1af2b8caa6872aee0e216450c25a3ca70" dependencies = [ - "alloy-consensus", - "alloy-eips", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-network", "alloy-primitives", "alloy-rlp", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more", "serde", "thiserror 2.0.17", @@ -7081,12 +7162,12 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cd1eb7bddd2232856ba9d259320a094f9edf2b9061acfe5966e7960208393e6" dependencies = [ - "alloy-consensus", - "alloy-eips", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-network-primitives", "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more", "op-alloy-consensus", "serde", @@ -7100,11 +7181,11 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5429622150d18d8e6847a701135082622413e2451b64d03f979415d764566bef" dependencies = [ - "alloy-consensus", - "alloy-eips", + "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "alloy-primitives", "alloy-rlp", - "alloy-rpc-types-engine", + "alloy-rpc-types-engine 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more", "ethereum_ssz", "ethereum_ssz_derive", @@ -8336,7 +8417,7 @@ version = "9.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a4505d9688482fe0c3b8c09d9afbc4656e2bf9b48855e1c86c93bd4508e496a" dependencies = [ - "alloy-eips", + "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "revm-bytecode", "revm-database-interface", "revm-primitives", diff --git a/Cargo.toml b/Cargo.toml index 723e58f15dd1f..acbf7a786adce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -247,7 +247,8 @@ alloy-provider = { version = "1.1.0", default-features = false } alloy-pubsub = { version = "1.1.0", default-features = false } alloy-rpc-client = { version = "1.1.0", default-features = false } alloy-rpc-types = { version = "1.1.0", default-features = true } -alloy-rpc-types-beacon = { version = "1.1.0", default-features = true } +#alloy-rpc-types-beacon = { version = "1.1.0", default-features = true } +alloy-rpc-types-beacon = { git = "https://github.com/alloy-rs/alloy", rev = "99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" } alloy-serde = { version = "1.1.0", default-features = false } alloy-signer = { version = "1.1.0", default-features = false } alloy-signer-aws = { version = "1.1.0", default-features = false } diff --git a/crates/anvil/src/eth/beacon/data.rs b/crates/anvil/src/eth/beacon/data.rs deleted file mode 100644 index 9ce1ece0ab3cd..0000000000000 --- a/crates/anvil/src/eth/beacon/data.rs +++ /dev/null @@ -1,15 +0,0 @@ -//! Beacon data structures for the Beacon API responses - -use alloy_primitives::{B256, aliases::B32}; -use serde::{Deserialize, Serialize}; - -/// Ethereum Beacon chain genesis details -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct GenesisDetails { - /// The genesis_time configured for the beacon chain - pub genesis_time: u64, - /// The genesis validators root - pub genesis_validators_root: B256, - /// The genesis fork version, as used in the beacon chain - pub genesis_fork_version: B32, -} diff --git a/crates/anvil/src/eth/beacon/mod.rs b/crates/anvil/src/eth/beacon/mod.rs index ec794e903c06c..7585a14d1df0b 100644 --- a/crates/anvil/src/eth/beacon/mod.rs +++ b/crates/anvil/src/eth/beacon/mod.rs @@ -3,10 +3,8 @@ //! This module provides types and utilities for implementing Beacon API endpoints //! in Anvil, allowing testing of blob-based transactions with standard beacon chain APIs. -pub mod data; pub mod error; pub mod response; -pub use data::GenesisDetails; pub use error::BeaconError; pub use response::BeaconResponse; diff --git a/crates/anvil/src/server/beacon_handler.rs b/crates/anvil/src/server/beacon_handler.rs index 17319bda55380..753e3ebd50dd5 100644 --- a/crates/anvil/src/server/beacon_handler.rs +++ b/crates/anvil/src/server/beacon_handler.rs @@ -1,10 +1,11 @@ use crate::eth::{ EthApi, - beacon::{BeaconError, BeaconResponse, GenesisDetails}, + beacon::{BeaconError, BeaconResponse}, }; use alloy_eips::BlockId; use alloy_primitives::{B256, aliases::B32}; use alloy_rpc_types_beacon::{ + genesis::{GenesisData, GenesisResponse}, header::Header, sidecar::{BlobData, GetBlobsResponse}, }; @@ -99,12 +100,17 @@ pub async fn handle_get_blobs( /// GET /eth/v1/beacon/genesis pub async fn handle_get_genesis(State(api): State) -> Response { match api.anvil_get_genesis_time() { - Ok(genesis_time) => BeaconResponse::new(GenesisDetails { - genesis_time, - genesis_validators_root: B256::ZERO, - genesis_fork_version: B32::ZERO, - }) - .into_response(), + Ok(genesis_time) => ( + StatusCode::OK, + Json(GenesisResponse { + data: GenesisData { + genesis_time, + genesis_validators_root: B256::ZERO, + genesis_fork_version: B32::ZERO, + }, + }), + ) + .into_response(), Err(_) => BeaconError::internal_error().into_response(), } } diff --git a/crates/anvil/tests/it/beacon_api.rs b/crates/anvil/tests/it/beacon_api.rs new file mode 100644 index 0000000000000..bce15f8017b15 --- /dev/null +++ b/crates/anvil/tests/it/beacon_api.rs @@ -0,0 +1,358 @@ +use crate::utils::http_provider; +use alloy_consensus::{SidecarBuilder, SimpleCoder, Transaction}; +use alloy_hardforks::EthereumHardfork; +use alloy_network::{TransactionBuilder, TransactionBuilder4844}; +use alloy_primitives::{B256, FixedBytes, U256, b256}; +use alloy_provider::Provider; +use alloy_rpc_types::TransactionRequest; +use alloy_rpc_types_beacon::{genesis::GenesisResponse, sidecar::GetBlobsResponse}; +use alloy_serde::WithOtherFields; +use anvil::{NodeConfig, spawn}; + +#[tokio::test(flavor = "multi_thread")] +async fn test_beacon_api_get_blob_sidecars() { + let node_config = NodeConfig::test().with_hardfork(Some(EthereumHardfork::Cancun.into())); + let (api, handle) = spawn(node_config).await; + + // Disable auto-mining so we can include multiple transactions in the same block + api.anvil_set_auto_mine(false).await.unwrap(); + + let wallets = handle.dev_wallets().collect::>(); + let from = wallets[0].address(); + let to = wallets[1].address(); + + let provider = http_provider(&handle.http_endpoint()); + + let eip1559_est = provider.estimate_eip1559_fees().await.unwrap(); + let gas_price = provider.get_gas_price().await.unwrap(); + + // Create multiple blob transactions to be included in the same block + let blob_data = + [b"Hello Beacon API - Blob 1", b"Hello Beacon API - Blob 2", b"Hello Beacon API - Blob 3"]; + + let mut pending_txs = Vec::new(); + + // Send all transactions without waiting for receipts + for (i, data) in blob_data.iter().enumerate() { + let sidecar: SidecarBuilder = SidecarBuilder::from_slice(data.as_slice()); + let sidecar = sidecar.build().unwrap(); + + let tx = TransactionRequest::default() + .with_from(from) + .with_to(to) + .with_nonce(i as u64) + .with_max_fee_per_blob_gas(gas_price + 1) + .with_max_fee_per_gas(eip1559_est.max_fee_per_gas) + .with_max_priority_fee_per_gas(eip1559_est.max_priority_fee_per_gas) + .with_blob_sidecar(sidecar) + .value(U256::from(100)); + + let mut tx = WithOtherFields::new(tx); + tx.populate_blob_hashes(); + + let pending = provider.send_transaction(tx).await.unwrap(); + pending_txs.push(pending); + } + + // Mine a block to include all transactions + api.evm_mine(None).await.unwrap(); + + // Get receipts for all transactions + let mut receipts = Vec::new(); + for pending in pending_txs { + let receipt = pending.get_receipt().await.unwrap(); + receipts.push(receipt); + } + + // Verify all transactions were included in the same block + let block_number = receipts[0].block_number.unwrap(); + for (i, receipt) in receipts.iter().enumerate() { + assert_eq!( + receipt.block_number.unwrap(), + block_number, + "Transaction {i} was not included in block {block_number}" + ); + } + + // Test Beacon API endpoint using HTTP client + let client = reqwest::Client::new(); + let url = format!("{}/eth/v1/beacon/blob_sidecars/{}", handle.http_endpoint(), block_number); + + let response = client.get(&url).send().await.unwrap(); + assert_eq!(response.status(), reqwest::StatusCode::OK); + + let body: serde_json::Value = response.json().await.unwrap(); + + // Verify response structure + assert!(body["data"].is_array()); + assert!(body["execution_optimistic"].is_boolean()); + assert!(body["finalized"].is_boolean()); + + // Verify we have blob data from all transactions + let blobs = body["data"].as_array().unwrap(); + assert_eq!(blobs.len(), 3, "Expected 3 blob sidecars from 3 transactions"); + + // Verify blob structure for each blob + for (i, blob) in blobs.iter().enumerate() { + assert!(blob["index"].is_string(), "Blob {i} missing index"); + assert!(blob["blob"].is_string(), "Blob {i} missing blob data"); + assert!(blob["kzg_commitment"].is_string(), "Blob {i} missing kzg_commitment"); + assert!(blob["kzg_proof"].is_string(), "Blob {i} missing kzg_proof"); + } + + // Test filtering with indices query parameter - single index + let url = format!( + "{}/eth/v1/beacon/blob_sidecars/{}?indices=1", + handle.http_endpoint(), + block_number + ); + let response = client.get(&url).send().await.unwrap(); + let status = response.status(); + if status != reqwest::StatusCode::OK { + let error_body = response.text().await.unwrap(); + panic!("Expected OK status, got {status}: {error_body}"); + } + let body: serde_json::Value = response.json().await.unwrap(); + let filtered_blobs = body["data"].as_array().unwrap(); + assert_eq!(filtered_blobs.len(), 1, "Expected 1 blob sidecar when filtering by indices=1"); + assert_eq!(filtered_blobs[0]["index"].as_str().unwrap(), "1"); + + // Test filtering with indices query parameter - multiple indices (comma-separated) + let url = format!( + "{}/eth/v1/beacon/blob_sidecars/{}?indices=0,2", + handle.http_endpoint(), + block_number + ); + let response = client.get(&url).send().await.unwrap(); + assert_eq!(response.status(), reqwest::StatusCode::OK); + let body: serde_json::Value = response.json().await.unwrap(); + let filtered_blobs = body["data"].as_array().unwrap(); + assert_eq!(filtered_blobs.len(), 2, "Expected 2 blob sidecars when filtering by indices=0,2"); + let indices: Vec = + filtered_blobs.iter().map(|b| b["index"].as_str().unwrap().to_string()).collect(); + assert!(indices.contains(&"0".to_string()), "Expected index 0 in results"); + assert!(indices.contains(&"2".to_string()), "Expected index 2 in results"); + + // Test filtering with non-existent index + let url = format!( + "{}/eth/v1/beacon/blob_sidecars/{}?indices=99", + handle.http_endpoint(), + block_number + ); + let response = client.get(&url).send().await.unwrap(); + assert_eq!(response.status(), reqwest::StatusCode::OK); + let body: serde_json::Value = response.json().await.unwrap(); + let filtered_blobs = body["data"].as_array().unwrap(); + assert_eq!( + filtered_blobs.len(), + 0, + "Expected 0 blob sidecars when filtering by non-existent index" + ); + + // Test with special block identifiers + let test_ids = vec!["latest", "finalized", "safe", "earliest"]; + for block_id in test_ids { + let url = format!("{}/eth/v1/beacon/blob_sidecars/{}", handle.http_endpoint(), block_id); + assert_eq!(client.get(&url).send().await.unwrap().status(), reqwest::StatusCode::OK); + } + let url = format!("{}/eth/v1/beacon/blob_sidecars/pending", handle.http_endpoint()); + assert_eq!(client.get(&url).send().await.unwrap().status(), reqwest::StatusCode::NOT_FOUND); + + // Test with hex block number + let url = format!("{}/eth/v1/beacon/blob_sidecars/0x{block_number:x}", handle.http_endpoint()); + let response = client.get(&url).send().await.unwrap(); + assert_eq!(response.status(), reqwest::StatusCode::OK); + + // Test with non-existent block + let url = format!("{}/eth/v1/beacon/blob_sidecars/999999", handle.http_endpoint()); + let response = client.get(&url).send().await.unwrap(); + assert_eq!(response.status(), reqwest::StatusCode::NOT_FOUND); +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_beacon_api_get_blobs() { + let node_config = NodeConfig::test().with_hardfork(Some(EthereumHardfork::Cancun.into())); + let (api, handle) = spawn(node_config).await; + + // Disable auto-mining so we can include multiple transactions in the same block + api.anvil_set_auto_mine(false).await.unwrap(); + + let wallets = handle.dev_wallets().collect::>(); + let from = wallets[0].address(); + let to = wallets[1].address(); + + let provider = http_provider(&handle.http_endpoint()); + + let eip1559_est = provider.estimate_eip1559_fees().await.unwrap(); + let gas_price = provider.get_gas_price().await.unwrap(); + + // Create multiple blob transactions to be included in the same block + let blob_data = + [b"Hello Beacon API - Blob 1", b"Hello Beacon API - Blob 2", b"Hello Beacon API - Blob 3"]; + + let mut pending_txs = Vec::new(); + + // Send all transactions without waiting for receipts + for (i, data) in blob_data.iter().enumerate() { + let sidecar: SidecarBuilder = SidecarBuilder::from_slice(data.as_slice()); + let sidecar = sidecar.build().unwrap(); + + let tx = TransactionRequest::default() + .with_from(from) + .with_to(to) + .with_nonce(i as u64) + .with_max_fee_per_blob_gas(gas_price + 1) + .with_max_fee_per_gas(eip1559_est.max_fee_per_gas) + .with_max_priority_fee_per_gas(eip1559_est.max_priority_fee_per_gas) + .with_blob_sidecar(sidecar) + .value(U256::from(100)); + + let mut tx = WithOtherFields::new(tx); + tx.populate_blob_hashes(); + + let pending = provider.send_transaction(tx).await.unwrap(); + pending_txs.push(pending); + } + + // Mine a block to include all transactions + api.evm_mine(None).await.unwrap(); + + // Get receipts for all transactions + let mut receipts = Vec::new(); + for pending in pending_txs { + let receipt = pending.get_receipt().await.unwrap(); + receipts.push(receipt); + } + + // Verify all transactions were included in the same block + let block_number = receipts[0].block_number.unwrap(); + for (i, receipt) in receipts.iter().enumerate() { + assert_eq!( + receipt.block_number.unwrap(), + block_number, + "Transaction {i} was not included in block {block_number}" + ); + } + + // Extract the actual versioned hashes from the mined transactions + let mut actual_versioned_hashes = Vec::new(); + for receipt in &receipts { + let tx = provider.get_transaction_by_hash(receipt.transaction_hash).await.unwrap().unwrap(); + if let Some(blob_versioned_hashes) = tx.blob_versioned_hashes() { + actual_versioned_hashes.extend(blob_versioned_hashes.iter().copied()); + } + } + + // Test Beacon API endpoint using HTTP client + let client = reqwest::Client::new(); + let url = format!("{}/eth/v1/beacon/blobs/{}", handle.http_endpoint(), block_number); + + let response = client.get(&url).send().await.unwrap(); + assert_eq!(response.status(), reqwest::StatusCode::OK); + + let blobs_response: GetBlobsResponse = response.json().await.unwrap(); + + // Verify response structure + assert!(!blobs_response.execution_optimistic); + assert!(!blobs_response.finalized); + + // Verify we have blob data from all transactions + assert_eq!(blobs_response.data.len(), 3, "Expected 3 blobs from 3 transactions"); + + // Test filtering with versioned_hashes query parameter - single hash + let url = format!( + "{}/eth/v1/beacon/blobs/{}?versioned_hashes={}", + handle.http_endpoint(), + block_number, + actual_versioned_hashes[1] + ); + let response = client.get(&url).send().await.unwrap(); + let status = response.status(); + if status != reqwest::StatusCode::OK { + let error_body = response.text().await.unwrap(); + panic!("Expected OK status, got {status}: {error_body}"); + } + let blobs_response: GetBlobsResponse = response.json().await.unwrap(); + assert_eq!( + blobs_response.data.len(), + 1, + "Expected 1 blob when filtering by single versioned_hash" + ); + + // Test filtering with versioned_hashes query parameter - multiple versioned_hashes + // (comma-separated) + let url = format!( + "{}/eth/v1/beacon/blobs/{}?versioned_hashes={},{}", + handle.http_endpoint(), + block_number, + actual_versioned_hashes[0], + actual_versioned_hashes[2] + ); + let response = client.get(&url).send().await.unwrap(); + assert_eq!(response.status(), reqwest::StatusCode::OK); + let blobs_response: GetBlobsResponse = response.json().await.unwrap(); + assert_eq!( + blobs_response.data.len(), + 2, + "Expected 2 blobs when filtering by two versioned_hashes" + ); + + // Test filtering with non-existent versioned_hash + let non_existent_hash = + b256!("0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"); + let url = format!( + "{}/eth/v1/beacon/blobs/{}?versioned_hashes={}", + handle.http_endpoint(), + block_number, + non_existent_hash + ); + let response = client.get(&url).send().await.unwrap(); + assert_eq!(response.status(), reqwest::StatusCode::OK); + let blobs_response: GetBlobsResponse = response.json().await.unwrap(); + assert_eq!( + blobs_response.data.len(), + 0, + "Expected 0 blobs when filtering by non-existent versioned_hash" + ); + + // Test with special block identifiers + let test_ids = vec!["latest", "finalized", "safe", "earliest"]; + for block_id in test_ids { + let url = format!("{}/eth/v1/beacon/blobs/{}", handle.http_endpoint(), block_id); + assert_eq!(client.get(&url).send().await.unwrap().status(), reqwest::StatusCode::OK); + } + let url = format!("{}/eth/v1/beacon/blobs/pending", handle.http_endpoint()); + assert_eq!(client.get(&url).send().await.unwrap().status(), reqwest::StatusCode::NOT_FOUND); + + // Test with hex block number + let url = format!("{}/eth/v1/beacon/blobs/0x{block_number:x}", handle.http_endpoint()); + let response = client.get(&url).send().await.unwrap(); + assert_eq!(response.status(), reqwest::StatusCode::OK); + + // Test with non-existent block + let url = format!("{}/eth/v1/beacon/blobs/999999", handle.http_endpoint()); + let response = client.get(&url).send().await.unwrap(); + assert_eq!(response.status(), reqwest::StatusCode::NOT_FOUND); +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_beacon_api_get_genesis() { + let node_config = NodeConfig::test().with_hardfork(Some(EthereumHardfork::Cancun.into())); + let (_api, handle) = spawn(node_config).await; + + // Test Beacon API genesis endpoint using HTTP client + let client = reqwest::Client::new(); + let url = format!("{}/eth/v1/beacon/genesis", handle.http_endpoint()); + + let response = client.get(&url).send().await.unwrap(); + assert_eq!(response.status(), reqwest::StatusCode::OK); + + let genesis_response: GenesisResponse = response.json().await.unwrap(); + + assert!(genesis_response.data.genesis_time > 0); + assert_eq!(genesis_response.data.genesis_validators_root, B256::ZERO); + assert_eq!( + genesis_response.data.genesis_fork_version, + FixedBytes::from([0x00, 0x00, 0x00, 0x00]) + ); +} diff --git a/crates/anvil/tests/it/eip4844.rs b/crates/anvil/tests/it/eip4844.rs index 7d0d38afb9e1b..88301d863437f 100644 --- a/crates/anvil/tests/it/eip4844.rs +++ b/crates/anvil/tests/it/eip4844.rs @@ -476,326 +476,3 @@ async fn can_get_blobs_by_tx_hash() { let blobs = api.anvil_get_blob_by_tx_hash(hash).unwrap().unwrap(); assert_eq!(blobs, sidecar.blobs); } - -#[tokio::test(flavor = "multi_thread")] -async fn test_beacon_api_get_blob_sidecars() { - let node_config = NodeConfig::test().with_hardfork(Some(EthereumHardfork::Cancun.into())); - let (api, handle) = spawn(node_config).await; - - // Disable auto-mining so we can include multiple transactions in the same block - api.anvil_set_auto_mine(false).await.unwrap(); - - let wallets = handle.dev_wallets().collect::>(); - let from = wallets[0].address(); - let to = wallets[1].address(); - - let provider = http_provider(&handle.http_endpoint()); - - let eip1559_est = provider.estimate_eip1559_fees().await.unwrap(); - let gas_price = provider.get_gas_price().await.unwrap(); - - // Create multiple blob transactions to be included in the same block - let blob_data = - [b"Hello Beacon API - Blob 1", b"Hello Beacon API - Blob 2", b"Hello Beacon API - Blob 3"]; - - let mut pending_txs = Vec::new(); - - // Send all transactions without waiting for receipts - for (i, data) in blob_data.iter().enumerate() { - let sidecar: SidecarBuilder = SidecarBuilder::from_slice(data.as_slice()); - let sidecar = sidecar.build().unwrap(); - - let tx = TransactionRequest::default() - .with_from(from) - .with_to(to) - .with_nonce(i as u64) - .with_max_fee_per_blob_gas(gas_price + 1) - .with_max_fee_per_gas(eip1559_est.max_fee_per_gas) - .with_max_priority_fee_per_gas(eip1559_est.max_priority_fee_per_gas) - .with_blob_sidecar(sidecar) - .value(U256::from(100)); - - let mut tx = WithOtherFields::new(tx); - tx.populate_blob_hashes(); - - let pending = provider.send_transaction(tx).await.unwrap(); - pending_txs.push(pending); - } - - // Mine a block to include all transactions - api.evm_mine(None).await.unwrap(); - - // Get receipts for all transactions - let mut receipts = Vec::new(); - for pending in pending_txs { - let receipt = pending.get_receipt().await.unwrap(); - receipts.push(receipt); - } - - // Verify all transactions were included in the same block - let block_number = receipts[0].block_number.unwrap(); - for (i, receipt) in receipts.iter().enumerate() { - assert_eq!( - receipt.block_number.unwrap(), - block_number, - "Transaction {i} was not included in block {block_number}" - ); - } - - // Test Beacon API endpoint using HTTP client - let client = reqwest::Client::new(); - let url = format!("{}/eth/v1/beacon/blob_sidecars/{}", handle.http_endpoint(), block_number); - - let response = client.get(&url).send().await.unwrap(); - assert_eq!(response.status(), reqwest::StatusCode::OK); - - let body: serde_json::Value = response.json().await.unwrap(); - - // Verify response structure - assert!(body["data"].is_array()); - assert!(body["execution_optimistic"].is_boolean()); - assert!(body["finalized"].is_boolean()); - - // Verify we have blob data from all transactions - let blobs = body["data"].as_array().unwrap(); - assert_eq!(blobs.len(), 3, "Expected 3 blob sidecars from 3 transactions"); - - // Verify blob structure for each blob - for (i, blob) in blobs.iter().enumerate() { - assert!(blob["index"].is_string(), "Blob {i} missing index"); - assert!(blob["blob"].is_string(), "Blob {i} missing blob data"); - assert!(blob["kzg_commitment"].is_string(), "Blob {i} missing kzg_commitment"); - assert!(blob["kzg_proof"].is_string(), "Blob {i} missing kzg_proof"); - } - - // Test filtering with indices query parameter - single index - let url = format!( - "{}/eth/v1/beacon/blob_sidecars/{}?indices=1", - handle.http_endpoint(), - block_number - ); - let response = client.get(&url).send().await.unwrap(); - let status = response.status(); - if status != reqwest::StatusCode::OK { - let error_body = response.text().await.unwrap(); - panic!("Expected OK status, got {status}: {error_body}"); - } - let body: serde_json::Value = response.json().await.unwrap(); - let filtered_blobs = body["data"].as_array().unwrap(); - assert_eq!(filtered_blobs.len(), 1, "Expected 1 blob sidecar when filtering by indices=1"); - assert_eq!(filtered_blobs[0]["index"].as_str().unwrap(), "1"); - - // Test filtering with indices query parameter - multiple indices (comma-separated) - let url = format!( - "{}/eth/v1/beacon/blob_sidecars/{}?indices=0,2", - handle.http_endpoint(), - block_number - ); - let response = client.get(&url).send().await.unwrap(); - assert_eq!(response.status(), reqwest::StatusCode::OK); - let body: serde_json::Value = response.json().await.unwrap(); - let filtered_blobs = body["data"].as_array().unwrap(); - assert_eq!(filtered_blobs.len(), 2, "Expected 2 blob sidecars when filtering by indices=0,2"); - let indices: Vec = - filtered_blobs.iter().map(|b| b["index"].as_str().unwrap().to_string()).collect(); - assert!(indices.contains(&"0".to_string()), "Expected index 0 in results"); - assert!(indices.contains(&"2".to_string()), "Expected index 2 in results"); - - // Test filtering with non-existent index - let url = format!( - "{}/eth/v1/beacon/blob_sidecars/{}?indices=99", - handle.http_endpoint(), - block_number - ); - let response = client.get(&url).send().await.unwrap(); - assert_eq!(response.status(), reqwest::StatusCode::OK); - let body: serde_json::Value = response.json().await.unwrap(); - let filtered_blobs = body["data"].as_array().unwrap(); - assert_eq!( - filtered_blobs.len(), - 0, - "Expected 0 blob sidecars when filtering by non-existent index" - ); - - // Test with special block identifiers - let test_ids = vec!["latest", "finalized", "safe", "earliest"]; - for block_id in test_ids { - let url = format!("{}/eth/v1/beacon/blob_sidecars/{}", handle.http_endpoint(), block_id); - assert_eq!(client.get(&url).send().await.unwrap().status(), reqwest::StatusCode::OK); - } - let url = format!("{}/eth/v1/beacon/blob_sidecars/pending", handle.http_endpoint()); - assert_eq!(client.get(&url).send().await.unwrap().status(), reqwest::StatusCode::NOT_FOUND); - - // Test with hex block number - let url = format!("{}/eth/v1/beacon/blob_sidecars/0x{block_number:x}", handle.http_endpoint()); - let response = client.get(&url).send().await.unwrap(); - assert_eq!(response.status(), reqwest::StatusCode::OK); - - // Test with non-existent block - let url = format!("{}/eth/v1/beacon/blob_sidecars/999999", handle.http_endpoint()); - let response = client.get(&url).send().await.unwrap(); - assert_eq!(response.status(), reqwest::StatusCode::NOT_FOUND); -} - -#[tokio::test(flavor = "multi_thread")] -async fn test_beacon_api_get_blobs() { - let node_config = NodeConfig::test().with_hardfork(Some(EthereumHardfork::Cancun.into())); - let (api, handle) = spawn(node_config).await; - - // Disable auto-mining so we can include multiple transactions in the same block - api.anvil_set_auto_mine(false).await.unwrap(); - - let wallets = handle.dev_wallets().collect::>(); - let from = wallets[0].address(); - let to = wallets[1].address(); - - let provider = http_provider(&handle.http_endpoint()); - - let eip1559_est = provider.estimate_eip1559_fees().await.unwrap(); - let gas_price = provider.get_gas_price().await.unwrap(); - - // Create multiple blob transactions to be included in the same block - let blob_data = - [b"Hello Beacon API - Blob 1", b"Hello Beacon API - Blob 2", b"Hello Beacon API - Blob 3"]; - - let mut pending_txs = Vec::new(); - - // Send all transactions without waiting for receipts - for (i, data) in blob_data.iter().enumerate() { - let sidecar: SidecarBuilder = SidecarBuilder::from_slice(data.as_slice()); - let sidecar = sidecar.build().unwrap(); - - let tx = TransactionRequest::default() - .with_from(from) - .with_to(to) - .with_nonce(i as u64) - .with_max_fee_per_blob_gas(gas_price + 1) - .with_max_fee_per_gas(eip1559_est.max_fee_per_gas) - .with_max_priority_fee_per_gas(eip1559_est.max_priority_fee_per_gas) - .with_blob_sidecar(sidecar) - .value(U256::from(100)); - - let mut tx = WithOtherFields::new(tx); - tx.populate_blob_hashes(); - - let pending = provider.send_transaction(tx).await.unwrap(); - pending_txs.push(pending); - } - - // Mine a block to include all transactions - api.evm_mine(None).await.unwrap(); - - // Get receipts for all transactions - let mut receipts = Vec::new(); - for pending in pending_txs { - let receipt = pending.get_receipt().await.unwrap(); - receipts.push(receipt); - } - - // Verify all transactions were included in the same block - let block_number = receipts[0].block_number.unwrap(); - for (i, receipt) in receipts.iter().enumerate() { - assert_eq!( - receipt.block_number.unwrap(), - block_number, - "Transaction {i} was not included in block {block_number}" - ); - } - - // Extract the actual versioned hashes from the mined transactions - let mut actual_versioned_hashes = Vec::new(); - for receipt in &receipts { - let tx = provider.get_transaction_by_hash(receipt.transaction_hash).await.unwrap().unwrap(); - if let Some(blob_versioned_hashes) = tx.blob_versioned_hashes() { - actual_versioned_hashes.extend(blob_versioned_hashes.iter().copied()); - } - } - - // Test Beacon API endpoint using HTTP client - let client = reqwest::Client::new(); - let url = format!("{}/eth/v1/beacon/blobs/{}", handle.http_endpoint(), block_number); - - let response = client.get(&url).send().await.unwrap(); - assert_eq!(response.status(), reqwest::StatusCode::OK); - - let body: serde_json::Value = response.json().await.unwrap(); - - // Verify response structure - assert!(body["data"].is_array()); - assert!(body["execution_optimistic"].is_boolean()); - assert!(body["finalized"].is_boolean()); - - // Verify we have blob data from all transactions - let blobs = body["data"].as_array().unwrap(); - assert_eq!(blobs.len(), 3, "Expected 3 blobs from 3 transactions"); - - // Test filtering with versioned_hashes query parameter - single hash - let url = format!( - "{}/eth/v1/beacon/blobs/{}?versioned_hashes={}", - handle.http_endpoint(), - block_number, - actual_versioned_hashes[1] - ); - let response = client.get(&url).send().await.unwrap(); - let status = response.status(); - if status != reqwest::StatusCode::OK { - let error_body = response.text().await.unwrap(); - panic!("Expected OK status, got {status}: {error_body}"); - } - let body: serde_json::Value = response.json().await.unwrap(); - let filtered_blobs = body["data"].as_array().unwrap(); - assert_eq!(filtered_blobs.len(), 1, "Expected 1 blob when filtering by single versioned_hash"); - - // Test filtering with versioned_hashes query parameter - multiple versioned_hashes - // (comma-separated) - let url = format!( - "{}/eth/v1/beacon/blobs/{}?versioned_hashes={},{}", - handle.http_endpoint(), - block_number, - actual_versioned_hashes[0], - actual_versioned_hashes[2] - ); - let response = client.get(&url).send().await.unwrap(); - assert_eq!(response.status(), reqwest::StatusCode::OK); - let body: serde_json::Value = response.json().await.unwrap(); - let filtered_blobs = body["data"].as_array().unwrap(); - assert_eq!(filtered_blobs.len(), 2, "Expected 2 blobs when filtering by two versioned_hashes"); - - // Test filtering with non-existent versioned_hash - let non_existent_hash = - b256!("0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"); - let url = format!( - "{}/eth/v1/beacon/blobs/{}?versioned_hashes={}", - handle.http_endpoint(), - block_number, - non_existent_hash - ); - let response = client.get(&url).send().await.unwrap(); - assert_eq!(response.status(), reqwest::StatusCode::OK); - let body: serde_json::Value = response.json().await.unwrap(); - let filtered_blobs = body["data"].as_array().unwrap(); - assert_eq!( - filtered_blobs.len(), - 0, - "Expected 0 blobs when filtering by non-existent versioned_hash" - ); - - // Test with special block identifiers - let test_ids = vec!["latest", "finalized", "safe", "earliest"]; - for block_id in test_ids { - let url = format!("{}/eth/v1/beacon/blobs/{}", handle.http_endpoint(), block_id); - assert_eq!(client.get(&url).send().await.unwrap().status(), reqwest::StatusCode::OK); - } - let url = format!("{}/eth/v1/beacon/blobs/pending", handle.http_endpoint()); - assert_eq!(client.get(&url).send().await.unwrap().status(), reqwest::StatusCode::NOT_FOUND); - - // Test with hex block number - let url = format!("{}/eth/v1/beacon/blobs/0x{block_number:x}", handle.http_endpoint()); - let response = client.get(&url).send().await.unwrap(); - assert_eq!(response.status(), reqwest::StatusCode::OK); - - // Test with non-existent block - let url = format!("{}/eth/v1/beacon/blobs/999999", handle.http_endpoint()); - let response = client.get(&url).send().await.unwrap(); - assert_eq!(response.status(), reqwest::StatusCode::NOT_FOUND); -} diff --git a/crates/anvil/tests/it/main.rs b/crates/anvil/tests/it/main.rs index 796c01c566a1f..4a52391f776c2 100644 --- a/crates/anvil/tests/it/main.rs +++ b/crates/anvil/tests/it/main.rs @@ -2,6 +2,7 @@ mod abi; mod anvil; mod anvil_api; mod api; +mod beacon_api; mod eip4844; mod eip7702; mod fork; From 194272ee1a15222df2f775c04a3b02598c35472e Mon Sep 17 00:00:00 2001 From: Mablr <59505383+mablr@users.noreply.github.com> Date: Thu, 13 Nov 2025 16:41:20 +0100 Subject: [PATCH 2/2] chore: bump alloy to 1.1.1 --- Cargo.lock | 383 +++++++++++++++++++++-------------------------------- Cargo.toml | 51 ++++--- 2 files changed, 177 insertions(+), 257 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c3cceb342fb41..820aec7cb3fbf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -79,17 +79,18 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90d103d3e440ad6f703dd71a5b58a6abd24834563bde8a5fabe706e00242f810" +checksum = "ad704069c12f68d0c742d0cad7e0a03882b42767350584627fbf8a47b1bf1846" dependencies = [ - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "alloy-trie", - "alloy-tx-macros 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-tx-macros", "auto_impl", + "borsh", "c-kzg", "derive_more", "either", @@ -103,51 +104,27 @@ dependencies = [ "thiserror 2.0.17", ] -[[package]] -name = "alloy-consensus" -version = "1.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" -dependencies = [ - "alloy-eips 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", - "alloy-primitives", - "alloy-rlp", - "alloy-serde 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", - "alloy-trie", - "alloy-tx-macros 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", - "auto_impl", - "c-kzg", - "derive_more", - "either", - "k256", - "once_cell", - "rand 0.8.5", - "secp256k1 0.30.0", - "serde", - "serde_json", - "thiserror 2.0.17", -] - [[package]] name = "alloy-consensus-any" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ead76c8c84ab3a50c31c56bc2c748c2d64357ad2131c32f9b10ab790a25e1a" +checksum = "bc374f640a5062224d7708402728e3d6879a514ba10f377da62e7dfb14c673e6" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", + "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "serde", ] [[package]] name = "alloy-contract" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5903097e4c131ad2dd80d87065f23c715ccb9cdb905fa169dffab8e1e798bae" +checksum = "15c493b2812943f7b58191063a8d13ea97c76099900869c08231e8eba3bf2f92" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-dyn-abi", "alloy-json-abi", "alloy-network", @@ -210,12 +187,12 @@ dependencies = [ [[package]] name = "alloy-eip5792" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420a02e98712e851daac5fa2c68bafb6f9a85602772f32b91a3ce6ffcfa04c9f" +checksum = "37aa145e9d61cda33702d8fbe349f25ba89604c98c4e9c04a3f69a790d92c0fa" dependencies = [ "alloy-primitives", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "serde", "serde_json", ] @@ -236,17 +213,18 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bdbec74583d0067798d77afa43d58f00d93035335d7ceaa5d3f93857d461bb9" +checksum = "7e867b5fd52ed0372a95016f3a37cbff95a9d5409230fbaef2d8ea00e8618098" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "auto_impl", + "borsh", "c-kzg", "derive_more", "either", @@ -258,32 +236,11 @@ dependencies = [ "thiserror 2.0.17", ] -[[package]] -name = "alloy-eips" -version = "1.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" -dependencies = [ - "alloy-eip2124", - "alloy-eip2930", - "alloy-eip7702", - "alloy-primitives", - "alloy-rlp", - "alloy-serde 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", - "auto_impl", - "c-kzg", - "derive_more", - "either", - "serde", - "serde_with", - "sha2", - "thiserror 2.0.17", -] - [[package]] name = "alloy-ens" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04b7b1959e53092cb57ee822e1129a32e90bab7a1ce4e3e43ba909b3a43d07ee" +checksum = "03947c30835388cd0e18d52e5bd1563ac3a2d784bf0801809bf693542ab68479" dependencies = [ "alloy-contract", "alloy-primitives", @@ -299,12 +256,12 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c84786dbd1a354358a01fc682862a22a47ff8c9e9bf4472d8d36bb02e3da5e54" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", + "alloy-eips", "alloy-hardforks", "alloy-op-hardforks", "alloy-primitives", - "alloy-rpc-types-engine 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-sol-types", "auto_impl", @@ -317,13 +274,13 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c25d5acb35706e683df1ea333c862bdb6b7c5548836607cd5bb56e501cca0b4f" +checksum = "b90be17e9760a6ba6d13cebdb049cea405ebc8bf57d90664ed708cc5bc348342" dependencies = [ - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips", "alloy-primitives", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "alloy-trie", "serde", ] @@ -355,9 +312,9 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31b67c5a702121e618217f7a86f314918acb2622276d0273490e2d4534490bc0" +checksum = "dcab4c51fb1273e3b0f59078e0cdf8aa99f697925b09f0d2055c18be46b4d48c" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -370,19 +327,19 @@ dependencies = [ [[package]] name = "alloy-network" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612296e6b723470bb1101420a73c63dfd535aa9bf738ce09951aedbd4ab7292e" +checksum = "196d7fd3f5d414f7bbd5886a628b7c42bd98d1b126f9a7cff69dbfd72007b39c" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-consensus-any", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips", "alloy-json-rpc", "alloy-network-primitives", "alloy-primitives", "alloy-rpc-types-any", "alloy-rpc-types-eth", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "alloy-signer", "alloy-sol-types", "async-trait", @@ -396,14 +353,14 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0e7918396eecd69d9c907046ec8a93fb09b89e2f325d5e7ea9c4e3929aa0dd2" +checksum = "0d3ae2777e900a7a47ad9e3b8ab58eff3d93628265e73bbdee09acf90bf68f75" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", + "alloy-eips", "alloy-primitives", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "serde", ] @@ -413,8 +370,8 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85412ba830f756ada62e6a231db0d213ca7472c7161ed0086ae55ab262e8f9fc" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", + "alloy-eips", "alloy-evm", "alloy-op-hardforks", "alloy-primitives", @@ -469,13 +426,13 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55c1313a527a2e464d067c031f3c2ec073754ef615cc0eabca702fd0fe35729c" +checksum = "9f9bf40c9b2a90c7677f9c39bccd9f06af457f35362439c0497a706f16557703" dependencies = [ "alloy-chains", - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", + "alloy-eips", "alloy-json-rpc", "alloy-network", "alloy-network-primitives", @@ -514,9 +471,9 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "810766eeed6b10ffa11815682b3f37afc5019809e3b470b23555297d5770ce63" +checksum = "acfdbe41e2ef1a7e79b5ea115baa750f9381ac9088fb600f4cedc731cf04a151" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -558,9 +515,9 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45f802228273056528dfd6cc8845cc91a7c7e0c6fc1a66d19e8673743dacdc7e" +checksum = "e7c2630fde9ff6033a780635e1af6ef40e92d74a9cacb8af3defc1b15cfebca5" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -584,51 +541,52 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ff3df608dcabd6bdd197827ff2b8faaa6cefe0c462f7dc5e74108666a01f56" +checksum = "ad098153a12382c22a597e865530033f5e644473742d6c733562d448125e02a2" dependencies = [ "alloy-primitives", "alloy-rpc-types-anvil", - "alloy-rpc-types-engine 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-rpc-types-trace", "alloy-rpc-types-txpool", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "serde", ] [[package]] name = "alloy-rpc-types-anvil" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac2bc988d7455e02dfb53460e1caa61f932b3f8452e12424e68ba8dcf60bba90" +checksum = "214d9d1033c173ab8fa32edd8a4655cd784447c820b0b66cd0d5167e049567d6" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "serde", ] [[package]] name = "alloy-rpc-types-any" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdbf6d1766ca41e90ac21c4bc5cbc5e9e965978a25873c3f90b3992d905db4cb" +checksum = "50b8429b5b62d21bf3691eb1ae12aaae9bb496894d5a114e3cc73e27e6800ec8" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", ] [[package]] name = "alloy-rpc-types-beacon" -version = "1.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f67f8269e8b5193a5328dd3ef4d60f93524071e53a993776e290581a59aa15fa" dependencies = [ - "alloy-eips 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", + "alloy-eips", "alloy-primitives", - "alloy-rpc-types-engine 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", + "alloy-rpc-types-engine", "derive_more", "serde", "serde_json", @@ -638,9 +596,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-debug" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977698b458738369ba5ca645d2cdb4d51ba07a81db37306ff85322853161ea3a" +checksum = "01731601ea631bd825c652a225701ab466c09457f446b8d8129368a095389c5d" dependencies = [ "alloy-primitives", "derive_more", @@ -650,15 +608,15 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07da696cc7fbfead4b1dda8afe408685cae80975cbb024f843ba74d9639cd0d3" +checksum = "9981491bb98e76099983f516ec7de550db0597031f5828c994961eb4bb993cce" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", + "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "derive_more", "ethereum_ssz", "ethereum_ssz_derive", @@ -668,35 +626,19 @@ dependencies = [ "strum 0.27.2", ] -[[package]] -name = "alloy-rpc-types-engine" -version = "1.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" -dependencies = [ - "alloy-consensus 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", - "alloy-eips 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", - "alloy-primitives", - "alloy-rlp", - "alloy-serde 1.1.0 (git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0)", - "derive_more", - "rand 0.8.5", - "serde", - "strum 0.27.2", -] - [[package]] name = "alloy-rpc-types-eth" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15e4831b71eea9d20126a411c1c09facf1d01d5cac84fd51d532d3c429cfc26" +checksum = "29031a6bf46177d65efce661f7ab37829ca09dd341bc40afb5194e97600655cc" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-consensus-any", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips", "alloy-network-primitives", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "alloy-sol-types", "itertools 0.14.0", "serde", @@ -707,13 +649,13 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb0c800e2ce80829fca1491b3f9063c29092850dc6cf19249d5f678f0ce71bb0" +checksum = "01b842f5aac6676ff4b2e328262d03bdf49807eaec3fe3a4735c45c97388518b" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "serde", "serde_json", "thiserror 2.0.17", @@ -721,31 +663,21 @@ dependencies = [ [[package]] name = "alloy-rpc-types-txpool" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f82e3068673a3cf93fbbc2f60a59059395cd54bbe39af895827faa5e641cc8f" +checksum = "7fa12c608873beeb7afa392944dce8829fa8a50c487f266863bb2dd6b743c4a2" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "serde", ] [[package]] name = "alloy-serde" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "751d1887f7d202514a82c5b3caf28ee8bd4a2ad9549e4f498b6f0bff99b52add" -dependencies = [ - "alloy-primitives", - "serde", - "serde_json", -] - -[[package]] -name = "alloy-serde" -version = "1.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" +checksum = "01e856112bfa0d9adc85bd7c13db03fad0e71d1d6fb4c2010e475b6718108236" dependencies = [ "alloy-primitives", "serde", @@ -754,9 +686,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf0b42ffbf558badfecf1dde0c3c5ed91f29bb7e97876d0bed008c3d5d67171" +checksum = "66a4f629da632d5279bbc5731634f0f5c9484ad9c4cad0cd974d9669dc1f46d6" dependencies = [ "alloy-dyn-abi", "alloy-primitives", @@ -771,11 +703,11 @@ dependencies = [ [[package]] name = "alloy-signer-aws" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6b73b812ab342d09de85eb302598a3a0c4d744cbe982ed76e309dcec9ddfa" +checksum = "66be762e60db50f81be7744c3a5b3efd4c69203576340df0519dacea09f5f4dd" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-network", "alloy-primitives", "alloy-signer", @@ -790,11 +722,11 @@ dependencies = [ [[package]] name = "alloy-signer-gcp" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba2bd8fcc42b831aa219deac7a0b642eb418446a402a4de3b302c6e9ad09702c" +checksum = "f7898c079cb61868a478ac718172a3098754db75b0013db36516b1fb34b1e318" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-network", "alloy-primitives", "alloy-signer", @@ -808,11 +740,11 @@ dependencies = [ [[package]] name = "alloy-signer-ledger" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc99b13a9f90efcc9a4dbc817909a78b0cd52fe734f81ed48a7032a658fecd8" +checksum = "92490935797fe5625e123fc99ed67e8ba24f27c26d88e337e3fcabec0f350f7d" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-dyn-abi", "alloy-network", "alloy-primitives", @@ -828,11 +760,11 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e7d555ee5f27be29af4ae312be014b57c6cff9acb23fe2cf008500be6ca7e33" +checksum = "76c8950810dc43660c0f22883659c4218e090a5c75dce33fa4ca787715997b7b" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-network", "alloy-primitives", "alloy-signer", @@ -848,11 +780,11 @@ dependencies = [ [[package]] name = "alloy-signer-trezor" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f35ab4ebc1cdfa766332bcdf9b4f6d559a001edd9bea72c39fd88d62c976f1d7" +checksum = "0eab6b865f665871ebb8e65f881d50d75d1a5c367d4e376578ff35ccd926b43e" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-network", "alloy-primitives", "alloy-signer", @@ -865,11 +797,11 @@ dependencies = [ [[package]] name = "alloy-signer-turnkey" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5271719b6594785b7cd317a60ccfd8822469627dc9d3167836d7441cb3b9b087" +checksum = "a0e2185d95364495878d73b82a18ddc0279d8bbc791cf117ccf1f61b282e5bac" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-network", "alloy-primitives", "alloy-signer", @@ -954,9 +886,9 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71b3deee699d6f271eab587624a9fa84d02d0755db7a95a043d52a6488d16ebe" +checksum = "fe215a2f9b51d5f1aa5c8cf22c8be8cdb354934de09c9a4e37aefb79b77552fd" dependencies = [ "alloy-json-rpc", "auto_impl", @@ -977,9 +909,9 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1720bd2ba8fe7e65138aca43bb0f680e4e0bcbd3ca39bf9d3035c9d7d2757f24" +checksum = "dc1b37b1a30d23deb3a8746e882c70b384c574d355bc2bbea9ea918b0c31366e" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -992,9 +924,9 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea89c214c7ddd2bcad100da929d6b642bbfed85788caf3b1be473abacd3111f9" +checksum = "52c81a4deeaa0d4b022095db17b286188d731e29ea141d4ec765e166732972e4" dependencies = [ "alloy-json-rpc", "alloy-pubsub", @@ -1012,9 +944,9 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "571aadf0afce0d515a28b2c6352662a39cb9f48b4eeff9a5c34557d6ea126730" +checksum = "4e9d6f5f304e8943afede2680e5fc7008780d4fc49387eafd53192ad95e20091" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -1046,9 +978,9 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7ce8ed34106acd6e21942022b6a15be6454c2c3ead4d76811d3bdcd63cf771" +checksum = "7ccf423f6de62e8ce1d6c7a11fb7508ae3536d02e0d68aaeb05c8669337d0937" dependencies = [ "darling 0.21.3", "proc-macro2", @@ -1056,17 +988,6 @@ dependencies = [ "syn 2.0.110", ] -[[package]] -name = "alloy-tx-macros" -version = "1.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=99f6dc3e79f88cfe06a66e29b33ca5e2646451d0#99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" -dependencies = [ - "darling 0.21.3", - "proc-macro2", - "quote", - "syn 2.0.109", -] - [[package]] name = "ammonia" version = "4.1.2" @@ -1187,11 +1108,11 @@ name = "anvil" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-contract", "alloy-dyn-abi", "alloy-eip5792", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips", "alloy-evm", "alloy-genesis", "alloy-hardforks", @@ -1204,7 +1125,7 @@ dependencies = [ "alloy-rlp", "alloy-rpc-types", "alloy-rpc-types-beacon", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "alloy-signer", "alloy-signer-local", "alloy-sol-types", @@ -1254,16 +1175,16 @@ dependencies = [ name = "anvil-core" version = "1.4.4" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-dyn-abi", "alloy-eip5792", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips", "alloy-evm", "alloy-network", "alloy-primitives", "alloy-rlp", "alloy-rpc-types", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "bytes", "foundry-common", "foundry-evm", @@ -2681,10 +2602,10 @@ name = "cast" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-contract", "alloy-dyn-abi", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips", "alloy-ens", "alloy-hardforks", "alloy-json-abi", @@ -2695,7 +2616,7 @@ dependencies = [ "alloy-rlp", "alloy-rpc-types", "alloy-rpc-types-beacon", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "alloy-signer", "alloy-signer-local", "alloy-sol-types", @@ -4319,7 +4240,7 @@ dependencies = [ "alloy-primitives", "alloy-provider", "alloy-rpc-types", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "alloy-signer", "alloy-signer-local", "alloy-transport", @@ -4447,15 +4368,15 @@ name = "forge-script" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-dyn-abi", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips", "alloy-json-abi", "alloy-network", "alloy-primitives", "alloy-provider", "alloy-rpc-types", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "alloy-signer", "clap", "dialoguer", @@ -4602,7 +4523,7 @@ name = "foundry-cheatcodes" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-dyn-abi", "alloy-ens", "alloy-evm", @@ -4666,7 +4587,7 @@ version = "1.4.4" dependencies = [ "alloy-chains", "alloy-dyn-abi", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips", "alloy-ens", "alloy-json-abi", "alloy-primitives", @@ -4713,9 +4634,9 @@ name = "foundry-common" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-dyn-abi", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips", "alloy-json-abi", "alloy-json-rpc", "alloy-network", @@ -4724,7 +4645,7 @@ dependencies = [ "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "alloy-sol-types", "alloy-transport", "alloy-transport-http", @@ -4768,12 +4689,12 @@ dependencies = [ name = "foundry-common-fmt" version = "1.4.4" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-dyn-abi", "alloy-network", "alloy-primitives", "alloy-rpc-types", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "chrono", "eyre", "foundry-macros", @@ -4993,7 +4914,7 @@ name = "foundry-evm-core" version = "1.4.4" dependencies = [ "alloy-chains", - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-dyn-abi", "alloy-evm", "alloy-genesis", @@ -5120,7 +5041,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8df2fd495cf7337b247d960f90355329cc625fe27fe7da9fe5e598c42df21526" dependencies = [ "alloy-chains", - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-hardforks", "alloy-primitives", "alloy-provider", @@ -5203,7 +5124,7 @@ dependencies = [ name = "foundry-wallets" version = "1.4.4" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", "alloy-dyn-abi", "alloy-network", "alloy-primitives", @@ -7213,13 +7134,13 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0d7ec388eb83a3e6c71774131dbbb2ba9c199b6acac7dce172ed8de2f819e91" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", + "alloy-eips", "alloy-network", "alloy-primitives", "alloy-rlp", "alloy-rpc-types-eth", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "derive_more", "serde", "thiserror 2.0.17", @@ -7268,12 +7189,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc252b5fa74dbd33aa2f9a40e5ff9cfe34ed2af9b9b235781bc7cc8ec7d6aca8" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", + "alloy-eips", "alloy-network-primitives", "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-serde", "derive_more", "op-alloy-consensus", "serde", @@ -7287,8 +7208,8 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1abe694cd6718b8932da3f824f46778be0f43289e4103c88abc505c63533a04" dependencies = [ - "alloy-consensus 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus", + "alloy-eips", "alloy-primitives", "alloy-rlp", "alloy-rpc-types-engine", @@ -8538,7 +8459,7 @@ name = "revm-database" version = "9.0.5" source = "git+https://github.com/bluealloy/revm.git?rev=7e59936#7e59936c87794d0bc1d1d2d18b754f5a76fc37aa" dependencies = [ - "alloy-eips 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips", "revm-bytecode", "revm-database-interface", "revm-primitives", @@ -9679,7 +9600,7 @@ dependencies = [ "derive_more", "dunce", "inturn", - "itertools 0.10.5", + "itertools 0.14.0", "itoa", "normalize-path", "once_map", @@ -9691,7 +9612,7 @@ dependencies = [ "solar-config", "solar-data-structures", "solar-macros", - "thiserror 1.0.69", + "thiserror 2.0.17", "tracing", "unicode-width 0.2.0", ] @@ -9714,7 +9635,7 @@ dependencies = [ "alloy-primitives", "bitflags 2.10.0", "bumpalo", - "itertools 0.10.5", + "itertools 0.14.0", "memchr", "num-bigint", "num-rational", diff --git a/Cargo.toml b/Cargo.toml index 79bfd841dd2d6..73c0e677a8e4a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -235,32 +235,31 @@ svm = { package = "svm-rs", version = "0.5", default-features = false, features ] } ## alloy -alloy-consensus = { version = "1.1.0", default-features = false } -alloy-contract = { version = "1.1.0", default-features = false } -alloy-eips = { version = "1.1.0", default-features = false } -alloy-eip5792 = { version = "1.1.0", default-features = false } -alloy-ens = { version = "1.1.0", default-features = false } -alloy-genesis = { version = "1.1.0", default-features = false } -alloy-json-rpc = { version = "1.1.0", default-features = false } -alloy-network = { version = "1.1.0", default-features = false } -alloy-provider = { version = "1.1.0", default-features = false } -alloy-pubsub = { version = "1.1.0", default-features = false } -alloy-rpc-client = { version = "1.1.0", default-features = false } -alloy-rpc-types = { version = "1.1.0", default-features = true } -#alloy-rpc-types-beacon = { version = "1.1.0", default-features = true } -alloy-rpc-types-beacon = { git = "https://github.com/alloy-rs/alloy", rev = "99f6dc3e79f88cfe06a66e29b33ca5e2646451d0" } -alloy-serde = { version = "1.1.0", default-features = false } -alloy-signer = { version = "1.1.0", default-features = false } -alloy-signer-aws = { version = "1.1.0", default-features = false } -alloy-signer-gcp = { version = "1.1.0", default-features = false } -alloy-signer-ledger = { version = "1.1.0", default-features = false } -alloy-signer-local = { version = "1.1.0", default-features = false } -alloy-signer-trezor = { version = "1.1.0", default-features = false } -alloy-signer-turnkey = { version = "1.1.0", default-features = false } -alloy-transport = { version = "1.1.0", default-features = false } -alloy-transport-http = { version = "1.1.0", default-features = false } -alloy-transport-ipc = { version = "1.1.0", default-features = false } -alloy-transport-ws = { version = "1.1.0", default-features = false } +alloy-consensus = { version = "1.1.1", default-features = false } +alloy-contract = { version = "1.1.1", default-features = false } +alloy-eips = { version = "1.1.1", default-features = false } +alloy-eip5792 = { version = "1.1.1", default-features = false } +alloy-ens = { version = "1.1.1", default-features = false } +alloy-genesis = { version = "1.1.1", default-features = false } +alloy-json-rpc = { version = "1.1.1", default-features = false } +alloy-network = { version = "1.1.1", default-features = false } +alloy-provider = { version = "1.1.1", default-features = false } +alloy-pubsub = { version = "1.1.1", default-features = false } +alloy-rpc-client = { version = "1.1.1", default-features = false } +alloy-rpc-types = { version = "1.1.1", default-features = true } +alloy-rpc-types-beacon = { version = "1.1.1", default-features = true } +alloy-serde = { version = "1.1.1", default-features = false } +alloy-signer = { version = "1.1.1", default-features = false } +alloy-signer-aws = { version = "1.1.1", default-features = false } +alloy-signer-gcp = { version = "1.1.1", default-features = false } +alloy-signer-ledger = { version = "1.1.1", default-features = false } +alloy-signer-local = { version = "1.1.1", default-features = false } +alloy-signer-trezor = { version = "1.1.1", default-features = false } +alloy-signer-turnkey = { version = "1.1.1", default-features = false } +alloy-transport = { version = "1.1.1", default-features = false } +alloy-transport-http = { version = "1.1.1", default-features = false } +alloy-transport-ipc = { version = "1.1.1", default-features = false } +alloy-transport-ws = { version = "1.1.1", default-features = false } alloy-hardforks = { version = "0.4.0", default-features = false } alloy-op-hardforks = { version = "0.4.0", default-features = false }