diff --git a/Cargo.lock b/Cargo.lock index 24b7ad2c71..3cde405392 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -74,21 +74,21 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2cc5aeb8dfa1e451a49fac87bc4b86c5de40ebea153ed88e83eb92b8151e74" +checksum = "89ec9b8795b2083585293bd3d19033e9d67e725917c95c44cb154e3400529ccd" dependencies = [ - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-contract", "alloy-core", - "alloy-eips 0.11.1", - "alloy-network 0.11.1", + "alloy-eips 0.12.5", + "alloy-network 0.12.5", "alloy-provider", "alloy-rpc-client", "alloy-rpc-types", - "alloy-serde 0.11.1", - "alloy-signer 0.11.1", - "alloy-signer-local 0.11.1", + "alloy-serde 0.12.5", + "alloy-signer 0.12.5", + "alloy-signer-local 0.12.5", "alloy-transport", "alloy-transport-http", ] @@ -123,50 +123,56 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "0.11.1" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e32ef5c74bbeb1733c37f4ac7f866f8c8af208b7b4265e21af609dcac5bd5e" +checksum = "ffc96bae4737f5a8c8fae0db8fe9f000ebf3dd9894db755ba178fedbbab244d6" dependencies = [ - "alloy-eips 0.11.1", + "alloy-eips 0.12.5", "alloy-primitives", "alloy-rlp", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "alloy-trie", "auto_impl", "c-kzg", - "derive_more 1.0.0", + "derive_more 2.0.1", + "either", "k256 0.13.4", + "once_cell", + "rand 0.8.5", "serde", + "serde_with 3.12.0", + "thiserror 2.0.12", ] [[package]] name = "alloy-consensus-any" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa13b7b1e1e3fedc42f0728103bfa3b4d566d3d42b606db449504d88dbdbdcf" +checksum = "fafded0c1ff8f0275c4a484239058e1c01c0c2589f8a16e03669ef7094a06f9b" dependencies = [ - "alloy-consensus 0.11.1", - "alloy-eips 0.11.1", + "alloy-consensus 0.12.1", + "alloy-eips 0.12.5", "alloy-primitives", "alloy-rlp", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "serde", ] [[package]] name = "alloy-contract" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6180fb232becdea70fad57c63b6967f01f74ab9595671b870f504116dd29de" +checksum = "7a0fa0584d13dd0c4e79288d411222c4d7c3411c71b7fa637cefda9dcf9bb1f9" dependencies = [ + "alloy-consensus 0.12.1", "alloy-dyn-abi", "alloy-json-abi", - "alloy-network 0.11.1", - "alloy-network-primitives 0.11.1", + "alloy-network 0.12.5", + "alloy-network-primitives 0.12.5", "alloy-primitives", "alloy-provider", "alloy-pubsub", - "alloy-rpc-types-eth 0.11.1", + "alloy-rpc-types-eth 0.12.5", "alloy-sol-types", "alloy-transport", "futures 0.3.31", @@ -176,9 +182,9 @@ dependencies = [ [[package]] name = "alloy-core" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "482f377cebceed4bb1fb5e7970f0805e2ab123d06701be9351b67ed6341e74aa" +checksum = "45ef3546f382c07c7c2e1d24844ed593e1c9b272236aedf635e4a295fb3fc9d0" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -217,6 +223,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "crc", + "serde", "thiserror 2.0.12", ] @@ -280,19 +287,20 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5591581ca2ab0b3e7226a4047f9a1bfcf431da1d0cce3752fda609fea3c27e37" +checksum = "5f4bffedaddc627520eabdcbfe27a2d2c2f716e15295e2ed1010df3feae67040" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702 0.5.1", "alloy-primitives", "alloy-rlp", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "auto_impl", "c-kzg", - "derive_more 1.0.0", + "derive_more 2.0.1", + "either", "once_cell", "serde", "sha2 0.10.8", @@ -300,13 +308,13 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cded3a2d4bd7173f696458c5d4c98c18a628dfcc9f194385e80a486e412e2e0" +checksum = "96b11774716152a5204aff0e86a8c841df499ea81464e2b1f82b3f72d6a2ef32" dependencies = [ - "alloy-eips 0.11.1", + "alloy-eips 0.12.5", "alloy-primitives", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "alloy-trie", "serde", ] @@ -339,9 +347,9 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "762414662d793d7aaa36ee3af6928b6be23227df1681ce9c039f6f11daadef64" +checksum = "6929e607b0a56803c69c68adc6e8aae1644c94e37ea458aa2d0713fc77490e70" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -374,23 +382,24 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be03f2ebc00cf88bd06d3c6caf387dceaa9c7e6b268216779fa68a9bf8ab4e6" +checksum = "c2b14524c3605ed5ee173b966333089474415416a8cfd80ceb003c18fd6d1736" dependencies = [ - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-consensus-any", - "alloy-eips 0.11.1", - "alloy-json-rpc 0.11.1", - "alloy-network-primitives 0.11.1", + "alloy-eips 0.12.5", + "alloy-json-rpc 0.12.5", + "alloy-network-primitives 0.12.5", "alloy-primitives", "alloy-rpc-types-any", - "alloy-rpc-types-eth 0.11.1", - "alloy-serde 0.11.1", - "alloy-signer 0.11.1", + "alloy-rpc-types-eth 0.12.5", + "alloy-serde 0.12.5", + "alloy-signer 0.12.5", "alloy-sol-types", "async-trait", "auto_impl", + "derive_more 2.0.1", "futures-utils-wasm", "serde", "serde_json", @@ -412,28 +421,28 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a00ce618ae2f78369918be0c20f620336381502c83b6ed62c2f7b2db27698b0" +checksum = "4c06932646544ea341f0fda48d2c0fe4fda75bc132379cb84019cdfb6ddcb0fb" dependencies = [ - "alloy-consensus 0.11.1", - "alloy-eips 0.11.1", + "alloy-consensus 0.12.1", + "alloy-eips 0.12.5", "alloy-primitives", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "serde", ] [[package]] name = "alloy-node-bindings" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a3906afb50446392eb798dae4b918ba4ffcca47542efda7215776ddc8b5037" +checksum = "cb8702df5255ed061ccb452511328edf267ff8b1c356623e8f93a5b708d57273" dependencies = [ "alloy-genesis", - "alloy-network 0.11.1", + "alloy-network 0.12.5", "alloy-primitives", - "alloy-signer 0.11.1", - "alloy-signer-local 0.11.1", + "alloy-signer 0.12.5", + "alloy-signer-local 0.12.5", "k256 0.13.4", "rand 0.8.5", "serde_json", @@ -459,7 +468,7 @@ dependencies = [ "foldhash", "getrandom 0.2.15", "hashbrown 0.15.2", - "indexmap 2.7.1", + "indexmap 2.8.0", "itoa", "k256 0.13.4", "keccak-asm", @@ -476,21 +485,21 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbe0a2acff0c4bd1669c71251ce10fc455cbffa1b4d0a817d5ea4ba7e5bb3db7" +checksum = "ff1ec2eabd9b3acc46e59247c35f75545960372431c68f7fdbfcfb970a486c30" dependencies = [ "alloy-chains", - "alloy-consensus 0.11.1", - "alloy-eips 0.11.1", - "alloy-json-rpc 0.11.1", - "alloy-network 0.11.1", - "alloy-network-primitives 0.11.1", + "alloy-consensus 0.12.1", + "alloy-eips 0.12.5", + "alloy-json-rpc 0.12.5", + "alloy-network 0.12.5", + "alloy-network-primitives 0.12.5", "alloy-primitives", "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types-debug", - "alloy-rpc-types-eth 0.11.1", + "alloy-rpc-types-eth 0.12.5", "alloy-rpc-types-trace", "alloy-rpc-types-txpool", "alloy-sol-types", @@ -507,7 +516,7 @@ dependencies = [ "lru 0.13.0", "parking_lot", "pin-project 1.1.10", - "reqwest 0.12.12", + "reqwest 0.12.13", "serde", "serde_json", "thiserror 2.0.12", @@ -519,11 +528,11 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3a68996f193f542f9e29c88dfa8ed1369d6ee04fa764c1bf23dc11b2f9e4a2" +checksum = "b1cf194abddb88b034d22ab41449ed8532e5113e58699cd055bf21d98a0991ab" dependencies = [ - "alloy-json-rpc 0.11.1", + "alloy-json-rpc 0.12.5", "alloy-primitives", "alloy-transport", "bimap", @@ -555,16 +564,16 @@ checksum = "a40e1ef334153322fd878d07e86af7a529bcb86b2439525920a88eba87bcf943" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] name = "alloy-rpc-client" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b37cc3c7883dc41be1b01460127ad7930466d0a4bb6ba15a02ee34d2745e2d7c" +checksum = "6213829d8eabc239c2f9572452a5993ebdf78b04c020abc450ae48c54261d4ce" dependencies = [ - "alloy-json-rpc 0.11.1", + "alloy-json-rpc 0.12.5", "alloy-primitives", "alloy-pubsub", "alloy-transport", @@ -573,7 +582,7 @@ dependencies = [ "alloy-transport-ws", "futures 0.3.31", "pin-project 1.1.10", - "reqwest 0.12.12", + "reqwest 0.12.13", "serde", "serde_json", "tokio", @@ -586,48 +595,48 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f18e68a3882f372e045ddc89eb455469347767d17878ca492cfbac81e71a111" +checksum = "a153db94cf231b03238fe4da48f59dc6f36e01b5e4d5a2e30de33b95395380fa" dependencies = [ "alloy-primitives", "alloy-rpc-types-anvil", "alloy-rpc-types-engine", - "alloy-rpc-types-eth 0.11.1", + "alloy-rpc-types-eth 0.12.5", "alloy-rpc-types-trace", "alloy-rpc-types-txpool", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "serde", ] [[package]] name = "alloy-rpc-types-anvil" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d06300df4a87d960add35909240fc72da355dd2ac926fa6999f9efafbdc5a7" +checksum = "5462937f088889c337c236c2509226e87a26301d2b01f9fafee246bd84cb0407" dependencies = [ "alloy-primitives", - "alloy-rpc-types-eth 0.11.1", - "alloy-serde 0.11.1", + "alloy-rpc-types-eth 0.12.5", + "alloy-serde 0.12.5", "serde", ] [[package]] name = "alloy-rpc-types-any" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "318ae46dd12456df42527c3b94c1ae9001e1ceb707f7afe2c7807ac4e49ebad9" +checksum = "2cd4ceea38ea27eeb26f021df34ed5b7b793704ad7a2a009f16137a19461e7ca" dependencies = [ "alloy-consensus-any", - "alloy-rpc-types-eth 0.11.1", - "alloy-serde 0.11.1", + "alloy-rpc-types-eth 0.12.5", + "alloy-serde 0.12.5", ] [[package]] name = "alloy-rpc-types-debug" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834b7012054cb2f90ee9893b7cc97702edca340ec1ef386c30c42e55e6cd691" +checksum = "8fa8f6e27d47b4c56c627cb03dc91624c26bd814f6609bb1d1a836148b76fc9b" dependencies = [ "alloy-primitives", "serde", @@ -635,20 +644,20 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83dde9fcf1ccb9b815cc0c89bba26bbbbaae5150a53ae624ed0fc63cb3676c1" +checksum = "b1a1a0710dbfbab2b33200ef45c650963d63edf6a81b2c7399ede762b3586dfd" dependencies = [ - "alloy-consensus 0.11.1", - "alloy-eips 0.11.1", + "alloy-consensus 0.12.1", + "alloy-eips 0.12.5", "alloy-primitives", "alloy-rlp", - "alloy-serde 0.11.1", - "derive_more 1.0.0", + "alloy-serde 0.12.5", + "derive_more 2.0.1", "jsonwebtoken", "rand 0.8.5", "serde", - "strum 0.26.3", + "strum 0.27.1", ] [[package]] @@ -672,17 +681,17 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b4dbee4d82f8a22dde18c28257bed759afeae7ba73da4a1479a039fd1445d04" +checksum = "8e18d94b1036302720b987564560e4a5b85035a17553c53a50afa2bd8762b487" dependencies = [ - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-consensus-any", - "alloy-eips 0.11.1", - "alloy-network-primitives 0.11.1", + "alloy-eips 0.12.5", + "alloy-network-primitives 0.12.5", "alloy-primitives", "alloy-rlp", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "alloy-sol-types", "itertools 0.14.0", "serde", @@ -692,13 +701,13 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd951155515fa452a2ca4b5434d4b3ab742bcd3d1d1b9a91704bcef5b8d2604" +checksum = "5ef4bba67ec601730ceb23e542980d73ae9f718819604dfdd8289b13a506e762" dependencies = [ "alloy-primitives", - "alloy-rpc-types-eth 0.11.1", - "alloy-serde 0.11.1", + "alloy-rpc-types-eth 0.12.5", + "alloy-serde 0.12.5", "serde", "serde_json", "thiserror 2.0.12", @@ -706,13 +715,13 @@ dependencies = [ [[package]] name = "alloy-rpc-types-txpool" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21d8dd5bd94993eda3d56a8c4c0d693548183a35462523ffc4385c0b020d3b0c" +checksum = "8edc8512f919feb79dd30864ef7574d2877e71b73e30b5de4925ba9bc6bd4f96" dependencies = [ "alloy-primitives", - "alloy-rpc-types-eth 0.11.1", - "alloy-serde 0.11.1", + "alloy-rpc-types-eth 0.12.5", + "alloy-serde 0.12.5", "serde", ] @@ -729,9 +738,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8732058f5ca28c1d53d241e8504620b997ef670315d7c8afab856b3e3b80d945" +checksum = "9824e1bf92cd7848ca6fabb01c9aca15c9c5fb0ab96da5514ef0543f021c69f6" dependencies = [ "alloy-primitives", "serde", @@ -754,9 +763,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f96b3526fdd779a4bd0f37319cfb4172db52a7ac24cdbb8804b72091c18e1701" +checksum = "81755ed6a6a33061302ac95e9bb7b40ebf7078e4568397168024242bc31a3e58" dependencies = [ "alloy-dyn-abi", "alloy-primitives", @@ -771,14 +780,14 @@ dependencies = [ [[package]] name = "alloy-signer-aws" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f7fae8dec636317c89e08498675c9421a214f1791a59dcaea2094c1a2dbf07" +checksum = "3c4861024ab627a150e07d2658ae29bb90d27cd1caddc2f6deff5b940167508b" dependencies = [ - "alloy-consensus 0.11.1", - "alloy-network 0.11.1", + "alloy-consensus 0.12.1", + "alloy-network 0.12.5", "alloy-primitives", - "alloy-signer 0.11.1", + "alloy-signer 0.12.5", "async-trait", "aws-sdk-kms", "k256 0.13.4", @@ -789,14 +798,14 @@ dependencies = [ [[package]] name = "alloy-signer-gcp" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcc881fb827d16c1379d375e7f5f26159039fb6956b9f1408989be6bf91444" +checksum = "4265500541723b09b625e37d19b718bf13c0535830692c5cf176619e2df678f4" dependencies = [ - "alloy-consensus 0.11.1", - "alloy-network 0.11.1", + "alloy-consensus 0.12.1", + "alloy-network 0.12.5", "alloy-primitives", - "alloy-signer 0.11.1", + "alloy-signer 0.12.5", "async-trait", "gcloud-sdk", "k256 0.13.4", @@ -807,15 +816,15 @@ dependencies = [ [[package]] name = "alloy-signer-ledger" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327a0cfa3d68a60862aeaa42fbdfb5cc7d66275a79e01a3f9cfe38d293b6215a" +checksum = "3cb71c0a180015f377b74aed8bafa60c8967529a0b09f55212913ad012e57bd1" dependencies = [ - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-dyn-abi", - "alloy-network 0.11.1", + "alloy-network 0.12.5", "alloy-primitives", - "alloy-signer 0.11.1", + "alloy-signer 0.12.5", "alloy-sol-types", "async-trait", "coins-ledger", @@ -845,14 +854,14 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe8f78cd6b7501c7e813a1eb4a087b72d23af51f5bb66d4e948dc840bdd207d8" +checksum = "aa857621a5c95c13e640e18bb9c4720f4338a666d6276f55446477a6bc3912ff" dependencies = [ - "alloy-consensus 0.11.1", - "alloy-network 0.11.1", + "alloy-consensus 0.12.1", + "alloy-network 0.12.5", "alloy-primitives", - "alloy-signer 0.11.1", + "alloy-signer 0.12.5", "async-trait", "coins-bip32", "coins-bip39", @@ -864,14 +873,14 @@ dependencies = [ [[package]] name = "alloy-signer-trezor" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bc3cf38010eeadfe37b34b58d0a53e36f3289dca68d16cbfaa62018e610b2ad" +checksum = "5f0afa312586907db84a3dbb793cc65174e0a8b43d8b93f2b22687ee96b2bdab" dependencies = [ - "alloy-consensus 0.11.1", - "alloy-network 0.11.1", + "alloy-consensus 0.12.1", + "alloy-network 0.12.5", "alloy-primitives", - "alloy-signer 0.11.1", + "alloy-signer 0.12.5", "async-trait", "semver 1.0.23", "thiserror 2.0.12", @@ -890,7 +899,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -903,11 +912,11 @@ dependencies = [ "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.7.1", + "indexmap 2.8.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "syn-solidity", "tiny-keccak 2.0.2", ] @@ -925,7 +934,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.99", + "syn 2.0.100", "syn-solidity", ] @@ -954,11 +963,11 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a8d762eadce3e9b65eac09879430c6f4fce3736cac3cac123f9b1bf435ddd13" +checksum = "6c74598eb65cefa886be6ba624c14a6856d9d84339ec720520f3efcc03311716" dependencies = [ - "alloy-json-rpc 0.11.1", + "alloy-json-rpc 0.12.5", "base64 0.22.1", "futures-utils-wasm", "serde", @@ -973,13 +982,13 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20819c4cb978fb39ce6ac31991ba90f386d595f922f42ef888b4a18be190713e" +checksum = "cfcd2f8ab2f053cd848ead5d625cb1b63716562951101588c1fa49300e3c6418" dependencies = [ - "alloy-json-rpc 0.11.1", + "alloy-json-rpc 0.12.5", "alloy-transport", - "reqwest 0.12.12", + "reqwest 0.12.13", "serde_json", "tower 0.5.2", "tracing", @@ -988,11 +997,11 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e88304aa8b796204e5e2500dfe235933ed692745e3effd94c3733643db6d218" +checksum = "e61e2b5cbf16f7588e4420848b61824f6514944773732534f4129ba6a251e059" dependencies = [ - "alloy-json-rpc 0.11.1", + "alloy-json-rpc 0.12.5", "alloy-pubsub", "alloy-transport", "bytes", @@ -1009,15 +1018,15 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9653ea9aa06d0e02fcbe2f04f1c47f35a85c378ccefa98e54ae85210bc8bbfa" +checksum = "67ddcf4b98b3448eb998e057dc5a27345997863d6544ee7f0f79957616768dd3" dependencies = [ "alloy-pubsub", "alloy-transport", "futures 0.3.31", - "http 1.2.0", - "rustls 0.23.23", + "http 1.3.1", + "rustls", "serde_json", "tokio", "tokio-tungstenite 0.26.2", @@ -1043,16 +1052,16 @@ dependencies = [ [[package]] name = "alloy-zksync" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234c2873428afc5c3a01ea501689feb50d6652cd742dd644a5a42ba7d4458513" +checksum = "8a0f6e19452ea0e19a8e3bb99f2be756d454f10ffcdfa7d8067a9caf00461f85" dependencies = [ "alloy", "async-trait", "chrono", "k256 0.13.4", "rand 0.9.0", - "reqwest 0.12.12", + "reqwest 0.12.13", "serde", "thiserror 2.0.12", "tracing", @@ -1184,23 +1193,23 @@ name = "anvil" version = "0.0.11" dependencies = [ "alloy-chains", - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-contract", "alloy-dyn-abi", - "alloy-eips 0.11.1", + "alloy-eips 0.12.5", "alloy-genesis", "alloy-json-abi", - "alloy-json-rpc 0.11.1", - "alloy-network 0.11.1", + "alloy-json-rpc 0.12.5", + "alloy-network 0.12.5", "alloy-primitives", "alloy-provider", "alloy-pubsub", "alloy-rlp", "alloy-rpc-client", "alloy-rpc-types", - "alloy-serde 0.11.1", - "alloy-signer 0.11.1", - "alloy-signer-local 0.11.1", + "alloy-serde 0.12.5", + "alloy-signer 0.12.5", + "alloy-signer-local 0.12.5", "alloy-sol-types", "alloy-transport", "alloy-transport-ipc", @@ -1253,14 +1262,14 @@ dependencies = [ name = "anvil-core" version = "0.0.11" dependencies = [ - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-dyn-abi", - "alloy-eips 0.11.1", - "alloy-network 0.11.1", + "alloy-eips 0.12.5", + "alloy-network 0.12.5", "alloy-primitives", "alloy-rlp", "alloy-rpc-types", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "alloy-trie", "bytes", "foundry-common", @@ -1323,7 +1332,7 @@ dependencies = [ "anvil_zksync_types", "anyhow", "hex", - "http 1.2.0", + "http 1.3.1", "jsonrpsee", "thiserror 1.0.69", "tower 0.4.13", @@ -1367,7 +1376,7 @@ dependencies = [ "flate2", "futures 0.3.31", "hex", - "indexmap 2.7.1", + "indexmap 2.8.0", "itertools 0.13.0", "lazy_static", "once_cell", @@ -1606,7 +1615,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1628,7 +1637,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1639,7 +1648,7 @@ checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1692,7 +1701,7 @@ checksum = "e12882f59de5360c748c4cbf569a042d5fb0eb515f7bea9c1f470b47f6ffbd73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -1703,9 +1712,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-config" -version = "1.5.18" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90aff65e86db5fe300752551c1b015ef72b708ac54bded8ef43d0d53cb7cb0b1" +checksum = "6a84fe2c5e9965fba0fbc2001db252f1d57527d82a905cca85127df227bca748" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1713,7 +1722,7 @@ dependencies = [ "aws-sdk-ssooidc", "aws-sdk-sts", "aws-smithy-async", - "aws-smithy-http 0.61.1", + "aws-smithy-http", "aws-smithy-json", "aws-smithy-runtime", "aws-smithy-runtime-api", @@ -1722,7 +1731,7 @@ dependencies = [ "bytes", "fastrand", "hex", - "http 0.2.12", + "http 1.3.1", "ring", "time", "tokio", @@ -1733,9 +1742,9 @@ dependencies = [ [[package]] name = "aws-credential-types" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60e8f6b615cb5fc60a98132268508ad104310f0cfb25a1c22eee76efdf9154da" +checksum = "4471bef4c22a06d2c7a1b6492493d3fdf24a805323109d6874f9c94d5906ac14" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -1745,39 +1754,37 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.12.4" +version = "1.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd755adf9707cf671e31d944a189be3deaaeee11c8bc1d669bb8022ac90fbd0" +checksum = "dabb68eb3a7aa08b46fddfd59a3d55c978243557a90ab804769f7e20e67d2b01" dependencies = [ "aws-lc-sys", - "paste", "zeroize", ] [[package]] name = "aws-lc-sys" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9dd2e03ee80ca2822dd6ea431163d2ef259f2066a4d6ccaca6d9dcb386aa43" +checksum = "6bbe221bbf523b625a4dd8585c7f38166e31167ec2ca98051dbcb4c3b6e825d2" dependencies = [ "bindgen", "cc", "cmake", "dunce", "fs_extra", - "paste", ] [[package]] name = "aws-runtime" -version = "1.5.5" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76dd04d39cc12844c0994f2c9c5a6f5184c22e9188ec1ff723de41910a21dcad" +checksum = "0aff45ffe35196e593ea3b9dd65b320e51e2dda95aff4390bc459e461d09c6ad" dependencies = [ "aws-credential-types", "aws-sigv4", "aws-smithy-async", - "aws-smithy-http 0.60.12", + "aws-smithy-http", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -1795,14 +1802,14 @@ dependencies = [ [[package]] name = "aws-sdk-kms" -version = "1.62.0" +version = "1.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4ecacd2e7947b670b7f9e5146c860d1b638cef1392351df47ddf6bb4c68839" +checksum = "a971bfe62ca4a228627a1b74a87a7a142979b20b168d2e2884f4893212ebb715" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", - "aws-smithy-http 0.61.1", + "aws-smithy-http", "aws-smithy-json", "aws-smithy-runtime", "aws-smithy-runtime-api", @@ -1817,14 +1824,14 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.61.0" +version = "1.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e65ff295979977039a25f5a0bf067a64bc5e6aa38f3cef4037cf42516265553c" +checksum = "1d5330ad4e8a1ff49e9f26b738611caa72b105c41d41733801d1a36e8f9de936" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", - "aws-smithy-http 0.61.1", + "aws-smithy-http", "aws-smithy-json", "aws-smithy-runtime", "aws-smithy-runtime-api", @@ -1839,14 +1846,14 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.62.0" +version = "1.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91430a60f754f235688387b75ee798ef00cfd09709a582be2b7525ebb5306d4f" +checksum = "7956b1a85d49082347a7d17daa2e32df191f3e23c03d47294b99f95413026a78" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", - "aws-smithy-http 0.61.1", + "aws-smithy-http", "aws-smithy-json", "aws-smithy-runtime", "aws-smithy-runtime-api", @@ -1861,14 +1868,14 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.62.0" +version = "1.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9276e139d39fff5a0b0c984fc2d30f970f9a202da67234f948fda02e5bea1dbe" +checksum = "065c533fbe6f84962af33fcf02b0350b7c1f79285baab5924615d2be3b232855" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", - "aws-smithy-http 0.61.1", + "aws-smithy-http", "aws-smithy-json", "aws-smithy-query", "aws-smithy-runtime", @@ -1884,12 +1891,12 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.2.9" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bfe75fad52793ce6dec0dc3d4b1f388f038b5eb866c8d4d7f3a8e21b5ea5051" +checksum = "69d03c3c05ff80d54ff860fe38c726f6f494c639ae975203a101335f223386db" dependencies = [ "aws-credential-types", - "aws-smithy-http 0.60.12", + "aws-smithy-http", "aws-smithy-runtime-api", "aws-smithy-types", "bytes", @@ -1897,7 +1904,7 @@ dependencies = [ "hex", "hmac", "http 0.2.12", - "http 1.2.0", + "http 1.3.1", "once_cell", "percent-encoding", "sha2 0.10.8", @@ -1907,9 +1914,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.4" +version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa59d1327d8b5053c54bf2eaae63bf629ba9e904434d0835a28ed3c0ed0a614e" +checksum = "1e190749ea56f8c42bf15dd76c65e14f8f765233e6df9b0506d9d934ebef867c" dependencies = [ "futures-util", "pin-project-lite", @@ -1918,9 +1925,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.60.12" +version = "0.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7809c27ad8da6a6a68c454e651d4962479e81472aa19ae99e59f9aba1f9713cc" +checksum = "c5949124d11e538ca21142d1fba61ab0a2a2c1bc3ed323cdb3e4b878bfb83166" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", @@ -1928,6 +1935,7 @@ dependencies = [ "bytes-utils", "futures-core", "http 0.2.12", + "http 1.3.1", "http-body 0.4.6", "once_cell", "percent-encoding", @@ -1937,30 +1945,33 @@ dependencies = [ ] [[package]] -name = "aws-smithy-http" -version = "0.61.1" +name = "aws-smithy-http-client" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f276f21c7921fe902826618d1423ae5bf74cf8c1b8472aee8434f3dfd31824" +checksum = "0497ef5d53065b7cd6a35e9c1654bd1fefeae5c52900d91d1b188b0af0f29324" dependencies = [ + "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", - "bytes", - "bytes-utils", - "futures-core", - "http 0.2.12", - "http-body 0.4.6", - "once_cell", - "percent-encoding", + "h2 0.4.8", + "http 1.3.1", + "hyper 1.6.0", + "hyper-rustls", + "hyper-util", "pin-project-lite", - "pin-utils", + "rustls", + "rustls-native-certs 0.8.1", + "rustls-pki-types", + "tokio", + "tower 0.5.2", "tracing", ] [[package]] name = "aws-smithy-json" -version = "0.61.2" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "623a51127f24c30776c8b374295f2df78d92517386f77ba30773f15a30ce1422" +checksum = "92144e45819cae7dc62af23eac5a038a58aa544432d2102609654376a900bd07" dependencies = [ "aws-smithy-types", ] @@ -1977,42 +1988,39 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.7.8" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d526a12d9ed61fadefda24abe2e682892ba288c2018bcb38b1b4c111d13f6d92" +checksum = "f6328865e36c6fd970094ead6b05efd047d3a80ec5fc3be5e743910da9f2ebf8" dependencies = [ "aws-smithy-async", - "aws-smithy-http 0.60.12", + "aws-smithy-http", + "aws-smithy-http-client", "aws-smithy-runtime-api", "aws-smithy-types", "bytes", "fastrand", - "h2 0.3.26", "http 0.2.12", + "http 1.3.1", "http-body 0.4.6", "http-body 1.0.1", - "httparse", - "hyper 0.14.32", - "hyper-rustls 0.24.2", "once_cell", "pin-project-lite", "pin-utils", - "rustls 0.21.12", "tokio", "tracing", ] [[package]] name = "aws-smithy-runtime-api" -version = "1.7.3" +version = "1.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92165296a47a812b267b4f41032ff8069ab7ff783696d217f0994a0d7ab585cd" +checksum = "3da37cf5d57011cb1753456518ec76e31691f1f474b73934a284eb2a1c76510f" dependencies = [ "aws-smithy-async", "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.2.0", + "http 1.3.1", "pin-project-lite", "tokio", "tracing", @@ -2021,15 +2029,15 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.2.13" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7b8a53819e42f10d0821f56da995e1470b199686a1809168db6ca485665f042" +checksum = "836155caafba616c0ff9b07944324785de2ab016141c3550bd1c07882f8cee8f" dependencies = [ "base64-simd", "bytes", "bytes-utils", "http 0.2.12", - "http 1.2.0", + "http 1.3.1", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -2053,9 +2061,9 @@ dependencies = [ [[package]] name = "aws-types" -version = "1.3.5" +version = "1.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbd0a668309ec1f66c0f6bda4840dd6d4796ae26d699ebc266d7cc95c6d040f" +checksum = "3873f8deed8927ce8d04487630dc9ff73193bab64742a61d050e57a68dec4125" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -2076,7 +2084,7 @@ dependencies = [ "base64 0.22.1", "bytes", "futures-util", - "http 1.2.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", "hyper 1.6.0", @@ -2111,7 +2119,7 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.2.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", "mime", @@ -2186,9 +2194,9 @@ dependencies = [ [[package]] name = "base64ct" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "bb97d56060ee67d285efb8001fec9d2a4c710c32efd2e14b5cbb5ba71930fc2d" [[package]] name = "bech32" @@ -2243,7 +2251,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.99", + "syn 2.0.100", "which 4.4.2", ] @@ -2420,7 +2428,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -2576,20 +2584,20 @@ name = "cast" version = "0.0.11" dependencies = [ "alloy-chains", - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-contract", "alloy-dyn-abi", "alloy-json-abi", - "alloy-json-rpc 0.11.1", - "alloy-network 0.11.1", + "alloy-json-rpc 0.12.5", + "alloy-network 0.12.5", "alloy-node-bindings", "alloy-primitives", "alloy-provider", "alloy-rlp", "alloy-rpc-types", - "alloy-serde 0.11.1", - "alloy-signer 0.11.1", - "alloy-signer-local 0.11.1", + "alloy-serde 0.12.5", + "alloy-signer 0.12.5", + "alloy-signer-local 0.12.5", "alloy-sol-types", "alloy-transport", "alloy-zksync", @@ -2621,7 +2629,7 @@ dependencies = [ "rayon", "regex", "rpassword", - "rustls 0.23.23", + "rustls", "semver 1.0.23", "serde", "serde_json", @@ -2698,7 +2706,7 @@ dependencies = [ "foundry-evm", "foundry-strategy-zksync", "regex", - "reqwest 0.12.12", + "reqwest 0.12.13", "revm", "rustyline", "semver 1.0.23", @@ -2806,9 +2814,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.31" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" +checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" dependencies = [ "clap_builder", "clap_derive", @@ -2816,9 +2824,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.31" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" +checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" dependencies = [ "anstream", "anstyle", @@ -2850,14 +2858,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.28" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3209,6 +3217,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "crossbeam" version = "0.8.4" @@ -3337,7 +3351,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3404,7 +3418,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3426,7 +3440,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3466,7 +3480,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18e4fdb82bd54a12e42fb58a800dcae6b9e13982238ce2296dc3570b92148e1f" dependencies = [ "data-encoding", - "syn 1.0.109", + "syn 2.0.100", ] [[package]] @@ -3518,6 +3532,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", + "serde", ] [[package]] @@ -3539,7 +3554,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3560,7 +3575,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3570,7 +3585,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3600,7 +3615,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "unicode-xid", ] @@ -3612,7 +3627,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "unicode-xid", ] @@ -3727,7 +3742,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3752,7 +3767,7 @@ checksum = "8dc51d98e636f5e3b0759a39257458b22619cac7e96d932da6eeb052891bb67c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3775,9 +3790,9 @@ checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "dtoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" [[package]] name = "dunce" @@ -3813,6 +3828,7 @@ dependencies = [ "digest 0.10.7", "elliptic-curve 0.13.8", "rfc6979 0.4.0", + "serdect", "signature 2.2.0", "spki 0.7.3", ] @@ -3822,6 +3838,9 @@ name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] [[package]] name = "elasticlunr-rs" @@ -3864,22 +3883,23 @@ dependencies = [ "base16ct 0.2.0", "crypto-bigint 0.5.5", "digest 0.10.7", - "ff 0.13.0", + "ff 0.13.1", "generic-array", "group 0.13.0", "pem-rfc7468", "pkcs8 0.10.2", "rand_core 0.6.4", "sec1 0.7.3", + "serdect", "subtle", "zeroize", ] [[package]] name = "elsa" -version = "1.11.0" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2343daaeabe09879d4ea058bb4f1e63da3fc07dadc6634e01bda1b3d6a9d9d2b" +checksum = "9abf33c656a7256451ebb7d0082c5a471820c31269e49d807c538c252352186e" dependencies = [ "stable_deref_trait", ] @@ -3936,7 +3956,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3947,7 +3967,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -3968,14 +3988,14 @@ checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" [[package]] name = "env_logger" -version = "0.11.6" +version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +checksum = "c3716d7a920fb4fac5d84e9d4bce8ceb321e9414b4409da61b07b75c1e3d0697" dependencies = [ "anstream", "anstyle", "env_filter", - "humantime", + "jiff 0.2.4", "log", ] @@ -4231,12 +4251,12 @@ dependencies = [ [[package]] name = "fd-lock" -version = "4.0.3" +version = "4.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c44818c96aec5cadc9dacfb97bbcbcfc19a0de75b218412d56f57fbaab94e439" +checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" dependencies = [ "cfg-if", - "rustix 0.38.44", + "rustix 1.0.2", "windows-sys 0.59.0", ] @@ -4262,9 +4282,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ "rand_core 0.6.4", "subtle", @@ -4382,16 +4402,16 @@ name = "forge" version = "0.0.11" dependencies = [ "alloy-chains", - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-dyn-abi", "alloy-json-abi", - "alloy-network 0.11.1", + "alloy-network 0.12.5", "alloy-primitives", "alloy-provider", "alloy-rpc-types", - "alloy-serde 0.11.1", - "alloy-signer 0.11.1", - "alloy-signer-local 0.11.1", + "alloy-serde 0.12.5", + "alloy-signer 0.12.5", + "alloy-signer-local 0.12.5", "alloy-sol-macro-expander", "alloy-sol-macro-input", "alloy-transport", @@ -4444,9 +4464,9 @@ dependencies = [ "quick-junit", "rayon", "regex", - "reqwest 0.12.12", + "reqwest 0.12.13", "revm-inspectors", - "rustls 0.23.23", + "rustls", "semver 1.0.23", "serde", "serde_json", @@ -4517,16 +4537,16 @@ name = "forge-script" version = "0.0.11" dependencies = [ "alloy-chains", - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-dyn-abi", - "alloy-eips 0.11.1", + "alloy-eips 0.12.5", "alloy-json-abi", - "alloy-network 0.11.1", + "alloy-network 0.12.5", "alloy-primitives", "alloy-provider", "alloy-rpc-types", - "alloy-serde 0.11.1", - "alloy-signer 0.11.1", + "alloy-serde 0.12.5", + "alloy-signer 0.12.5", "alloy-zksync", "clap", "dialoguer", @@ -4564,7 +4584,7 @@ dependencies = [ name = "forge-script-sequence" version = "0.0.11" dependencies = [ - "alloy-network 0.11.1", + "alloy-network 0.12.5", "alloy-primitives", "alloy-rpc-types", "eyre", @@ -4592,7 +4612,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -4619,7 +4639,7 @@ dependencies = [ "futures 0.3.31", "itertools 0.14.0", "regex", - "reqwest 0.12.12", + "reqwest 0.12.13", "revm-primitives", "semver 1.0.23", "serde", @@ -4649,7 +4669,7 @@ dependencies = [ "alloy-json-abi", "alloy-primitives", "foundry-compilers", - "reqwest 0.12.12", + "reqwest 0.12.13", "semver 1.0.23", "serde", "serde_json", @@ -4661,17 +4681,17 @@ dependencies = [ name = "foundry-cheatcodes" version = "0.0.11" dependencies = [ - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-dyn-abi", "alloy-genesis", "alloy-json-abi", - "alloy-network 0.11.1", + "alloy-network 0.12.5", "alloy-primitives", "alloy-provider", "alloy-rlp", "alloy-rpc-types", - "alloy-signer 0.11.1", - "alloy-signer-local 0.11.1", + "alloy-signer 0.12.5", + "alloy-signer-local 0.12.5", "alloy-sol-types", "base64 0.22.1", "dialoguer", @@ -4732,7 +4752,7 @@ version = "0.0.11" dependencies = [ "alloy-chains", "alloy-dyn-abi", - "alloy-eips 0.11.1", + "alloy-eips 0.12.5", "alloy-json-abi", "alloy-primitives", "alloy-provider", @@ -4773,19 +4793,19 @@ dependencies = [ name = "foundry-common" version = "0.0.11" dependencies = [ - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-contract", "alloy-dyn-abi", - "alloy-eips 0.11.1", + "alloy-eips 0.12.5", "alloy-json-abi", - "alloy-json-rpc 0.11.1", - "alloy-network 0.11.1", + "alloy-json-rpc 0.12.5", + "alloy-network 0.12.5", "alloy-primitives", "alloy-provider", "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "alloy-sol-types", "alloy-transport", "alloy-transport-http", @@ -4809,7 +4829,7 @@ dependencies = [ "foundry-zksync-compilers", "itertools 0.14.0", "num-format", - "reqwest 0.12.12", + "reqwest 0.12.13", "semver 1.0.23", "serde", "serde_json", @@ -4829,12 +4849,12 @@ dependencies = [ name = "foundry-common-fmt" version = "0.0.11" dependencies = [ - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-dyn-abi", - "alloy-network 0.11.1", + "alloy-network 0.12.5", "alloy-primitives", "alloy-rpc-types", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "chrono", "comfy-table", "foundry-macros", @@ -4975,7 +4995,7 @@ dependencies = [ "number_prefix", "path-slash", "regex", - "reqwest 0.12.12", + "reqwest 0.12.13", "revm-primitives", "semver 1.0.23", "serde", @@ -5017,7 +5037,7 @@ dependencies = [ "alloy-dyn-abi", "alloy-json-abi", "alloy-primitives", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "alloy-sol-types", "eyre", "foundry-cheatcodes", @@ -5059,11 +5079,11 @@ dependencies = [ name = "foundry-evm-core" version = "0.0.11" dependencies = [ - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-dyn-abi", "alloy-genesis", "alloy-json-abi", - "alloy-network 0.11.1", + "alloy-network 0.12.5", "alloy-primitives", "alloy-provider", "alloy-rpc-types", @@ -5161,15 +5181,14 @@ dependencies = [ [[package]] name = "foundry-fork-db" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b7fd68c310825f5589021df0a51394d45fbc6a0a4eb4209c3882474c7653169" +checksum = "ba7beb856e73f59015823eb221a98b7c22b58bc4e7066c9c86774ebe74e61dd6" dependencies = [ - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-primitives", "alloy-provider", "alloy-rpc-types", - "alloy-serde 0.11.1", "eyre", "futures 0.3.31", "parking_lot", @@ -5202,7 +5221,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -5266,15 +5285,15 @@ dependencies = [ name = "foundry-wallets" version = "0.0.11" dependencies = [ - "alloy-consensus 0.11.1", + "alloy-consensus 0.12.1", "alloy-dyn-abi", - "alloy-network 0.11.1", + "alloy-network 0.12.5", "alloy-primitives", - "alloy-signer 0.11.1", + "alloy-signer 0.12.5", "alloy-signer-aws", "alloy-signer-gcp", "alloy-signer-ledger", - "alloy-signer-local 0.11.1", + "alloy-signer-local 0.12.5", "alloy-signer-trezor", "alloy-sol-types", "async-trait", @@ -5308,7 +5327,7 @@ dependencies = [ "fs4 0.8.4", "itertools 0.14.0", "path-slash", - "reqwest 0.12.12", + "reqwest 0.12.13", "semver 1.0.23", "serde", "serde_json", @@ -5324,7 +5343,7 @@ dependencies = [ name = "foundry-zksync-core" version = "0.0.11" dependencies = [ - "alloy-network 0.11.1", + "alloy-network 0.12.5", "alloy-primitives", "alloy-sol-types", "alloy-transport", @@ -5492,7 +5511,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -5557,7 +5576,7 @@ dependencies = [ "once_cell", "prost 0.13.5", "prost-types 0.13.5", - "reqwest 0.12.12", + "reqwest 0.12.13", "secret-vault-value", "serde", "serde_json", @@ -5681,7 +5700,7 @@ checksum = "c57c477b645ee248b173bb1176b52dd528872f12c50375801a58aaf5ae91113f" dependencies = [ "bstr", "itoa", - "jiff", + "jiff 0.1.29", "thiserror 2.0.12", ] @@ -5943,7 +5962,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "ff 0.13.0", + "ff 0.13.1", "rand_core 0.6.4", "subtle", ] @@ -5960,7 +5979,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.7.1", + "indexmap 2.8.0", "slab", "tokio", "tokio-util", @@ -5978,8 +5997,8 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.2.0", - "indexmap 2.7.1", + "http 1.3.1", + "indexmap 2.8.0", "slab", "tokio", "tokio-util", @@ -6128,7 +6147,7 @@ dependencies = [ "markup5ever", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -6144,9 +6163,9 @@ dependencies = [ [[package]] name = "http" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -6171,18 +6190,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.2.0", + "http 1.3.1", ] [[package]] name = "http-body-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", - "futures-util", - "http 1.2.0", + "futures-core", + "http 1.3.1", "http-body 1.0.1", "pin-project-lite", ] @@ -6255,7 +6274,7 @@ dependencies = [ "futures-channel", "futures-util", "h2 0.4.8", - "http 1.2.0", + "http 1.3.1", "http-body 1.0.1", "httparse", "httpdate", @@ -6266,22 +6285,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.32", - "log", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "tokio", - "tokio-rustls 0.24.1", -] - [[package]] name = "hyper-rustls" version = "0.27.5" @@ -6289,15 +6292,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http 1.2.0", + "http 1.3.1", "hyper 1.6.0", "hyper-util", "log", - "rustls 0.23.23", + "rustls", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls", "tower-service", "webpki-roots", ] @@ -6353,7 +6356,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.2.0", + "http 1.3.1", "http-body 1.0.1", "hyper 1.6.0", "pin-project-lite", @@ -6501,7 +6504,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -6619,7 +6622,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -6642,13 +6645,14 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", + "serde", ] [[package]] name = "indexmap" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" dependencies = [ "arbitrary", "equivalent", @@ -6736,14 +6740,14 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] name = "interprocess" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "894148491d817cb36b6f778017b8ac46b17408d522dd90f539d677ea938362eb" +checksum = "d941b405bd2322993887859a8ee6ac9134945a24ec5ec763a8a962fc64dfec2d" dependencies = [ "doctest-file", "futures-core", @@ -6865,6 +6869,30 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "jiff" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d699bc6dfc879fb1bf9bdff0d4c56f0884fc6f0d0eb0fba397a6d00cd9a6b85e" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d16e75759ee0aa64c57a56acbf43916987b20c77373cb7e808979e02b93c9f9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "jiff-tzdb" version = "0.1.3" @@ -6958,16 +6986,16 @@ dependencies = [ "futures-channel", "futures-util", "gloo-net", - "http 1.2.0", + "http 1.3.1", "jsonrpsee-core", "pin-project 1.1.10", - "rustls 0.23.23", + "rustls", "rustls-pki-types", "rustls-platform-verifier", "soketto", "thiserror 1.0.69", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls", "tokio-util", "tracing", "url", @@ -6985,7 +7013,7 @@ dependencies = [ "bytes", "futures-timer", "futures-util", - "http 1.2.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", "jsonrpsee-types", @@ -7012,11 +7040,11 @@ dependencies = [ "base64 0.22.1", "http-body 1.0.1", "hyper 1.6.0", - "hyper-rustls 0.27.5", + "hyper-rustls", "hyper-util", "jsonrpsee-core", "jsonrpsee-types", - "rustls 0.23.23", + "rustls", "rustls-platform-verifier", "serde", "serde_json", @@ -7037,7 +7065,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -7048,7 +7076,7 @@ checksum = "654afab2e92e5d88ebd8a39d6074483f3f2bfdf91c5ac57fe285e7127cdd4f51" dependencies = [ "anyhow", "futures-util", - "http 1.2.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", "hyper 1.6.0", @@ -7075,7 +7103,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c465fbe385238e861fdc4d1c85e04ada6c1fd246161d26385c1b311724d2af" dependencies = [ "beef", - "http 1.2.0", + "http 1.3.1", "serde", "serde_json", "thiserror 1.0.69", @@ -7098,7 +7126,7 @@ version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" dependencies = [ - "http 1.2.0", + "http 1.3.1", "jsonrpsee-client-transport", "jsonrpsee-core", "jsonrpsee-types", @@ -7142,6 +7170,7 @@ dependencies = [ "ecdsa 0.16.9", "elliptic-curve 0.13.8", "once_cell", + "serdect", "sha2 0.10.8", "signature 2.2.0", ] @@ -7242,9 +7271,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.170" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libdbus-sys" @@ -7263,7 +7292,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -7355,7 +7384,7 @@ dependencies = [ "proc-macro2", "quote", "regex-syntax 0.6.29", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -7457,9 +7486,9 @@ dependencies = [ [[package]] name = "mdbook" -version = "0.4.45" +version = "0.4.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07d36d96ffe1b5b16ddf2bc80b3b26bb7a498b2a6591061250bf0af8e8095ad" +checksum = "7e1a8fe3a4a01f28dab245c474cb7b95ccb4d3d2f17a5419a3d949f474c45e84" dependencies = [ "ammonia", "anyhow", @@ -7469,6 +7498,7 @@ dependencies = [ "elasticlunr-rs", "env_logger", "handlebars", + "hex", "log", "memchr", "once_cell", @@ -7477,6 +7507,7 @@ dependencies = [ "regex", "serde", "serde_json", + "sha2 0.10.8", "shlex", "tempfile", "toml 0.5.11", @@ -7550,7 +7581,7 @@ checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -7561,7 +7592,7 @@ checksum = "bf45bf44ab49be92fd1227a3be6fc6f617f1a337c06af54981048574d8783147" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -7651,7 +7682,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -7957,7 +7988,7 @@ dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -7969,7 +8000,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8011,21 +8042,25 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.3" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +checksum = "cde51589ab56b20a6f686b2c68f7a0bd6add753d697abf720d63f8db3ab7b1ad" +dependencies = [ + "critical-section", + "portable-atomic", +] [[package]] name = "op-alloy-consensus" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9ddc5e1dcd2967e8325ab06ed52a2c7cfa562a6dd31ffc9f64e7075bba9f221" +checksum = "d297150146a63778a29400320700e804ec6e1e4d6ec99857cdbbaf17b3de9241" dependencies = [ - "alloy-consensus 0.11.1", - "alloy-eips 0.11.1", + "alloy-consensus 0.12.1", + "alloy-eips 0.12.5", "alloy-primitives", "alloy-rlp", - "alloy-serde 0.11.1", + "alloy-serde 0.12.5", "derive_more 1.0.0", "serde", "thiserror 2.0.12", @@ -8033,16 +8068,16 @@ dependencies = [ [[package]] name = "op-alloy-rpc-types" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "458bccb95efbad3c431bfc3250e35cc7d2a6a48e4f7fc21194f4db7bc236e28d" +checksum = "7095f87d34fc814e3de06a7af8ffff9121993f322231647f84df304821cc0275" dependencies = [ - "alloy-consensus 0.11.1", - "alloy-eips 0.11.1", - "alloy-network-primitives 0.11.1", + "alloy-consensus 0.12.1", + "alloy-eips 0.12.5", + "alloy-network-primitives 0.12.5", "alloy-primitives", - "alloy-rpc-types-eth 0.11.1", - "alloy-serde 0.11.1", + "alloy-rpc-types-eth 0.12.5", + "alloy-serde 0.12.5", "derive_more 1.0.0", "op-alloy-consensus", "serde", @@ -8090,7 +8125,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8145,9 +8180,9 @@ checksum = "ad31e9de44ee3538fb9d64fe3376c1362f406162434609e79aea2a41a0af78ab" dependencies = [ "async-trait", "bytes", - "http 1.2.0", + "http 1.3.1", "opentelemetry", - "reqwest 0.12.12", + "reqwest 0.12.13", ] [[package]] @@ -8158,13 +8193,13 @@ checksum = "6b925a602ffb916fb7421276b86756027b37ee708f9dce2dbdcc51739f07e727" dependencies = [ "async-trait", "futures-core", - "http 1.2.0", + "http 1.3.1", "opentelemetry", "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", "prost 0.13.5", - "reqwest 0.12.12", + "reqwest 0.12.13", "thiserror 1.0.69", "tokio", "tonic", @@ -8314,7 +8349,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8397,7 +8432,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8456,7 +8491,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8477,7 +8512,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.7.1", + "indexmap 2.8.0", ] [[package]] @@ -8530,7 +8565,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8579,7 +8614,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8643,11 +8678,11 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.7.35", + "zerocopy 0.8.23", ] [[package]] @@ -8699,7 +8734,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1ccf34da56fc294e7d4ccf69a85992b7dfb826b7cf57bac6a70bba3494cc08a" dependencies = [ "proc-macro2", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8799,7 +8834,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8819,7 +8854,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "version_check", "yansi", ] @@ -8831,7 +8866,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d35f4dc9988d1326b065b4def5e950c3ed727aa03e3151b86cc9e2aec6b03f54" dependencies = [ "futures 0.3.31", - "indexmap 2.7.1", + "indexmap 2.8.0", "nix 0.29.0", "tokio", "tracing", @@ -8840,9 +8875,9 @@ dependencies = [ [[package]] name = "prodash" -version = "29.0.0" +version = "29.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a266d8d6020c61a437be704c5e618037588e1985c7dbb7bf8d265db84cffe325" +checksum = "9ee7ce24c980b976607e2d6ae4aae92827994d23fed71659c3ede3f92528b58b" dependencies = [ "log", "parking_lot", @@ -8879,7 +8914,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8910,7 +8945,7 @@ checksum = "4ee1c9ac207483d5e7db4940700de86a9aae46ef90c48b57f99fe7edb8345e49" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8950,7 +8985,7 @@ dependencies = [ "prost 0.12.6", "prost-types 0.12.6", "regex", - "syn 2.0.99", + "syn 2.0.100", "tempfile", ] @@ -8964,7 +8999,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -8977,7 +9012,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -9101,7 +9136,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed1a693391a16317257103ad06a88c6529ac640846021da7c435a06fffdacd7" dependencies = [ "chrono", - "indexmap 2.7.1", + "indexmap 2.8.0", "newtype-uuid", "quick-xml 0.37.2", "strip-ansi-escapes", @@ -9156,7 +9191,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", - "rustls 0.23.23", + "rustls", "socket2", "thiserror 2.0.12", "tokio", @@ -9174,7 +9209,7 @@ dependencies = [ "rand 0.8.5", "ring", "rustc-hash 2.1.1", - "rustls 0.23.23", + "rustls", "rustls-pki-types", "slab", "thiserror 2.0.12", @@ -9199,9 +9234,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] @@ -9505,9 +9540,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.12" +version = "0.12.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +checksum = "389a89e494bbc88bebf30e23da98742c843863a16a352647716116aa71fae80a" dependencies = [ "async-compression", "base64 0.22.1", @@ -9517,11 +9552,11 @@ dependencies = [ "futures-core", "futures-util", "h2 0.4.8", - "http 1.2.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", "hyper 1.6.0", - "hyper-rustls 0.27.5", + "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", "ipnet", @@ -9534,7 +9569,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.23", + "rustls", "rustls-native-certs 0.8.1", "rustls-pemfile 2.2.0", "rustls-pki-types", @@ -9545,7 +9580,7 @@ dependencies = [ "system-configuration 0.6.1", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.2", + "tokio-rustls", "tokio-socks", "tokio-util", "tower 0.5.2", @@ -9561,9 +9596,9 @@ dependencies = [ [[package]] name = "revm" -version = "19.5.0" +version = "19.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc5bef3c95fadf3b6a24a253600348380c169ef285f9780a793bb7090c8990d" +checksum = "7b906766b7ba049b515848952b5ae74f363d456e98de2021048a513e442b4f42" dependencies = [ "auto_impl", "cfg-if", @@ -9577,12 +9612,12 @@ dependencies = [ [[package]] name = "revm-inspectors" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d87cdf1c0d878b48423f8a86232950657abaf72a2d0d14af609467542313b1a" +checksum = "b6a43423d81f4bef634469bfb2d9ebe36a9ea9167f20ab3a7d1ff1e05fa63099" dependencies = [ "alloy-primitives", - "alloy-rpc-types-eth 0.11.1", + "alloy-rpc-types-eth 0.12.5", "alloy-rpc-types-trace", "alloy-sol-types", "anstyle", @@ -9675,9 +9710,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.13" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", @@ -9836,9 +9871,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8dcd64f141950290e45c99f7710ede1b600297c91818bb30b3667c0f45dc0" +checksum = "f7178faa4b75a30e269c71e61c353ce2748cf3d76f0c44c393f4e60abf49b825" dependencies = [ "bitflags 2.9.0", "errno", @@ -9847,18 +9882,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - [[package]] name = "rustls" version = "0.23.23" @@ -9870,23 +9893,11 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.8", + "rustls-webpki", "subtle", "zeroize", ] -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile 1.0.4", - "schannel", - "security-framework 2.11.1", -] - [[package]] name = "rustls-native-certs" version = "0.7.3" @@ -9950,10 +9961,10 @@ dependencies = [ "jni", "log", "once_cell", - "rustls 0.23.23", + "rustls", "rustls-native-certs 0.7.3", "rustls-platform-verifier-android", - "rustls-webpki 0.102.8", + "rustls-webpki", "security-framework 2.11.1", "security-framework-sys", "webpki-roots", @@ -9966,16 +9977,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustls-webpki" version = "0.102.8" @@ -10101,7 +10102,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -10128,21 +10129,11 @@ dependencies = [ "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", - "untrusted", -] - [[package]] name = "sdd" -version = "3.0.7" +version = "3.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07779b9b918cc05650cb30f404d4d7835d26df37c235eded8a6832e2fb82cca" +checksum = "584e070911c7017da6cb2eb0788d09f43d789029b5877d3e5ecc8acf86ceee21" [[package]] name = "sec1" @@ -10168,6 +10159,7 @@ dependencies = [ "der 0.7.9", "generic-array", "pkcs8 0.10.2", + "serdect", "subtle", "zeroize", ] @@ -10451,7 +10443,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -10462,7 +10454,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -10471,7 +10463,7 @@ version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.8.0", "itoa", "memchr", "ryu", @@ -10506,7 +10498,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -10548,7 +10540,25 @@ checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" dependencies = [ "hex", "serde", - "serde_with_macros", + "serde_with_macros 1.5.2", +] + +[[package]] +name = "serde_with" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.8.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros 3.12.0", + "time", ] [[package]] @@ -10563,19 +10573,41 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "serde_with_macros" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +dependencies = [ + "darling 0.20.10", + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "serde_yaml" version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.8.0", "itoa", "ryu", "serde", "unsafe-libyaml", ] +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct 0.2.0", + "serde", +] + [[package]] name = "serial_test" version = "3.2.0" @@ -10598,7 +10630,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -10892,7 +10924,7 @@ dependencies = [ "base64 0.22.1", "bytes", "futures 0.3.31", - "http 1.2.0", + "http 1.3.1", "httparse", "log", "rand 0.8.5", @@ -10949,7 +10981,7 @@ checksum = "71d07263243b313296eca18f18eda3a190902dc3284bf67ceff29b8b54dac3e6" dependencies = [ "bumpalo", "index_vec", - "indexmap 2.7.1", + "indexmap 2.8.0", "parking_lot", "rayon", "rustc-hash 2.1.1", @@ -10992,7 +11024,7 @@ checksum = "970d7c774741f786d62cab78290e47d845b0b9c0c9d094a1642aced1d7946036" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -11048,7 +11080,7 @@ dependencies = [ "path-slash", "rayon", "regex", - "reqwest 0.12.12", + "reqwest 0.12.13", "sanitize-filename", "semver 1.0.23", "serde", @@ -11193,7 +11225,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -11206,7 +11238,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -11230,14 +11262,14 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "svm-rs" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4197826bb07b996788b9860a95a1fe2c1307b2404a8c66f5ba825c42532b7c3c" +checksum = "feb9fc1391b3c05693c79c23845d4abd7c061cdfdf51ae238d4cd9efbb830aa7" dependencies = [ "const-hex", - "dirs 5.0.1", + "dirs 6.0.0", "fs4 0.12.0", - "reqwest 0.12.12", + "reqwest 0.12.13", "semver 1.0.23", "serde", "serde_json", @@ -11274,9 +11306,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.99" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -11292,7 +11324,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -11318,7 +11350,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -11379,7 +11411,7 @@ dependencies = [ "fastrand", "getrandom 0.3.1", "once_cell", - "rustix 1.0.0", + "rustix 1.0.2", "windows-sys 0.59.0", ] @@ -11407,11 +11439,11 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9" +checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" dependencies = [ - "rustix 0.38.44", + "rustix 1.0.2", "windows-sys 0.59.0", ] @@ -11470,7 +11502,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -11481,7 +11513,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -11601,9 +11633,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.43.0" +version = "1.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a" dependencies = [ "backtrace", "bytes", @@ -11626,7 +11658,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -11639,23 +11671,13 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.23.23", + "rustls", "tokio", ] @@ -11703,10 +11725,10 @@ checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", - "rustls 0.23.23", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls", "tungstenite 0.26.2", "webpki-roots", ] @@ -11740,7 +11762,7 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.8.0", "serde", "serde_spanned", "toml_datetime", @@ -11762,7 +11784,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.8.0", "toml_datetime", "winnow 0.5.40", ] @@ -11773,7 +11795,7 @@ version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.8.0", "serde", "serde_spanned", "toml_datetime", @@ -11792,7 +11814,7 @@ dependencies = [ "base64 0.22.1", "bytes", "h2 0.4.8", - "http 1.2.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", "hyper 1.6.0", @@ -11805,7 +11827,7 @@ dependencies = [ "rustls-pemfile 2.2.0", "socket2", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls", "tokio-stream", "tower 0.4.13", "tower-layer", @@ -11864,7 +11886,7 @@ dependencies = [ "bitflags 2.9.0", "bytes", "futures-util", - "http 1.2.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", "http-range-header", @@ -11924,7 +11946,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -12037,7 +12059,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f" dependencies = [ "cc", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -12069,7 +12091,7 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http 1.2.0", + "http 1.3.1", "httparse", "log", "rand 0.8.5", @@ -12086,11 +12108,11 @@ checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" dependencies = [ "bytes", "data-encoding", - "http 1.2.0", + "http 1.3.1", "httparse", "log", "rand 0.9.0", - "rustls 0.23.23", + "rustls", "rustls-pki-types", "sha1", "thiserror 2.0.12", @@ -12389,7 +12411,7 @@ checksum = "6a511871dc5de990a3b2a0e715facfbc5da848c0c0395597a1415029fb7c250a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -12472,7 +12494,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "wasm-bindgen-shared", ] @@ -12507,7 +12529,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -12776,7 +12798,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -12787,7 +12809,7 @@ checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -12798,7 +12820,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -12809,7 +12831,7 @@ checksum = "cb26fd936d991781ea39e87c3a27285081e3c0da5ca0fcbc02d368cc6f52ff01" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -12820,13 +12842,13 @@ checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" [[package]] name = "windows-registry" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-result 0.3.1", + "windows-strings 0.3.1", + "windows-targets 0.53.0", ] [[package]] @@ -13211,7 +13233,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "synstructure", ] @@ -13221,7 +13243,6 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "byteorder", "zerocopy-derive 0.7.35", ] @@ -13242,7 +13263,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -13253,7 +13274,7 @@ checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -13273,7 +13294,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", "synstructure", ] @@ -13294,7 +13315,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -13316,7 +13337,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -13331,7 +13352,7 @@ dependencies = [ "crossbeam-utils", "displaydoc", "flate2", - "indexmap 2.7.1", + "indexmap 2.8.0", "memchr", "thiserror 2.0.12", "zopfli", @@ -13541,7 +13562,7 @@ dependencies = [ "secrecy", "serde", "serde_json", - "serde_with", + "serde_with 1.14.0", "sha2 0.10.8", "strum 0.26.3", "thiserror 1.0.69", @@ -13762,7 +13783,7 @@ dependencies = [ "prost-reflect", "protox", "quote", - "syn 2.0.99", + "syn 2.0.100", ] [[package]] @@ -13793,7 +13814,7 @@ dependencies = [ "rlp", "serde", "serde_json", - "serde_with", + "serde_with 1.14.0", "strum 0.26.3", "thiserror 1.0.69", "tracing", @@ -13814,7 +13835,7 @@ dependencies = [ "anyhow", "futures 0.3.31", "once_cell", - "reqwest 0.12.12", + "reqwest 0.12.13", "serde_json", "sha2 0.10.8", "tokio", @@ -13896,7 +13917,7 @@ dependencies = [ "jsonrpsee", "pin-project-lite", "rlp", - "rustls 0.23.23", + "rustls", "serde", "serde_json", "thiserror 1.0.69", diff --git a/Cargo.toml b/Cargo.toml index 60c38efd5c..c5554b11b3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -202,65 +202,64 @@ foundry-strategy-zksync = { path = "crates/strategy/zksync" } # solc & compilation utilities foundry-block-explorers = { version = "0.11.0", default-features = false } foundry-compilers = { version = "0.13.3", default-features = false } -foundry-fork-db = "0.11.1" +foundry-fork-db = "0.12" solang-parser = "=0.3.3" solar-parse = { version = "=0.1.1", default-features = false } ## revm revm = { version = "19.4.0", default-features = false } revm-primitives = { version = "15.1.0", default-features = false } -revm-inspectors = { version = "0.15.0", features = ["serde"] } +revm-inspectors = { version = "0.16.0", features = ["serde"] } ## alloy -alloy-consensus = { version = "0.11.1", default-features = false } -alloy-contract = { version = "0.11.1", default-features = false } -alloy-eips = { version = "0.11.1", default-features = false } -alloy-genesis = { version = "0.11.1", default-features = false } -alloy-json-rpc = { version = "0.11.1", default-features = false } -alloy-network = { version = "0.11.1", default-features = false } -alloy-provider = { version = "0.11.1", default-features = false } -alloy-pubsub = { version = "0.11.1", default-features = false } -alloy-rpc-client = { version = "0.11.1", default-features = false } -alloy-rpc-types = { version = "0.11.1", default-features = true } -alloy-serde = { version = "0.11.1", default-features = false } -alloy-signer = { version = "0.11.1", default-features = false } -alloy-signer-aws = { version = "0.11.1", default-features = false } -alloy-signer-gcp = { version = "0.11.1", default-features = false } -alloy-signer-ledger = { version = "0.11.1", default-features = false } -alloy-signer-local = { version = "0.11.1", default-features = false } -alloy-signer-trezor = { version = "0.11.1", default-features = false } -alloy-transport = { version = "0.11.1", default-features = false } -alloy-transport-http = { version = "0.11.1", default-features = false } -alloy-transport-ipc = { version = "0.11.1", default-features = false } -alloy-transport-ws = { version = "0.11.1", default-features = false } -alloy-node-bindings = { version = "0.11.1", default-features = false } -alloy-network-primitives = { version = "0.11.1", default-features = false } +## Note(zk): alloy-zksync 0.12.1 is not compatible with latest alloy-consensus, this should be taken care of in the future release of alloy-zksync +alloy-consensus = { version = "=0.12.1", default-features = false } +alloy-contract = { version = "0.12.1", default-features = false } +alloy-eips = { version = "0.12.1", default-features = false } +alloy-genesis = { version = "0.12.1", default-features = false } +alloy-json-rpc = { version = "0.12.1", default-features = false } +alloy-network = { version = "0.12.1", default-features = false } +alloy-provider = { version = "0.12.1", default-features = false } +alloy-pubsub = { version = "0.12.1", default-features = false } +alloy-rpc-client = { version = "0.12.1", default-features = false } +alloy-rpc-types = { version = "0.12.1", default-features = true } +alloy-serde = { version = "0.12.1", default-features = false } +alloy-signer = { version = "0.12.1", default-features = false } +alloy-signer-aws = { version = "0.12.1", default-features = false } +alloy-signer-gcp = { version = "0.12.1", default-features = false } +alloy-signer-ledger = { version = "0.12.1", default-features = false } +alloy-signer-local = { version = "0.12.1", default-features = false } +alloy-signer-trezor = { version = "0.12.1", default-features = false } +alloy-transport = { version = "0.12.1", default-features = false } +alloy-transport-http = { version = "0.12.1", default-features = false } +alloy-transport-ipc = { version = "0.12.1", default-features = false } +alloy-transport-ws = { version = "0.12.1", default-features = false } +alloy-node-bindings = { version = "0.12.1", default-features = false } +alloy-network-primitives = { version = "0.12.1", default-features = false } ## alloy-core -alloy-dyn-abi = "0.8.18" -alloy-json-abi = "0.8.18" -alloy-primitives = { version = "0.8.18", features = [ +alloy-dyn-abi = "0.8.22" +alloy-json-abi = "0.8.22" +alloy-primitives = { version = "0.8.22", features = [ "getrandom", "rand", "map-fxhash", "map-foldhash", ] } -alloy-sol-macro-expander = "0.8.18" -alloy-sol-macro-input = "0.8.18" -alloy-sol-types = "0.8.18" -syn-solidity = "0.8.18" +alloy-sol-macro-expander = "0.8.22" +alloy-sol-macro-input = "0.8.22" +alloy-sol-types = "0.8.22" +syn-solidity = "0.8.22" alloy-chains = "0.1" alloy-rlp = "0.3" -alloy-zksync = "0.11.0" +alloy-zksync = "0.12.1" alloy-trie = "0.7.0" ## op-alloy -## Note(zk): Foundry upstream change to maili-consensus but we need to keep -## it for zksync for now until era-solc updates the pinned version of serde -op-alloy-consensus = "0.10.0" -op-alloy-rpc-types = "0.10.0" +op-alloy-consensus = "0.11.0" +op-alloy-rpc-types = "0.11.0" ## cli anstream = "0.6" diff --git a/crates/anvil/core/src/eth/transaction/mod.rs b/crates/anvil/core/src/eth/transaction/mod.rs index 9a4bf1b0d7..fb6277fe2a 100644 --- a/crates/anvil/core/src/eth/transaction/mod.rs +++ b/crates/anvil/core/src/eth/transaction/mod.rs @@ -4,7 +4,7 @@ use crate::eth::transaction::optimism::DepositTransaction; use alloy_consensus::{ transaction::{ eip4844::{TxEip4844, TxEip4844Variant, TxEip4844WithSidecar}, - TxEip7702, + Recovered, TxEip7702, }, Receipt, ReceiptEnvelope, ReceiptWithBloom, Signed, TxEip1559, TxEip2930, TxEnvelope, TxLegacy, TxReceipt, Typed2718, @@ -285,9 +285,11 @@ pub fn to_alloy_transaction_with_hash_and_sender( block_hash: None, block_number: None, transaction_index: None, - from, effective_gas_price: None, - inner: TxEnvelope::Legacy(Signed::new_unchecked(tx, sig, hash)), + inner: Recovered::new_unchecked( + TxEnvelope::Legacy(Signed::new_unchecked(tx, sig, hash)), + from, + ), } } TypedTransaction::EIP2930(t) => { @@ -296,9 +298,11 @@ pub fn to_alloy_transaction_with_hash_and_sender( block_hash: None, block_number: None, transaction_index: None, - from, effective_gas_price: None, - inner: TxEnvelope::Eip2930(Signed::new_unchecked(tx, sig, hash)), + inner: Recovered::new_unchecked( + TxEnvelope::Eip2930(Signed::new_unchecked(tx, sig, hash)), + from, + ), } } TypedTransaction::EIP1559(t) => { @@ -307,9 +311,11 @@ pub fn to_alloy_transaction_with_hash_and_sender( block_hash: None, block_number: None, transaction_index: None, - from, effective_gas_price: None, - inner: TxEnvelope::Eip1559(Signed::new_unchecked(tx, sig, hash)), + inner: Recovered::new_unchecked( + TxEnvelope::Eip1559(Signed::new_unchecked(tx, sig, hash)), + from, + ), } } TypedTransaction::EIP4844(t) => { @@ -318,9 +324,11 @@ pub fn to_alloy_transaction_with_hash_and_sender( block_hash: None, block_number: None, transaction_index: None, - from, effective_gas_price: None, - inner: TxEnvelope::Eip4844(Signed::new_unchecked(tx, sig, hash)), + inner: Recovered::new_unchecked( + TxEnvelope::Eip4844(Signed::new_unchecked(tx, sig, hash)), + from, + ), } } TypedTransaction::EIP7702(t) => { @@ -329,9 +337,11 @@ pub fn to_alloy_transaction_with_hash_and_sender( block_hash: None, block_number: None, transaction_index: None, - from, effective_gas_price: None, - inner: TxEnvelope::Eip7702(Signed::new_unchecked(tx, sig, hash)), + inner: Recovered::new_unchecked( + TxEnvelope::Eip7702(Signed::new_unchecked(tx, sig, hash)), + from, + ), } } TypedTransaction::Deposit(_t) => { @@ -610,9 +620,9 @@ impl TryFrom for TypedTransaction { type Error = ConversionError; fn try_from(value: AnyRpcTransaction) -> Result { - let AnyRpcTransaction { inner, .. } = value; - let from = inner.from; - match inner.inner { + let WithOtherFields { inner, .. } = value.0; + let from = inner.inner.signer(); + match inner.inner.into_inner() { AnyTxEnvelope::Ethereum(tx) => match tx { TxEnvelope::Legacy(tx) => Ok(Self::Legacy(tx)), TxEnvelope::Eip2930(tx) => Ok(Self::EIP2930(tx)), diff --git a/crates/anvil/src/config.rs b/crates/anvil/src/config.rs index 9b0eaa56e0..dc2ad81629 100644 --- a/crates/anvil/src/config.rs +++ b/crates/anvil/src/config.rs @@ -1149,7 +1149,7 @@ impl NodeConfig { }; let block = provider - .get_block(BlockNumberOrTag::Number(fork_block_number).into(), false.into()) + .get_block(BlockNumberOrTag::Number(fork_block_number).into()) .await .wrap_err("failed to get fork block")?; @@ -1340,10 +1340,8 @@ async fn derive_block_and_transactions( // Get the block pertaining to the fork transaction let transaction_block = provider - .get_block_by_number( - transaction_block_number.into(), - alloy_rpc_types::BlockTransactionsKind::Full, - ) + .get_block_by_number(transaction_block_number.into()) + .full() .await? .ok_or_else(|| eyre::eyre!("failed to get fork block by number"))?; @@ -1520,7 +1518,7 @@ async fn find_latest_fork_block>( // walk back from the head of the chain, but at most 2 blocks, which should be more than enough // leeway for _ in 0..2 { - if let Some(block) = provider.get_block(num.into(), false.into()).await? { + if let Some(block) = provider.get_block(num.into()).await? { if !block.header.hash.is_zero() { break; } diff --git a/crates/anvil/src/eth/api.rs b/crates/anvil/src/eth/api.rs index 8a69a070ca..66405f1d45 100644 --- a/crates/anvil/src/eth/api.rs +++ b/crates/anvil/src/eth/api.rs @@ -30,7 +30,10 @@ use crate::{ revm::primitives::{BlobExcessGasAndPrice, Output}, ClientFork, LoggingManager, Miner, MiningMode, StorageInfo, }; -use alloy_consensus::{transaction::eip4844::TxEip4844Variant, Account}; +use alloy_consensus::{ + transaction::{eip4844::TxEip4844Variant, Recovered}, + Account, +}; use alloy_dyn_abi::TypedData; use alloy_eips::eip2718::Encodable2718; use alloy_network::{ @@ -1189,17 +1192,20 @@ impl EthApi { node_info!("eth_getTransactionByHash"); let mut tx = self.pool.get_transaction(hash).map(|pending| { let from = *pending.sender(); - let mut tx = transaction_build( + let tx = transaction_build( Some(*pending.hash()), pending.transaction, None, None, Some(self.backend.base_fee()), ); + + let WithOtherFields { inner: mut tx, other } = tx.0; // we set the from field here explicitly to the set sender of the pending transaction, // in case the transaction is impersonated. - tx.from = from; - tx + tx.inner = Recovered::new_unchecked(tx.inner.into_inner(), from); + + AnyRpcTransaction(WithOtherFields { inner: tx, other }) }); if tx.is_none() { tx = self.backend.transaction_by_hash(hash).await? @@ -2388,7 +2394,7 @@ impl EthApi { let mut content = TxpoolContent::::default(); fn convert(tx: Arc) -> Result { let from = *tx.pending_transaction.sender(); - let mut tx = transaction_build( + let tx = transaction_build( Some(tx.hash()), tx.pending_transaction.transaction.clone(), None, @@ -2396,9 +2402,13 @@ impl EthApi { None, ); + let WithOtherFields { inner: mut tx, other } = tx.0; + // we set the from field here explicitly to the set sender of the pending transaction, // in case the transaction is impersonated. - tx.from = from; + tx.inner = Recovered::new_unchecked(tx.inner.into_inner(), from); + + let tx = AnyRpcTransaction(WithOtherFields { inner: tx, other }); Ok(tx) } diff --git a/crates/anvil/src/eth/backend/fork.rs b/crates/anvil/src/eth/backend/fork.rs index 64852c802a..4024428a85 100644 --- a/crates/anvil/src/eth/backend/fork.rs +++ b/crates/anvil/src/eth/backend/fork.rs @@ -82,10 +82,8 @@ impl ClientFork { } let provider = self.provider(); - let block = provider - .get_block(block_number, false.into()) - .await? - .ok_or(BlockchainError::BlockNotFound)?; + let block = + provider.get_block(block_number).await?.ok_or(BlockchainError::BlockNotFound)?; let block_hash = block.header.hash; let timestamp = block.header.timestamp; let base_fee = block.header.base_fee_per_gas; @@ -194,7 +192,7 @@ impl ClientFork { block: Option, ) -> Result { let block = block.unwrap_or(BlockNumber::Latest); - let res = self.provider().call(request).block(block.into()).await?; + let res = self.provider().call(request.clone()).block(block.into()).await?; Ok(res) } @@ -206,7 +204,7 @@ impl ClientFork { block: Option, ) -> Result { let block = block.unwrap_or_default(); - let res = self.provider().estimate_gas(request).block(block.into()).await?; + let res = self.provider().estimate_gas(request.clone()).block(block.into()).await?; Ok(res as u128) } @@ -514,7 +512,7 @@ impl ClientFork { &self, block_id: impl Into, ) -> Result, TransportError> { - if let Some(block) = self.provider().get_block(block_id.into(), true.into()).await? { + if let Some(block) = self.provider().get_block(block_id.into()).full().await? { let hash = block.header.hash; let block_number = block.header.number; let mut storage = self.storage_write(); diff --git a/crates/anvil/src/eth/backend/mem/mod.rs b/crates/anvil/src/eth/backend/mem/mod.rs index 3f2b47043c..fee73eabb7 100644 --- a/crates/anvil/src/eth/backend/mem/mod.rs +++ b/crates/anvil/src/eth/backend/mem/mod.rs @@ -35,7 +35,8 @@ use crate::{ }; use alloy_chains::NamedChain; use alloy_consensus::{ - Account, Header, Receipt, ReceiptWithBloom, Signed, Transaction as TransactionTrait, TxEnvelope, + transaction::Recovered, Account, Header, Receipt, ReceiptWithBloom, Signed, + Transaction as TransactionTrait, TxEnvelope, }; use alloy_eips::eip4844::MAX_BLOBS_PER_BLOCK; use alloy_network::{ @@ -1927,7 +1928,7 @@ impl Backend { block.other.insert("l1BlockNumber".to_string(), number.into()); } - block + AnyRpcBlock::from(block) } /// Converts the `BlockNumber` into a numeric value @@ -2886,7 +2887,7 @@ pub fn transaction_build( let DepositTransaction { nonce, source_hash, - from, + from: deposit_from, kind, mint, gas_limit, @@ -2898,7 +2899,7 @@ pub fn transaction_build( let dep_tx = TxDeposit { source_hash, input, - from, + from: deposit_from, mint: Some(mint.to()), to: kind, is_system_transaction: is_system_tx, @@ -2933,17 +2934,16 @@ pub fn transaction_build( }); let tx = Transaction { - inner: envelope, + inner: Recovered::new_unchecked(envelope, deposit_from), block_hash: block .as_ref() .map(|block| B256::from(keccak256(alloy_rlp::encode(&block.header)))), block_number: block.as_ref().map(|block| block.header.number), transaction_index: info.as_ref().map(|info| info.transaction_index), effective_gas_price: None, - from, }; - return WithOtherFields::new(tx); + return AnyRpcTransaction::from(WithOtherFields::new(tx)); } Err(_) => { error!(target: "backend", "failed to serialize deposit transaction"); @@ -2978,7 +2978,7 @@ pub fn transaction_build( // there's // no `info` yet. let hash = tx_hash.unwrap_or(*envelope.tx_hash()); - let envelope = match envelope { + let envelope = match envelope.into_inner() { TxEnvelope::Legacy(signed_tx) => { let (t, sig, _) = signed_tx.into_parts(); let new_signed = Signed::new_unchecked(t, sig, hash); @@ -3007,17 +3007,19 @@ pub fn transaction_build( }; let tx = Transaction { - inner: envelope, + inner: Recovered::new_unchecked( + envelope, + eth_transaction.recover().expect("can recover signed tx"), + ), block_hash: block .as_ref() .map(|block| B256::from(keccak256(alloy_rlp::encode(&block.header)))), block_number: block.as_ref().map(|block| block.header.number), transaction_index: info.as_ref().map(|info| info.transaction_index), - from: eth_transaction.recover().expect("can recover signed tx"), // deprecated effective_gas_price: Some(effective_gas_price), }; - WithOtherFields::new(tx) + AnyRpcTransaction::from(WithOtherFields::new(tx)) } /// Prove a storage key's existence or nonexistence in the account's storage trie. diff --git a/crates/anvil/src/eth/otterscan/api.rs b/crates/anvil/src/eth/otterscan/api.rs index 0392a938c3..24df9f330d 100644 --- a/crates/anvil/src/eth/otterscan/api.rs +++ b/crates/anvil/src/eth/otterscan/api.rs @@ -303,7 +303,7 @@ impl EthApi { for n in (from..=to).rev() { if let Some(txs) = self.backend.mined_transactions_by_block_number(n.into()).await { for tx in txs { - if U256::from(tx.nonce()) == nonce && tx.from == address { + if U256::from(tx.nonce()) == nonce && tx.from() == address { return Ok(Some(tx.tx_hash())); } } @@ -386,7 +386,7 @@ impl EthApi { .iter() .fold(0, |acc, receipt| acc + (receipt.gas_used as u128) * receipt.effective_gas_price); - let Block { header, uncles, transactions, withdrawals } = block.inner; + let Block { header, uncles, transactions, withdrawals } = block.into_inner(); let block = OtsSlimBlock { header, uncles, transaction_count: transactions.len(), withdrawals }; @@ -440,7 +440,7 @@ impl EthApi { .collect::>>()?; let transaction_count = block.transactions().len(); - let fullblock = OtsBlock { block: block.inner, transaction_count }; + let fullblock = OtsBlock { block: block.inner.clone(), transaction_count }; let ots_block_txs = OtsBlockTransactions { fullblock, receipts }; @@ -459,7 +459,7 @@ impl EthApi { .await .into_iter() .map(|t| match t { - Ok(Some(t)) => Ok(t.inner), + Ok(Some(t)) => Ok(t.into_inner()), _ => Err(BlockchainError::DataUnavailable), }) .collect::>>()?; diff --git a/crates/anvil/src/tasks/mod.rs b/crates/anvil/src/tasks/mod.rs index 2778689893..763050e023 100644 --- a/crates/anvil/src/tasks/mod.rs +++ b/crates/anvil/src/tasks/mod.rs @@ -71,7 +71,7 @@ impl TaskManager { let provider = provider.clone(); let api = api.clone(); async move { - if let Ok(Some(block)) = provider.get_block(hash.into(), false.into()).await { + if let Ok(Some(block)) = provider.get_block(hash.into()).await { let _ = api .anvil_reset(Some(Forking { json_rpc_url: None, diff --git a/crates/anvil/tests/it/anvil.rs b/crates/anvil/tests/it/anvil.rs index 65eeac70ba..ef09527ab2 100644 --- a/crates/anvil/tests/it/anvil.rs +++ b/crates/anvil/tests/it/anvil.rs @@ -67,7 +67,7 @@ async fn test_can_set_genesis_timestamp() { assert_eq!( genesis_timestamp, - provider.get_block(0.into(), false.into()).await.unwrap().unwrap().header.timestamp + provider.get_block(0.into()).await.unwrap().unwrap().header.timestamp ); } @@ -76,10 +76,7 @@ async fn test_can_use_default_genesis_timestamp() { let (_api, handle) = spawn(NodeConfig::test()).await; let provider = handle.http_provider(); - assert_ne!( - 0u64, - provider.get_block(0.into(), false.into()).await.unwrap().unwrap().header.timestamp - ); + assert_ne!(0u64, provider.get_block(0.into()).await.unwrap().unwrap().header.timestamp); } #[tokio::test(flavor = "multi_thread")] diff --git a/crates/anvil/tests/it/anvil_api.rs b/crates/anvil/tests/it/anvil_api.rs index 8618f3a165..82d0eaf597 100644 --- a/crates/anvil/tests/it/anvil_api.rs +++ b/crates/anvil/tests/it/anvil_api.rs @@ -13,7 +13,7 @@ use alloy_rpc_types::{ anvil::{ ForkedNetwork, Forking, Metadata, MineOptions, NodeEnvironment, NodeForkConfig, NodeInfo, }, - BlockId, BlockNumberOrTag, BlockTransactionsKind, TransactionRequest, + BlockId, BlockNumberOrTag, TransactionRequest, }; use alloy_serde::WithOtherFields; use anvil::{ @@ -32,6 +32,7 @@ use anvil_core::{ }; use foundry_evm::revm::primitives::SpecId; use std::{ + future::IntoFuture, str::FromStr, time::{Duration, SystemTime}, }; @@ -305,14 +306,14 @@ async fn test_set_next_timestamp() { api.evm_mine(None).await.unwrap(); - let block = provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::default()).await.unwrap().unwrap(); assert_eq!(block.header.number, 1); assert_eq!(block.header.timestamp, next_timestamp.as_secs()); api.evm_mine(None).await.unwrap(); - let next = provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let next = provider.get_block(BlockId::default()).await.unwrap().unwrap(); assert_eq!(next.header.number, 2); assert!(next.header.timestamp >= block.header.timestamp); @@ -332,12 +333,12 @@ async fn test_evm_set_time() { // mine a block api.evm_mine(None).await.unwrap(); - let block = provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::default()).await.unwrap().unwrap(); assert!(block.header.timestamp >= timestamp.as_secs()); api.evm_mine(None).await.unwrap(); - let next = provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let next = provider.get_block(BlockId::default()).await.unwrap().unwrap(); assert!(next.header.timestamp >= block.header.timestamp); } @@ -356,7 +357,7 @@ async fn test_evm_set_time_in_past() { // mine a block api.evm_mine(None).await.unwrap(); - let block = provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::default()).await.unwrap().unwrap(); assert!(block.header.timestamp >= timestamp.as_secs()); assert!(block.header.timestamp < now.as_secs()); @@ -371,44 +372,42 @@ async fn test_timestamp_interval() { let interval = 10; for _ in 0..5 { - let block = provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::default()).await.unwrap().unwrap(); // mock timestamp api.evm_set_block_timestamp_interval(interval).unwrap(); api.evm_mine(None).await.unwrap(); - let new_block = - provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let new_block = provider.get_block(BlockId::default()).await.unwrap().unwrap(); assert_eq!(new_block.header.timestamp, block.header.timestamp + interval); } - let block = provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::default()).await.unwrap().unwrap(); let next_timestamp = block.header.timestamp + 50; api.evm_set_next_block_timestamp(next_timestamp).unwrap(); api.evm_mine(None).await.unwrap(); - let block = provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::default()).await.unwrap().unwrap(); assert_eq!(block.header.timestamp, next_timestamp); api.evm_mine(None).await.unwrap(); - let block = provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::default()).await.unwrap().unwrap(); // interval also works after setting the next timestamp manually assert_eq!(block.header.timestamp, next_timestamp + interval); assert!(api.evm_remove_block_timestamp_interval().unwrap()); api.evm_mine(None).await.unwrap(); - let new_block = provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let new_block = provider.get_block(BlockId::default()).await.unwrap().unwrap(); // offset is applied correctly after resetting the interval assert!(new_block.header.timestamp > block.header.timestamp); api.evm_mine(None).await.unwrap(); - let another_block = - provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let another_block = provider.get_block(BlockId::default()).await.unwrap().unwrap(); // check interval is disabled assert!(another_block.header.timestamp - new_block.header.timestamp < interval); } @@ -449,8 +448,7 @@ async fn can_get_node_info() { let provider = handle.http_provider(); let block_number = provider.get_block_number().await.unwrap(); - let block = - provider.get_block(BlockId::from(block_number), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::from(block_number)).await.unwrap().unwrap(); let hard_fork: &str = SpecId::CANCUN.into(); let expected_node_info = NodeInfo { @@ -485,8 +483,7 @@ async fn can_get_metadata() { let block_number = provider.get_block_number().await.unwrap(); let chain_id = provider.get_chain_id().await.unwrap(); - let block = - provider.get_block(BlockId::from(block_number), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::from(block_number)).await.unwrap().unwrap(); let expected_metadata = Metadata { latest_block_hash: block.header.hash, @@ -511,8 +508,7 @@ async fn can_get_metadata_on_fork() { let block_number = provider.get_block_number().await.unwrap(); let chain_id = provider.get_chain_id().await.unwrap(); - let block = - provider.get_block(BlockId::from(block_number), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::from(block_number)).await.unwrap().unwrap(); let expected_metadata = Metadata { latest_block_hash: block.header.hash, @@ -565,7 +561,7 @@ async fn test_get_transaction_receipt() { let receipt = provider.send_transaction(tx.clone()).await.unwrap().get_receipt().await.unwrap(); // the block should have the new base fee - let block = provider.get_block(BlockId::default(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::default()).await.unwrap().unwrap(); assert_eq!(block.header.base_fee_per_gas.unwrap(), new_base_fee.to::()); // mine blocks @@ -718,16 +714,14 @@ async fn test_reorg() { // The first 3 reorged blocks should have 5 transactions each for num in 14..17 { - let block = - provider.get_block_by_number(num.into(), BlockTransactionsKind::Full).await.unwrap(); + let block = provider.get_block_by_number(num.into()).full().await.unwrap(); let block = block.unwrap(); assert_eq!(block.transactions.len(), 5); } // Verify that historic blocks are still accessible for num in (0..14).rev() { - let _ = - provider.get_block_by_number(num.into(), BlockTransactionsKind::Full).await.unwrap(); + let _ = provider.get_block_by_number(num.into()).full().await.unwrap(); } // Send a few more transaction to verify the chain can still progress @@ -816,24 +810,24 @@ async fn test_rollback() { } // Get block 4 for later comparison - let block4 = provider.get_block(4.into(), false.into()).await.unwrap().unwrap(); + let block4 = provider.get_block(4.into()).await.unwrap().unwrap(); // Rollback with None should rollback 1 block api.anvil_rollback(None).await.unwrap(); // Assert we're at block 4 and the block contents are kept the same - let head = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let head = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); assert_eq!(head, block4); // Get block 1 for comparison - let block1 = provider.get_block(1.into(), false.into()).await.unwrap().unwrap(); + let block1 = provider.get_block(1.into()).await.unwrap().unwrap(); // Rollback to block 1 let depth = 3; // from block 4 to block 1 api.anvil_rollback(Some(depth)).await.unwrap(); // Assert we're at block 1 and the block contents are kept the same - let head = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let head = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); assert_eq!(head, block1); } @@ -930,7 +924,7 @@ async fn test_mine_blk_with_prev_timestamp() { let (api, handle) = spawn(NodeConfig::test()).await; let provider = handle.http_provider(); - let init_blk = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let init_blk = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); let init_number = init_blk.header.number; let init_timestamp = init_blk.header.timestamp; @@ -940,7 +934,7 @@ async fn test_mine_blk_with_prev_timestamp() { api.mine_one().await; - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); let next_blk_num = block.header.number; let next_blk_timestamp = block.header.timestamp; @@ -954,7 +948,7 @@ async fn test_mine_blk_with_prev_timestamp() { // Subsequent block should have a greater timestamp than previous block api.mine_one().await; - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); let third_blk_num = block.header.number; let third_blk_timestmap = block.header.timestamp; @@ -971,7 +965,7 @@ async fn test_increase_time_by_zero() { let (api, handle) = spawn(NodeConfig::test()).await; let provider = handle.http_provider(); - let init_blk = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let init_blk = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); let init_number = init_blk.header.number; let init_timestamp = init_blk.header.timestamp; @@ -980,7 +974,7 @@ async fn test_increase_time_by_zero() { api.mine_one().await; - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); let next_blk_num = block.header.number; let next_blk_timestamp = block.header.timestamp; @@ -995,14 +989,14 @@ async fn evm_mine_blk_with_same_timestamp() { let (api, handle) = spawn(NodeConfig::test()).await; let provider = handle.http_provider(); - let init_blk = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let init_blk = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); let init_number = init_blk.header.number; let init_timestamp = init_blk.header.timestamp; api.evm_mine(Some(MineOptions::Timestamp(Some(init_timestamp)))).await.unwrap(); - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); let next_blk_num = block.header.number; let next_blk_timestamp = block.header.timestamp; @@ -1017,7 +1011,7 @@ async fn test_mine_blks_with_same_timestamp() { let (api, handle) = spawn(NodeConfig::test()).await; let provider = handle.http_provider(); - let init_blk = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let init_blk = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); // Mine 4 blocks instantly let _ = api.anvil_mine(Some(U256::from(4)), None).await; @@ -1030,7 +1024,7 @@ async fn test_mine_blks_with_same_timestamp() { let mut blk_futs = vec![]; for i in 1..=4 { - blk_futs.push(provider.get_block(i.into(), false.into())); + blk_futs.push(provider.get_block(i.into()).into_future()); } let blks = futures::future::join_all(blk_futs) diff --git a/crates/anvil/tests/it/api.rs b/crates/anvil/tests/it/api.rs index 946118af8c..d1b9238813 100644 --- a/crates/anvil/tests/it/api.rs +++ b/crates/anvil/tests/it/api.rs @@ -118,11 +118,10 @@ async fn can_get_block_by_number() { provider.send_transaction(tx.clone()).await.unwrap().get_receipt().await.unwrap(); - let block = provider.get_block(BlockId::number(1), true.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::number(1)).full().await.unwrap().unwrap(); assert_eq!(block.transactions.len(), 1); - let block = - provider.get_block(BlockId::hash(block.header.hash), true.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::hash(block.header.hash)).full().await.unwrap().unwrap(); assert_eq!(block.transactions.len(), 1); } @@ -137,7 +136,7 @@ async fn can_get_pending_block() { let provider = connect_pubsub_with_wallet(&handle.http_endpoint(), signer).await; - let block = provider.get_block(BlockId::pending(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::pending()).await.unwrap().unwrap(); assert_eq!(block.header.number, 1); let num = provider.get_block_number().await.unwrap(); @@ -152,12 +151,12 @@ async fn can_get_pending_block() { let num = provider.get_block_number().await.unwrap(); assert_eq!(num, 0); - let block = provider.get_block(BlockId::pending(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::pending()).await.unwrap().unwrap(); assert_eq!(block.header.number, 1); assert_eq!(block.transactions.len(), 1); assert_eq!(block.transactions, BlockTransactions::Hashes(vec![*pending.tx_hash()])); - let block = provider.get_block(BlockId::pending(), true.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::pending()).full().await.unwrap().unwrap(); assert_eq!(block.header.number, 1); assert_eq!(block.transactions.len(), 1); } diff --git a/crates/anvil/tests/it/eip4844.rs b/crates/anvil/tests/it/eip4844.rs index 65bdba6116..e9d4f083b8 100644 --- a/crates/anvil/tests/it/eip4844.rs +++ b/crates/anvil/tests/it/eip4844.rs @@ -4,7 +4,7 @@ use alloy_eips::eip4844::{BLOB_TX_MIN_BLOB_GASPRICE, DATA_GAS_PER_BLOB, MAX_DATA use alloy_network::{EthereumWallet, TransactionBuilder, TransactionBuilder4844}; use alloy_primitives::U256; use alloy_provider::Provider; -use alloy_rpc_types::{BlockId, BlockTransactionsKind, TransactionRequest}; +use alloy_rpc_types::{BlockId, TransactionRequest}; use alloy_serde::WithOtherFields; use anvil::{spawn, EthereumHardfork, NodeConfig}; @@ -18,7 +18,7 @@ async fn can_send_eip4844_transaction() { let to = wallets[1].address(); let provider = http_provider(&handle.http_endpoint()); - let eip1559_est = provider.estimate_eip1559_fees(None).await.unwrap(); + let eip1559_est = provider.estimate_eip1559_fees().await.unwrap(); let gas_price = provider.get_gas_price().await.unwrap(); let sidecar: SidecarBuilder = SidecarBuilder::from_slice(b"Hello World"); @@ -56,7 +56,7 @@ async fn can_send_multiple_blobs_in_one_tx() { let provider = http_provider(&handle.http_endpoint()); - let eip1559_est = provider.estimate_eip1559_fees(None).await.unwrap(); + let eip1559_est = provider.estimate_eip1559_fees().await.unwrap(); let gas_price = provider.get_gas_price().await.unwrap(); let large_data = vec![1u8; DATA_GAS_PER_BLOB as usize * 5]; // 131072 is DATA_GAS_PER_BLOB and also BYTE_PER_BLOB @@ -94,7 +94,7 @@ async fn cannot_exceed_six_blobs() { let provider = http_provider(&handle.http_endpoint()); - let eip1559_est = provider.estimate_eip1559_fees(None).await.unwrap(); + let eip1559_est = provider.estimate_eip1559_fees().await.unwrap(); let gas_price = provider.get_gas_price().await.unwrap(); let large_data = vec![1u8; DATA_GAS_PER_BLOB as usize * 6]; // 131072 is DATA_GAS_PER_BLOB and also BYTE_PER_BLOB @@ -132,7 +132,7 @@ async fn can_mine_blobs_when_exceeds_max_blobs() { let provider = http_provider(&handle.http_endpoint()); - let eip1559_est = provider.estimate_eip1559_fees(None).await.unwrap(); + let eip1559_est = provider.estimate_eip1559_fees().await.unwrap(); let gas_price = provider.get_gas_price().await.unwrap(); let first_batch = vec![1u8; DATA_GAS_PER_BLOB as usize * 3]; @@ -176,14 +176,8 @@ async fn can_mine_blobs_when_exceeds_max_blobs() { let second_receipt = second_tx.get_receipt().await.unwrap(); let (first_block, second_block) = tokio::join!( - provider.get_block_by_number( - first_receipt.block_number.unwrap().into(), - BlockTransactionsKind::Hashes - ), - provider.get_block_by_number( - second_receipt.block_number.unwrap().into(), - BlockTransactionsKind::Hashes - ) + provider.get_block_by_number(first_receipt.block_number.unwrap().into()), + provider.get_block_by_number(second_receipt.block_number.unwrap().into()) ); assert_eq!( first_block.unwrap().unwrap().header.blob_gas_used, @@ -205,7 +199,7 @@ async fn can_check_blob_fields_on_genesis() { let provider = http_provider(&handle.http_endpoint()); - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); assert_eq!(block.header.blob_gas_used, Some(0)); assert_eq!(block.header.excess_blob_gas, Some(0)); diff --git a/crates/anvil/tests/it/eip7702.rs b/crates/anvil/tests/it/eip7702.rs index dfc93bfe08..85d45eb1c6 100644 --- a/crates/anvil/tests/it/eip7702.rs +++ b/crates/anvil/tests/it/eip7702.rs @@ -21,7 +21,7 @@ async fn can_send_eip7702_tx() { // PUSH1(25) RETURN let logger_bytecode = bytes!("66365f5f37365fa05f5260076019f3"); - let eip1559_est = provider.estimate_eip1559_fees(None).await.unwrap(); + let eip1559_est = provider.estimate_eip1559_fees().await.unwrap(); let from = wallets[0].address(); let tx = TransactionRequest::default() diff --git a/crates/anvil/tests/it/fork.rs b/crates/anvil/tests/it/fork.rs index a13601e7d4..4b0f8d45a4 100644 --- a/crates/anvil/tests/it/fork.rs +++ b/crates/anvil/tests/it/fork.rs @@ -11,7 +11,7 @@ use alloy_provider::Provider; use alloy_rpc_types::{ anvil::Forking, request::{TransactionInput, TransactionRequest}, - BlockId, BlockNumberOrTag, BlockTransactionsKind, + BlockId, BlockNumberOrTag, }; use alloy_serde::WithOtherFields; use alloy_signer_local::PrivateKeySigner; @@ -538,7 +538,7 @@ async fn can_reset_fork_to_new_fork() { let tx = WithOtherFields::new(tx); - let mainnet_call_output = provider.call(&tx).await.unwrap(); + let mainnet_call_output = provider.call(tx).await.unwrap(); assert_eq!(mainnet_call_output, Bytes::new()); // 0x @@ -563,11 +563,7 @@ async fn test_fork_timestamp() { let (api, handle) = spawn(fork_config()).await; let provider = handle.http_provider(); - let block = provider - .get_block(BlockId::Number(BLOCK_NUMBER.into()), false.into()) - .await - .unwrap() - .unwrap(); + let block = provider.get_block(BlockId::Number(BLOCK_NUMBER.into())).await.unwrap().unwrap(); assert_eq!(block.header.timestamp, BLOCK_TIMESTAMP); let accounts: Vec<_> = handle.dev_wallets().collect(); @@ -580,7 +576,7 @@ async fn test_fork_timestamp() { let status = tx.inner.inner.inner.receipt.status.coerce_status(); assert!(status); - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); let elapsed = start.elapsed().as_secs() + 1; @@ -593,11 +589,7 @@ async fn test_fork_timestamp() { api.anvil_reset(Some(Forking { json_rpc_url: None, block_number: Some(BLOCK_NUMBER) })) .await .unwrap(); - let block = provider - .get_block(BlockId::Number(BLOCK_NUMBER.into()), false.into()) - .await - .unwrap() - .unwrap(); + let block = provider.get_block(BlockId::Number(BLOCK_NUMBER.into())).await.unwrap().unwrap(); assert_eq!(block.header.timestamp, BLOCK_TIMESTAMP); let tx = @@ -605,7 +597,7 @@ async fn test_fork_timestamp() { let tx = WithOtherFields::new(tx); let _ = provider.send_transaction(tx).await.unwrap().get_receipt().await.unwrap(); // FIXME: Awaits endlessly here. - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); let elapsed = start.elapsed().as_secs() + 1; let diff = block.header.timestamp - BLOCK_TIMESTAMP; assert!(diff <= elapsed); @@ -621,7 +613,7 @@ async fn test_fork_timestamp() { let tx = WithOtherFields::new(tx); let _tx = provider.send_transaction(tx).await.unwrap().get_receipt().await.unwrap(); - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); assert_eq!(block.header.timestamp, BLOCK_TIMESTAMP + 1); let tx = @@ -629,7 +621,7 @@ async fn test_fork_timestamp() { let tx = WithOtherFields::new(tx); let _ = provider.send_transaction(tx).await.unwrap().get_receipt().await.unwrap(); - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); let elapsed = start.elapsed().as_secs() + 1; let diff = block.header.timestamp - (BLOCK_TIMESTAMP + 1); assert!(diff <= elapsed); @@ -812,7 +804,7 @@ async fn test_fork_init_base_fee() { let provider = handle.http_provider(); - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); // assert_eq!(block.header.number, 13184859u64); let init_base_fee = block.header.base_fee_per_gas.unwrap(); @@ -820,7 +812,7 @@ async fn test_fork_init_base_fee() { api.mine_one().await; - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); let next_base_fee = block.header.base_fee_per_gas.unwrap(); assert!(next_base_fee < init_base_fee); @@ -866,7 +858,7 @@ async fn test_fork_call() { let provider = http_provider(rpc::next_http_archive_rpc_url().as_str()); let tx = TransactionRequest::default().to(to).with_input(input.clone()); let tx = WithOtherFields::new(tx); - let res0 = provider.call(&tx).block(BlockId::Number(block_number.into())).await.unwrap(); + let res0 = provider.call(tx).block(BlockId::Number(block_number.into())).await.unwrap(); let (api, _) = spawn(fork_config().with_fork_block_number(Some(block_number))).await; @@ -1047,7 +1039,7 @@ async fn test_total_difficulty_fork() { let difficulty = U256::from(13_680_435_288_526_144u128); let provider = handle.http_provider(); - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); assert_eq!(block.header.total_difficulty, Some(total_difficulty)); assert_eq!(block.header.difficulty, difficulty); @@ -1056,7 +1048,7 @@ async fn test_total_difficulty_fork() { let next_total_difficulty = total_difficulty + difficulty; - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); assert_eq!(block.header.total_difficulty, Some(next_total_difficulty)); assert_eq!(block.header.difficulty, U256::ZERO); } @@ -1300,11 +1292,8 @@ async fn test_base_fork_gas_limit() { .await; let provider = handle.http_provider(); - let block = provider - .get_block(BlockId::Number(BlockNumberOrTag::Latest), BlockTransactionsKind::Hashes) - .await - .unwrap() - .unwrap(); + let block = + provider.get_block(BlockId::Number(BlockNumberOrTag::Latest)).await.unwrap().unwrap(); assert!(api.gas_limit() >= uint!(96_000_000_U256)); assert!(block.header.gas_limit >= 96_000_000_u64); @@ -1389,7 +1378,7 @@ async fn test_immutable_fork_transaction_hash() { (expected_transactions[2], address!("5Be88952ce249024613e0961eB437f5E9424A90c")), ] { let tx = api.backend.mined_transaction_by_hash(expected.0).unwrap(); - assert_eq!(tx.inner.from, expected.1); + assert_eq!(tx.inner.inner.signer(), expected.1); } // Validate the order of transactions in the new block diff --git a/crates/anvil/tests/it/gas.rs b/crates/anvil/tests/it/gas.rs index 55f8321997..623654537d 100644 --- a/crates/anvil/tests/it/gas.rs +++ b/crates/anvil/tests/it/gas.rs @@ -43,7 +43,7 @@ async fn test_basefee_full_block() { provider.send_transaction(tx.clone()).await.unwrap().get_receipt().await.unwrap(); let base_fee = provider - .get_block(BlockId::latest(), false.into()) + .get_block(BlockId::latest()) .await .unwrap() .unwrap() @@ -54,7 +54,7 @@ async fn test_basefee_full_block() { provider.send_transaction(tx.clone()).await.unwrap().get_receipt().await.unwrap(); let next_base_fee = provider - .get_block(BlockId::latest(), false.into()) + .get_block(BlockId::latest()) .await .unwrap() .unwrap() @@ -93,7 +93,7 @@ async fn test_basefee_half_block() { provider.send_transaction(tx.clone()).await.unwrap().get_receipt().await.unwrap(); let next_base_fee = provider - .get_block(BlockId::latest(), false.into()) + .get_block(BlockId::latest()) .await .unwrap() .unwrap() @@ -120,7 +120,7 @@ async fn test_basefee_empty_block() { provider.send_transaction(tx.clone()).await.unwrap().get_receipt().await.unwrap(); let base_fee = provider - .get_block(BlockId::latest(), false.into()) + .get_block(BlockId::latest()) .await .unwrap() .unwrap() @@ -132,7 +132,7 @@ async fn test_basefee_empty_block() { api.mine_one().await; let next_base_fee = provider - .get_block(BlockId::latest(), false.into()) + .get_block(BlockId::latest()) .await .unwrap() .unwrap() @@ -209,8 +209,7 @@ async fn test_can_use_fee_history() { let fee_history_after = provider.get_fee_history(1, Default::default(), &[]).await.unwrap(); let latest_fee_history_fee = *fee_history_after.base_fee_per_gas.first().unwrap() as u64; - let latest_block = - provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let latest_block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); assert_eq!(latest_block.header.base_fee_per_gas.unwrap(), latest_fee_history_fee); assert_eq!(latest_fee_history_fee, next_base_fee as u64); diff --git a/crates/anvil/tests/it/logs.rs b/crates/anvil/tests/it/logs.rs index ac644e6e24..5dbb28c2dd 100644 --- a/crates/anvil/tests/it/logs.rs +++ b/crates/anvil/tests/it/logs.rs @@ -7,7 +7,7 @@ use crate::{ use alloy_network::EthereumWallet; use alloy_primitives::{map::B256HashSet, B256}; use alloy_provider::Provider; -use alloy_rpc_types::{BlockNumberOrTag, BlockTransactionsKind, Filter}; +use alloy_rpc_types::{BlockNumberOrTag, Filter}; use anvil::{spawn, NodeConfig}; use futures::StreamExt; @@ -54,13 +54,8 @@ async fn get_past_events() { // and we can fetch the events at a block hash // let hash = provider.get_block(1).await.unwrap().unwrap().hash.unwrap(); - let hash = provider - .get_block_by_number(BlockNumberOrTag::from(1), BlockTransactionsKind::Hashes) - .await - .unwrap() - .unwrap() - .header - .hash; + let hash = + provider.get_block_by_number(BlockNumberOrTag::from(1)).await.unwrap().unwrap().header.hash; let filter = Filter::new() .address(simple_storage_address) @@ -191,10 +186,7 @@ async fn watch_events() { assert_eq!(log.1.block_number.unwrap(), starting_block_number + i + 1); let hash = provider - .get_block_by_number( - BlockNumberOrTag::from(starting_block_number + i + 1), - false.into(), - ) + .get_block_by_number(BlockNumberOrTag::from(starting_block_number + i + 1)) .await .unwrap() .unwrap() diff --git a/crates/anvil/tests/it/revert.rs b/crates/anvil/tests/it/revert.rs index 55762fd0f9..47e2174195 100644 --- a/crates/anvil/tests/it/revert.rs +++ b/crates/anvil/tests/it/revert.rs @@ -18,7 +18,7 @@ async fn test_deploy_reverting() { let tx = WithOtherFields::new(tx); // Calling/estimating gas fails early. - let err = provider.call(&tx).await.unwrap_err(); + let err = provider.call(tx.clone()).await.unwrap_err(); let s = err.to_string(); assert!(s.contains("execution reverted"), "{s:?}"); diff --git a/crates/anvil/tests/it/transaction.rs b/crates/anvil/tests/it/transaction.rs index dfa5f8afcb..88dd95bb46 100644 --- a/crates/anvil/tests/it/transaction.rs +++ b/crates/anvil/tests/it/transaction.rs @@ -90,7 +90,7 @@ async fn can_order_transactions() { let lower_price = tx_lower.get_receipt().await.unwrap().transaction_hash; // get the block, await receipts - let block = provider.get_block(BlockId::latest(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(BlockId::latest()).await.unwrap().unwrap(); assert_eq!(block.transactions, BlockTransactions::Hashes(vec![higher_price, lower_price])) } @@ -129,7 +129,7 @@ async fn can_respect_nonces() { // this will unblock the currently pending tx let higher_tx = higher_pending_tx.get_receipt().await.unwrap(); // Awaits endlessly here due to alloy/#389 - let block = provider.get_block(1.into(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(1.into()).await.unwrap().unwrap(); assert_eq!(2, block.transactions.len()); assert_eq!( BlockTransactions::Hashes(vec![tx.transaction_hash, higher_tx.transaction_hash]), @@ -170,7 +170,7 @@ async fn can_replace_transaction() { // mine exactly one block api.mine_one().await; - let block = provider.get_block(1.into(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(1.into()).await.unwrap().unwrap(); assert_eq!(block.transactions.len(), 1); assert_eq!(BlockTransactions::Hashes(vec![higher_tx_hash]), block.transactions); @@ -286,7 +286,7 @@ async fn can_reject_underpriced_replacement() { let higher_priced_receipt = higher_priced_pending_tx.get_receipt().await.unwrap(); // ensure that only the higher priced tx was mined - let block = provider.get_block(1.into(), false.into()).await.unwrap().unwrap(); + let block = provider.get_block(1.into()).await.unwrap().unwrap(); assert_eq!(1, block.transactions.len()); assert_eq!( BlockTransactions::Hashes(vec![higher_priced_receipt.transaction_hash]), @@ -551,13 +551,7 @@ async fn call_past_state() { contract.getValue().block(BlockId::Number(deployed_block.into())).call().await.unwrap(); assert_eq!(value._0, "initial value"); - let hash = provider - .get_block(BlockId::Number(1.into()), false.into()) - .await - .unwrap() - .unwrap() - .header - .hash; + let hash = provider.get_block(BlockId::Number(1.into())).await.unwrap().unwrap().header.hash; let value = contract.getValue().block(BlockId::Hash(hash.into())).call().await.unwrap(); assert_eq!(value._0, "initial value"); } diff --git a/crates/anvil/tests/it/utils.rs b/crates/anvil/tests/it/utils.rs index abee87f26c..3c7e74bafc 100644 --- a/crates/anvil/tests/it/utils.rs +++ b/crates/anvil/tests/it/utils.rs @@ -31,7 +31,7 @@ pub fn ws_provider_with_signer( /// Currently required to get around pub async fn connect_pubsub(conn_str: &str) -> RootProvider { - alloy_provider::ProviderBuilder::default().on_builtin(conn_str).await.unwrap() + alloy_provider::ProviderBuilder::default().connect(conn_str).await.unwrap() } type PubsubSigner = FillProvider< @@ -53,7 +53,7 @@ type PubsubSigner = FillProvider< >; pub async fn connect_pubsub_with_wallet(conn_str: &str, wallet: EthereumWallet) -> PubsubSigner { - alloy_provider::ProviderBuilder::new().wallet(wallet).on_builtin(conn_str).await.unwrap() + alloy_provider::ProviderBuilder::new().wallet(wallet).connect(conn_str).await.unwrap() } pub async fn ipc_provider_with_wallet( diff --git a/crates/cast/bin/cmd/estimate.rs b/crates/cast/bin/cmd/estimate.rs index d862ccfcc8..98c3a7ac07 100644 --- a/crates/cast/bin/cmd/estimate.rs +++ b/crates/cast/bin/cmd/estimate.rs @@ -115,7 +115,7 @@ impl EstimateArgs { let gas = if zk_tx.has_zksync_args() || zk_force { zksync::estimate_gas(zk_tx, tx, code, &config).await? } else { - provider.estimate_gas(&tx).block(block.unwrap_or_default()).await? + provider.estimate_gas(tx).block(block.unwrap_or_default()).await? }; sh_println!("{gas}")?; diff --git a/crates/cast/bin/cmd/estimate/zksync.rs b/crates/cast/bin/cmd/estimate/zksync.rs index 9b8abfe8b8..1d70f5c7bc 100644 --- a/crates/cast/bin/cmd/estimate/zksync.rs +++ b/crates/cast/bin/cmd/estimate/zksync.rs @@ -14,5 +14,5 @@ pub async fn estimate_gas( ) -> Result { let zk_provider = utils::get_provider_zksync(config)?; let tx = zk_tx.build_base_tx(evm_tx, zk_code)?; - Ok(zk_provider.estimate_gas(&tx).await?) + Ok(zk_provider.estimate_gas(tx).await?) } diff --git a/crates/cast/bin/cmd/logs.rs b/crates/cast/bin/cmd/logs.rs index f6a756f69e..7e289cb849 100644 --- a/crates/cast/bin/cmd/logs.rs +++ b/crates/cast/bin/cmd/logs.rs @@ -85,7 +85,7 @@ impl LogsArgs { // the builtin transport here for now let url = config.get_rpc_url_or_localhost_http()?; let provider = alloy_provider::ProviderBuilder::<_, _, AnyNetwork>::default() - .on_builtin(url.as_ref()) + .connect(url.as_ref()) .await?; let cast = Cast::new(&provider); let mut stdout = io::stdout(); diff --git a/crates/cast/bin/cmd/run.rs b/crates/cast/bin/cmd/run.rs index 2145460013..59eaaae8f3 100644 --- a/crates/cast/bin/cmd/run.rs +++ b/crates/cast/bin/cmd/run.rs @@ -127,7 +127,8 @@ impl RunArgs { .ok_or_else(|| eyre::eyre!("tx not found: {:?}", tx_hash))?; // check if the tx is a system transaction - if is_known_system_sender(tx.from) || tx.transaction_type() == Some(SYSTEM_TRANSACTION_TYPE) + if is_known_system_sender(tx.from()) || + tx.transaction_type() == Some(SYSTEM_TRANSACTION_TYPE) { return Err(eyre::eyre!( "{:?} is a system transaction.\nReplaying system transactions is currently not supported.", @@ -139,7 +140,7 @@ impl RunArgs { tx.block_number.ok_or_else(|| eyre::eyre!("tx may still be pending: {:?}", tx_hash))?; // fetch the block the transaction was mined in - let block = provider.get_block(tx_block_number.into(), true.into()).await?; + let block = provider.get_block(tx_block_number.into()).full().await?; // we need to fork off the parent block config.fork_block_number = Some(tx_block_number - 1); @@ -209,7 +210,7 @@ impl RunArgs { // System transactions such as on L2s don't contain any pricing info so // we skip them otherwise this would cause // reverts - if is_known_system_sender(tx.from) || + if is_known_system_sender(tx.from()) || tx.transaction_type() == Some(SYSTEM_TRANSACTION_TYPE) { pb.set_position((index + 1) as u64); diff --git a/crates/cast/bin/main.rs b/crates/cast/bin/main.rs index 8b17665221..4e8f3caf99 100644 --- a/crates/cast/bin/main.rs +++ b/crates/cast/bin/main.rs @@ -343,7 +343,7 @@ async fn main_args(args: CastArgs) -> Result<()> { let number = match block { Some(id) => { provider - .get_block(id, false.into()) + .get_block(id) .await? .ok_or_else(|| eyre::eyre!("block {id:?} not found"))? .header diff --git a/crates/cast/bin/tx.rs b/crates/cast/bin/tx.rs index 6c9428b6fe..bfbace6caa 100644 --- a/crates/cast/bin/tx.rs +++ b/crates/cast/bin/tx.rs @@ -344,7 +344,7 @@ impl> CastTxBuilder { if !self.legacy && (self.tx.max_fee_per_gas.is_none() || self.tx.max_priority_fee_per_gas.is_none()) { - let estimate = self.provider.estimate_eip1559_fees(None).await?; + let estimate = self.provider.estimate_eip1559_fees().await?; if !self.legacy { if self.tx.max_fee_per_gas.is_none() { @@ -367,7 +367,7 @@ impl> CastTxBuilder { /// Estimate tx gas from provider call. Tries to decode custom error if execution reverted. async fn estimate_gas(&mut self) -> Result<()> { - match self.provider.estimate_gas(&self.tx).await { + match self.provider.estimate_gas(self.tx.clone()).await { Ok(estimated) => { self.tx.gas = Some(estimated); Ok(()) diff --git a/crates/cast/src/lib.rs b/crates/cast/src/lib.rs index c5ff0483da..fc3ac4d499 100644 --- a/crates/cast/src/lib.rs +++ b/crates/cast/src/lib.rs @@ -131,7 +131,7 @@ impl> Cast

{ func: Option<&Function>, block: Option, ) -> Result { - let res = self.provider.call(req).block(block.unwrap_or_default()).await?; + let res = self.provider.call(req.clone()).block(block.unwrap_or_default()).await?; let mut decoded = vec![]; @@ -344,7 +344,8 @@ impl> Cast

{ let block = self .provider - .get_block(block, full.into()) + .get_block(block) + .full() .await? .ok_or_else(|| eyre::eyre!("block {:?} not found", block))?; @@ -954,8 +955,7 @@ impl> Cast

{ Some(block) => match block { BlockId::Number(block_number) => Ok(Some(block_number)), BlockId::Hash(hash) => { - let block = - self.provider.get_block_by_hash(hash.block_hash, false.into()).await?; + let block = self.provider.get_block_by_hash(hash.block_hash).await?; Ok(block.map(|block| block.header.number).map(BlockNumberOrTag::from)) } }, diff --git a/crates/cast/src/zksync.rs b/crates/cast/src/zksync.rs index 65ed69b1f2..9e23275a59 100644 --- a/crates/cast/src/zksync.rs +++ b/crates/cast/src/zksync.rs @@ -151,7 +151,7 @@ where func: Option<&Function>, block: Option, ) -> Result { - let res = self.provider.call(req).block(block.unwrap_or_default()).await?; + let res = self.provider.call(req.clone()).block(block.unwrap_or_default()).await?; let mut decoded = vec![]; diff --git a/crates/cheatcodes/src/evm.rs b/crates/cheatcodes/src/evm.rs index 77b708e342..b1764e7d0c 100644 --- a/crates/cheatcodes/src/evm.rs +++ b/crates/cheatcodes/src/evm.rs @@ -581,7 +581,7 @@ impl Cheatcode for coolCall { impl Cheatcode for readCallersCall { fn apply_stateful(&self, ccx: &mut CheatsCtxt) -> Result { let Self {} = self; - read_callers(ccx.state, &ccx.ecx.env.tx.caller) + read_callers(ccx.state, &ccx.ecx.env.tx.caller, ccx.ecx.journaled_state.depth()) } } @@ -1061,19 +1061,17 @@ fn derive_snapshot_name( /// - If no caller modification is active: /// - caller_mode will be equal to [CallerMode::None], /// - `msg.sender` and `tx.origin` will be equal to the default sender address. -fn read_callers(state: &Cheatcodes, default_sender: &Address) -> Result { - let Cheatcodes { prank, broadcast, .. } = state; - +fn read_callers(state: &Cheatcodes, default_sender: &Address, call_depth: u64) -> Result { let mut mode = CallerMode::None; let mut new_caller = default_sender; let mut new_origin = default_sender; - if let Some(prank) = prank { + if let Some(prank) = state.get_prank(call_depth) { mode = if prank.single_call { CallerMode::Prank } else { CallerMode::RecurrentPrank }; new_caller = &prank.new_caller; if let Some(new) = &prank.new_origin { new_origin = new; } - } else if let Some(broadcast) = broadcast { + } else if let Some(broadcast) = &state.broadcast { mode = if broadcast.single_call { CallerMode::Broadcast } else { diff --git a/crates/cheatcodes/src/evm/prank.rs b/crates/cheatcodes/src/evm/prank.rs index 1d7ca5a079..4fdaede8b5 100644 --- a/crates/cheatcodes/src/evm/prank.rs +++ b/crates/cheatcodes/src/evm/prank.rs @@ -1,8 +1,8 @@ -use crate::{Cheatcode, Cheatcodes, CheatsCtxt, Result, Vm::*}; +use crate::{Cheatcode, CheatsCtxt, Result, Vm::*}; use alloy_primitives::Address; /// Prank information. -#[derive(Clone, Debug, Default)] +#[derive(Clone, Copy, Debug, Default)] pub struct Prank { /// Address of the contract that initiated the prank pub prank_caller: Address, @@ -45,13 +45,13 @@ impl Prank { } } - /// Apply the prank by setting `used` to true iff it is false + /// Apply the prank by setting `used` to true if it is false /// Only returns self in the case it is updated (first application) pub fn first_time_applied(&self) -> Option { if self.used { None } else { - Some(Self { used: true, ..self.clone() }) + Some(Self { used: true, ..*self }) } } } @@ -113,9 +113,9 @@ impl Cheatcode for startPrank_3Call { } impl Cheatcode for stopPrankCall { - fn apply(&self, state: &mut Cheatcodes) -> Result { + fn apply_stateful(&self, ccx: &mut CheatsCtxt) -> Result { let Self {} = self; - state.prank = None; + ccx.state.pranks.remove(&ccx.ecx.journaled_state.depth()); Ok(Default::default()) } } @@ -127,39 +127,40 @@ fn prank( single_call: bool, delegate_call: bool, ) -> Result { - let prank = Prank::new( - ccx.caller, - ccx.ecx.env.tx.caller, - *new_caller, - new_origin.copied(), - ccx.ecx.journaled_state.depth(), - single_call, - delegate_call, - ); - // Ensure that code exists at `msg.sender` if delegate calling. if delegate_call { let code = ccx.code(*new_caller)?; ensure!(!code.is_empty(), "cannot `prank` delegate call from an EOA"); } - if let Some(Prank { used, single_call: current_single_call, .. }) = ccx.state.prank { + let depth = ccx.ecx.journaled_state.depth(); + if let Some(Prank { used, single_call: current_single_call, .. }) = ccx.state.get_prank(depth) { ensure!(used, "cannot overwrite a prank until it is applied at least once"); // This case can only fail if the user calls `vm.startPrank` and then `vm.prank` later on. // This should not be possible without first calling `stopPrank` ensure!( - single_call == current_single_call, + single_call == *current_single_call, "cannot override an ongoing prank with a single vm.prank; \ use vm.startPrank to override the current prank" ); } + let prank = Prank::new( + ccx.caller, + ccx.ecx.env.tx.caller, + *new_caller, + new_origin.copied(), + depth, + single_call, + delegate_call, + ); + ensure!( ccx.state.broadcast.is_none(), "cannot `prank` for a broadcasted transaction; \ pass the desired `tx.origin` into the `broadcast` cheatcode call" ); - ccx.state.prank = Some(prank); + ccx.state.pranks.insert(prank.depth, prank); Ok(Default::default()) } diff --git a/crates/cheatcodes/src/inspector.rs b/crates/cheatcodes/src/inspector.rs index d56ec10145..8a9b9fcb81 100644 --- a/crates/cheatcodes/src/inspector.rs +++ b/crates/cheatcodes/src/inspector.rs @@ -431,8 +431,8 @@ pub struct Cheatcodes { /// Address labels pub labels: AddressHashMap, - /// Prank information - pub prank: Option, + /// Prank information, mapped to the call depth where pranks were added. + pub pranks: BTreeMap, /// Expected revert information pub expected_revert: Option, @@ -541,7 +541,7 @@ impl Clone for Cheatcodes { active_delegation: self.active_delegation.clone(), gas_price: self.gas_price, labels: self.labels.clone(), - prank: self.prank.clone(), + pranks: self.pranks.clone(), expected_revert: self.expected_revert.clone(), assume_no_revert: self.assume_no_revert.clone(), fork_revert_diagnostic: self.fork_revert_diagnostic.clone(), @@ -597,7 +597,7 @@ impl Cheatcodes { block: Default::default(), active_delegation: Default::default(), gas_price: Default::default(), - prank: Default::default(), + pranks: Default::default(), expected_revert: Default::default(), assume_no_revert: Default::default(), fork_revert_diagnostic: Default::default(), @@ -629,6 +629,13 @@ impl Cheatcodes { } } + /// Returns the configured prank at given depth or the first prank configured at a lower depth. + /// For example, if pranks configured for depth 1, 3 and 5, the prank for depth 4 is the one + /// configured at depth 3. + pub fn get_prank(&self, depth: u64) -> Option<&Prank> { + self.pranks.range(..=depth).last().map(|(_, prank)| prank) + } + /// Returns the configured wallets if available, else creates a new instance. pub fn wallets(&mut self) -> &Wallets { self.wallets.get_or_insert_with(|| Wallets::new(MultiWallet::default(), None)) @@ -725,14 +732,13 @@ impl Cheatcodes { where Input: CommonCreateInput, { + let curr_depth = ecx.journaled_state.depth(); let ecx_inner = &mut ecx.inner; let gas = Gas::new(input.gas_limit()); // Apply our prank - if let Some(prank) = &self.prank { - if ecx_inner.journaled_state.depth() >= prank.depth && - input.caller() == prank.prank_caller - { + if let Some(prank) = &self.get_prank(curr_depth) { + if curr_depth >= prank.depth && input.caller() == prank.prank_caller { // At the target depth we set `msg.sender` if ecx_inner.journaled_state.depth() == prank.depth { input.set_caller(prank.new_caller); @@ -747,9 +753,7 @@ impl Cheatcodes { // Apply our broadcast if let Some(broadcast) = &self.broadcast { - if ecx_inner.journaled_state.depth() >= broadcast.depth && - input.caller() == broadcast.original_caller - { + if curr_depth >= broadcast.depth && input.caller() == broadcast.original_caller { if let Err(err) = ecx_inner.journaled_state.load_account(broadcast.new_origin, &mut ecx_inner.db) { @@ -765,7 +769,7 @@ impl Cheatcodes { ecx_inner.env.tx.caller = broadcast.new_origin; - if ecx_inner.journaled_state.depth() == broadcast.depth { + if curr_depth == broadcast.depth { input.set_caller(broadcast.new_origin); self.strategy.runner.record_broadcastable_create_transactions( @@ -803,7 +807,7 @@ impl Cheatcodes { reverted: false, deployedCode: Bytes::new(), // updated on (eof)create_end storageAccesses: vec![], // updated on (eof)create_end - depth: ecx.journaled_state.depth(), + depth: curr_depth, }]); } @@ -824,22 +828,23 @@ impl Cheatcodes { ) -> CreateOutcome where { let ecx = &mut ecx.inner; + let curr_depth = ecx.journaled_state.depth(); // Clean up pranks - if let Some(prank) = &self.prank { - if ecx.journaled_state.depth() == prank.depth { + if let Some(prank) = &self.get_prank(curr_depth) { + if curr_depth == prank.depth { ecx.env.tx.caller = prank.prank_origin; // Clean single-call prank once we have returned to the original depth if prank.single_call { - std::mem::take(&mut self.prank); + std::mem::take(&mut self.pranks); } } } // Clean up broadcasts if let Some(broadcast) = &self.broadcast { - if ecx.journaled_state.depth() == broadcast.depth { + if curr_depth == broadcast.depth { ecx.env.tx.caller = broadcast.original_origin; // Clean single-call broadcast once we have returned to the original depth @@ -851,7 +856,7 @@ where { // Handle expected reverts if let Some(expected_revert) = &self.expected_revert { - if ecx.journaled_state.depth() <= expected_revert.depth && + if curr_depth <= expected_revert.depth && matches!(expected_revert.kind, ExpectedRevertKind::Default) { let mut expected_revert = std::mem::take(&mut self.expected_revert).unwrap(); @@ -888,7 +893,7 @@ where { // previous call depth's recorded accesses, if any if let Some(recorded_account_diffs_stack) = &mut self.recorded_account_diffs_stack { // The root call cannot be recorded. - if ecx.journaled_state.depth() > 0 { + if curr_depth > 0 { if let Some(last_depth) = &mut recorded_account_diffs_stack.pop() { // Update the reverted status of all deeper calls if this call reverted, in // accordance with EVM behavior @@ -981,11 +986,12 @@ where { executor: &mut impl CheatcodesExecutor, ) -> Option { let gas = Gas::new(call.gas_limit); + let curr_depth = ecx.journaled_state.depth(); // At the root call to test function or script `run()`/`setUp()` functions, we are // decreasing sender nonce to ensure that it matches on-chain nonce once we start // broadcasting. - if ecx.journaled_state.depth == 0 { + if curr_depth == 0 { let sender = ecx.env.tx.caller; let account = match super::evm::journaled_account(ecx, sender) { Ok(account) => account, @@ -1104,7 +1110,7 @@ where { } // Apply our prank - if let Some(prank) = &self.prank { + if let Some(prank) = &self.get_prank(curr_depth) { // Apply delegate call, `call.caller`` will not equal `prank.prank_caller` // TODO(zk): support delegatecall prank if let CallScheme::DelegateCall | CallScheme::ExtDelegateCall = call.scheme { @@ -1120,13 +1126,11 @@ where { } } - // NOTE(zk): ecx_inner vs upstream's ecx used here - if ecx_inner.journaled_state.depth() >= prank.depth && call.caller == prank.prank_caller - { + if curr_depth >= prank.depth && call.caller == prank.prank_caller { let mut prank_applied = false; // At the target depth we set `msg.sender` - if ecx_inner.journaled_state.depth() == prank.depth { + if curr_depth == prank.depth { call.caller = prank.new_caller; prank_applied = true; } @@ -1140,7 +1144,7 @@ where { // If prank applied for first time, then update if prank_applied { if let Some(applied_prank) = prank.first_time_applied() { - self.prank = Some(applied_prank); + self.pranks.insert(curr_depth, applied_prank); } } } @@ -1152,9 +1156,7 @@ where { // // We do this because any subsequent contract calls *must* exist on chain and // we only want to grab *this* call, not internal ones - if ecx_inner.journaled_state.depth() == broadcast.depth && - call.caller == broadcast.original_caller - { + if curr_depth == broadcast.depth && call.caller == broadcast.original_caller { // At the target depth we set `msg.sender` & tx.origin. // We are simulating the caller as being an EOA, so *both* must be set to the // broadcast.origin. @@ -1421,13 +1423,14 @@ impl Inspector<&mut dyn DatabaseExt> for Cheatcodes { // This should be placed before the revert handling, because we might exit early there if !cheatcode_call { // Clean up pranks - if let Some(prank) = &self.prank { - if ecx.journaled_state.depth() == prank.depth { + let curr_depth = ecx.journaled_state.depth(); + if let Some(prank) = &self.get_prank(curr_depth) { + if curr_depth == prank.depth { ecx.env.tx.caller = prank.prank_origin; // Clean single-call prank once we have returned to the original depth if prank.single_call { - let _ = self.prank.take(); + self.pranks.remove(&curr_depth); } } } @@ -1838,7 +1841,8 @@ impl Inspector<&mut dyn DatabaseExt> for Cheatcodes { impl InspectorExt for Cheatcodes { fn should_use_create2_factory(&mut self, ecx: Ecx, inputs: &mut CreateInputs) -> bool { if let CreateScheme::Create2 { .. } = inputs.scheme { - let target_depth = if let Some(prank) = &self.prank { + let depth = ecx.journaled_state.depth(); + let target_depth = if let Some(prank) = &self.get_prank(depth) { prank.depth } else if let Some(broadcast) = &self.broadcast { broadcast.depth @@ -1846,7 +1850,7 @@ impl InspectorExt for Cheatcodes { 1 }; - ecx.journaled_state.depth() == target_depth && + depth == target_depth && (self.broadcast.is_some() || self.config.always_use_create_2_factory) } else { false diff --git a/crates/cheatcodes/src/script.rs b/crates/cheatcodes/src/script.rs index 0749d0d41b..80db1078c5 100644 --- a/crates/cheatcodes/src/script.rs +++ b/crates/cheatcodes/src/script.rs @@ -244,8 +244,9 @@ impl Wallets { /// Sets up broadcasting from a script using `new_origin` as the sender. fn broadcast(ccx: &mut CheatsCtxt, new_origin: Option<&Address>, single_call: bool) -> Result { + let depth = ccx.ecx.journaled_state.depth(); ensure!( - ccx.state.prank.is_none(), + ccx.state.get_prank(depth).is_none(), "you have an active prank; broadcasting and pranks are not compatible" ); ensure!(ccx.state.broadcast.is_none(), "a broadcast is active already"); @@ -269,7 +270,7 @@ fn broadcast(ccx: &mut CheatsCtxt, new_origin: Option<&Address>, single_call: bo new_origin: new_origin.unwrap_or(ccx.ecx.env.tx.caller), original_caller: ccx.caller, original_origin: ccx.ecx.env.tx.caller, - depth: ccx.ecx.journaled_state.depth(), + depth, single_call, }; debug!(target: "cheatcodes", ?broadcast, "started"); diff --git a/crates/common/fmt/src/ui.rs b/crates/common/fmt/src/ui.rs index 1fa58ff088..faa68a8b72 100644 --- a/crates/common/fmt/src/ui.rs +++ b/crates/common/fmt/src/ui.rs @@ -4,8 +4,8 @@ use alloy_consensus::{ Eip658Value, Receipt, ReceiptWithBloom, Transaction as TxTrait, TxEnvelope, TxType, Typed2718, }; use alloy_network::{ - AnyHeader, AnyReceiptEnvelope, AnyRpcBlock, AnyTransactionReceipt, AnyTxEnvelope, - ReceiptResponse, + AnyHeader, AnyReceiptEnvelope, AnyRpcBlock, AnyRpcTransaction, AnyTransactionReceipt, + AnyTxEnvelope, ReceiptResponse, }; use alloy_primitives::{hex, Address, Bloom, Bytes, FixedBytes, Uint, I256, U256, U64, U8}; use alloy_rpc_types::{ @@ -515,7 +515,7 @@ type {} } impl UIfmt for Transaction { fn pretty(&self) -> String { - match &self.inner { + match &self.inner.inner() { TxEnvelope::Eip2930(tx) => format!( " accessList {} @@ -543,7 +543,7 @@ yParity {}", self.block_hash.pretty(), self.block_number.pretty(), self.chain_id().pretty(), - self.from.pretty(), + self.inner.signer().pretty(), self.gas_limit().pretty(), self.gas_price().pretty(), self.inner.tx_hash().pretty(), @@ -585,7 +585,7 @@ yParity {}", self.block_hash.pretty(), self.block_number.pretty(), self.chain_id().pretty(), - self.from.pretty(), + self.inner.signer().pretty(), self.gas_limit().pretty(), tx.hash().pretty(), self.input().pretty(), @@ -631,7 +631,7 @@ yParity {}", self.block_hash.pretty(), self.block_number.pretty(), self.chain_id().pretty(), - self.from.pretty(), + self.inner.signer().pretty(), self.gas_limit().pretty(), tx.hash().pretty(), self.input().pretty(), @@ -680,7 +680,7 @@ yParity {}", self.block_hash.pretty(), self.block_number.pretty(), self.chain_id().pretty(), - self.from.pretty(), + self.inner.signer().pretty(), self.gas_limit().pretty(), tx.hash().pretty(), self.input().pretty(), @@ -713,7 +713,7 @@ v {} value {}", self.block_hash.pretty(), self.block_number.pretty(), - self.from.pretty(), + self.inner.signer().pretty(), self.gas_limit().pretty(), self.gas_price().pretty(), self.inner.tx_hash().pretty(), @@ -752,7 +752,7 @@ effectiveGasPrice {} ", self.block_hash.pretty(), self.block_number.pretty(), - self.from.pretty(), + self.inner.signer().pretty(), self.transaction_index.pretty(), self.effective_gas_price.pretty(), self.inner.pretty(), @@ -760,6 +760,18 @@ effectiveGasPrice {} } } +impl UIfmt for AnyRpcBlock { + fn pretty(&self) -> String { + self.0.pretty() + } +} + +impl UIfmt for AnyRpcTransaction { + fn pretty(&self) -> String { + self.0.pretty() + } +} + impl UIfmt for WithOtherFields { fn pretty(&self) -> String { format!("{}{}", self.inner.pretty(), self.other.pretty()) @@ -798,7 +810,7 @@ impl UIfmt for EthValue { /// Returns the `UiFmt::pretty()` formatted attribute of the transactions pub fn get_pretty_tx_attr(transaction: &Transaction, attr: &str) -> Option { - let sig = match &transaction.inner { + let sig = match &transaction.inner.inner() { AnyTxEnvelope::Ethereum(envelope) => match &envelope { TxEnvelope::Eip2930(tx) => Some(tx.signature()), TxEnvelope::Eip1559(tx) => Some(tx.signature()), @@ -811,7 +823,7 @@ pub fn get_pretty_tx_attr(transaction: &Transaction, attr: &str) match attr { "blockHash" | "block_hash" => Some(transaction.block_hash.pretty()), "blockNumber" | "block_number" => Some(transaction.block_number.pretty()), - "from" => Some(transaction.from.pretty()), + "from" => Some(transaction.inner.signer().pretty()), "gas" => Some(transaction.gas_limit().pretty()), "gasPrice" | "gas_price" => Some(Transaction::gas_price(transaction).pretty()), "hash" => Some(alloy_network::TransactionResponse::tx_hash(transaction).pretty()), diff --git a/crates/common/src/transactions.rs b/crates/common/src/transactions.rs index 35654488bd..a3ef9c4d8a 100644 --- a/crates/common/src/transactions.rs +++ b/crates/common/src/transactions.rs @@ -58,9 +58,9 @@ impl TransactionReceiptWithRevertReason { if let Some(block_hash) = self.receipt.block_hash { let mut call_request: WithOtherFields = - transaction.inner.inner.clone().into(); - call_request.set_from(transaction.inner.from); - match provider.call(&call_request).block(BlockId::Hash(block_hash.into())).await { + transaction.inner.inner.clone_inner().into(); + call_request.set_from(transaction.inner.inner.signer()); + match provider.call(call_request).block(BlockId::Hash(block_hash.into())).await { Err(e) => return Ok(extract_revert_reason(e.to_string())), Ok(_) => eyre::bail!("no revert reason as transaction succeeded"), } diff --git a/crates/evm/core/src/backend/mod.rs b/crates/evm/core/src/backend/mod.rs index 982cd1a187..0dfd922676 100644 --- a/crates/evm/core/src/backend/mod.rs +++ b/crates/evm/core/src/backend/mod.rs @@ -904,10 +904,10 @@ impl Backend { let fork = self.inner.get_fork_by_id_mut(id)?; let full_block = fork.db.db.get_full_block(env.block.number.to::())?; - for tx in full_block.inner.transactions.into_transactions() { + for tx in full_block.inner.transactions.txns() { // System transactions such as on L2s don't contain any pricing info so we skip them // otherwise this would cause reverts - if is_known_system_sender(tx.from) || + if is_known_system_sender(tx.from()) || tx.transaction_type() == Some(SYSTEM_TRANSACTION_TYPE) { trace!(tx=?tx.tx_hash(), "skipping system transaction"); @@ -916,7 +916,7 @@ impl Backend { if tx.tx_hash() == tx_hash { // found the target transaction - return Ok(Some(tx.inner)) + return Ok(Some(tx.inner.clone())) } trace!(tx=?tx.tx_hash(), "committing transaction"); diff --git a/crates/evm/core/src/fork/init.rs b/crates/evm/core/src/fork/init.rs index e900192248..c84cd945c4 100644 --- a/crates/evm/core/src/fork/init.rs +++ b/crates/evm/core/src/fork/init.rs @@ -2,7 +2,7 @@ use crate::utils::apply_chain_and_block_specific_env_changes; use alloy_consensus::BlockHeader; use alloy_primitives::{Address, U256}; use alloy_provider::{network::BlockResponse, Network, Provider}; -use alloy_rpc_types::{BlockNumberOrTag, BlockTransactionsKind}; +use alloy_rpc_types::BlockNumberOrTag; use eyre::WrapErr; use foundry_common::NON_ARCHIVE_NODE_WARNING; use revm::primitives::{BlockEnv, CfgEnv, Env, TxEnv}; @@ -26,10 +26,7 @@ pub async fn environment>( let (fork_gas_price, rpc_chain_id, block) = tokio::try_join!( provider.get_gas_price(), provider.get_chain_id(), - provider.get_block_by_number( - BlockNumberOrTag::Number(block_number), - BlockTransactionsKind::Hashes - ) + provider.get_block_by_number(BlockNumberOrTag::Number(block_number)) )?; let block = if let Some(block) = block { block diff --git a/crates/evm/core/src/utils.rs b/crates/evm/core/src/utils.rs index 072821464b..8d28910d07 100644 --- a/crates/evm/core/src/utils.rs +++ b/crates/evm/core/src/utils.rs @@ -5,7 +5,7 @@ use crate::{ }; use alloy_consensus::BlockHeader; use alloy_json_abi::{Function, JsonAbi}; -use alloy_network::AnyTxEnvelope; +use alloy_network::{AnyTxEnvelope, TransactionResponse}; use alloy_primitives::{Address, Selector, TxKind, B256, U256}; use alloy_provider::{network::BlockResponse, Network}; use alloy_rpc_types::{Transaction, TransactionRequest}; @@ -103,8 +103,8 @@ pub fn get_function<'a>( /// Configures the env for the given RPC transaction. /// Accounts for an impersonated transaction by resetting the `env.tx.caller` field to `tx.from`. pub fn configure_tx_env(env: &mut revm::primitives::Env, tx: &Transaction) { - let impersonated_from = is_impersonated_tx(&tx.inner).then_some(tx.from); - if let AnyTxEnvelope::Ethereum(tx) = &tx.inner { + let impersonated_from = is_impersonated_tx(&tx.inner).then_some(tx.from()); + if let AnyTxEnvelope::Ethereum(tx) = &tx.inner.inner() { configure_tx_req_env(env, &tx.clone().into(), impersonated_from).expect("cannot fail"); } } diff --git a/crates/forge/bin/cmd/create.rs b/crates/forge/bin/cmd/create.rs index 00569e30df..9dcc6aa858 100644 --- a/crates/forge/bin/cmd/create.rs +++ b/crates/forge/bin/cmd/create.rs @@ -324,7 +324,7 @@ impl CreateArgs { deployer.tx.set_gas_limit(if let Some(gas_limit) = self.tx.gas_limit { Ok(gas_limit.to()) } else { - provider.estimate_gas(&deployer.tx).await + provider.estimate_gas(deployer.tx.clone()).await }?); if is_legacy { @@ -335,7 +335,7 @@ impl CreateArgs { }; deployer.tx.set_gas_price(gas_price); } else { - let estimate = provider.estimate_eip1559_fees(None).await.wrap_err("Failed to estimate EIP1559 fees. This chain might not support EIP1559, try adding --legacy to your command.")?; + let estimate = provider.estimate_eip1559_fees().await.wrap_err("Failed to estimate EIP1559 fees. This chain might not support EIP1559, try adding --legacy to your command.")?; let priority_fee = if let Some(priority_fee) = self.tx.priority_gas_price { priority_fee.to() } else { diff --git a/crates/forge/tests/cli/test_cmd.rs b/crates/forge/tests/cli/test_cmd.rs index afca05cf64..921787d436 100644 --- a/crates/forge/tests/cli/test_cmd.rs +++ b/crates/forge/tests/cli/test_cmd.rs @@ -3177,15 +3177,15 @@ forgetest_init!(state_diff_recording_with_revert, |prj, cmd| { import "forge-std/Test.sol"; contract StateDiffRevertAtSameDepthTest is Test { function test_something() public { - CounterTestA counter = new CounterTestA(); + CounterTestA counter = new CounterTestA(); counter.doSomething(); } } contract CounterTestA is Test { function doSomething() public { - vm.startStateDiffRecording(); - require(1 > 2); + vm.startStateDiffRecording(); + require(1 > 2); } } "#, @@ -3194,3 +3194,88 @@ contract CounterTestA is Test { cmd.args(["t", "--mt", "test_something"]).assert_failure(); }); + +// +forgetest_init!(should_apply_pranks_per_recorded_depth, |prj, cmd| { + prj.add_test( + "Counter.t.sol", + r#" +import "forge-std/Test.sol"; +contract CounterTest is Test { + function test_stackPrank() public { + address player = makeAddr("player"); + SenderLogger senderLogger = new SenderLogger(); + Contract c = new Contract(); + + senderLogger.log(); // Log(ContractTest, DefaultSender) + vm.startPrank(player, player); + senderLogger.log(); // Log(player, player) + c.f(); // vm.startPrank(player) + senderLogger.log(); // Log(ContractTest, player) <- ContractTest should be player + vm.stopPrank(); + } +} + +contract Contract { + Vm public constant vm = Vm(address(bytes20(uint160(uint256(keccak256("hevm cheat code")))))); + + function f() public { + vm.startPrank(msg.sender); + } +} + +contract SenderLogger { + event Log(address, address); + + function log() public { + emit Log(msg.sender, tx.origin); + } +} + "#, + ) + .unwrap(); + // Emits + // Log(: player: [], : player: []) instead + // Log(: ContractTest: [], : player: []) + cmd.args(["test", "--mt", "test_stackPrank", "-vvvv"]).assert_success().stdout_eq(str![[r#" +[COMPILING_FILES] with [SOLC_VERSION] +[SOLC_VERSION] [ELAPSED] +Compiler run successful! + +Ran 1 test for test/Counter.t.sol:CounterTest +[PASS] test_stackPrank() ([GAS]) +Traces: + [..] CounterTest::test_stackPrank() + ├─ [..] VM::addr() [staticcall] + │ └─ ← [Return] player: [0x44E97aF4418b7a17AABD8090bEA0A471a366305C] + ├─ [..] VM::label(player: [0x44E97aF4418b7a17AABD8090bEA0A471a366305C], "player") + │ └─ ← [Return] + ├─ [..] → new SenderLogger@0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f + │ └─ ← [Return] 255 bytes of code + ├─ [..] → new Contract@0x2e234DAe75C793f67A35089C9d99245E1C58470b + │ └─ ← [Return] 542 bytes of code + ├─ [..] SenderLogger::log() + │ ├─ emit Log(: CounterTest: [0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496], : DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) + │ └─ ← [Stop] + ├─ [..] VM::startPrank(player: [0x44E97aF4418b7a17AABD8090bEA0A471a366305C], player: [0x44E97aF4418b7a17AABD8090bEA0A471a366305C]) + │ └─ ← [Return] + ├─ [..] SenderLogger::log() + │ ├─ emit Log(: player: [0x44E97aF4418b7a17AABD8090bEA0A471a366305C], : player: [0x44E97aF4418b7a17AABD8090bEA0A471a366305C]) + │ └─ ← [Stop] + ├─ [..] Contract::f() + │ ├─ [..] VM::startPrank(player: [0x44E97aF4418b7a17AABD8090bEA0A471a366305C]) + │ │ └─ ← [Return] + │ └─ ← [Stop] + ├─ [..] SenderLogger::log() + │ ├─ emit Log(: player: [0x44E97aF4418b7a17AABD8090bEA0A471a366305C], : player: [0x44E97aF4418b7a17AABD8090bEA0A471a366305C]) + │ └─ ← [Stop] + ├─ [..] VM::stopPrank() + │ └─ ← [Return] + └─ ← [Stop] + +Suite result: ok. 1 passed; 0 failed; 0 skipped; [ELAPSED] + +Ran 1 test suite [ELAPSED]: 1 tests passed, 0 failed, 0 skipped (1 total tests) + +"#]]); +}); diff --git a/crates/script/src/broadcast.rs b/crates/script/src/broadcast.rs index a3700f9e90..ed759f46a7 100644 --- a/crates/script/src/broadcast.rs +++ b/crates/script/src/broadcast.rs @@ -43,7 +43,7 @@ pub async fn estimate_gas>( tx.gas = None; tx.set_gas_limit( - provider.estimate_gas(tx).await.wrap_err("Failed to estimate gas for tx")? * + provider.estimate_gas(tx.clone()).await.wrap_err("Failed to estimate gas for tx")? * estimate_multiplier / 100, ); @@ -356,7 +356,7 @@ impl BundledState { (Some(provider.get_gas_price().await?), None) } else { let mut fees = provider - .estimate_eip1559_fees(None) + .estimate_eip1559_fees() .await .wrap_err("Failed to estimate EIP1559 fees. This chain might not support EIP1559, try adding --legacy to your command.")?; diff --git a/crates/script/src/providers.rs b/crates/script/src/providers.rs index eb6ea9319a..6fb3ca81d8 100644 --- a/crates/script/src/providers.rs +++ b/crates/script/src/providers.rs @@ -66,7 +66,7 @@ impl ProviderInfo { ) } else { GasPrice::EIP1559( - provider.estimate_eip1559_fees(None).await.wrap_err("Failed to get EIP-1559 fees"), + provider.estimate_eip1559_fees().await.wrap_err("Failed to get EIP-1559 fees"), ) }; diff --git a/crates/verify/src/bytecode.rs b/crates/verify/src/bytecode.rs index 6888011975..e7de8c2026 100644 --- a/crates/verify/src/bytecode.rs +++ b/crates/verify/src/bytecode.rs @@ -139,6 +139,7 @@ impl VerifyBytecodeArgs { // Etherscan client let etherscan = EtherscanVerificationProvider.client( self.etherscan.chain.unwrap_or_default(), + &self.verifier.verifier, self.verifier.verifier_url.as_deref(), self.etherscan.key().as_deref(), &config, @@ -245,7 +246,7 @@ impl VerifyBytecodeArgs { .await?; env.block.number = U256::ZERO; // Genesis block - let genesis_block = provider.get_block(gen_blk_num.into(), true.into()).await?; + let genesis_block = provider.get_block(gen_blk_num.into()).full().await?; // Setup genesis tx and env. let deployer = Address::with_last_byte(0x1); @@ -338,8 +339,8 @@ impl VerifyBytecodeArgs { ); }; - let mut transaction: TransactionRequest = match transaction.inner.inner { - AnyTxEnvelope::Ethereum(tx) => tx.into(), + let mut transaction: TransactionRequest = match transaction.inner.inner.inner() { + AnyTxEnvelope::Ethereum(tx) => tx.clone().into(), AnyTxEnvelope::Unknown(_) => unreachable!("Unknown transaction type"), }; @@ -448,7 +449,7 @@ impl VerifyBytecodeArgs { ) .await?; env.block.number = U256::from(simulation_block); - let block = provider.get_block(simulation_block.into(), true.into()).await?; + let block = provider.get_block(simulation_block.into()).full().await?; // Workaround for the NonceTooHigh issue as we're not simulating prior txs of the same // block. diff --git a/crates/verify/src/etherscan/mod.rs b/crates/verify/src/etherscan/mod.rs index 9e07846778..217fb55120 100644 --- a/crates/verify/src/etherscan/mod.rs +++ b/crates/verify/src/etherscan/mod.rs @@ -1,5 +1,5 @@ use crate::{ - provider::{VerificationContext, VerificationProvider}, + provider::{VerificationContext, VerificationProvider, VerificationProviderType}, retry::RETRY_CHECK_ON_VERIFY, verify::{VerifyArgs, VerifyCheckArgs}, zk_provider::CompilerVerificationContext, @@ -159,6 +159,7 @@ impl VerificationProvider for EtherscanVerificationProvider { let config = args.load_config()?; let etherscan = self.client( args.etherscan.chain.unwrap_or_default(), + &args.verifier.verifier, args.verifier.verifier_url.as_deref(), args.etherscan.key().as_deref(), &config, @@ -227,6 +228,7 @@ impl EtherscanVerificationProvider { let config = args.load_config()?; let etherscan = self.client( args.etherscan.chain.unwrap_or_default(), + &args.verifier.verifier, args.verifier.verifier_url.as_deref(), args.etherscan.key().as_deref(), &config, @@ -258,6 +260,7 @@ impl EtherscanVerificationProvider { pub(crate) fn client( &self, chain: Chain, + verifier_type: &VerificationProviderType, verifier_url: Option<&str>, etherscan_key: Option<&str>, config: &Config, @@ -282,10 +285,13 @@ impl EtherscanVerificationProvider { builder = if let Some(api_url) = api_url { // we don't want any trailing slashes because this can cause cloudflare issues: let api_url = api_url.trim_end_matches('/'); - builder - .with_chain_id(chain) - .with_api_url(api_url)? - .with_url(base_url.unwrap_or(api_url))? + let base_url = if *verifier_type != VerificationProviderType::Etherscan { + // If verifier is not Etherscan then set base url as api url without trialing /api. + api_url.strip_prefix("/api").unwrap_or(api_url) + } else { + base_url.unwrap_or(api_url) + }; + builder.with_chain_id(chain).with_api_url(api_url)?.with_url(base_url)? } else { builder.chain(chain)? }; @@ -402,6 +408,7 @@ impl EtherscanVerificationProvider { let provider = get_provider(context.config())?; let client = self.client( args.etherscan.chain.unwrap_or_default(), + &args.verifier.verifier, args.verifier.verifier_url.as_deref(), args.etherscan.key.as_deref(), context.config(), @@ -495,6 +502,7 @@ mod tests { let client = etherscan .client( args.etherscan.chain.unwrap_or_default(), + &args.verifier.verifier, args.verifier.verifier_url.as_deref(), args.etherscan.key().as_deref(), &config, @@ -522,6 +530,7 @@ mod tests { let client = etherscan .client( args.etherscan.chain.unwrap_or_default(), + &args.verifier.verifier, args.verifier.verifier_url.as_deref(), args.etherscan.key().as_deref(), &config,