diff --git a/.gitignore b/.gitignore index c2df037..ccda27d 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ # MdBook Artifacts book/book/ + +# Kurtosis Devnet +devnet/ diff --git a/Cargo.lock b/Cargo.lock index e747958..cbe7a2d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,16 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - [[package]] name = "addr2line" version = "0.21.0" @@ -27,17 +17,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - [[package]] name = "ahash" version = "0.8.11" @@ -45,19 +24,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", "once_cell", "version_check", - "zerocopy 0.7.35", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", + "zerocopy", ] [[package]] @@ -74,10 +43,11 @@ checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "alloy-chains" -version = "0.1.24" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47ff94ce0f141c2671c23d02c7b88990dd432856639595c5d010663d017c2c58" +checksum = "5b515e82c8468ddb6ff8db21c78a5997442f113fd8471fd5b2261b2602dd0c67" dependencies = [ + "alloy-rlp", "num_enum", "serde", "strum", @@ -97,48 +67,6 @@ dependencies = [ "serde", ] -[[package]] -name = "alloy-contract" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f4e0ef72b0876ae3068b2ed7dfae9ae1779ce13cfaec2ee1f08f5bd0348dc57" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-network", - "alloy-network-primitives", - "alloy-primitives", - "alloy-provider", - "alloy-pubsub", - "alloy-rpc-types-eth", - "alloy-sol-types", - "alloy-transport", - "futures", - "futures-util", - "thiserror", -] - -[[package]] -name = "alloy-dyn-abi" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413902aa18a97569e60f679c23f46a18db1656d87ab4d4e49d0e1e52042f66df" -dependencies = [ - "alloy-json-abi", - "alloy-primitives", - "alloy-sol-type-parser", - "alloy-sol-types", - "arbitrary", - "const-hex", - "derive_arbitrary", - "derive_more", - "itoa", - "proptest", - "serde", - "serde_json", - "winnow 0.6.18", -] - [[package]] name = "alloy-eips" version = "0.2.1" @@ -148,12 +76,10 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-serde", - "arbitrary", "c-kzg", "derive_more", "k256", "once_cell", - "rand", "serde", "sha2", ] @@ -169,18 +95,6 @@ dependencies = [ "serde", ] -[[package]] -name = "alloy-json-abi" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc05b04ac331a9f07e3a4036ef7926e49a8bf84a99a1ccfc7e2ab55a5fcbb372" -dependencies = [ - "alloy-primitives", - "alloy-sol-type-parser", - "serde", - "serde_json", -] - [[package]] name = "alloy-json-rpc" version = "0.2.1" @@ -234,20 +148,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" dependencies = [ "alloy-rlp", - "arbitrary", "bytes", "cfg-if", "const-hex", - "derive_arbitrary", "derive_more", - "ethereum_ssz", "getrandom", "hex-literal", "itoa", "k256", "keccak-asm", "proptest", - "proptest-derive", "rand", "ruint", "serde", @@ -267,14 +177,10 @@ dependencies = [ "alloy-network", "alloy-network-primitives", "alloy-primitives", - "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types-eth", - "alloy-rpc-types-trace", "alloy-transport", "alloy-transport-http", - "alloy-transport-ipc", - "alloy-transport-ws", "async-stream", "async-trait", "auto_impl", @@ -291,30 +197,11 @@ dependencies = [ "url", ] -[[package]] -name = "alloy-pubsub" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f5da2c55cbaf229bad3c5f8b00b5ab66c74ef093e5f3a753d874cfecf7d2281" -dependencies = [ - "alloy-json-rpc", - "alloy-primitives", - "alloy-transport", - "bimap", - "futures", - "serde", - "serde_json", - "tokio", - "tokio-stream", - "tower", - "tracing", -] - [[package]] name = "alloy-rlp" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a43b18702501396fa9bcdeecd533bc85fac75150d308fc0f6800a01e6234a003" +checksum = "26154390b1d205a4a7ac7352aa2eb4f81f391399d4e2f546fb81a2f8bb383f62" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -323,13 +210,13 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d83524c1f6162fcb5b0decf775498a125066c86dda6066ed609531b0e912f85a" +checksum = "4d0f2d905ebd295e7effec65e5f6868d153936130ae718352771de3e7d03c75c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -339,12 +226,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b38e3ffdb285df5d9f60cb988d336d9b8e3505acb78750c3bc60336a7af41d3" dependencies = [ "alloy-json-rpc", - "alloy-primitives", - "alloy-pubsub", "alloy-transport", "alloy-transport-http", - "alloy-transport-ipc", - "alloy-transport-ws", "futures", "pin-project", "reqwest", @@ -363,42 +246,9 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c31a3750b8f5a350d17354e46a52b0f2f19ec5f2006d816935af599dedc521" dependencies = [ - "alloy-rpc-types-anvil", - "alloy-rpc-types-engine", - "alloy-rpc-types-eth", - "alloy-rpc-types-trace", - "alloy-rpc-types-txpool", - "alloy-serde", - "serde", -] - -[[package]] -name = "alloy-rpc-types-anvil" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ab6509cd38b2e8c8da726e0f61c1e314a81df06a38d37ddec8bced3f8d25ed" -dependencies = [ - "alloy-primitives", - "alloy-serde", - "serde", -] - -[[package]] -name = "alloy-rpc-types-engine" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff63f51b2fb2f547df5218527fd0653afb1947bf7fead5b3ce58c75d170b30f7" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-rlp", "alloy-rpc-types-eth", "alloy-serde", - "jsonwebtoken", - "rand", "serde", - "thiserror", ] [[package]] @@ -420,32 +270,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "alloy-rpc-types-trace" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a86eeb49ea0cc79f249faa1d35c20541bb1c317a59b5962cb07b1890355b0064" -dependencies = [ - "alloy-primitives", - "alloy-rpc-types-eth", - "alloy-serde", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "alloy-rpc-types-txpool" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2342fed8175642b15a37a51f8729b05b2469281fbeb816f0ccbb0087e2dd74a" -dependencies = [ - "alloy-primitives", - "alloy-rpc-types-eth", - "alloy-serde", - "serde", -] - [[package]] name = "alloy-serde" version = "0.2.1" @@ -453,7 +277,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e33feda6a53e6079895aed1d08dcb98a1377b000d80d16370fbbdb8155d547ef" dependencies = [ "alloy-primitives", - "arbitrary", "serde", "serde_json", ] @@ -464,9 +287,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "740a25b92e849ed7b0fa013951fe2f64be9af1ad5abe805037b44fb7770c5c47" dependencies = [ - "alloy-dyn-abi", "alloy-primitives", - "alloy-sol-types", "async-trait", "auto_impl", "elliptic-curve", @@ -474,63 +295,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "alloy-signer-ledger" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4f7e76cb4f63dbb56857a74665510517a013fe18da82082f7c66c6d321531e" -dependencies = [ - "alloy-consensus", - "alloy-dyn-abi", - "alloy-network", - "alloy-primitives", - "alloy-signer", - "alloy-sol-types", - "async-trait", - "coins-ledger", - "futures-util", - "semver 1.0.23", - "thiserror", - "tracing", -] - -[[package]] -name = "alloy-signer-local" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b0707d4f63e4356a110b30ef3add8732ab6d181dd7be4607bf79b8777105cee" -dependencies = [ - "alloy-consensus", - "alloy-network", - "alloy-primitives", - "alloy-signer", - "async-trait", - "coins-bip32", - "coins-bip39", - "elliptic-curve", - "eth-keystore", - "k256", - "rand", - "thiserror", -] - -[[package]] -name = "alloy-signer-trezor" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81147fb1a384f878653524b9473af71ef2820846bd64a473f26e49fca8e5f8f9" -dependencies = [ - "alloy-consensus", - "alloy-network", - "alloy-primitives", - "alloy-signer", - "async-trait", - "semver 1.0.23", - "thiserror", - "tracing", - "trezor-client", -] - [[package]] name = "alloy-sol-macro" version = "0.7.7" @@ -542,7 +306,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -551,15 +315,14 @@ version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" dependencies = [ - "alloy-json-abi", "alloy-sol-macro-input", "const-hex", "heck", - "indexmap", + "indexmap 2.4.0", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", "syn-solidity", "tiny-keccak", ] @@ -570,38 +333,24 @@ version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" dependencies = [ - "alloy-json-abi", "const-hex", "dunce", "heck", "proc-macro2", "quote", - "serde_json", - "syn 2.0.72", + "syn 2.0.76", "syn-solidity", ] -[[package]] -name = "alloy-sol-type-parser" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbcba3ca07cf7975f15d871b721fb18031eec8bce51103907f6dcce00b255d98" -dependencies = [ - "serde", - "winnow 0.6.18", -] - [[package]] name = "alloy-sol-types" version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" dependencies = [ - "alloy-json-abi", "alloy-primitives", "alloy-sol-macro", "const-hex", - "serde", ] [[package]] @@ -638,43 +387,6 @@ dependencies = [ "url", ] -[[package]] -name = "alloy-transport-ipc" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804494366e20468776db4e18f9eb5db7db0fe14f1271eb6dbf155d867233405c" -dependencies = [ - "alloy-json-rpc", - "alloy-pubsub", - "alloy-transport", - "bytes", - "futures", - "interprocess", - "pin-project", - "serde_json", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "alloy-transport-ws" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af855163e7df008799941aa6dd324a43ef2bf264b08ba4b22d44aad6ced65300" -dependencies = [ - "alloy-pubsub", - "alloy-transport", - "futures", - "http 1.1.0", - "rustls 0.23.12", - "serde_json", - "tokio", - "tokio-tungstenite 0.23.1", - "tracing", - "ws_stream_wasm", -] - [[package]] name = "alloy-trie" version = "0.4.1" @@ -684,7 +396,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "derive_more", - "hashbrown", + "hashbrown 0.14.5", "nybbles", "serde", "smallvec", @@ -756,144 +468,10 @@ dependencies = [ ] [[package]] -name = "anvil" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-chains", - "alloy-consensus", - "alloy-contract", - "alloy-dyn-abi", - "alloy-eips", - "alloy-genesis", - "alloy-network", - "alloy-primitives", - "alloy-provider", - "alloy-rlp", - "alloy-rpc-types", - "alloy-serde", - "alloy-signer", - "alloy-signer-local", - "alloy-sol-types", - "alloy-transport", - "alloy-trie", - "anvil-core", - "anvil-rpc", - "anvil-server", - "async-trait", - "auto_impl", - "axum", - "bytes", - "chrono", - "clap", - "clap_complete", - "clap_complete_fig", - "ctrlc", - "eyre", - "fdlimit", - "flate2", - "foundry-cli", - "foundry-common", - "foundry-config", - "foundry-evm", - "futures", - "hyper 1.4.1", - "itertools 0.13.0", - "k256", - "parking_lot", - "rand", - "revm 12.1.0", - "serde", - "serde_json", - "serde_repr", - "tempfile", - "thiserror", - "tikv-jemallocator", - "tokio", - "tower", - "tracing", - "tracing-subscriber", - "vergen", - "yansi", -] - -[[package]] -name = "anvil-core" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-consensus", - "alloy-dyn-abi", - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-rpc-types", - "alloy-serde", - "alloy-trie", - "bytes", - "foundry-common", - "foundry-evm", - "rand", - "revm 12.1.0", - "serde", - "serde_json", -] - -[[package]] -name = "anvil-rpc" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "anvil-server" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "anvil-rpc", - "async-trait", - "axum", - "bytes", - "clap", - "futures", - "interprocess", - "parking_lot", - "pin-project", - "serde", - "serde_json", - "thiserror", - "tokio-util", - "tower-http", - "tracing", -] - -[[package]] -name = "anyhow" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" - -[[package]] -name = "arbitrary" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "ariadne" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44055e597c674aef7cb903b2b9f6e4cba1277ed0d2d61dae7cd52d7ffa81f8e2" -dependencies = [ - "unicode-width", - "yansi", -] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "ark-ff" @@ -1021,29 +599,9 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "ascii-canvas" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" -dependencies = [ - "term", -] - -[[package]] -name = "async-recursion" -version = "1.1.1" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "async-stream" @@ -1064,7 +622,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1075,27 +633,7 @@ checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", -] - -[[package]] -name = "async_io_stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" -dependencies = [ - "futures", - "pharos", - "rustc_version 0.4.0", -] - -[[package]] -name = "atomic" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" -dependencies = [ - "bytemuck", + "syn 2.0.76", ] [[package]] @@ -1122,7 +660,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1131,207 +669,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" -[[package]] -name = "aws-credential-types" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16838e6c9e12125face1c1eff1343c75e3ff540de98ff7ebd61874a89bcfeb9" -dependencies = [ - "aws-smithy-async", - "aws-smithy-runtime-api", - "aws-smithy-types", - "zeroize", -] - -[[package]] -name = "aws-runtime" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c5f920ffd1e0526ec9e70e50bf444db50b204395a0fa7016bbf9e31ea1698f" -dependencies = [ - "aws-credential-types", - "aws-sigv4", - "aws-smithy-async", - "aws-smithy-http", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-types", - "bytes", - "fastrand", - "http 0.2.12", - "http-body 0.4.6", - "percent-encoding", - "pin-project-lite", - "tracing", - "uuid 1.10.0", -] - -[[package]] -name = "aws-sdk-kms" -version = "1.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91f43512620f4b0d9e67ccf7d768fab5ed310ac2229ebb9422177abe99c36ba" -dependencies = [ - "aws-credential-types", - "aws-runtime", - "aws-smithy-async", - "aws-smithy-http", - "aws-smithy-json", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-types", - "bytes", - "http 0.2.12", - "once_cell", - "regex-lite", - "tracing", -] - -[[package]] -name = "aws-sigv4" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df1b0fa6be58efe9d4ccc257df0a53b89cd8909e86591a13ca54817c87517be" -dependencies = [ - "aws-credential-types", - "aws-smithy-http", - "aws-smithy-runtime-api", - "aws-smithy-types", - "bytes", - "form_urlencoded", - "hex", - "hmac", - "http 0.2.12", - "http 1.1.0", - "once_cell", - "percent-encoding", - "sha2", - "time", - "tracing", -] - -[[package]] -name = "aws-smithy-async" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62220bc6e97f946ddd51b5f1361f78996e704677afc518a4ff66b7a72ea1378c" -dependencies = [ - "futures-util", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "aws-smithy-http" -version = "0.60.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9cd0ae3d97daa0a2bf377a4d8e8e1362cae590c4a1aad0d40058ebca18eb91e" -dependencies = [ - "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", - "pin-project-lite", - "pin-utils", - "tracing", -] - -[[package]] -name = "aws-smithy-json" -version = "0.60.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4683df9469ef09468dad3473d129960119a0d3593617542b7d52086c8486f2d6" -dependencies = [ - "aws-smithy-types", -] - -[[package]] -name = "aws-smithy-runtime" -version = "1.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce87155eba55e11768b8c1afa607f3e864ae82f03caf63258b37455b0ad02537" -dependencies = [ - "aws-smithy-async", - "aws-smithy-http", - "aws-smithy-runtime-api", - "aws-smithy-types", - "bytes", - "fastrand", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "http-body 1.0.1", - "httparse", - "hyper 0.14.30", - "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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30819352ed0a04ecf6a2f3477e344d2d1ba33d43e0f09ad9047c12e0d923616f" -dependencies = [ - "aws-smithy-async", - "aws-smithy-types", - "bytes", - "http 0.2.12", - "http 1.1.0", - "pin-project-lite", - "tokio", - "tracing", - "zeroize", -] - -[[package]] -name = "aws-smithy-types" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe321a6b21f5d8eabd0ade9c55d3d0335f3c3157fc2b3e87f05f34b539e4df5" -dependencies = [ - "base64-simd", - "bytes", - "bytes-utils", - "http 0.2.12", - "http 1.1.0", - "http-body 0.4.6", - "http-body 1.0.1", - "http-body-util", - "itoa", - "num-integer", - "pin-project-lite", - "pin-utils", - "ryu", - "serde", - "time", -] - -[[package]] -name = "aws-types" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5221b91b3e441e6675310829fd8984801b772cb1546ef6c0e54dec9f1ac13fef" -dependencies = [ - "aws-credential-types", - "aws-smithy-async", - "aws-smithy-runtime-api", - "aws-smithy-types", - "rustc_version 0.4.0", - "tracing", -] - [[package]] name = "axum" version = "0.7.5" @@ -1340,13 +677,12 @@ checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" dependencies = [ "async-trait", "axum-core", - "base64 0.21.7", "bytes", "futures-util", - "http 1.1.0", - "http-body 1.0.1", + "http", + "http-body", "http-body-util", - "hyper 1.4.1", + "hyper", "hyper-util", "itoa", "matchit", @@ -1359,10 +695,8 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sha1", "sync_wrapper 1.0.1", "tokio", - "tokio-tungstenite 0.21.0", "tower", "tower-layer", "tower-service", @@ -1378,8 +712,8 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.1.0", - "http-body 1.0.1", + "http", + "http-body", "http-body-util", "mime", "pin-project-lite", @@ -1423,34 +757,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "base64-simd" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" -dependencies = [ - "outref", - "vsimd", -] - [[package]] name = "base64ct" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bech32" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" - -[[package]] -name = "bimap" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" - [[package]] name = "bit-set" version = "0.5.3" @@ -1478,7 +790,6 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" dependencies = [ - "arbitrary", "serde", ] @@ -1548,32 +859,6 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "sha2", - "tinyvec", -] - -[[package]] -name = "bstr" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "build_const" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7" - [[package]] name = "bumpalo" version = "3.16.0" @@ -1588,9 +873,9 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.16.3" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" +checksum = "6fd4c6dcc3b0aea2f5c0b4b82c2b15fe39ddbc76041a310848f4706edf76bb31" [[package]] name = "byteorder" @@ -1607,16 +892,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bytes-utils" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" -dependencies = [ - "bytes", - "either", -] - [[package]] name = "c-kzg" version = "1.0.2" @@ -1632,80 +907,15 @@ dependencies = [ ] [[package]] -name = "cassowary" -version = "0.3.0" +name = "cc" +version = "1.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" - -[[package]] -name = "cast" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-chains", - "alloy-consensus", - "alloy-contract", - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-json-rpc", - "alloy-network", - "alloy-primitives", - "alloy-provider", - "alloy-rlp", - "alloy-rpc-types", - "alloy-serde", - "alloy-signer", - "alloy-signer-local", - "alloy-sol-types", - "alloy-transport", - "chrono", - "clap", - "clap_complete", - "clap_complete_fig", - "comfy-table", - "dunce", - "evm-disassembler", - "evmole", - "eyre", - "foundry-block-explorers", - "foundry-cli", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-evm", - "foundry-wallets", - "futures", - "indicatif", - "itertools 0.13.0", - "rand", - "rayon", - "regex", - "rpassword", - "semver 1.0.23", - "serde", - "serde_json", - "tempfile", - "tikv-jemallocator", - "tokio", - "tracing", - "vergen", - "yansi", -] - -[[package]] -name = "castaway" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" -dependencies = [ - "rustversion", -] - -[[package]] -name = "cc" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc" +checksum = "50d2eb3cd3d1bf4529e31c215ee6f93ec5a3d536d9f578f93d9d33ee19562932" +dependencies = [ + "jobserver", + "libc", + "shlex", +] [[package]] name = "cfg-if" @@ -1715,9 +925,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cfg_aliases" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" @@ -1728,51 +938,15 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", - "windows-targets 0.52.6", -] - -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", + "windows-targets 0.52.6", ] [[package]] name = "clap" -version = "4.5.13" +version = "4.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc" +checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" dependencies = [ "clap_builder", "clap_derive", @@ -1780,36 +954,14 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.13" +version = "4.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99" +checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" dependencies = [ "anstream", "anstyle", "clap_lex", "strsim", - "terminal_size", - "unicase", - "unicode-width", -] - -[[package]] -name = "clap_complete" -version = "4.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8670053e87c316345e384ca1f3eba3006fc6355ed8b8a1140d104e109e3df34" -dependencies = [ - "clap", -] - -[[package]] -name = "clap_complete_fig" -version = "4.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d494102c8ff3951810c72baf96910b980fb065ca5d3101243e6a8dc19747c86b" -dependencies = [ - "clap", - "clap_complete", ] [[package]] @@ -1821,7 +973,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1830,80 +982,6 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" -[[package]] -name = "coins-bip32" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c43ff7fd9ff522219058808a259e61423335767b1071d5b346de60d9219657" -dependencies = [ - "bs58", - "coins-core", - "digest 0.10.7", - "hmac", - "k256", - "serde", - "sha2", - "thiserror", -] - -[[package]] -name = "coins-bip39" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4587c0b4064da887ed39a6522f577267d57e58bdd583178cd877d721b56a2e" -dependencies = [ - "bitvec", - "coins-bip32", - "hmac", - "once_cell", - "pbkdf2 0.12.2", - "rand", - "sha2", - "thiserror", -] - -[[package]] -name = "coins-core" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3aeeec621f4daec552e9d28befd58020a78cfc364827d06a753e8bc13c6c4b" -dependencies = [ - "base64 0.21.7", - "bech32", - "bs58", - "const-hex", - "digest 0.10.7", - "generic-array", - "ripemd", - "serde", - "sha2", - "sha3", - "thiserror", -] - -[[package]] -name = "coins-ledger" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "166ef757aa936b45f3e5d39c344047f65ef7d25a50067246a498021a816d074b" -dependencies = [ - "async-trait", - "byteorder", - "cfg-if", - "const-hex", - "getrandom", - "hidapi-rusb", - "js-sys", - "log", - "nix 0.26.4", - "once_cell", - "thiserror", - "tokio", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", -] - [[package]] name = "color-eyre" version = "0.6.3" @@ -1937,44 +1015,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" -[[package]] -name = "comfy-table" -version = "7.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b34115915337defe99b2aff5c2ce6771e5fbc4079f4b506301f5cf394c8452f7" -dependencies = [ - "crossterm", - "strum", - "strum_macros", - "unicode-width", -] - -[[package]] -name = "compact_str" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f" -dependencies = [ - "castaway", - "cfg-if", - "itoa", - "ryu", - "static_assertions", -] - -[[package]] -name = "console" -version = "0.15.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" -dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "unicode-width", - "windows-sys 0.52.0", -] - [[package]] name = "const-hex" version = "1.12.0" @@ -2000,6 +1040,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -2012,28 +1061,34 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" dependencies = [ "libc", ] [[package]] -name = "crc32fast" -version = "1.4.2" +name = "crc" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" dependencies = [ - "cfg-if", + "crc-catalog", ] +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crossbeam-deque" version = "0.8.5" @@ -2061,11 +1116,11 @@ checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crossterm" -version = "0.27.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" dependencies = [ - "bitflags 2.6.0", + "bitflags 1.3.2", "crossterm_winapi", "libc", "mio 0.8.11", @@ -2112,23 +1167,14 @@ dependencies = [ "typenum", ] -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - [[package]] name = "ctrlc" -version = "3.4.4" +version = "3.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "672465ae37dc1bc6380a6547a8883d5dd397b0f1faaad4f265726cc7042a5345" +checksum = "90eeab0aa92f3f9b4e87f258c72b139c207d251f9cbc1080a0086b86a8870dd3" dependencies = [ - "nix 0.28.0", - "windows-sys 0.52.0", + "nix", + "windows-sys 0.59.0", ] [[package]] @@ -2152,7 +1198,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -2163,7 +1209,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -2173,18 +1219,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.5", "lock_api", "once_cell", "parking_lot_core", ] -[[package]] -name = "data-encoding" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" - [[package]] name = "der" version = "0.7.9" @@ -2192,7 +1232,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", - "pem-rfc7468", "zeroize", ] @@ -2203,6 +1242,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", + "serde", ] [[package]] @@ -2216,72 +1256,17 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive_arbitrary" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "derive_builder" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0350b5cb0331628a5916d6c5c0b72e97393b8b6b03b47a9284f4e7f5a405ffd7" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d48cda787f839151732d396ac69e3473923d54312c070ee21e9effcaa8ca0b1d" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206868b8242f27cecce124c19fd88157fbd0dd334df2587f36417bafbc85097b" -dependencies = [ - "derive_builder_core", - "syn 2.0.72", -] - [[package]] name = "derive_more" version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ - "convert_case", + "convert_case 0.4.0", "proc-macro2", "quote", "rustc_version 0.4.0", - "syn 2.0.72", -] - -[[package]] -name = "dialoguer" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" -dependencies = [ - "console", - "shell-words", - "tempfile", - "thiserror", - "zeroize", + "syn 2.0.76", ] [[package]] @@ -2306,101 +1291,36 @@ dependencies = [ ] [[package]] -name = "dirs" -version = "5.0.1" +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] -name = "dirs-next" -version = "2.0.0" +name = "dyn-clone" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] -name = "dirs-sys" -version = "0.4.1" +name = "ecdsa" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", ] [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "either" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "doctest-file" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" - -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - -[[package]] -name = "dunce" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" - -[[package]] -name = "dyn-clone" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "signature", - "spki", -] - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elliptic-curve" @@ -2414,7 +1334,6 @@ dependencies = [ "ff", "generic-array", "group", - "pem-rfc7468", "pkcs8", "rand_core", "sec1", @@ -2423,27 +1342,28 @@ dependencies = [ ] [[package]] -name = "ena" -version = "0.14.3" +name = "encoding_rs" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ - "log", + "cfg-if", ] [[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - -[[package]] -name = "encoding_rs" -version = "0.8.34" +name = "enr" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "972070166c68827e64bd1ebc8159dd8e32d9bc2da7ebe8f20b61308f7974ad30" dependencies = [ - "cfg-if", + "alloy-rlp", + "base64 0.21.7", + "bytes", + "hex", + "log", + "rand", + "sha3", + "zeroize", ] [[package]] @@ -2454,7 +1374,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -2473,85 +1393,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "eth-keystore" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" -dependencies = [ - "aes", - "ctr", - "digest 0.10.7", - "hex", - "hmac", - "pbkdf2 0.11.0", - "rand", - "scrypt", - "serde", - "serde_json", - "sha2", - "sha3", - "thiserror", - "uuid 0.8.2", -] - -[[package]] -name = "ethbloom" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" -dependencies = [ - "crunchy", - "fixed-hash", - "impl-rlp", - "impl-serde", - "tiny-keccak", -] - -[[package]] -name = "ethereum-types" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" -dependencies = [ - "ethbloom", - "fixed-hash", - "impl-rlp", - "impl-serde", - "primitive-types", - "uint", -] - -[[package]] -name = "ethereum_ssz" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d3627f83d8b87b432a5fad9934b4565260722a141a2c40f371f8080adec9425" -dependencies = [ - "ethereum-types", - "itertools 0.10.5", - "smallvec", -] - -[[package]] -name = "evm-disassembler" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded685d9f07315ff689ba56e7d84e6f1e782db19b531a46c34061a733bba7258" -dependencies = [ - "eyre", - "hex", -] - -[[package]] -name = "evmole" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628b1881ed2b7f83a32418f6de735c49292065dfc225067687ee1d4fc59a134e" -dependencies = [ - "ruint", -] - [[package]] name = "eyre" version = "0.6.12" @@ -2564,9 +1405,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fastrlp" @@ -2579,16 +1420,6 @@ dependencies = [ "bytes", ] -[[package]] -name = "fdlimit" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" -dependencies = [ - "libc", - "thiserror", -] - [[package]] name = "ff" version = "0.13.0" @@ -2600,49 +1431,18 @@ dependencies = [ "subtle", ] -[[package]] -name = "figment" -version = "0.10.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" -dependencies = [ - "atomic", - "pear", - "serde", - "toml", - "uncased", - "version_check", -] - [[package]] name = "fixed-hash" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ - "arbitrary", "byteorder", "rand", "rustc-hex", "static_assertions", ] -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - [[package]] name = "fnv" version = "1.0.7" @@ -2665,730 +1465,77 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] -name = "forge-fmt" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "alloy-primitives", - "ariadne", - "foundry-config", - "itertools 0.13.0", - "solang-parser", - "thiserror", - "tracing", + "percent-encoding", ] [[package]] -name = "forge-script" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ - "alloy-chains", - "alloy-consensus", - "alloy-dyn-abi", - "alloy-eips", - "alloy-json-abi", - "alloy-network", - "alloy-primitives", - "alloy-provider", - "alloy-rpc-types", - "alloy-serde", - "alloy-signer", - "alloy-transport", - "async-recursion", - "clap", - "dialoguer", - "dunce", - "eyre", - "forge-verify", - "foundry-cheatcodes", - "foundry-cli", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-debugger", - "foundry-evm", - "foundry-linking", - "foundry-wallets", - "futures", - "indicatif", - "itertools 0.13.0", - "parking_lot", - "revm-inspectors", - "semver 1.0.23", - "serde", - "serde_json", - "tracing", - "yansi", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] -name = "forge-verify" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-primitives", - "alloy-provider", - "alloy-rpc-types", - "async-trait", - "ciborium", - "clap", - "eyre", - "foundry-block-explorers", - "foundry-cli", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-evm", - "futures", - "itertools 0.13.0", - "once_cell", - "regex", - "reqwest", - "revm-primitives 7.1.0", - "semver 1.0.23", - "serde", - "serde_json", - "tracing", - "yansi", + "futures-core", + "futures-sink", ] [[package]] -name = "form_urlencoded" -version = "1.2.1" +name = "futures-core" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ - "percent-encoding", + "futures-core", + "futures-task", + "futures-util", ] [[package]] -name = "foundry-block-explorers" -version = "0.5.1" +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3306c1dfb236a3f7c86f7f6c9a88843d621cea96add97fdefbdc53ef3ecf6dfe" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ - "alloy-chains", - "alloy-json-abi", - "alloy-primitives", - "foundry-compilers", - "reqwest", - "semver 1.0.23", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "foundry-cheatcodes" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-consensus", - "alloy-dyn-abi", - "alloy-genesis", - "alloy-json-abi", - "alloy-primitives", - "alloy-provider", - "alloy-rlp", - "alloy-rpc-types", - "alloy-signer", - "alloy-signer-local", - "alloy-sol-types", - "base64 0.22.1", - "chrono", - "dialoguer", - "eyre", - "foundry-cheatcodes-spec", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-evm-core", - "foundry-wallets", - "itertools 0.13.0", - "jsonpath_lib", - "k256", - "memchr", - "p256", - "parking_lot", - "rand", - "revm 12.1.0", - "rustc-hash 2.0.0", - "semver 1.0.23", - "serde_json", - "thiserror", - "toml", - "tracing", - "vergen", - "walkdir", -] - -[[package]] -name = "foundry-cheatcodes-spec" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-sol-types", - "foundry-macros", - "serde", -] - -[[package]] -name = "foundry-cli" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-chains", - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-primitives", - "alloy-provider", - "alloy-transport", - "clap", - "color-eyre", - "dotenvy", - "eyre", - "forge-fmt", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-debugger", - "foundry-evm", - "foundry-wallets", - "futures", - "indicatif", - "once_cell", - "regex", - "serde", - "strsim", - "strum", - "tokio", - "tracing", - "tracing-subscriber", - "yansi", -] - -[[package]] -name = "foundry-common" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-consensus", - "alloy-contract", - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-json-rpc", - "alloy-primitives", - "alloy-provider", - "alloy-pubsub", - "alloy-rpc-client", - "alloy-rpc-types", - "alloy-serde", - "alloy-sol-types", - "alloy-transport", - "alloy-transport-http", - "alloy-transport-ipc", - "alloy-transport-ws", - "async-trait", - "clap", - "comfy-table", - "dunce", - "eyre", - "foundry-block-explorers", - "foundry-common-fmt", - "foundry-compilers", - "foundry-config", - "num-format", - "once_cell", - "reqwest", - "rustc-hash 2.0.0", - "semver 1.0.23", - "serde", - "serde_json", - "thiserror", - "tokio", - "tower", - "tracing", - "url", - "walkdir", - "yansi", -] - -[[package]] -name = "foundry-common-fmt" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-consensus", - "alloy-dyn-abi", - "alloy-primitives", - "alloy-rpc-types", - "alloy-serde", - "chrono", - "comfy-table", - "revm-primitives 7.1.0", - "serde", - "serde_json", - "yansi", -] - -[[package]] -name = "foundry-compilers" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b8ffe1d5a00cd78a9461262377270d88b8d6a8a5f51b402996242bccef3994" -dependencies = [ - "alloy-json-abi", - "alloy-primitives", - "auto_impl", - "derivative", - "dirs", - "dyn-clone", - "foundry-compilers-artifacts", - "foundry-compilers-core", - "futures-util", - "home", - "itertools 0.13.0", - "md-5", - "once_cell", - "path-slash", - "rayon", - "semver 1.0.23", - "serde", - "serde_json", - "sha2", - "solang-parser", - "svm-rs", - "svm-rs-builds", - "thiserror", - "tokio", - "tracing", - "winnow 0.6.18", - "yansi", -] - -[[package]] -name = "foundry-compilers-artifacts" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdb80803e20447fc8c3f4ec97d47ad5fa37286648bb8224edbbc553ebe1a0f4" -dependencies = [ - "foundry-compilers-artifacts-solc", - "foundry-compilers-artifacts-vyper", -] - -[[package]] -name = "foundry-compilers-artifacts-solc" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3280cf657d802358856a397cb8465b18a0a6c09b1fa6422842e422a9aa21276d" -dependencies = [ - "alloy-json-abi", - "alloy-primitives", - "foundry-compilers-core", - "futures-util", - "md-5", - "path-slash", - "rayon", - "semver 1.0.23", - "serde", - "serde_json", - "serde_repr", - "thiserror", - "tokio", - "tracing", - "walkdir", - "yansi", -] - -[[package]] -name = "foundry-compilers-artifacts-vyper" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ecc61aa540bff773d4441a94e0f158769fcedd61f61d3e91608a76d6bcd7aa" -dependencies = [ - "alloy-json-abi", - "alloy-primitives", - "foundry-compilers-artifacts-solc", - "foundry-compilers-core", - "path-slash", - "semver 1.0.23", - "serde", -] - -[[package]] -name = "foundry-compilers-core" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a14603a33a217e64cc38977c215b01b37b48a0cae0a739a9f9b3555f16938704" -dependencies = [ - "alloy-primitives", - "cfg-if", - "dunce", - "memmap2", - "once_cell", - "path-slash", - "regex", - "semver 1.0.23", - "serde", - "serde_json", - "svm-rs", - "thiserror", - "tokio", - "walkdir", -] - -[[package]] -name = "foundry-config" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "Inflector", - "alloy-chains", - "alloy-primitives", - "dirs-next", - "dunce", - "eyre", - "figment", - "foundry-block-explorers", - "foundry-compilers", - "glob", - "globset", - "number_prefix", - "once_cell", - "path-slash", - "regex", - "reqwest", - "revm-primitives 7.1.0", - "semver 1.0.23", - "serde", - "serde_json", - "serde_regex", - "solang-parser", - "thiserror", - "toml", - "toml_edit 0.22.20", - "tracing", - "walkdir", -] - -[[package]] -name = "foundry-debugger" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-primitives", - "crossterm", - "eyre", - "foundry-common", - "foundry-compilers", - "foundry-evm-traces", - "ratatui", - "revm 12.1.0", - "revm-inspectors", - "serde", - "tracing", -] - -[[package]] -name = "foundry-evm" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-primitives", - "alloy-sol-types", - "eyre", - "foundry-cheatcodes", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-evm-core", - "foundry-evm-coverage", - "foundry-evm-fuzz", - "foundry-evm-traces", - "indicatif", - "parking_lot", - "proptest", - "revm 12.1.0", - "revm-inspectors", - "thiserror", - "tracing", -] - -[[package]] -name = "foundry-evm-abi" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-primitives", - "alloy-sol-types", - "derive_more", - "foundry-common-fmt", - "foundry-macros", - "itertools 0.13.0", - "once_cell", - "rustc-hash 2.0.0", -] - -[[package]] -name = "foundry-evm-core" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-dyn-abi", - "alloy-genesis", - "alloy-json-abi", - "alloy-primitives", - "alloy-provider", - "alloy-rpc-types", - "alloy-serde", - "alloy-sol-types", - "alloy-transport", - "auto_impl", - "eyre", - "foundry-cheatcodes-spec", - "foundry-common", - "foundry-config", - "foundry-evm-abi", - "foundry-fork-db", - "futures", - "itertools 0.13.0", - "parking_lot", - "revm 12.1.0", - "revm-inspectors", - "rustc-hash 2.0.0", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "foundry-evm-coverage" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-primitives", - "eyre", - "foundry-common", - "foundry-compilers", - "foundry-evm-core", - "rayon", - "revm 12.1.0", - "rustc-hash 2.0.0", - "semver 1.0.23", - "tracing", -] - -[[package]] -name = "foundry-evm-fuzz" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "ahash", - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-primitives", - "eyre", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-evm-core", - "foundry-evm-coverage", - "foundry-evm-traces", - "indexmap", - "itertools 0.13.0", - "parking_lot", - "proptest", - "rand", - "revm 12.1.0", - "serde", - "thiserror", - "tracing", -] - -[[package]] -name = "foundry-evm-traces" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-primitives", - "alloy-sol-types", - "eyre", - "foundry-block-explorers", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-evm-core", - "foundry-linking", - "futures", - "itertools 0.13.0", - "once_cell", - "rayon", - "revm 12.1.0", - "revm-inspectors", - "rustc-hash 2.0.0", - "serde", - "solang-parser", - "tempfile", - "tokio", - "tracing", -] - -[[package]] -name = "foundry-fork-db" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734f01574b6804ed6985d042684235c6c1007228eff8b2b488c260e3caf742d5" -dependencies = [ - "alloy-primitives", - "alloy-provider", - "alloy-rpc-types", - "alloy-serde", - "alloy-transport", - "eyre", - "futures", - "parking_lot", - "revm 12.1.0", - "rustc-hash 2.0.0", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "foundry-linking" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-primitives", - "foundry-compilers", - "semver 1.0.23", - "thiserror", -] - -[[package]] -name = "foundry-macros" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "foundry-wallets" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=c600237f3e54604274bfdcba627f347493fd21d2#c600237f3e54604274bfdcba627f347493fd21d2" -dependencies = [ - "alloy-consensus", - "alloy-dyn-abi", - "alloy-network", - "alloy-primitives", - "alloy-signer", - "alloy-signer-ledger", - "alloy-signer-local", - "alloy-signer-trezor", - "alloy-sol-types", - "async-trait", - "aws-sdk-kms", - "clap", - "derive_builder", - "eth-keystore", - "eyre", - "foundry-config", - "rpassword", - "serde", - "thiserror", - "tracing", -] - -[[package]] -name = "fs4" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e180ac76c23b45e767bd7ae9579bc0bb458618c4bc71835926e098e61d15f8" -dependencies = [ - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futures" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-executor" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "proc-macro2", + "quote", + "syn 2.0.76", ] [[package]] @@ -3427,6 +1574,24 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" +[[package]] +name = "fuzzy-matcher" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" +dependencies = [ + "thread_local", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -3445,10 +1610,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi", - "wasm-bindgen", ] [[package]] @@ -3463,19 +1626,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "globset" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" -dependencies = [ - "aho-corasick", - "bstr", - "log", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", -] - [[package]] name = "group" version = "0.13.0" @@ -3489,36 +1639,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.1.0", - "indexmap", + "http", + "indexmap 2.4.0", "slab", "tokio", "tokio-util", @@ -3526,14 +1657,10 @@ dependencies = [ ] [[package]] -name = "half" -version = "2.4.1" +name = "hashbrown" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" -dependencies = [ - "cfg-if", - "crunchy", -] +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" @@ -3573,18 +1700,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" -[[package]] -name = "hidapi-rusb" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efdc2ec354929a6e8f3c6b6923a4d97427ec2f764cfee8cd4bfe890946cdf08b" -dependencies = [ - "cc", - "libc", - "pkg-config", - "rusb", -] - [[package]] name = "hmac" version = "0.12.1" @@ -3594,26 +1709,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.1.0" @@ -3625,17 +1720,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - [[package]] name = "http-body" version = "1.0.1" @@ -3643,7 +1727,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http", ] [[package]] @@ -3654,47 +1738,23 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.1.0", - "http-body 1.0.1", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", + "http", + "http-body", "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", ] +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + [[package]] name = "hyper" version = "1.4.1" @@ -3704,9 +1764,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.5", - "http 1.1.0", - "http-body 1.0.1", + "h2", + "http", + "http-body", "httparse", "httpdate", "itoa", @@ -3716,22 +1776,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.30", - "log", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "tokio", - "tokio-rustls 0.24.1", -] - [[package]] name = "hyper-rustls" version = "0.27.2" @@ -3739,16 +1783,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" dependencies = [ "futures-util", - "http 1.1.0", - "hyper 1.4.1", + "http", + "hyper", "hyper-util", - "rustls 0.23.12", - "rustls-native-certs 0.7.1", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls", "tower-service", - "webpki-roots", ] [[package]] @@ -3759,7 +1801,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.4.1", + "hyper", "hyper-util", "native-tls", "tokio", @@ -3769,16 +1811,16 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", - "http-body 1.0.1", - "hyper 1.4.1", + "http", + "http-body", + "hyper", "pin-project-lite", "socket2", "tokio", @@ -3835,24 +1877,6 @@ dependencies = [ "parity-scale-codec", ] -[[package]] -name = "impl-rlp" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" -dependencies = [ - "rlp", -] - -[[package]] -name = "impl-serde" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" -dependencies = [ - "serde", -] - [[package]] name = "impl-trait-for-tuples" version = "0.2.2" @@ -3872,64 +1896,42 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" -dependencies = [ - "equivalent", - "hashbrown", -] - -[[package]] -name = "indicatif" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" -dependencies = [ - "console", - "instant", - "number_prefix", - "portable-atomic", - "unicode-width", -] - -[[package]] -name = "inlinable_string" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" - -[[package]] -name = "inout" -version = "0.1.3" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "generic-array", + "autocfg", + "hashbrown 0.12.3", + "serde", ] [[package]] -name = "instant" -version = "0.1.13" +name = "indexmap" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" dependencies = [ - "cfg-if", + "equivalent", + "hashbrown 0.14.5", + "serde", ] [[package]] -name = "interprocess" -version = "2.2.1" +name = "inquire" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f4e4a06d42fab3e85ab1b419ad32b09eab58b901d40c57935ff92db3287a13" +checksum = "0fddf93031af70e75410a2511ec04d49e758ed2f26dad3404a934e0fb45cc12a" dependencies = [ - "doctest-file", - "futures-core", - "libc", - "recvmsg", - "tokio", - "widestring", - "windows-sys 0.52.0", + "bitflags 2.6.0", + "crossterm", + "dyn-clone", + "fuzzy-matcher", + "fxhash", + "newline-converter", + "once_cell", + "tempfile", + "unicode-segmentation", + "unicode-width", ] [[package]] @@ -3938,17 +1940,6 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" -[[package]] -name = "is-terminal" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -3964,24 +1955,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.13.0" @@ -3998,38 +1971,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] -name = "js-sys" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "jsonpath_lib" -version = "0.3.0" +name = "jobserver" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ - "log", - "serde", - "serde_json", + "libc", ] [[package]] -name = "jsonwebtoken" -version = "9.3.0" +name = "js-sys" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ - "base64 0.21.7", - "js-sys", - "pem", - "ring", - "serde", - "serde_json", - "simple_asn1", + "wasm-bindgen", ] [[package]] @@ -4043,7 +1999,6 @@ dependencies = [ "elliptic-curve", "once_cell", "sha2", - "signature", ] [[package]] @@ -4057,9 +2012,9 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47a3633291834c4fbebf8673acbc1b04ec9d151418ff9b8e26dcd79129928758" +checksum = "422fbc7ff2f2f5bdffeb07718e5a5324dca72b0c9293d50df4026652385e3314" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -4067,8 +2022,8 @@ dependencies = [ [[package]] name = "kona-derive" -version = "0.0.3" -source = "git+https://github.com/ethereum-optimism/kona#19b00f3cf456775197a320aed9e900f110057d2f" +version = "0.0.2" +source = "git+https://github.com/ethereum-optimism/kona#edd7081acc321122889e99b352e05df8f255f058" dependencies = [ "alloc-no-stdlib", "alloy-consensus", @@ -4083,13 +2038,13 @@ dependencies = [ "async-trait", "brotli", "c-kzg", - "hashbrown", + "hashbrown 0.14.5", "kona-primitives", "lru", "miniz_oxide", "op-alloy-consensus", "reqwest", - "revm 13.0.0", + "revm", "serde", "sha2", "spin", @@ -4098,9 +2053,23 @@ dependencies = [ ] [[package]] -name = "kona-primitives" +name = "kona-mpt" version = "0.0.2" -source = "git+https://github.com/ethereum-optimism/kona#19b00f3cf456775197a320aed9e900f110057d2f" +source = "git+https://github.com/ethereum-optimism/kona#edd7081acc321122889e99b352e05df8f255f058" +dependencies = [ + "alloy-consensus", + "alloy-primitives", + "alloy-rlp", + "alloy-trie", + "anyhow", + "revm", + "tracing", +] + +[[package]] +name = "kona-primitives" +version = "0.0.1" +source = "git+https://github.com/ethereum-optimism/kona#edd7081acc321122889e99b352e05df8f255f058" dependencies = [ "alloy-consensus", "alloy-eips", @@ -4108,9 +2077,9 @@ dependencies = [ "alloy-rlp", "anyhow", "c-kzg", - "hashbrown", + "hashbrown 0.14.5", "op-alloy-consensus", - "revm 13.0.0", + "revm", "serde", "sha2", "spin", @@ -4133,36 +2102,6 @@ dependencies = [ "serde_yaml", ] -[[package]] -name = "lalrpop" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" -dependencies = [ - "ascii-canvas", - "bit-set", - "ena", - "itertools 0.11.0", - "lalrpop-util", - "petgraph", - "regex", - "regex-syntax 0.8.4", - "string_cache", - "term", - "tiny-keccak", - "unicode-xid", - "walkdir", -] - -[[package]] -name = "lalrpop-util" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" -dependencies = [ - "regex-automata 0.4.7", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -4174,9 +2113,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libm" @@ -4184,28 +2123,6 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.6.0", - "libc", -] - -[[package]] -name = "libusb1-sys" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da050ade7ac4ff1ba5379af847a10a10a8e284181e060105bf8d86960ce9ce0f" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -4222,12 +2139,6 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "lockfree-object-pool" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" - [[package]] name = "log" version = "0.4.22" @@ -4240,16 +2151,7 @@ version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" dependencies = [ - "hashbrown", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", + "hashbrown 0.14.5", ] [[package]] @@ -4258,16 +2160,6 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest 0.10.7", -] - [[package]] name = "memchr" version = "2.7.4" @@ -4275,21 +2167,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] -name = "memmap2" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.7.1" +name = "metrics" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +checksum = "884adb57038347dfbaf2d5065887b6cf4312330dc8e94bc30a1a839bd79d3261" dependencies = [ - "autocfg", + "ahash", + "portable-atomic", ] [[package]] @@ -4321,9 +2205,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi", "libc", @@ -4331,6 +2215,27 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "modular-bitfield" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" +dependencies = [ + "modular-bitfield-impl", + "static_assertions", +] + +[[package]] +name = "modular-bitfield-impl" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "native-tls" version = "0.2.12" @@ -4349,29 +2254,19 @@ dependencies = [ ] [[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "nix" -version = "0.26.4" +name = "newline-converter" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +checksum = "47b6b097ecb1cbfed438542d16e84fd7ad9b0c76c8a65b7f9039212a3d14dc7f" dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset", - "pin-utils", + "unicode-segmentation", ] [[package]] name = "nix" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -4428,16 +2323,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" -[[package]] -name = "num-format" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" -dependencies = [ - "arrayvec", - "itoa", -] - [[package]] name = "num-integer" version = "0.1.46" @@ -4502,27 +2387,12 @@ dependencies = [ name = "num_enum_derive" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.76", +] [[package]] name = "nybbles" @@ -4554,23 +2424,38 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "op-alloy-consensus" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d10e10cbbdb3931fed5109bbd570c0a6cf0ce08db1f93401cfb5cefc51998d1" +checksum = "e41c4537e76555df708c8372ec2c4254da9631eb129c2530f2baea00d645b422" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", "alloy-rlp", "alloy-serde", + "derive_more", "serde", ] +[[package]] +name = "op-alloy-network" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45aa09913f11e914fbd60535133d079529e726ad4605edd3d3047678d37b548" +dependencies = [ + "alloy-consensus", + "alloy-network", + "alloy-primitives", + "alloy-rpc-types-eth", + "op-alloy-consensus", + "op-alloy-rpc-types", +] + [[package]] name = "op-alloy-rpc-types" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9978c3d449abb03526d378988ae6d51b049ef36205cc97bf284574df9f578021" +checksum = "48bf0c126082234c15b6051c1f06d2d666adf68e7de305a5352022f06a84be78" dependencies = [ "alloy-network", "alloy-primitives", @@ -4586,13 +2471,12 @@ name = "op-test-vectors" version = "0.2.0" dependencies = [ "alloy-consensus", + "alloy-genesis", "alloy-primitives", - "alloy-rpc-types", "color-eyre", - "hashbrown", + "hashbrown 0.14.5", "kona-primitives", "op-alloy-consensus", - "op-alloy-rpc-types", "serde", "serde_json", ] @@ -4607,7 +2491,7 @@ dependencies = [ "clap", "color-eyre", "futures", - "hashbrown", + "hashbrown 0.14.5", "kona-derive", "kona-primitives", "op-test-vectors", @@ -4643,7 +2527,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -4668,45 +2552,42 @@ dependencies = [ name = "opt8n" version = "0.2.0" dependencies = [ + "alloy-consensus", "alloy-eips", + "alloy-genesis", "alloy-primitives", - "alloy-rpc-types", - "anvil", - "anvil-core", + "alloy-provider", + "alloy-rlp", + "alloy-transport", + "alloy-transport-http", + "alloy-trie", "axum", - "cast", "clap", "color-eyre", - "forge-script", - "foundry-common", + "ctrlc", "futures", - "http-body-util", - "hyper 1.4.1", + "hashbrown 0.14.5", + "inquire", + "itertools 0.13.0", + "kona-mpt", + "kona-primitives", "op-alloy-consensus", - "op-alloy-rpc-types", + "op-alloy-network", "op-test-vectors", "reqwest", - "revm 12.1.0", + "reth-chainspec", + "reth-evm", + "reth-evm-optimism", + "reth-primitives", + "revm", "serde", "serde_json", - "shellwords", - "thiserror", + "superchain-registry", "tokio", "tracing", + "tracing-subscriber", ] -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "outref" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a" - [[package]] name = "overload" version = "0.1.1" @@ -4749,6 +2630,7 @@ dependencies = [ "arrayvec", "bitvec", "byte-slice-cast", + "bytes", "impl-trait-for-tuples", "parity-scale-codec-derive", "serde", @@ -4795,73 +2677,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "path-slash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" - -[[package]] -name = "pbkdf2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest 0.10.7", - "hmac", -] - -[[package]] -name = "pear" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdeeaa00ce488657faba8ebf44ab9361f9365a97bd39ffb8a60663f57ff4b467" -dependencies = [ - "inlinable_string", - "pear_codegen", - "yansi", -] - -[[package]] -name = "pear_codegen" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bab5b985dc082b345f812b7df84e1bef27e7207b39e448439ba8bd69c93f147" -dependencies = [ - "proc-macro2", - "proc-macro2-diagnostics", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "pem" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" -dependencies = [ - "base64 0.22.1", - "serde", -] - -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.3.1" @@ -4879,77 +2694,6 @@ dependencies = [ "ucd-trie", ] -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pharos" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" -dependencies = [ - "futures", - "rustc_version 0.4.0", -] - -[[package]] -name = "phf" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" -dependencies = [ - "phf_macros", - "phf_shared 0.11.2", -] - -[[package]] -name = "phf_generator" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" -dependencies = [ - "phf_shared 0.11.2", - "rand", -] - -[[package]] -name = "phf_macros" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" -dependencies = [ - "phf_generator", - "phf_shared 0.11.2", - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" -dependencies = [ - "siphasher", -] - [[package]] name = "pin-project" version = "1.1.5" @@ -4967,7 +2711,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -5012,19 +2756,13 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee4364d9f3b902ef14fab8a1ddffb783a1cb6b4bba3bfc1fa3922732c7de97f" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy 0.6.6", + "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "primeorder" version = "0.13.6" @@ -5042,8 +2780,6 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec", - "impl-rlp", - "impl-serde", "uint", ] @@ -5089,19 +2825,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "proc-macro2-diagnostics" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", - "version_check", - "yansi", -] - [[package]] name = "proptest" version = "1.5.0" @@ -5116,100 +2839,23 @@ dependencies = [ "rand", "rand_chacha", "rand_xorshift", - "regex-syntax 0.8.4", + "regex-syntax", "rusty-fork", "tempfile", "unarray", ] -[[package]] -name = "proptest-derive" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf16337405ca084e9c78985114633b6827711d22b9e6ef6c6c0d665eb3f0b6e" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "protobuf" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65f4a8ec18723a734e5dc09c173e0abf9690432da5340285d536edcb4dac190" -dependencies = [ - "once_cell", - "protobuf-support", - "thiserror", -] - -[[package]] -name = "protobuf-support" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6872f4d4f4b98303239a2b5838f5bbbb77b01ffc892d627957f37a22d7cfe69c" -dependencies = [ - "thiserror", -] - [[package]] name = "quick-error" version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quinn" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ceeeeabace7857413798eb1ffa1e9c905a9946a57d81fb69b4b71c4d8eb3ad" -dependencies = [ - "bytes", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash 1.1.0", - "rustls 0.23.12", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "quinn-proto" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf517c03a109db8100448a4be38d498df8a210a99fe0e1b9eaf39e78c640efe" -dependencies = [ - "bytes", - "rand", - "ring", - "rustc-hash 1.1.0", - "rustls 0.23.12", - "slab", - "thiserror", - "tinyvec", - "tracing", -] - -[[package]] -name = "quinn-udp" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" -dependencies = [ - "libc", - "once_cell", - "socket2", - "windows-sys 0.52.0", -] - [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -5278,26 +2924,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "ratatui" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f44c9e68fd46eda15c646fbb85e1040b657a58cdc8c98db1d97a55930d991eef" -dependencies = [ - "bitflags 2.6.0", - "cassowary", - "compact_str", - "crossterm", - "itertools 0.12.1", - "lru", - "paste", - "stability", - "strum", - "unicode-segmentation", - "unicode-truncate", - "unicode-width", -] - [[package]] name = "rayon" version = "1.10.0" @@ -5312,82 +2938,21 @@ dependencies = [ name = "rayon-core" version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "recvmsg" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" - -[[package]] -name = "redox_syscall" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "redox_users" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" -dependencies = [ - "getrandom", - "libredox", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "regex-syntax 0.6.29", + "crossbeam-deque", + "crossbeam-utils", ] [[package]] -name = "regex-automata" -version = "0.4.7" +name = "redox_syscall" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.4", + "bitflags 2.6.0", ] -[[package]] -name = "regex-lite" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.8.4" @@ -5396,22 +2961,21 @@ checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "reqwest" -version = "0.12.5" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", - "futures-channel", "futures-core", "futures-util", - "h2 0.4.5", - "http 1.1.0", - "http-body 1.0.1", + "h2", + "http", + "http-body", "http-body-util", - "hyper 1.4.1", - "hyper-rustls 0.27.2", + "hyper", + "hyper-rustls", "hyper-tls", "hyper-util", "ipnet", @@ -5422,11 +2986,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "quinn", - "rustls 0.23.12", - "rustls-native-certs 0.7.1", - "rustls-pemfile 2.1.2", - "rustls-pki-types", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", @@ -5434,7 +2994,6 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.0", "tokio-util", "tower-service", "url", @@ -5442,141 +3001,443 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots", - "winreg", + "windows-registry", ] [[package]] -name = "revm" -version = "12.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cfb48bce8ca2113e157bdbddbd5eeb09daac1c903d79ec17085897c38c7c91" +name = "reth-chainspec" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" dependencies = [ + "alloy-chains", "alloy-eips", - "alloy-provider", - "alloy-transport", + "alloy-genesis", + "alloy-primitives", + "alloy-trie", "auto_impl", - "cfg-if", - "dyn-clone", - "revm-interpreter 8.1.0", - "revm-precompile 9.2.0", + "derive_more", + "once_cell", + "op-alloy-rpc-types", + "reth-ethereum-forks", + "reth-network-peers", + "reth-primitives-traits", + "reth-trie-common", "serde", "serde_json", - "tokio", ] [[package]] -name = "revm" -version = "13.0.0" -source = "git+https://github.com/bluealloy/revm#1ad860469755e3cf71383f45d71c3faaf61d3029" +name = "reth-codecs" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-trie", + "bytes", + "modular-bitfield", + "reth-codecs-derive", + "serde", +] + +[[package]] +name = "reth-codecs-derive" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 2.0.76", +] + +[[package]] +name = "reth-consensus" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" dependencies = [ "auto_impl", - "cfg-if", + "reth-primitives", + "thiserror-no-std", +] + +[[package]] +name = "reth-consensus-common" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "reth-chainspec", + "reth-consensus", + "reth-primitives", +] + +[[package]] +name = "reth-db-api" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "bytes", + "derive_more", + "metrics", + "modular-bitfield", + "parity-scale-codec", + "reth-codecs", + "reth-primitives", + "reth-primitives-traits", + "reth-prune-types", + "reth-stages-types", + "reth-storage-errors", + "reth-trie-common", + "serde", +] + +[[package]] +name = "reth-ethereum-forks" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "alloy-chains", + "alloy-primitives", + "alloy-rlp", + "auto_impl", + "crc", "dyn-clone", - "revm-interpreter 9.0.0", - "revm-precompile 10.0.0", + "once_cell", + "rustc-hash", "serde", + "thiserror-no-std", ] [[package]] -name = "revm-inspectors" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a785dafff303a335980e317669c4e9800cdd5dd2830c6880c3247022761e88" +name = "reth-evm" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "alloy-eips", + "auto_impl", + "futures-util", + "reth-chainspec", + "reth-execution-errors", + "reth-execution-types", + "reth-primitives", + "reth-prune-types", + "reth-storage-errors", + "revm", + "revm-primitives", +] + +[[package]] +name = "reth-evm-optimism" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "reth-chainspec", + "reth-ethereum-forks", + "reth-evm", + "reth-execution-errors", + "reth-execution-types", + "reth-optimism-consensus", + "reth-primitives", + "reth-prune-types", + "reth-revm", + "revm", + "revm-primitives", + "thiserror", + "tracing", +] + +[[package]] +name = "reth-execution-errors" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" dependencies = [ + "alloy-eips", "alloy-primitives", - "alloy-rpc-types", - "alloy-sol-types", - "anstyle", - "colorchoice", - "revm 12.1.0", + "alloy-rlp", + "nybbles", + "reth-consensus", + "reth-prune-types", + "reth-storage-errors", + "revm-primitives", + "thiserror-no-std", +] + +[[package]] +name = "reth-execution-types" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "reth-chainspec", + "reth-execution-errors", + "reth-primitives", + "reth-trie", + "revm", +] + +[[package]] +name = "reth-fs-util" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ "serde", "serde_json", "thiserror", ] [[package]] -name = "revm-interpreter" -version = "8.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b0daddea06fc6da5346acc39b32a357bbe3579e9e3d94117d9ae125cd596fc" +name = "reth-network-peers" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" dependencies = [ - "revm-primitives 7.1.0", - "serde", + "alloy-primitives", + "alloy-rlp", + "enr", + "serde_with", + "thiserror", + "url", ] [[package]] -name = "revm-interpreter" -version = "9.0.0" -source = "git+https://github.com/bluealloy/revm#1ad860469755e3cf71383f45d71c3faaf61d3029" +name = "reth-optimism-consensus" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" dependencies = [ - "revm-primitives 8.0.0", - "serde", + "reth-chainspec", + "reth-consensus", + "reth-consensus-common", + "reth-primitives", + "tracing", ] [[package]] -name = "revm-precompile" -version = "9.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef55228211251d7b6c7707c3ee13bb70dea4d2fd81ec4034521e4fe31010b2ea" +name = "reth-primitives" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" dependencies = [ - "aurora-engine-modexp", - "blst", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types", + "bytes", "c-kzg", - "cfg-if", + "derive_more", "k256", + "modular-bitfield", "once_cell", - "p256", - "revm-primitives 7.1.0", - "ripemd", + "rayon", + "reth-chainspec", + "reth-codecs", + "reth-ethereum-forks", + "reth-primitives-traits", + "reth-static-file-types", + "reth-trie-common", + "revm-primitives", "secp256k1", - "sha2", - "substrate-bn", + "serde", + "tempfile", + "thiserror", + "zstd", ] [[package]] -name = "revm-precompile" -version = "10.0.0" -source = "git+https://github.com/bluealloy/revm#1ad860469755e3cf71383f45d71c3faaf61d3029" +name = "reth-primitives-traits" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" dependencies = [ - "aurora-engine-modexp", - "c-kzg", - "cfg-if", - "k256", - "once_cell", - "revm-primitives 8.0.0", - "ripemd", - "sha2", - "substrate-bn", + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-eth", + "byteorder", + "bytes", + "derive_more", + "modular-bitfield", + "reth-codecs", + "revm-primitives", + "roaring", + "serde", ] [[package]] -name = "revm-primitives" -version = "7.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc4311037ee093ec50ec734e1424fcb3e12d535c6cef683b75d1c064639630c" +name = "reth-prune-types" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "alloy-primitives", + "bytes", + "derive_more", + "modular-bitfield", + "reth-codecs", + "serde", + "thiserror", +] + +[[package]] +name = "reth-revm" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" dependencies = [ "alloy-eips", + "reth-chainspec", + "reth-consensus-common", + "reth-execution-errors", + "reth-primitives", + "reth-prune-types", + "reth-storage-api", + "reth-storage-errors", + "revm", +] + +[[package]] +name = "reth-stages-types" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "alloy-primitives", + "bytes", + "modular-bitfield", + "reth-codecs", + "reth-trie-common", + "serde", +] + +[[package]] +name = "reth-static-file-types" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ "alloy-primitives", + "derive_more", + "serde", + "strum", +] + +[[package]] +name = "reth-storage-api" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ "auto_impl", - "bitflags 2.6.0", - "bitvec", - "c-kzg", - "cfg-if", + "reth-chainspec", + "reth-db-api", + "reth-execution-types", + "reth-primitives", + "reth-prune-types", + "reth-stages-types", + "reth-storage-errors", + "reth-trie", + "revm", +] + +[[package]] +name = "reth-storage-errors" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "alloy-rlp", + "reth-fs-util", + "reth-primitives", + "thiserror-no-std", +] + +[[package]] +name = "reth-trie" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "alloy-rlp", + "auto_impl", + "derive_more", + "itertools 0.13.0", + "rayon", + "reth-execution-errors", + "reth-primitives", + "reth-stages-types", + "reth-storage-errors", + "reth-trie-common", + "revm", + "tracing", +] + +[[package]] +name = "reth-trie-common" +version = "1.0.5" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.0.5#603e39ab74509e0863fc023461a4c760fb2126d1" +dependencies = [ + "alloy-consensus", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-trie", + "bytes", "derive_more", + "itertools 0.13.0", + "nybbles", + "reth-codecs", + "reth-primitives-traits", + "revm-primitives", + "serde", +] + +[[package]] +name = "revm" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b2f635bbbf4002b1b5c0219f841ec1a317723883ed7662c0d138617539a6087" +dependencies = [ + "alloy-eips", + "alloy-provider", + "alloy-transport", + "auto_impl", + "cfg-if", "dyn-clone", - "enumn", - "hashbrown", - "hex", - "kzg-rs", - "once_cell", + "revm-interpreter", + "revm-precompile", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "revm-interpreter" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ad04c7d87dc3421a5ccca76e56dbd0b29a358c03bb41fe9e80976e9d3f397d" +dependencies = [ + "revm-primitives", "serde", ] +[[package]] +name = "revm-precompile" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526a4ba5ec400e7bbe71affbc10fe2e67c1cd1fb782bab988873d09a102e271" +dependencies = [ + "aurora-engine-modexp", + "blst", + "c-kzg", + "cfg-if", + "k256", + "once_cell", + "p256", + "revm-primitives", + "ripemd", + "secp256k1", + "sha2", + "substrate-bn", +] + [[package]] name = "revm-primitives" version = "8.0.0" -source = "git+https://github.com/bluealloy/revm#1ad860469755e3cf71383f45d71c3faaf61d3029" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4093d98a26601f0a793871c5bc7928410592f76b1f03fc89fde77180c554643c" dependencies = [ "alloy-eips", "alloy-primitives", @@ -5588,7 +3449,7 @@ dependencies = [ "derive_more", "dyn-clone", "enumn", - "hashbrown", + "hashbrown 0.14.5", "hex", "kzg-rs", "once_cell", @@ -5640,24 +3501,13 @@ dependencies = [ ] [[package]] -name = "rpassword" -version = "7.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" -dependencies = [ - "libc", - "rtoolbox", - "windows-sys 0.48.0", -] - -[[package]] -name = "rtoolbox" -version = "0.0.2" +name = "roaring" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +checksum = "8f4b84ba6e838ceb47b41de5194a60244fac43d9fe03b71dbe8c5a201081d6d1" dependencies = [ - "libc", - "windows-sys 0.48.0", + "bytemuck", + "byteorder", ] [[package]] @@ -5667,7 +3517,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" dependencies = [ "alloy-rlp", - "arbitrary", "ark-ff 0.3.0", "ark-ff 0.4.2", "bytes", @@ -5691,28 +3540,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" -[[package]] -name = "rusb" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab9f9ff05b63a786553a4c02943b74b34a988448671001e9a27e2f0565cc05a4" -dependencies = [ - "libc", - "libusb1-sys", -] - [[package]] name = "rustc-demangle" version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hash" version = "2.0.0" @@ -5756,18 +3589,6 @@ dependencies = [ "windows-sys 0.52.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.12" @@ -5775,52 +3596,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" dependencies = [ "once_cell", - "ring", "rustls-pki-types", - "rustls-webpki 0.102.6", + "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", -] - -[[package]] -name = "rustls-native-certs" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.1.2", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" dependencies = [ "base64 0.22.1", "rustls-pki-types", @@ -5828,19 +3614,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" - -[[package]] -name = "rustls-webpki" -version = "0.101.7" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] name = "rustls-webpki" @@ -5877,24 +3653,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" -[[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -dependencies = [ - "cipher", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "schannel" version = "0.1.23" @@ -5910,28 +3668,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scrypt" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" -dependencies = [ - "hmac", - "pbkdf2 0.11.0", - "salsa20", - "sha2", -] - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sec1" version = "0.7.3" @@ -6002,9 +3738,6 @@ name = "semver" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" -dependencies = [ - "serde", -] [[package]] name = "semver-parser" @@ -6015,39 +3748,33 @@ dependencies = [ "pest", ] -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" - [[package]] name = "serde" -version = "1.0.204" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] name = "serde_json" -version = "1.0.122" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" +checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" dependencies = [ - "indexmap", + "indexmap 2.4.0", "itoa", "memchr", "ryu", @@ -6064,16 +3791,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_regex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8136f1a4ea815d7eac4101cfd0b16dc0cb5e1fe1b8609dfd728058656b7badf" -dependencies = [ - "regex", - "serde", -] - [[package]] name = "serde_repr" version = "0.1.19" @@ -6082,7 +3799,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -6106,30 +3823,49 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.4.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.76", +] + [[package]] name = "serde_yaml" version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap", + "indexmap 2.4.0", "itoa", "ryu", "serde", "unsafe-libyaml", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - [[package]] name = "sha2" version = "0.10.8" @@ -6153,9 +3889,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b57fd861253bff08bb1919e995f90ba8f4889de2726091c8876f3a4e823b40" +checksum = "57d79b758b7cb2085612b11a235055e485605a5103faccdd633f35bd7aee69dd" dependencies = [ "cc", "cfg-if", @@ -6171,20 +3907,10 @@ dependencies = [ ] [[package]] -name = "shell-words" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" - -[[package]] -name = "shellwords" -version = "1.1.0" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e515aa4699a88148ed5ef96413ceef0048ce95b43fbc955a33bde0a70fcae6" -dependencies = [ - "lazy_static", - "regex", -] +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook" @@ -6226,30 +3952,6 @@ dependencies = [ "rand_core", ] -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - -[[package]] -name = "simple_asn1" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" -dependencies = [ - "num-bigint", - "num-traits", - "thiserror", - "time", -] - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - [[package]] name = "slab" version = "0.4.9" @@ -6264,6 +3966,9 @@ name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] [[package]] name = "socket2" @@ -6275,20 +3980,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "solang-parser" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" -dependencies = [ - "itertools 0.11.0", - "lalrpop", - "lalrpop-util", - "phf", - "thiserror", - "unicode-xid", -] - [[package]] name = "spin" version = "0.9.8" @@ -6308,35 +3999,12 @@ dependencies = [ "der", ] -[[package]] -name = "stability" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" -dependencies = [ - "quote", - "syn 2.0.72", -] - [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", -] - [[package]] name = "strsim" version = "0.11.1" @@ -6362,7 +4030,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -6406,7 +4074,7 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acc582cdafa06eb8593303a94cc216d6f54ae6c10fabf80f4c13cb7ea6e127ff" dependencies = [ - "hashbrown", + "hashbrown 0.14.5", "lazy_static", "serde", "serde_repr", @@ -6414,39 +4082,6 @@ dependencies = [ "toml", ] -[[package]] -name = "svm-rs" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af5910befd515534a92e9424f250d952fe6f6dba6a92bd001dfeba1fb4a2f87c" -dependencies = [ - "const-hex", - "dirs", - "fs4", - "once_cell", - "reqwest", - "semver 1.0.23", - "serde", - "serde_json", - "sha2", - "thiserror", - "url", - "zip", -] - -[[package]] -name = "svm-rs-builds" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d5ea000fdbeab0b2739315f9093c75ea63030e5c44f92daa72401d11b48adda" -dependencies = [ - "build_const", - "const-hex", - "semver 1.0.23", - "serde_json", - "svm-rs", -] - [[package]] name = "syn" version = "1.0.109" @@ -6460,9 +4095,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.72" +version = "2.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" dependencies = [ "proc-macro2", "quote", @@ -6478,7 +4113,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -6492,23 +4127,26 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -6522,35 +4160,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", "fastrand", + "once_cell", "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "term" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" -dependencies = [ - "dirs-next", - "rustversion", - "winapi", -] - -[[package]] -name = "terminal_size" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" -dependencies = [ - "rustix", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -6570,46 +4188,46 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] -name = "thread_local" -version = "1.1.8" +name = "thiserror-impl-no-std" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "58e6318948b519ba6dc2b442a6d0b904ebfb8d411a3ad3e07843615a72249758" dependencies = [ - "cfg-if", - "once_cell", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "threadpool" -version = "1.8.1" +name = "thiserror-no-std" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +checksum = "a3ad459d94dd517257cc96add8a43190ee620011bb6e6cdc82dafd97dfafafea" dependencies = [ - "num_cpus", + "thiserror-impl-no-std", ] [[package]] -name = "tikv-jemalloc-sys" -version = "0.5.4+5.3.0-patched" +name = "thread_local" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ - "cc", - "libc", + "cfg-if", + "once_cell", ] [[package]] -name = "tikv-jemallocator" -version = "0.5.4" +name = "threadpool" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965fe0c26be5c56c94e38ba547249074803efd52adfb66de62107d95aab3eaca" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" dependencies = [ - "libc", - "tikv-jemalloc-sys", + "num_cpus", ] [[package]] @@ -6620,9 +4238,7 @@ checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", - "libc", "num-conv", - "num_threads", "powerfmt", "serde", "time-core", @@ -6671,14 +4287,14 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.2" +version = "1.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" dependencies = [ "backtrace", "bytes", "libc", - "mio 1.0.1", + "mio 1.0.2", "parking_lot", "pin-project-lite", "signal-hook-registry", @@ -6695,7 +4311,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -6708,23 +4324,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.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.12", + "rustls", "rustls-pki-types", "tokio", ] @@ -6741,34 +4347,6 @@ dependencies = [ "tokio-util", ] -[[package]] -name = "tokio-tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite 0.21.0", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" -dependencies = [ - "futures-util", - "log", - "rustls 0.23.12", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.26.0", - "tungstenite 0.23.0", - "webpki-roots", -] - [[package]] name = "tokio-util" version = "0.7.11" @@ -6788,7 +4366,6 @@ version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ - "indexmap", "serde", "serde_spanned", "toml_datetime", @@ -6810,7 +4387,7 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap", + "indexmap 2.4.0", "toml_datetime", "winnow 0.5.40", ] @@ -6821,7 +4398,7 @@ version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ - "indexmap", + "indexmap 2.4.0", "serde", "serde_spanned", "toml_datetime", @@ -6844,34 +4421,17 @@ dependencies = [ "tracing", ] -[[package]] -name = "tower-http" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" -dependencies = [ - "bitflags 2.6.0", - "bytes", - "http 1.1.0", - "http-body 1.0.1", - "http-body-util", - "pin-project-lite", - "tower-layer", - "tower-service", - "tracing", -] - [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -6893,7 +4453,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -6933,77 +4493,20 @@ version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ - "matchers", "nu-ansi-term", - "once_cell", - "regex", "sharded-slab", "smallvec", "thread_local", - "tracing", "tracing-core", "tracing-log", ] -[[package]] -name = "trezor-client" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10636211ab89c96ed2824adc5ec0d081e1080aeacc24c37abb318dcb31dcc779" -dependencies = [ - "byteorder", - "hex", - "protobuf", - "rusb", - "thiserror", - "tracing", -] - [[package]] name = "try-lock" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 1.1.0", - "httparse", - "log", - "rand", - "sha1", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "tungstenite" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 1.1.0", - "httparse", - "log", - "rand", - "rustls 0.23.12", - "rustls-pki-types", - "sha1", - "thiserror", - "utf-8", -] - [[package]] name = "typenum" version = "1.17.0" @@ -7022,7 +4525,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ - "arbitrary", "byteorder", "crunchy", "hex", @@ -7035,24 +4537,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" -[[package]] -name = "uncased" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicase" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.15" @@ -7080,29 +4564,12 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" -[[package]] -name = "unicode-truncate" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" -dependencies = [ - "itertools 0.13.0", - "unicode-segmentation", - "unicode-width", -] - [[package]] name = "unicode-width" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - [[package]] name = "unsafe-libyaml" version = "0.2.11" @@ -7132,34 +4599,12 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom", - "serde", -] - -[[package]] -name = "uuid" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" - [[package]] name = "valuable" version = "0.1.0" @@ -7172,30 +4617,12 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "vergen" -version = "8.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2990d9ea5967266ea0ccf413a4aa5c42a93dbcfda9cb49a97de6931726b12566" -dependencies = [ - "anyhow", - "cfg-if", - "rustversion", - "time", -] - [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "vsimd" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" - [[package]] name = "wait-timeout" version = "0.2.0" @@ -7205,16 +4632,6 @@ dependencies = [ "libc", ] -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -7232,34 +4649,35 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -7269,9 +4687,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7279,22 +4697,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wasm-streams" @@ -7311,29 +4729,14 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", ] -[[package]] -name = "webpki-roots" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "widestring" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" - [[package]] name = "winapi" version = "0.3.9" @@ -7350,15 +4753,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -7374,6 +4768,36 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -7392,6 +4816,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -7531,35 +4964,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "ws_stream_wasm" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" -dependencies = [ - "async_io_stream", - "futures", - "js-sys", - "log", - "pharos", - "rustc_version 0.4.0", - "send_wrapper", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "wyz" version = "0.5.1" @@ -7569,43 +4973,14 @@ dependencies = [ "tap", ] -[[package]] -name = "yansi" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" -dependencies = [ - "is-terminal", -] - -[[package]] -name = "zerocopy" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854e949ac82d619ee9a14c66a1b674ac730422372ccb759ce0c39cabcf2bf8e6" -dependencies = [ - "byteorder", - "zerocopy-derive 0.6.6", -] - [[package]] name = "zerocopy" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy-derive" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125139de3f6b9d625c39e2efdd73d41bdac468ccd556556440e322be0e1bbd91" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "byteorder", + "zerocopy-derive", ] [[package]] @@ -7616,7 +4991,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -7636,36 +5011,33 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] -name = "zip" -version = "2.1.6" +name = "zstd" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40dd8c92efc296286ce1fbd16657c5dbefff44f1b4ca01cc5f517d8b7b3d3e2e" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" dependencies = [ - "arbitrary", - "crc32fast", - "crossbeam-utils", - "displaydoc", - "flate2", - "indexmap", - "memchr", - "thiserror", - "zopfli", + "zstd-safe", ] [[package]] -name = "zopfli" -version = "0.8.1" +name = "zstd-safe" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" dependencies = [ - "bumpalo", - "crc32fast", - "lockfree-object-pool", - "log", - "once_cell", - "simd-adler32", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 73df50b..2a066c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,24 +30,26 @@ hashbrown = "0.14.5" # Alloy Dependencies op-alloy-rpc-types = "0.1.4" op-alloy-consensus = "0.1.4" +op-alloy-network = "0.1.5" +alloy-rlp = { version = "0.3.8" } alloy-primitives = { version = "0.7" } alloy-consensus = { version = "0.2" } alloy-eips = { version = "0.2" } alloy-rpc-types = { version = "0.2" } +alloy-genesis = "0.2" -# Foundry Dependencies -foundry-common = { git = "https://github.com/foundry-rs/foundry", default-features = true, rev = "c600237f3e54604274bfdcba627f347493fd21d2" } -foundry-compilers = { git = "https://github.com/foundry-rs/foundry", default-features = true, rev = "c600237f3e54604274bfdcba627f347493fd21d2" } -anvil = { git = "https://github.com/foundry-rs/foundry", default-features = true, rev = "c600237f3e54604274bfdcba627f347493fd21d2" } -anvil-core = { git = "https://github.com/foundry-rs/foundry", default-features = true, rev = "c600237f3e54604274bfdcba627f347493fd21d2" } -cast = { git = "https://github.com/foundry-rs/foundry", rev = "c600237f3e54604274bfdcba627f347493fd21d2" } -forge-script = { git = "https://github.com/foundry-rs/foundry", rev = "c600237f3e54604274bfdcba627f347493fd21d2" } -revm = { version = "12.1", features = ["alloydb", "optimism"] } +# revm + reth +revm = { version = "13.0", features = ["optimism", "serde"] } +reth-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.0.5" } +reth-evm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.0.5" } +reth-evm-optimism = { git = "https://github.com/paradigmxyz/reth", tag = "v1.0.5", features = ["optimism"] } +reth-chainspec = { git = "https://github.com/paradigmxyz/reth", tag = "v1.0.5", features = ["optimism"] } # Kona + OP Types superchain-registry = "0.2.6" -kona-primitives = { git = "https://github.com/ethereum-optimism/kona", version = "0.0.2", features = ["online"] } -kona-derive = { git = "https://github.com/ethereum-optimism/kona", version = "0.0.3", features = ["online"] } +kona-primitives = { git = "https://github.com/ethereum-optimism/kona", version = "0.0.1", features = ["online"] } +kona-derive = { git = "https://github.com/ethereum-optimism/kona", version = "0.0.2", features = ["online"] } +kona-mpt = { git = "https://github.com/ethereum-optimism/kona", version = "0.0.2" } # Internal op-test-vectors = { path = "crates/op-test-vectors" } diff --git a/Justfile b/Justfile index d8e6c5b..729f759 100644 --- a/Justfile +++ b/Justfile @@ -53,3 +53,89 @@ build *args='': # Generates all test fixtures for scripts in examples/exec-scripts gen fork_url: @just ./examples/exec-scripts/gen {{fork_url}} + +# Install the devnet +install-devnet: + #!/bin/bash + + if [ -d "./devnet" ]; then + exit 0 + fi + + git clone https://github.com/ethpandaops/optimism-package && mv optimism-package devnet + + T8N_NETWORK_PARAMS=$(cat <<- "EOM" + optimism_package: + participants: + - el_type: op-geth + cl_type: op-node + network_params: + seconds_per_slot: 2 + network_id: 1337 + ethereum_package: + participants: + - el_type: reth + cl_type: lighthouse + network_params: + preset: minimal + EOM + ) + printf "%s" "$T8N_NETWORK_PARAMS" > ./devnet/network_params.yaml + +# Start the devnet +start-devnet: + #!/bin/bash + + SCRIPT_DIR=$( pwd ) + KURTOSIS_DIR="$SCRIPT_DIR/devnet" + + # Exit if Kurtosis is already running + kurtosis enclave inspect devnet && exit 0 + + echo "Starting Kurtosis network..." + cd "$KURTOSIS_DIR" || exit 1 + kurtosis clean -a + kurtosis run --enclave devnet . --args-file ./network_params.yaml + + echo "Returning to opt8n..." + cd "$SCRIPT_DIR" || exit 1 + +# Stop the devnet +stop-devnet: + #!/bin/bash + kurtosis clean -a + +# Run t8n +t8n fixture_name='fixture': install-devnet start-devnet + #!/bin/bash + + SCRIPT_DIR=$( pwd ) + T8N_PATH="$SCRIPT_DIR/target/release/opt8n" + + echo "Building opt8n..." + cargo build --bin opt8n --release + + # Download L2 genesis configs and contract addresses + echo "Downloading L2 genesis configs and contract addresses from devnet..." + kurtosis files download devnet op-genesis-configs + + OPTIMISM_PORTAL_PROXY=$(jq -r .OptimismPortalProxy ./op-genesis-configs/kurtosis.json) + GENESIS="./op-genesis-configs/genesis.json" + + L1_PORT=$(kurtosis enclave inspect devnet | grep 'el-1-reth-lighthouse' -A5 | grep " rpc:" | awk -F ' -> ' '{print $2}' | awk -F ':' '{print $2}' | tr -d ' \n\r') + L2_PORT=$(kurtosis enclave inspect devnet | grep 'op-el-1-op-geth-op-node' -A5 | grep " rpc:" | awk -F ' -> ' '{print $2}' | awk -F ':' '{print $3}' | tr -d ' \n\r') + + $T8N_PATH \ + --l1-port "$L1_PORT" \ + --l2-port "$L2_PORT" \ + -o "$OPTIMISM_PORTAL_PROXY" \ + --l2-genesis "$GENESIS" \ + --output "./$@.json" + + # Compress the execution fixture + echo "Compressing new execution fixture..." + gzip "$@.json" + mv "$@.json.gz" "./fixtures/execution" + + echo "Cleaning up genesis + configs..." + rm -rf ./op-genesis-configs diff --git a/bin/opt8n/Cargo.toml b/bin/opt8n/Cargo.toml index b297c89..9bddf21 100644 --- a/bin/opt8n/Cargo.toml +++ b/bin/opt8n/Cargo.toml @@ -10,36 +10,46 @@ publish = false [dependencies] # Core +hashbrown.workspace = true serde.workspace = true -serde_json.workspace = true tracing.workspace = true +serde_json.workspace = true tokio.workspace = true +reqwest.workspace = true futures.workspace = true color-eyre.workspace = true -axum = "0.7.5" -http-body-util = "0.1.2" - +tracing-subscriber.workspace = true +itertools = "0.13" # CLI clap.workspace = true -shellwords.workspace = true +inquire = { version = "0.7.5", features = ["editor"] } +axum = "0.7" +ctrlc = "3.4" # Alloy -alloy-eips.workspace = true -alloy-rpc-types.workspace = true alloy-primitives.workspace = true +alloy-rlp.workspace = true +alloy-consensus.workspace = true +alloy-eips.workspace = true +alloy-transport = "0.2" +alloy-provider = "0.2" +alloy-transport-http = "0.2" +alloy-trie = "0.4.1" +alloy-genesis.workspace = true +op-alloy-consensus.workspace = true +op-alloy-network.workspace = true -# Foundry -foundry-common.workspace = true -anvil.workspace = true -anvil-core.workspace = true -cast.workspace = true -forge-script.workspace = true -revm.workspace = true - -# OP Types +# OP Types + Kona op-test-vectors.workspace = true -op-alloy-rpc-types.workspace = true -op-alloy-consensus.workspace = true -thiserror.workspace = true -reqwest.workspace = true -hyper = "1.4.1" +kona-primitives.workspace = true +kona-mpt.workspace = true +superchain-registry.workspace = true + +# reth +reth-primitives = { workspace = true, features = ["optimism"] } +reth-evm.workspace = true +reth-evm-optimism.workspace = true +reth-chainspec.workspace = true + +# revm +revm = { workspace = true, features = ["optimism", "alloydb"] } diff --git a/bin/opt8n/README.md b/bin/opt8n/README.md new file mode 100644 index 0000000..a21b1c9 --- /dev/null +++ b/bin/opt8n/README.md @@ -0,0 +1,3 @@ +# `opt8n` + +A CLI-tool for creating execution test fixtures. diff --git a/bin/opt8n/opt8n.sh b/bin/opt8n/opt8n.sh new file mode 100755 index 0000000..3a1d713 --- /dev/null +++ b/bin/opt8n/opt8n.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +T8N_PATH="$SCRIPT_DIR/../../target/release/opt8n" +T8N_NETWORK_PARAMS=$(cat <<- EOM +optimism_package: + participants: + - el_type: op-geth + cl_type: op-node + additional_services: + - blockscout + network_params: + seconds_per_slot: 2 + network_id: 1337 +ethereum_package: + participants: + - el_type: reth + cl_type: lighthouse + network_params: + preset: minimal +EOM +) + +echo "Building opt8n..." +cargo build --bin opt8n --release + +echo "Starting Kurtosis network..." +cd "$KURTOSIS_DIR" || exit 1 +kurtosis clean -a +echo "$T8N_NETWORK_PARAMS" > ./network_params.yaml +kurtosis run --enclave devnet . --args-file ./network_params.yaml + +echo "Returning to opt8n..." +cd "$SCRIPT_DIR" || exit 1 + +# Download L2 genesis configs and contract addresses +echo "Downloading L2 genesis configs and contract addresses from devnet..." +kurtosis files download devnet op-genesis-configs + +OPTIMISM_PORTAL_PROXY=$(jq -r .OptimismPortalProxy ./op-genesis-configs/kurtosis.json) +GENESIS="./op-genesis-configs/genesis.json" + +L1_PORT=$(kurtosis enclave inspect devnet | grep 'el-1-reth-lighthouse' -A5 | grep " rpc:" | awk -F ' -> ' '{print $2}' | awk -F ':' '{print $2}' | tr -d ' \n\r') +L2_PORT=$(kurtosis enclave inspect devnet | grep 'op-el-1-op-geth-op-node' -A5 | grep " rpc:" | awk -F ' -> ' '{print $2}' | awk -F ':' '{print $3}' | tr -d ' \n\r') + +$T8N_PATH "$L1_PORT" --l2-port "$L2_PORT" -o "$OPTIMISM_PORTAL_PROXY" --l2-genesis "$GENESIS" + +echo "Cleaning up genesis + configs..." +rm -rf ./op-genesis-configs diff --git a/bin/opt8n/src/cli/deposits.rs b/bin/opt8n/src/cli/deposits.rs new file mode 100644 index 0000000..198c923 --- /dev/null +++ b/bin/opt8n/src/cli/deposits.rs @@ -0,0 +1,130 @@ +//! Deposit capture tool for `opt8n`. + +use super::Cli; +use alloy_consensus::{Eip658Value, Receipt}; +use alloy_primitives::{b256, keccak256, Address, Bytes, Log, B256}; +use alloy_provider::{network::Ethereum, Provider, ReqwestProvider, RootProvider}; +use color_eyre::eyre::{eyre, Result}; +use kona_primitives::{decode_deposit, DEPOSIT_EVENT_ABI_HASH}; +use reqwest::Url; +use tokio::sync::broadcast::Sender; +use tracing::info; + +/// keccak256("t8n") +const T8N_L1_SOURCE_HASH: B256 = + b256!("60b82a553424b66356596123f87f40cc9a453c02816a147e9418b49a373fa41a"); + +/// The deposit capture proxy for `opt8n`. +#[derive(Debug)] +pub struct DepositCapture<'a> { + /// The CLI configuration for `opt8n` + pub(crate) cli: &'a Cli, + /// The interrupt receiver for the deposit configurator. + pub(crate) interrupt: Sender<()>, + /// The RLP-encoded transactions to apply to the genesis state to create the deposit. + pub(crate) transactions: Vec, +} + +impl<'a> DepositCapture<'a> { + /// Create a new deposit configurator. + pub(crate) fn new(cli: &'a Cli, interrupt: Sender<()>) -> Self { + Self { + cli, + interrupt, + transactions: Vec::new(), + } + } + + /// Opens a proxy to the L1 chain and captures the deposit transactions. + pub(crate) async fn capture_deposits(&mut self) -> Result<()> { + info!( + target: "opt8n", "Capturing deposit transactions sent to the L1 chain's `OptimismPortal`..." + ); + + // Capture the deposit transactions sent to the L1 node. + let transactions = + crate::proxy::capture_transactions(3000, self.cli.l1_port, self.interrupt.subscribe()) + .await?; + + // Fetch all receipts for the deposit transactions from the L1. + let l1_rpc_url = format!("http://localhost:{}", self.cli.l1_port); + let l1_provider: RootProvider<_, Ethereum> = + ReqwestProvider::new_http(Url::parse(&l1_rpc_url)?); + let mut receipts = Vec::new(); + for tx in transactions { + let tx_hash = keccak256(tx.as_ref()); + + // Fetch RPC receipt. + let rpc_receipt = l1_provider + .get_transaction_receipt(tx_hash) + .await? + .ok_or(eyre!( + "Transaction receipt not found for transaction hash: {:?}", + tx_hash + ))?; + let receipt_rpc_logs = rpc_receipt.inner.as_receipt().ok_or(eyre!( + "Receipt not found for transaction hash: {:?}", + tx_hash + ))?; + + // Convert to consensus receipt. + let receipt: Receipt = Receipt { + status: receipt_rpc_logs.status, + cumulative_gas_used: receipt_rpc_logs.cumulative_gas_used, + logs: receipt_rpc_logs + .logs + .iter() + .map(|l| Log { + address: l.address(), + data: l.data().clone(), + }) + .collect(), + }; + + receipts.push(receipt); + } + + // Derive the deposit transactions from the OptimismPortal `depositTransaction` receipts. + let deposits = Self::derive_deposits( + T8N_L1_SOURCE_HASH, + receipts, + self.cli.optimism_portal_address, + )?; + + self.transactions.extend(deposits); + Ok(()) + } + + /// Derive the deposit transactions from the OptimismPortal `depositTransaction` receipts. + fn derive_deposits( + block_hash: B256, + receipts: Vec, + deposit_contract: Address, + ) -> Result> { + let mut global_index = 0; + let mut res = Vec::new(); + for r in receipts.iter() { + if Eip658Value::Eip658(false) == r.status { + continue; + } + for l in r.logs.iter() { + let curr_index = global_index; + global_index += 1; + if !l + .data + .topics() + .first() + .map_or(false, |i| *i == DEPOSIT_EVENT_ABI_HASH) + { + continue; + } + if l.address != deposit_contract { + continue; + } + let decoded = decode_deposit(block_hash, curr_index, l).map_err(|e| eyre!(e))?; + res.push(decoded.0); + } + } + Ok(res) + } +} diff --git a/bin/opt8n/src/cli/mod.rs b/bin/opt8n/src/cli/mod.rs new file mode 100644 index 0000000..d1d5bbb --- /dev/null +++ b/bin/opt8n/src/cli/mod.rs @@ -0,0 +1,66 @@ +//! The CLI for `opt8n` + +use alloy_primitives::Address; +use clap::{ArgAction, Parser}; +use color_eyre::eyre::{eyre, Result}; +use std::path::PathBuf; +use t8n::T8n; +use tokio::sync::broadcast::{self}; +use tracing::Level; + +pub(crate) mod deposits; +pub(crate) mod state; +pub(crate) mod t8n; + +/// The root CLI for `opt8n` +#[derive(Parser, Clone, Debug, Default, Eq, PartialEq)] +pub(crate) struct Cli { + /// Verbosity level (0-2) + #[arg(long, short, action = ArgAction::Count)] + pub(crate) v: u8, + /// The port of the L1 execution layer node. + #[arg(long)] + pub(crate) l1_port: u16, + /// The port of the L2 execution layer node. + #[arg(long)] + pub(crate) l2_port: u16, + /// The path to the L2 genesis file. + #[arg(long)] + pub(crate) l2_genesis: PathBuf, + /// The address of the OptimismPortal contract on the L1 chain. + #[arg(long, short)] + pub(crate) optimism_portal_address: Address, + /// The output file to write the [ExecutionFixture] to. + /// + /// [ExecutionFixture]: op_test_vectors::execution::ExecutionFixture + #[arg(long)] + pub(crate) output: Option, +} + +impl Cli { + /// Initializes telemtry for the application. + pub(crate) fn init_telemetry(self) -> Result { + color_eyre::install()?; + let subscriber = tracing_subscriber::fmt() + .with_max_level(match self.v { + 0 => Level::INFO, + 1 => Level::DEBUG, + _ => Level::TRACE, + }) + .finish(); + tracing::subscriber::set_global_default(subscriber).map_err(|e| eyre!(e))?; + Ok(self) + } + + /// Parse the CLI arguments and run the command + pub(crate) async fn run(self) -> Result<()> { + // Set the interrupt handler. + let (sender, _) = broadcast::channel(256); + let sender_ctrlc = sender.clone(); + ctrlc::set_handler(move || { + let _ = sender_ctrlc.send(()); + })?; + + T8n::new(&self, sender).run().await + } +} diff --git a/bin/opt8n/src/cli/state.rs b/bin/opt8n/src/cli/state.rs new file mode 100644 index 0000000..7b02258 --- /dev/null +++ b/bin/opt8n/src/cli/state.rs @@ -0,0 +1,122 @@ +//! State configuration tool for `opt8n`. + +use super::Cli; +use alloy_consensus::Header; +use alloy_genesis::GenesisAccount; +use alloy_primitives::{Address, Bytes, B256, U64}; +use alloy_provider::{ + network::{primitives::BlockTransactions, Ethereum}, + Provider, ReqwestProvider, RootProvider, +}; +use color_eyre::eyre::{bail, eyre, Result}; +use hashbrown::HashMap; +use reqwest::Url; +use serde::{Deserialize, Serialize}; +use tracing::info; + +/// The state capture tool for `opt8n`. +#[derive(Debug)] +pub struct StateCapture<'a> { + /// The CLI configuration for `opt8n` + pub(crate) cli: &'a Cli, + /// The header of the prestate block. + pub(crate) pre_header: Header, + /// The header of the test block. + pub(crate) header: Header, + /// Prestate allocs + pub(crate) allocs: DumpBlockResponse, +} + +impl<'a> StateCapture<'a> { + /// Create a new prestate configurator. + pub(crate) fn new(cli: &'a Cli) -> Self { + Self { + cli, + pre_header: Header::default(), + header: Header::default(), + allocs: Default::default(), + } + } + + /// Starts a proxy that captures `eth_sendRawTransaction` requests sent to the node. + /// + /// ## Returns + /// - `Ok(L1BlockInfoTx)` - Successfully captured the prestate / test block environment. + /// - `Err(_)` - Error capturing prestate / test block environment. + pub(crate) async fn capture_state(&mut self) -> Result { + // Set up the providers. + let l2_rpc_url = format!("http://localhost:{}", self.cli.l2_port); + let l2_provider: RootProvider<_, Ethereum> = + ReqwestProvider::new_http(Url::parse(&l2_rpc_url)?); + + // Fetch the latest block number from the L2 chain. + let latest_block_number = l2_provider.get_block_number().await?; + let parent_block_number = latest_block_number - 1; + + // Fetch the world state at the parent block. + let world_state = l2_provider + .raw_request::<[U64; 1], DumpBlockResponse>( + "debug_dumpBlock".into(), + [U64::from(parent_block_number)], + ) + .await?; + self.allocs = world_state; + + // Correct storage slots. Geth's `debug_dumpBlock` does not return correct values 😞 + for (address, GenesisAccountExt { account, .. }) in self.allocs.accounts.iter_mut() { + if let Some(storage) = &mut account.storage { + for (slot, value) in storage.iter_mut() { + *value = l2_provider + .get_storage_at(*address, (*slot).into()) + .block_id(parent_block_number.into()) + .await? + .into(); + } + } + } + + // Fetch the latest and parent block. + let latest_block = l2_provider + .get_block_by_number(latest_block_number.into(), false) + .await? + .ok_or(eyre!("Latest block not found."))?; + let parent_block = l2_provider + .get_block_by_number(parent_block_number.into(), false) + .await? + .ok_or(eyre!("Parent block not found."))?; + + self.header = latest_block.header.try_into()?; + self.pre_header = parent_block.header.try_into()?; + + let BlockTransactions::Hashes(transactions) = latest_block.transactions else { + bail!("Could not fetch L1 info transaction.") + }; + + let l1_info_tx = transactions + .first() + .ok_or(eyre!("L1 info transaction not present"))?; + let raw_tx = l2_provider + .raw_request::<[B256; 1], Bytes>("debug_getRawTransaction".into(), [*l1_info_tx]) + .await?; + + info!(target: "state-capture", "Captured prestate / test block environment successfully."); + + Ok(raw_tx) + } +} + +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +pub(crate) struct DumpBlockResponse { + /// The state root + pub(crate) root: B256, + /// The account allocs + pub(crate) accounts: HashMap, +} + +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +pub(crate) struct GenesisAccountExt { + #[serde(skip_serializing_if = "Option::is_none")] + pub(crate) root: Option, + #[serde(flatten)] + pub(crate) account: GenesisAccount, +} diff --git a/bin/opt8n/src/cli/t8n.rs b/bin/opt8n/src/cli/t8n.rs new file mode 100644 index 0000000..ed7b3fe --- /dev/null +++ b/bin/opt8n/src/cli/t8n.rs @@ -0,0 +1,150 @@ +//! The `opt8n` application. + +use super::{deposits::DepositCapture, state::StateCapture, Cli}; +use crate::generator::StateTransition; +use alloy_genesis::Genesis; +use alloy_primitives::Bytes; +use color_eyre::{eyre::ensure, owo_colors::OwoColorize, Result}; +use futures::{future::BoxFuture, FutureExt}; +use inquire::Select; +use std::{fmt::Display, path::PathBuf}; +use tokio::sync::broadcast::Sender; +use tracing::info; + +/// The `opt8n` application +#[derive(Debug)] +pub(crate) struct T8n<'a> { + /// The CLI for `opt8n` + pub(crate) cli: &'a Cli, + /// The ctrl+c signal sender. + pub(crate) interrupt: Sender<()>, + /// The prestate configurator for `opt8n` + pub(crate) state_cfg: StateCapture<'a>, + /// The RLP encoded deposit transactions to send in the test. + pub(crate) deposits: DepositCapture<'a>, + /// The RLP encoded transactions to send in the test. + pub(crate) transactions: Vec, +} + +impl<'a> T8n<'a> { + /// Create a new [T8n] with the given [Cli] and interrupt channel. + pub(crate) fn new(cli: &'a Cli, interrupt: Sender<()>) -> Self { + Self { + cli, + interrupt: interrupt.clone(), + state_cfg: StateCapture::new(cli), + deposits: DepositCapture::new(cli, interrupt), + transactions: Default::default(), + } + } + + /// Run the `opt8n` application + pub(crate) fn run(&mut self) -> BoxFuture<'_, Result<()>> { + async move { + let options = [ + MainMenuOption::SetupEnvironment, + MainMenuOption::CaptureDeposits, + MainMenuOption::CaptureTransactions, + MainMenuOption::GenerateFixture, + MainMenuOption::Exit, + ]; + + let choice = Select::new("What would you like to do?", options.to_vec()).prompt()?; + match choice { + MainMenuOption::SetupEnvironment => { + // Capture prestate and test block environment. + let l1_info_encoded = self.state_cfg.capture_state().await?; + self.deposits.transactions.push(l1_info_encoded); + + // Return to the main menu. + self.run().await?; + } + MainMenuOption::CaptureDeposits => { + // Capture deposit transactions sent to the OptimismPortal on L1. + self.deposits.capture_deposits().await?; + + // Return to the main menu. + self.run().await?; + } + MainMenuOption::CaptureTransactions => { + // Capture the transactions sent to the L2 node. + let transactions = crate::proxy::capture_transactions( + 3000, + self.cli.l2_port, + self.interrupt.subscribe(), + ) + .await?; + + // Update the test vector transactions. + self.transactions = transactions; + + // Return to the main menu. + self.run().await?; + } + MainMenuOption::GenerateFixture => { + let genesis: Genesis = + serde_json::from_slice(&std::fs::read(&self.cli.l2_genesis)?)?; + + let mut stf = StateTransition::new(genesis, self.state_cfg.allocs.clone())?; + + // Sanity check that the pre-state root is correct before proceeding. + ensure!( + stf.state_root()? == self.state_cfg.pre_header.state_root, + "Pre-state root mismatch; Fatal error." + ); + + // Chain together all transactions for the test block. + let transactions = self + .deposits + .transactions + .iter() + .chain(&self.transactions) + .cloned() + .collect::>(); + + // Execute the test block to create the fixture. + let fixture = stf.execute(self.state_cfg.pre_header.clone(), self.state_cfg.header.clone(), transactions)?; + + // Write the fixture to disk. + let out_path = self + .cli + .output + .clone() + .unwrap_or_else(|| PathBuf::from("fixture.json")); + std::fs::write(&out_path, serde_json::to_string_pretty(&fixture)?)?; + + info!(target: "opt8n", "Execution fixture written to disk @ {}.", out_path.display().green()); + } + MainMenuOption::Exit => { /* Fall to exit */ } + } + + Ok(()) + } + .boxed() + } +} + +/// The main menu options for `opt8n` +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum MainMenuOption { + SetupEnvironment, + CaptureDeposits, + CaptureTransactions, + GenerateFixture, + Exit, +} + +impl Display for MainMenuOption { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::SetupEnvironment => write!( + f, + "Setup environment (capture prestate and test block environment)" + ), + Self::CaptureDeposits => write!(f, "Set deposit transactions"), + Self::CaptureTransactions => write!(f, "Set user-space transactions"), + Self::GenerateFixture => write!(f, "Generate execution fixture"), + Self::Exit => write!(f, "Exit"), + } + } +} diff --git a/bin/opt8n/src/cmd/mod.rs b/bin/opt8n/src/cmd/mod.rs deleted file mode 100644 index 016fb70..0000000 --- a/bin/opt8n/src/cmd/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod repl; -pub mod script; -pub mod server; diff --git a/bin/opt8n/src/cmd/repl.rs b/bin/opt8n/src/cmd/repl.rs deleted file mode 100644 index c939382..0000000 --- a/bin/opt8n/src/cmd/repl.rs +++ /dev/null @@ -1,111 +0,0 @@ -use anvil::cmd::NodeArgs; -use clap::{CommandFactory, FromArgMatches, Parser}; -use futures::StreamExt; -use serde::{Deserialize, Serialize}; -use tokio::io::{AsyncBufReadExt, BufReader}; - -use crate::opt8n::{Opt8n, Opt8nArgs}; - -#[derive(Parser, Clone, Debug)] -pub struct ReplArgs { - #[command(flatten)] - opt8n_args: Opt8nArgs, - #[command(flatten)] - pub node_args: NodeArgs, -} - -impl ReplArgs { - pub async fn run(&self) -> color_eyre::Result<()> { - let mut opt8n = Opt8n::new( - Some(self.node_args.clone()), - self.opt8n_args.output.clone(), - self.opt8n_args.genesis.clone(), - ) - .await?; - - repl(&mut opt8n).await?; - - Ok(()) - } -} - -#[derive(Parser, Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[clap(rename_all = "snake_case", infer_subcommands = true, multicall = true)] -pub enum ReplCommand { - #[command(visible_alias = "a")] - Anvil { - #[arg(index = 1, allow_hyphen_values = true)] - args: Vec, - }, - #[command(visible_alias = "c")] - Cast { - #[arg(index = 1, allow_hyphen_values = true)] - args: Vec, - }, - Dump, - RpcEndpoint, - // TODO: implement clear - // TODO: implement reset - #[command(visible_alias = "e")] - Exit, -} - -/// Listens for commands, and new blocks from the block stream. -pub async fn repl(opt8n: &mut Opt8n) -> color_eyre::Result<()> { - let mut new_blocks = opt8n.eth_api.backend.new_block_notifications(); - - loop { - tokio::select! { - command = receive_command() => { - match command { - Ok(ReplCommand::Exit) => break, - Ok(command) => execute(opt8n, command).await?, - Err(e) => eprintln!("Error: {:?}", e), - } - } - - new_block = new_blocks.next() => { - if let Some(new_block) = new_block { - if let Some(block) = opt8n.eth_api.backend.get_block_by_hash(new_block.hash) { - opt8n.generate_execution_fixture(block).await?; - } - } - } - } - } - - Ok(()) -} - -async fn receive_command() -> color_eyre::Result { - let line = BufReader::new(tokio::io::stdin()) - .lines() - .next_line() - .await? - .unwrap(); - let words = shellwords::split(&line)?; - - let matches = ReplCommand::command().try_get_matches_from(words)?; - Ok(ReplCommand::from_arg_matches(&matches)?) -} - -async fn execute(opt8n: &mut Opt8n, command: ReplCommand) -> color_eyre::Result<()> { - match command { - ReplCommand::Dump => { - opt8n.mine_block().await; - } - ReplCommand::Anvil { mut args } => { - args.insert(0, "anvil".to_string()); - let command = NodeArgs::command_for_update(); - let matches = command.try_get_matches_from(args)?; - let node_args = NodeArgs::from_arg_matches(&matches)?; - node_args.run().await?; - } - ReplCommand::Cast { .. } => {} - ReplCommand::RpcEndpoint => { - println!("{}", opt8n.node_handle.http_endpoint()); - } - ReplCommand::Exit => unreachable!(), - } - Ok(()) -} diff --git a/bin/opt8n/src/cmd/script.rs b/bin/opt8n/src/cmd/script.rs deleted file mode 100644 index b412eca..0000000 --- a/bin/opt8n/src/cmd/script.rs +++ /dev/null @@ -1,131 +0,0 @@ -use anvil::cmd::NodeArgs; -use clap::{Parser, ValueHint}; -use color_eyre::eyre::eyre; -use futures::StreamExt; - -use crate::opt8n::{Opt8n, Opt8nArgs}; - -#[derive(Parser, Clone, Debug)] -pub struct ScriptArgs { - #[command(flatten)] - opt8n_args: Opt8nArgs, - #[arg(value_hint = ValueHint::FilePath)] - pub path: String, - #[command(flatten)] - pub node_args: NodeArgs, -} - -impl ScriptArgs { - pub async fn run(self) -> color_eyre::Result<()> { - let opt8n = Opt8n::new( - Some(self.node_args.clone()), - self.opt8n_args.output.clone(), - self.opt8n_args.genesis.clone(), - ) - .await?; - - let mut script_args = forge_script::ScriptArgs { - path: self.path.clone(), - ..Default::default() - }; - - foundry_common::shell::set_shell(foundry_common::shell::Shell::from_args( - script_args.opts.silent, - script_args.json, - ))?; - - script_args.broadcast = true; - script_args.evm_opts.sender = Some( - opt8n - .node_handle - .genesis_accounts() - .last() - .expect("Could not get genesis account"), - ); - script_args.unlocked = true; - script_args.evm_opts.fork_url = Some(opt8n.node_handle.http_endpoint()); - - run_script(opt8n, Box::new(script_args)).await?; - - Ok(()) - } -} - -/// Run a Forge script with the given arguments, and generate an execution fixture -/// from the broadcasted transactions. -pub async fn run_script( - opt8n: Opt8n, - script_args: Box, -) -> color_eyre::Result<()> { - let mut new_blocks = opt8n.eth_api.backend.new_block_notifications(); - - // Run the forge script and broadcast the transactions to the anvil node - let mut opt8n = broadcast_transactions(opt8n, script_args).await?; - - // Mine the block and generate the execution fixture - opt8n.mine_block().await; - - let block = new_blocks.next().await.ok_or(eyre!("No new block"))?; - if let Some(block) = opt8n.eth_api.backend.get_block_by_hash(block.hash) { - opt8n.generate_execution_fixture(block).await?; - } - - Ok(()) -} - -async fn broadcast_transactions( - opt8n: Opt8n, - script_args: Box, -) -> color_eyre::Result { - // Run the script, compile the transactions and broadcast to the anvil instance - let compiled = script_args.preprocess().await?.compile()?; - - let pre_simulation = compiled - .link() - .await? - .prepare_execution() - .await? - .execute() - .await? - .prepare_simulation() - .await?; - - let bundled = pre_simulation.fill_metadata().await?.bundle().await?; - - let tx_count = bundled - .sequence - .sequences() - .iter() - .fold(0, |sum, sequence| sum + sequence.transactions.len()); - - // TODO: break into function - let broadcast = bundled.broadcast(); - - let pending_transactions = tokio::task::spawn(async move { - loop { - let pending_tx_count = opt8n - .eth_api - .txpool_content() - .await - .expect("Failed to get txpool content") - .pending - .len(); - - if pending_tx_count == tx_count { - return opt8n; - } - } - }); - - let opt8n = tokio::select! { - _ = broadcast => { - // TODO: Gracefully handle this error - return Err(eyre!("Script failed early")); - }, - opt8n = pending_transactions => { - opt8n? - } - }; - - Ok(opt8n) -} diff --git a/bin/opt8n/src/cmd/server.rs b/bin/opt8n/src/cmd/server.rs deleted file mode 100644 index 1bc23da..0000000 --- a/bin/opt8n/src/cmd/server.rs +++ /dev/null @@ -1,179 +0,0 @@ -use anvil::cmd::NodeArgs; -use axum::body::{Body, Bytes}; -use axum::extract::State; -use axum::http::{Request, StatusCode}; -use axum::response::{IntoResponse, Response}; -use clap::Parser; -use color_eyre::eyre::eyre; -use color_eyre::owo_colors::OwoColorize; -use futures::StreamExt; -use http_body_util::BodyExt; -use std::net::SocketAddr; -use std::sync::Arc; -use thiserror::Error; -use tokio::net::TcpListener; -use tokio::sync::mpsc::Sender; -use tokio::sync::Mutex; - -use crate::opt8n::{Opt8n, Opt8nArgs}; - -#[derive(Parser, Clone, Debug)] -pub struct ServerArgs { - #[command(flatten)] - pub opt8n_args: Opt8nArgs, - #[command(flatten)] - pub node_args: NodeArgs, -} - -impl ServerArgs { - pub async fn run(&self) -> color_eyre::Result<()> { - let opt8n = Opt8n::new( - Some(self.node_args.clone()), - self.opt8n_args.output.clone(), - self.opt8n_args.genesis.clone(), - ) - .await?; - - let opt8n = Arc::new(Mutex::new(opt8n)); - - let (dump_tx, mut dump_rx) = tokio::sync::mpsc::channel::<()>(1); - - let dump_fixture_router = axum::Router::new() - .route("/dump_fixture", axum::routing::post(dump_execution_fixture)) - .with_state((opt8n.clone(), dump_tx)); - - let router = axum::Router::new() - .route("/mine_prestate", axum::routing::post(mine_prestate)) - .fallback(fallback_handler) - .with_state(opt8n); - - let router = dump_fixture_router.merge(router); - - let addr: SocketAddr = ([127, 0, 0, 1], 0).into(); - let listener = TcpListener::bind(addr).await?; - let local_addr = listener.local_addr()?; - - let server = axum::serve(listener, router.into_make_service()); - let _ = println!("Opt8n server listening on: {:#?}", local_addr).green(); - - tokio::select! { - err = server => { - todo!("Handle server error: {:#?}", err); - } - - _ = dump_rx.recv() => { - let _ = println!("Exuction fixture dumped to: {:#?}", self.opt8n_args.output).green(); - - } - } - - Ok(()) - } -} - -async fn dump_execution_fixture( - State((opt8n, dump_tx)): State<(Arc>, Sender<()>)>, -) -> Result<(), ServerError> { - mine_block(opt8n).await?; - dump_tx.send(()).await.map_err(ServerError::SendError)?; - - Ok(()) -} - -async fn mine_prestate(State(opt8n): State>>) -> Result<(), ServerError> { - mine_block(opt8n.clone()).await?; - Ok(()) -} - -async fn mine_block(opt8n: Arc>) -> Result<(), ServerError> { - let mut opt8n = opt8n.lock().await; - - let mut new_blocks = opt8n.eth_api.backend.new_block_notifications(); - - opt8n.mine_block().await; - - let block = new_blocks - .next() - .await - .ok_or(eyre!("No new block")) - .map_err(ServerError::Opt8nError)?; - if let Some(block) = opt8n.eth_api.backend.get_block_by_hash(block.hash) { - opt8n - .generate_execution_fixture(block) - .await - .map_err(ServerError::Opt8nError)?; - } - - Ok(()) -} - -async fn fallback_handler( - State(opt8n): State>>, - req: Request, -) -> Result<(), ServerError> { - let anvil_endpoint = opt8n.lock().await.node_handle.http_endpoint(); - proxy_to_anvil(req, anvil_endpoint).await?; - Ok(()) -} - -pub async fn proxy_to_anvil( - req: Request, - anvil_endpoint: String, -) -> Result, ServerError> { - let http_client = reqwest::Client::new(); - - let (headers, body) = req.into_parts(); - let body = body - .collect() - .await - .map_err(ServerError::AxumError)? - .to_bytes(); - - let axum_req: Request = Request::from_parts(headers, body); - let mut req = reqwest::Request::try_from(axum_req).expect("TODO: handle error"); - req.url_mut().set_fragment(Some(&anvil_endpoint)); - - let res: Response = http_client - .execute(req) - .await - .expect("TODO: handle error ") - .into(); - - let (headers, body) = res.into_parts(); - - let body = body - .collect() - .await - .map_err(ServerError::ReqwestError)? - .to_bytes() - .into(); - - Ok(Response::from_parts(headers, body)) -} - -#[derive(Error, Debug)] -pub enum ServerError { - #[error("Opt8n error: {0}")] - Opt8nError(color_eyre::Report), - #[error("Axum error: {0}")] - AxumError(axum::Error), - #[error("Reqwest error: {0}")] - ReqwestError(reqwest::Error), - #[error("Senderror: {0}")] - SendError(tokio::sync::mpsc::error::SendError<()>), -} - -impl IntoResponse for ServerError { - fn into_response(self) -> Response { - let message = match self { - ServerError::Opt8nError(err) => err.to_string(), - ServerError::ReqwestError(err) => err.to_string(), - ServerError::AxumError(err) => err.to_string(), - ServerError::SendError(err) => err.to_string(), - }; - - let body = Body::from(message); - - (StatusCode::INTERNAL_SERVER_ERROR, body).into_response() - } -} diff --git a/bin/opt8n/src/generator/evm_config.rs b/bin/opt8n/src/generator/evm_config.rs new file mode 100644 index 0000000..ac03932 --- /dev/null +++ b/bin/opt8n/src/generator/evm_config.rs @@ -0,0 +1 @@ +//! TODO: Custom EVM config. diff --git a/bin/opt8n/src/generator/mod.rs b/bin/opt8n/src/generator/mod.rs new file mode 100644 index 0000000..20c3e73 --- /dev/null +++ b/bin/opt8n/src/generator/mod.rs @@ -0,0 +1,346 @@ +//! The reference state transition function. + +use crate::cli::state::{DumpBlockResponse, GenesisAccountExt}; +use alloy_consensus::{constants::KECCAK_EMPTY, Header}; +use alloy_genesis::{Genesis, GenesisAccount}; +use alloy_primitives::B256; +use alloy_rlp::{Decodable, Encodable}; +use alloy_trie::{HashBuilder, HashMap, Nibbles}; +use color_eyre::{eyre::eyre, owo_colors::OwoColorize, Result}; +use itertools::Itertools; +use kona_mpt::TrieAccount; +use op_test_vectors::execution::{ExecutionEnvironment, ExecutionFixture, ExecutionResult}; +use reth_chainspec::ChainSpec; +use reth_evm::execute::{ + BlockExecutionInput, BlockExecutionOutput, ExecutionOutcome, Executor, ProviderError, +}; +use reth_evm_optimism::{OpBlockExecutor, OptimismEvmConfig}; +use reth_primitives::{ + keccak256, Address, Block, BlockWithSenders, Bytes, TransactionSigned, U256, +}; +use revm::{ + db::{AccountState, CacheDB, DbAccount, EmptyDBTyped, State}, + primitives::{AccountInfo, Bytecode}, +}; +use std::{collections::BTreeMap, sync::Arc}; +use tracing::info; + +/// The database for [StateTransition]. +type StfDb = CacheDB>; + +/// The execution fixture generator for `opt8n`. +pub(crate) struct StateTransition { + /// Inner cache database. + pub(crate) db: StfDb, + /// The [ChainSpec] for the devnet chain. + pub(crate) chain_spec: Arc, +} + +impl StateTransition { + /// Create a new execution fixture generator. + pub(crate) fn new(genesis: Genesis, state_dump: DumpBlockResponse) -> Result { + let mut db = CacheDB::default(); + + // Insert the genesis allocs + genesis.alloc.iter().for_each(|(k, v)| { + let mut info = AccountInfo { + nonce: v.nonce.unwrap_or_default(), + balance: v.balance, + code: v.code.clone().map(Bytecode::new_raw), + code_hash: KECCAK_EMPTY, + }; + + db.insert_contract(&mut info); + db.accounts.insert( + *k, + DbAccount { + info: info.clone(), + storage: v + .storage + .as_ref() + .unwrap_or(&BTreeMap::new()) + .iter() + .map(|(k, v)| ((*k).into(), (*v).into())) + .collect(), + account_state: AccountState::None, + }, + ); + }); + + // Overlay the state dump on top of the genesis allocs. + state_dump.accounts.iter().for_each(|(k, v)| { + let GenesisAccountExt { account, .. } = v; + + let mut info = AccountInfo { + nonce: account.nonce.unwrap_or_default(), + balance: account.balance, + code: account.code.clone().map(Bytecode::new_raw), + code_hash: KECCAK_EMPTY, + }; + db.insert_contract(&mut info); + + let entry = db.accounts.entry(*k).or_default(); + entry.info = info; + if let Some(storage) = &account.storage { + storage.iter().for_each(|(k, v)| { + entry.storage.insert((*k).into(), (*v).into()); + }); + } + }); + + Ok(Self { + db, + chain_spec: Arc::new(ChainSpec::from(genesis)), + }) + } + + /// Grab the block executor with the current state. + pub(crate) fn executor(&mut self) -> OpBlockExecutor { + // Construct an ephemeral state with the current database. + let state = State::builder() + .with_database(self.db.clone()) + .with_bundle_update() + .build(); + + // TODO: Custom EVMConfig + OpBlockExecutor::new(self.chain_spec.clone(), OptimismEvmConfig::default(), state) + } + + pub(crate) fn execute( + &mut self, + prev_header: Header, + header: Header, + encoded_txs: Vec, + ) -> Result { + let executor = self.executor(); + + let txs = encoded_txs + .iter() + .cloned() + .map(|tx| { + TransactionSigned::decode(&mut tx.as_ref()) + .map_err(|e| eyre!("Error decoding transaction: {e}")) + }) + .collect::>>()?; + let block = Block { + header: reth_primitives::Header { + parent_hash: header.parent_hash, + ommers_hash: header.ommers_hash, + beneficiary: header.beneficiary, + state_root: header.state_root, + transactions_root: header.transactions_root, + receipts_root: header.receipts_root, + withdrawals_root: header.withdrawals_root, + logs_bloom: header.logs_bloom, + difficulty: header.difficulty, + number: header.number, + gas_limit: header.gas_limit as u64, + gas_used: header.gas_used as u64, + timestamp: header.timestamp, + mix_hash: header.mix_hash, + nonce: u64::from_be_bytes(*header.nonce), + base_fee_per_gas: header.base_fee_per_gas.map(|x| x as u64), + blob_gas_used: header.blob_gas_used.map(|x| x as u64), + excess_blob_gas: header.excess_blob_gas.map(|x| x as u64), + parent_beacon_block_root: header.parent_beacon_block_root, + requests_root: header.requests_root, + extra_data: header.extra_data, + }, + body: txs.clone(), + ..Default::default() + }; + let senders = block + .body + .iter() + .map(|tx| tx.recover_signer().ok_or(eyre!("Error recovering signer"))) + .collect::>>()?; + + // Execute the block. + info!(target: "stf", "Executing block with {} transactions...", txs.len().cyan()); + let block_with_senders = BlockWithSenders::new(block, senders) + .ok_or(eyre!("Error creating block with senders"))?; + let execution_input = BlockExecutionInput::new(&block_with_senders, header.difficulty); + let BlockExecutionOutput { + state, receipts, .. + } = executor.execute(execution_input)?; + info!(target: "stf", "✅ Block successfully executed."); + + // Flush the bundle state updates to the in-memory database. + let alloc_db = self.db.clone(); + for (address, account) in &state.state { + if account.status.is_not_modified() { + continue; + } + + let mut info = account.info.clone().unwrap_or_default(); + self.db.insert_contract(&mut info); + + let db_account = self.db.accounts.entry(*address).or_default(); + if account.is_info_changed() { + db_account.info = info; + } + + // Insert all storage slots into the account storage trie. + db_account.storage.extend( + account + .storage + .iter() + .map(|(k, v)| (*k, v.present_value)) + .collect::>(), + ); + } + + // Compute the execution fixture results. + let root = self.state_root()?; + let execution_outcome = + ExecutionOutcome::new(state, receipts.clone().into(), header.number, Vec::new()); + let receipts_root = execution_outcome + .optimism_receipts_root_slow(header.number, self.chain_spec.as_ref(), header.timestamp) + .expect("Number is in range"); + let logs_bloom = execution_outcome + .block_logs_bloom(header.number) + .expect("Number is in range"); + let transactions_root = reth_primitives::proofs::calculate_transaction_root(&txs); + + // Log the execution fixture results. + let ind = "~>".magenta().italic().to_string(); + info!(target: "stf", "{} State root: {}", ind, root.cyan()); + info!(target: "stf", "{} Transactions root: {}", ind, transactions_root.cyan()); + info!(target: "stf", "{} Receipts root: {}", ind, receipts_root.cyan()); + info!(target: "stf", "{} Logs bloom: {}", ind, logs_bloom.cyan()); + + Ok(ExecutionFixture { + env: ExecutionEnvironment { + genesis: { + let mut genesis = self.chain_spec.genesis.clone(); + // strip allocs; they are not needed in the fixture + genesis.alloc.clear(); + genesis + }, + previous_header: prev_header, + current_coinbase: header.beneficiary, + current_difficulty: header.mix_hash.into(), + current_gas_limit: U256::from(header.gas_limit), + current_number: U256::from(header.number), + current_timestamp: U256::from(header.timestamp), + parent_beacon_block_root: header.parent_beacon_block_root, + block_hashes: Some( + [(U256::from(header.number - 1), header.parent_hash)] + .iter() + .cloned() + .collect::>(), + ), + }, + transactions: encoded_txs, + result: ExecutionResult { + state_root: root, + tx_root: transactions_root, + receipt_root: receipts_root, + logs_bloom, + receipts: receipts + .iter() + .map(|r| { + let mut buf = Vec::with_capacity(r.length()); + r.encode(&mut buf); + buf.into() + }) + .collect::>(), + }, + alloc: Self::gen_allocs(alloc_db), + }) + } + + /// Computes the state root from the data available in [Self::db]. + pub(crate) fn state_root(&self) -> Result { + // First, generate all account tries. + let mut trie_accounts = HashMap::new(); + for (address, account_state) in self.db.accounts.iter() { + let mut hb = HashBuilder::default(); + + // Sort the storage by the hash of the slot, and filter out any storage slots with zero values. + let sorted_storage = account_state + .storage + .iter() + .filter(|(_, v)| **v != U256::ZERO) + .sorted_by_key(|(k, _)| keccak256(k.to_be_bytes::<32>())); + + // Insert all non-zero storage slots into the account storage trie, in-order. + for (slot, value) in sorted_storage { + let slot_nibbles = Nibbles::unpack(keccak256(slot.to_be_bytes::<32>())); + let mut value_buf = Vec::with_capacity(value.length()); + value.encode(&mut value_buf); + hb.add_leaf(slot_nibbles, &value_buf); + } + + // Compute the root of the account storage trie. + let storage_root = hb.root(); + + // Construct the trie account. + let trie_account = TrieAccount { + nonce: account_state.info.nonce, + balance: account_state.info.balance, + storage_root, + code_hash: account_state + .info + .code + .as_ref() + .map(|code| match code { + Bytecode::LegacyRaw(code) => keccak256(code), + Bytecode::LegacyAnalyzed(code) => keccak256(code.bytecode()), + _ => panic!("Unsupported bytecode type"), + }) + .unwrap_or(KECCAK_EMPTY), + }; + + trie_accounts.insert(address, trie_account); + } + + let mut hb = HashBuilder::default(); + + // Sort the accounts by the hash of the address. + let sorted_accounts = trie_accounts.iter().sorted_by_key(|(k, _)| keccak256(k)); + + // Insert all accounts into the state trie, in-order. + for (address, _) in sorted_accounts { + let trie_account = trie_accounts + .get(address) + .ok_or(eyre!("Missing trie account"))?; + + let address_nibbles = Nibbles::unpack(keccak256(address)); + let mut account_buffer = Vec::with_capacity(trie_account.length()); + trie_account.encode(&mut account_buffer); + + hb.add_leaf(address_nibbles, &account_buffer); + } + + Ok(hb.root()) + } + + /// Transforms a [StfDb] into a map of [Address]es to [GenesisAccount]s. + fn gen_allocs(db: StfDb) -> HashMap { + db.accounts + .iter() + .map(|(address, account)| { + let mut storage = BTreeMap::new(); + for (slot, value) in &account.storage { + storage.insert((*slot).into(), (*value).into()); + } + + ( + *address, + GenesisAccount { + balance: account.info.balance, + nonce: Some(account.info.nonce), + code: account.info.code.as_ref().map(|code| match code { + Bytecode::LegacyRaw(code) => code.clone(), + Bytecode::LegacyAnalyzed(code) => code.bytecode().clone(), + _ => panic!("Unsupported bytecode type"), + }), + storage: Some(storage), + private_key: None, + }, + ) + }) + .collect() + } +} diff --git a/bin/opt8n/src/main.rs b/bin/opt8n/src/main.rs index 023f6f4..3440363 100644 --- a/bin/opt8n/src/main.rs +++ b/bin/opt8n/src/main.rs @@ -1,36 +1,10 @@ -pub mod cmd; -pub mod opt8n; - -use crate::cmd::script::ScriptArgs; use clap::Parser; -use cmd::repl::ReplArgs; -use cmd::server::ServerArgs; -use color_eyre::eyre; - -#[derive(Parser, Clone, Debug)] -#[command(author, version, about, long_about = None)] -pub struct Args { - #[command(subcommand)] - pub command: Commands, -} - -#[derive(Parser, Clone, Debug)] -pub enum Commands { - Repl(ReplArgs), - Script(ScriptArgs), - Server(ServerArgs), -} - -#[tokio::main] -async fn main() -> eyre::Result<()> { - color_eyre::install()?; - let command = Args::parse().command; - match command { - Commands::Repl(cmd) => cmd.run().await?, - Commands::Script(cmd) => cmd.run().await?, - Commands::Server(cmd) => cmd.run().await?, - } +mod cli; +mod generator; +mod proxy; - Ok(()) +#[tokio::main(flavor = "multi_thread")] +async fn main() -> color_eyre::Result<()> { + cli::Cli::parse().init_telemetry()?.run().await } diff --git a/bin/opt8n/src/opt8n.rs b/bin/opt8n/src/opt8n.rs deleted file mode 100644 index 0c203b9..0000000 --- a/bin/opt8n/src/opt8n.rs +++ /dev/null @@ -1,340 +0,0 @@ -//! opt8n binary logic - -use alloy_eips::eip2718::Encodable2718; -use alloy_eips::BlockId; -use alloy_rpc_types::{ - trace::geth::{PreStateConfig, PreStateFrame}, - TransactionReceipt, -}; -use anvil::{cmd::NodeArgs, eth::EthApi, NodeConfig, NodeHandle}; -use anvil_core::eth::transaction::{PendingTransaction, TypedTransaction}; -use anvil_core::eth::{block::Block, transaction::TypedReceipt}; -use cast::traces::{GethTraceBuilder, TracingInspectorConfig}; -use clap::Parser; -use op_alloy_consensus::{ - OpDepositReceipt, OpDepositReceiptWithBloom, OpReceiptEnvelope, OpTypedTransaction, TxDeposit, -}; -use op_alloy_rpc_types::OpTransactionReceipt; -use std::{ - error::Error, - fs::{self, File}, - path::PathBuf, -}; - -use color_eyre::eyre::{ensure, eyre, Result}; -use op_test_vectors::execution::{ExecutionEnvironment, ExecutionFixture, ExecutionResult}; -use revm::{ - db::{AlloyDB, CacheDB}, - primitives::{BlobExcessGasAndPrice, BlockEnv, CfgEnv, Env, SpecId, U256}, - Database, DatabaseCommit, DatabaseRef, Evm, EvmBuilder, -}; - -#[derive(Parser, Clone, Debug)] -pub struct Opt8nArgs { - #[clap(long, help = "Output file for the execution test fixture")] - pub output: PathBuf, - #[clap(long, help = "Path to genesis state")] - pub genesis: Option, -} - -pub struct Opt8n { - pub eth_api: EthApi, - pub node_handle: NodeHandle, - pub execution_fixture: ExecutionFixture, - pub node_config: NodeConfig, - pub output_file: PathBuf, -} - -impl Opt8n { - pub async fn new( - node_args: Option, - output_file: PathBuf, - genesis: Option, - ) -> Result { - let node_config = if let Some(node_args) = node_args { - if node_args.evm_opts.fork_url.is_some() - || node_args.evm_opts.fork_block_number.is_some() - { - return Err(eyre!( - "Forking is not supported in opt8n, please specify prestate with a genesis file" - )); - } - - Some(node_args.into_node_config()) - } else { - None - }; - - let genesis = if let Some(genesis) = genesis.as_ref() { - serde_json::from_reader(File::open(genesis)?)? - } else { - None - }; - - let node_config = node_config - .unwrap_or_default() - .with_optimism(true) - .with_no_mining(true) - .with_genesis(genesis); - - let (eth_api, node_handle) = anvil::spawn(node_config.clone()).await; - eth_api.anvil_set_logging(false).await?; - - Ok(Self { - eth_api, - node_handle, - execution_fixture: ExecutionFixture::default(), - node_config, - output_file, - }) - } - - /// Updates the pre and post state allocations of the [ExecutionFixture] from Revm. - pub fn capture_pre_post_alloc(&mut self, block: &Block) -> Result<()> { - let revm_db = CacheDB::new( - AlloyDB::new( - self.node_handle.http_provider(), - BlockId::from(block.header.number - 1), - ) - .ok_or_else(|| eyre!("Failed to create AlloyDB"))?, - ); - - let mut evm = evm( - block, - self.eth_api.chain_id(), - CacheDB::new(revm_db), - SpecId::from(self.node_config.hardfork.unwrap_or_default()), - ); - - for tx in block.transactions.iter() { - let pending = PendingTransaction::new(tx.clone().into())?; - let mut buff = Vec::::with_capacity(pending.transaction.encode_2718_len()); - pending.transaction.encode_2718(&mut buff); - - let mut tx_env = pending.to_revm_tx_env(); - tx_env.optimism.enveloped_tx = Some(buff.into()); - evm.context.evm.env.tx = tx_env; - - let result = evm.transact()?; - - let db = &mut evm.context.evm.db; - let pre_state_frame = GethTraceBuilder::new(vec![], TracingInspectorConfig::default()) - .geth_prestate_traces( - &result, - PreStateConfig { - diff_mode: Some(true), - }, - &db, - )?; - db.commit(result.state); - - if let PreStateFrame::Diff(diff) = pre_state_frame { - diff.pre.into_iter().for_each(|(account, state)| { - self.execution_fixture.alloc.entry(account).or_insert(state); - }); - diff.post.into_iter().for_each(|(account, state)| { - self.execution_fixture.out_alloc.insert(account, state); - }); - } - } - Ok(()) - } - - pub async fn mine_block(&mut self) { - self.eth_api.mine_one().await; - } - - /// Generates an execution fixture from a block. - pub async fn generate_execution_fixture(&mut self, block: Block) -> Result<()> { - self.capture_pre_post_alloc(&block)?; - - // Append block transactions and receipts to the execution fixture - let mut receipts: Vec = Vec::with_capacity(block.transactions.len()); - for tx in block.transactions.iter() { - if let Some(receipt) = self - .eth_api - .backend - .transaction_receipt(tx.transaction.hash()) - .await? - { - let op_receipt = tx_receipt_to_op_tx_receipt(receipt); - receipts.push(op_receipt); - } - - let op_tx = typed_tx_to_op_typed_tx(&tx.transaction); - self.execution_fixture.transactions.push(op_tx); - } - - let block_header = &block.header; - let execution_result = ExecutionResult { - state_root: block_header.state_root, - tx_root: block_header.transactions_root, - receipt_root: block_header.receipts_root, - logs_bloom: block_header.logs_bloom, - receipts, - }; - - let execution_environment = ExecutionEnvironment { - current_coinbase: block_header.beneficiary, - current_difficulty: block_header.difficulty, - current_gas_limit: U256::from(block.header.gas_limit), - previous_hash: block_header.parent_hash, - current_number: U256::from(block.header.number), - current_timestamp: U256::from(block_header.timestamp), - block_hashes: None, - }; - - self.execution_fixture.env = execution_environment; - self.execution_fixture.result = execution_result; - - // Ensure pre and post states are different - ensure!( - self.execution_fixture.alloc != self.execution_fixture.out_alloc, - "Pre and post state are the same" - ); - - // Output the execution fixture to file - let file = fs::File::create(&self.output_file)?; - serde_json::to_writer_pretty(file, &self.execution_fixture)?; - - Ok(()) - } -} - -// TODO: Consider adding `From` implementation for -// `TypedTransaction` -> `OpTypedTransaction` in `op-alloy-consensus` -fn typed_tx_to_op_typed_tx(tx: &TypedTransaction) -> OpTypedTransaction { - let op_tx = match tx { - TypedTransaction::Legacy(signed_tx) => OpTypedTransaction::Legacy(signed_tx.tx().clone()), - TypedTransaction::EIP2930(signed_tx) => OpTypedTransaction::Eip2930(signed_tx.tx().clone()), - - TypedTransaction::EIP1559(signed_tx) => OpTypedTransaction::Eip1559(signed_tx.tx().clone()), - TypedTransaction::EIP4844(signed_tx) => OpTypedTransaction::Eip4844(signed_tx.tx().clone()), - TypedTransaction::Deposit(deposit_tx) => { - let op_deposit_tx = TxDeposit { - source_hash: deposit_tx.source_hash, - from: deposit_tx.from, - to: deposit_tx.kind, - mint: Some( - deposit_tx - .mint - .try_into() - .expect("Mint is greater than u128"), - ), - value: deposit_tx.value, - gas_limit: deposit_tx.gas_limit, - is_system_transaction: deposit_tx.is_system_tx, - input: deposit_tx.input.clone(), - }; - - OpTypedTransaction::Deposit(op_deposit_tx) - } - TypedTransaction::EIP7702(_) => { - unimplemented!("EIP7702 not implemented") - } - }; - - op_tx -} - -// TODO: Consider adding `From` implementation for -// `TransactionReceipt` -> `OpTransactionReceipt` in `op-alloy-consensus` -fn tx_receipt_to_op_tx_receipt( - receipt: TransactionReceipt>, -) -> OpTransactionReceipt { - let receipt_envelope = receipt.inner; - let op_receipt_envelope = match receipt_envelope { - TypedReceipt::Legacy(receipt_with_bloom) => OpReceiptEnvelope::Legacy(receipt_with_bloom), - TypedReceipt::EIP2930(receipt_with_bloom) => OpReceiptEnvelope::Eip2930(receipt_with_bloom), - TypedReceipt::EIP1559(receipt_with_bloom) => OpReceiptEnvelope::Eip1559(receipt_with_bloom), - TypedReceipt::EIP4844(receipt_with_bloom) => OpReceiptEnvelope::Eip4844(receipt_with_bloom), - TypedReceipt::EIP7702(_) => { - unimplemented!("EIP7702 not implemented") - } - TypedReceipt::Deposit(deposit_receipt) => { - let op_deposit_receipt = OpDepositReceipt { - inner: deposit_receipt.inner.receipt, - deposit_nonce: deposit_receipt.deposit_nonce, - deposit_receipt_version: deposit_receipt.deposit_receipt_version, - }; - - let op_deposit_receipt_with_bloom = OpDepositReceiptWithBloom { - receipt: op_deposit_receipt, - logs_bloom: deposit_receipt.inner.logs_bloom, - }; - - OpReceiptEnvelope::Deposit(op_deposit_receipt_with_bloom) - } - }; - - - - OpTransactionReceipt { - inner: TransactionReceipt { - inner: op_receipt_envelope, - transaction_hash: receipt.transaction_hash, - transaction_index: receipt.transaction_index, - block_hash: receipt.block_hash, - block_number: receipt.block_number, - gas_used: receipt.gas_used, - effective_gas_price: receipt.effective_gas_price, - blob_gas_used: receipt.blob_gas_used, - blob_gas_price: receipt.blob_gas_price, - from: receipt.from, - to: receipt.to, - contract_address: receipt.contract_address, - state_root: receipt.state_root, - authorization_list: receipt.authorization_list, - }, - } -} - -/// Creates a new EVM instance from a given block, chain, database, and spec id. -pub fn evm<'a, DB>(block: &Block, chain_id: u64, db: DB, spec_id: SpecId) -> Evm<'a, (), Box> -where - DB: Database + DatabaseRef + 'a, - ::Error: Error, -{ - let block_env = BlockEnv { - number: U256::from(block.header.number), - coinbase: block.header.beneficiary, - timestamp: U256::from(block.header.timestamp), - difficulty: block.header.difficulty, - gas_limit: U256::from(block.header.gas_limit), - prevrandao: Some(block.header.mix_hash), - basefee: U256::from(block.header.base_fee_per_gas.unwrap_or_default()), - blob_excess_gas_and_price: block - .header - .excess_blob_gas - .map(|excess_gas| BlobExcessGasAndPrice::new(excess_gas as u64)), - }; - - let mut cfg = CfgEnv::default(); - cfg.chain_id = chain_id; - let env = Env { - block: block_env, - cfg, - ..Default::default() - }; - - let mut evm = EvmBuilder::default() - .with_db(Box::new(db)) - .with_env(Box::new(env)) - .optimism() - .build(); - evm.modify_spec_id(spec_id); - evm -} - -#[cfg(test)] -mod tests { - #[tokio::test] - pub async fn test_update_alloc() { - // TODO: - } - - #[tokio::test] - pub async fn test_dump_execution_fixture() { - // TODO: - } -} diff --git a/bin/opt8n/src/proxy.rs b/bin/opt8n/src/proxy.rs new file mode 100644 index 0000000..50ef5db --- /dev/null +++ b/bin/opt8n/src/proxy.rs @@ -0,0 +1,155 @@ +//! Contains the logic for capturing transactions sent to a node. + +use alloy_primitives::{keccak256, Bytes}; +use axum::{ + body::{self, Body}, + extract::State, + http::{Request, Response}, + response::IntoResponse, + routing::any, + Router, +}; +use color_eyre::{owo_colors::OwoColorize, Result}; +use reqwest::Client; +use serde::{Deserialize, Serialize}; +use std::sync::Arc; +use tokio::sync::{broadcast::Receiver, Mutex}; +use tracing::{error, info}; + +/// 200MB max return size. +const MAX_BODY_SIZE: usize = 200_000_000; + +/// Starts a proxy server that captures transactions sent to the node via `eth_sendRawTransaction`. +pub(crate) async fn capture_transactions( + port: u16, + forward_port: u16, + receiver: Receiver<()>, +) -> Result> { + // Initialize the proxy and the exit signal channel. + let proxy = TransactionCaptureProxy::new(port, forward_port); + + // Spawn the proxy server on a separate thread. + let proxy_handle = tokio::task::spawn(proxy.capture(receiver)); + + // Wait for the user to exit the transaction capture proxy. + let (transactions,) = tokio::try_join!(proxy_handle)?; + transactions +} + +/// A proxy server that captures transactions sent to the node via `eth_sendRawTransaction`. +#[derive(Debug, Clone)] +pub(crate) struct TransactionCaptureProxy { + /// The port the proxy server listens on. + port: u16, + /// The port the proxy server forwards requests to. + forward_port: u16, + /// The RLP encoded transactions captured by the proxy server. + transactions: Vec, +} + +impl TransactionCaptureProxy { + /// Creates a new `TransactionCaptureProxy` instance. + pub(crate) fn new(port: u16, forward_port: u16) -> Self { + Self { + port, + forward_port, + transactions: Vec::new(), + } + } + + /// Starts the proxy server and captures transactions sent to the node. When the server exits, the captured + /// transactions are returned. + pub(crate) async fn capture(mut self, mut signal: Receiver<()>) -> Result> { + // Print startup information. + info!(target: "capture-proxy", "Starting proxy server @ http://localhost:{}. Forwarding requests to http://localhost:{}", self.port.green(), self.forward_port.green()); + info!(target: "capture-proxy", "Waiting for transactions to be sent to the relay via `eth_sendRawTransaction`..."); + info!(target: "capture-proxy", "To finalize, press {}.", "`Ctrl + C`".cyan()); + + // Setup server. + let state = Arc::new(Mutex::new(self.clone())); + let app = Router::new() + .route("/", any(Self::proxy_handler)) + .with_state(state.clone()); + let listener = tokio::net::TcpListener::bind(format!("0.0.0.0:{}", self.port)).await?; + axum::serve(listener, app) + .with_graceful_shutdown(async move { + signal.recv().await.ok(); + info!(target: "capture-proxy", "Shutting down the proxy server."); + }) + .await?; + + self.transactions = state.lock().await.transactions.clone(); + + // Return the captured transactions. + info!(target: "capture-proxy", "Captured {} transactions successfully.", self.transactions.len()); + Ok(self.transactions) + } + + /// Proxies the request to the original server listening on the configured port. + async fn proxy_handler( + State(state): State>>, + req: Request, + ) -> impl IntoResponse { + let mut state = state.lock().await; + + // Forward the request to the original server listening on `state.port` + let uri_string = format!("http://127.0.0.1:{}{}", state.forward_port, req.uri()); + + // Create a reqwest client + let client = Client::new(); + + // Build the new request for the upstream server + let mut forwarded_req = client + .request(req.method().clone(), &uri_string) + .headers(req.headers().clone()); + + if let Ok(body_bytes) = body::to_bytes(req.into_body(), MAX_BODY_SIZE).await { + let req = + serde_json::from_slice::>(&body_bytes).unwrap(); + + // Capture `eth_sendRawTransaction` requests and persist the RLP-encoded transactions. + if req.method == "eth_sendRawTransaction" { + let value: [Bytes; 1] = serde_json::from_value(req.params.unwrap()).unwrap(); + state.transactions.push(value[0].clone()); + + info!(target: "capture-proxy", "🕸️ Captured transaction (Hash: {})", keccak256(&value[0]).cyan()); + } + + // Add body if method is POST, PUT, etc. + forwarded_req = forwarded_req.body(body_bytes); + } + + // Drop the lock on the state. + drop(state); + + // Forward the request. + match forwarded_req.send().await { + Ok(res) => { + let status = res.status(); + let body = res.bytes().await.unwrap_or_default(); + + Response::builder() + .status(status) + .body(Body::from(body)) + .unwrap() + } + Err(err) => { + error!(target: "capture-proxy", "Request forwarding failed: {:?}", err); + Response::builder() + .status(500) + .body(Body::from("Internal Server Error")) + .unwrap() + } + } + } +} + +/// An opaque JSON-RPC request. +#[derive(Debug, Clone, Deserialize, Serialize)] +struct JsonRpcRequest { + /// The JSON-RPC method. + method: String, + /// The JSON-RPC params. + #[serde(skip_serializing_if = "Option::is_none")] + params: Option, +} diff --git a/crates/op-test-vectors/Cargo.toml b/crates/op-test-vectors/Cargo.toml index 95eff10..e3f2a57 100644 --- a/crates/op-test-vectors/Cargo.toml +++ b/crates/op-test-vectors/Cargo.toml @@ -16,14 +16,15 @@ color-eyre.workspace = true hashbrown.workspace = true # Alloy -alloy-rpc-types.workspace = true alloy-primitives.workspace = true alloy-consensus.workspace = true +alloy-genesis.workspace = true # OP Types -op-alloy-rpc-types.workspace = true op-alloy-consensus.workspace = true +# kona +kona-primitives.workspace = true + [dev-dependencies] serde_json.workspace = true -kona-primitives.workspace = true diff --git a/crates/op-test-vectors/src/execution.rs b/crates/op-test-vectors/src/execution.rs index 5e889fb..f5cb7a7 100644 --- a/crates/op-test-vectors/src/execution.rs +++ b/crates/op-test-vectors/src/execution.rs @@ -1,10 +1,8 @@ //! Module containing the execution test fixture. -use alloy_primitives::{Address, Bloom, B256, U256}; -use alloy_rpc_types::trace::geth::AccountState; - -use op_alloy_consensus::OpTypedTransaction; -use op_alloy_rpc_types::OpTransactionReceipt; +use alloy_consensus::Header; +use alloy_genesis::{Genesis, GenesisAccount}; +use alloy_primitives::{Address, Bloom, Bytes, B256, U256}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; @@ -17,13 +15,10 @@ pub struct ExecutionFixture { pub env: ExecutionEnvironment, /// The initial state of the accounts before running the transactions, also called the /// "pre-state". - pub alloc: HashMap, - /// The expected state of the accounts after running the transactions, also called the - /// "post-state". - pub out_alloc: HashMap, + pub alloc: HashMap, /// Transactions to execute. #[serde(rename = "txs")] - pub transactions: Vec, + pub transactions: Vec, /// The expected result after executing transactions. pub result: ExecutionResult, } @@ -33,18 +28,23 @@ pub struct ExecutionFixture { #[derive(Serialize, Deserialize, Debug, Default)] #[serde(rename_all = "camelCase")] pub struct ExecutionEnvironment { + /// The rollup config. + pub genesis: Genesis, + /// The previous block header. + pub previous_header: Header, /// The current block coinbase. pub current_coinbase: Address, /// The current block difficulty. pub current_difficulty: U256, /// The current block gas limit. pub current_gas_limit: U256, - /// The previous block hash. - pub previous_hash: B256, /// The current block number. pub current_number: U256, /// The current block timestamp. pub current_timestamp: U256, + /// The current parent beacon block root. + #[serde(skip_serializing_if = "Option::is_none")] + pub parent_beacon_block_root: Option, /// The block hashes of the previous blocks. #[serde(skip_serializing_if = "Option::is_none")] pub block_hashes: Option>, @@ -64,7 +64,7 @@ pub struct ExecutionResult { /// The logs bloom. pub logs_bloom: Bloom, /// A list of execution receipts for each executed transaction. - pub receipts: Vec, + pub receipts: Vec, } #[cfg(test)] diff --git a/crates/op-test-vectors/src/testdata/result.json b/crates/op-test-vectors/src/testdata/result.json index b0a0e1f..ba668cc 100644 --- a/crates/op-test-vectors/src/testdata/result.json +++ b/crates/op-test-vectors/src/testdata/result.json @@ -1,25 +1,9 @@ { - "stateRoot": "0x1c99b01120e7a2fa1301b3505f20100e72362e5ac3f96854420e56ba8984d716", - "txRoot": "0xb5eee60b45801179cbde3781b9a5dee9b3111554618c9cda3d6f7e351fd41e0b", - "receiptRoot": "0x86ceb80cb6bef8fe4ac0f1c99409f67cb2554c4432f374e399b94884eb3e6562", + "stateRoot": "0xadff407345f10f9ca555978665f414508b0ae6f75bb3e021db66a43329d35bdd", + "txRoot": "0x23e4973bf3a2315801178524b870d66a00a0e9e312f24c150d56f42faa8521de", + "receiptRoot": "0xf171a9e908a0720088e1b71d26079b7bf3702f02b38e0dec0c57e7aa41087aa3", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "receipts": [ - { - "root": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "status": "0x1", - "type": "0x0", - "from": "0x25ace71c97b33cc4729cf772ae268934f7ab5fa1", - "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "cumulativeGasUsed": "0xa878", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": [], - "transactionHash": "0x4e6549e2276d1bc256b2a56ead2d9705a51a8bf54e3775fbd2e98c91fb0e4494", - "contractAddress": "0x0000000000000000000000000000000000000000", - "blockNumber": "0x76976ad", - "gasUsed": "0xa878", - "effectiveGasPrice": "0x1", - "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "transactionIndex": "0x0" - } + "0xca7e0182b5eac08203a901" ] -} \ No newline at end of file +} diff --git a/fixtures/execution/GovernanceTokenPrecompile.json b/fixtures/execution/GovernanceTokenPrecompile.json deleted file mode 100644 index f260973..0000000 --- a/fixtures/execution/GovernanceTokenPrecompile.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "env": { - "currentCoinbase": "0x0000000000000000000000000000000000000000", - "currentDifficulty": "0xb2218ee88649587d0b873afc0e393ec8d98df20aedecd6fb198516937b13d3b", - "currentGasLimit": "0x1c9c380", - "previousHash": "0xe6ffa61663b65519be70cd9b3c0094d9ce556aa490b99950dcf1415a3b11aa04", - "currentNumber": "0x75a1d89", - "currentTimestamp": "0x66a814cc" - }, - "alloc": { - "0x0000000000000000000000000000000000000000": { - "balance": "0x117b08b474fb13e6", - "nonce": 3 - }, - "0x4200000000000000000000000000000000000042": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f9578063a457c2d711610097578063d505accf11610071578063d505accf14610553578063dd62ed3e1461056f578063f1127ed81461059f578063f2fde38b146105cf576101c4565b8063a457c2d7146104d7578063a9059cbb14610507578063c3cda52014610537576101c4565b80638da5cb5b116100d35780638da5cb5b1461043b5780638e539e8c1461045957806395d89b41146104895780639ab24eb0146104a7576101c4565b8063715018a6146103e557806379cc6790146103ef5780637ecebe001461040b576101c4565b80633a46b1a811610166578063587cde1e11610140578063587cde1e146103395780635c19a95c146103695780636fcfff451461038557806370a08231146103b5576101c4565b80633a46b1a8146102d157806340c10f191461030157806342966c681461031d576101c4565b806323b872dd116101a257806323b872dd14610235578063313ce567146102655780633644e5151461028357806339509351146102a1576101c4565b806306fdde03146101c9578063095ea7b3146101e757806318160ddd14610217575b600080fd5b6101d16105eb565b6040516101de9190612a9e565b60405180910390f35b61020160048036038101906101fc9190612b59565b61067d565b60405161020e9190612bb4565b60405180910390f35b61021f6106a0565b60405161022c9190612bde565b60405180910390f35b61024f600480360381019061024a9190612bf9565b6106aa565b60405161025c9190612bb4565b60405180910390f35b61026d6106d9565b60405161027a9190612c68565b60405180910390f35b61028b6106e2565b6040516102989190612c9c565b60405180910390f35b6102bb60048036038101906102b69190612b59565b6106f1565b6040516102c89190612bb4565b60405180910390f35b6102eb60048036038101906102e69190612b59565b61079b565b6040516102f89190612bde565b60405180910390f35b61031b60048036038101906103169190612b59565b61082f565b005b61033760048036038101906103329190612cb7565b6108b9565b005b610353600480360381019061034e9190612ce4565b6108cd565b6040516103609190612d20565b60405180910390f35b610383600480360381019061037e9190612ce4565b610936565b005b61039f600480360381019061039a9190612ce4565b61094a565b6040516103ac9190612d5a565b60405180910390f35b6103cf60048036038101906103ca9190612ce4565b61099e565b6040516103dc9190612bde565b60405180910390f35b6103ed6109e6565b005b61040960048036038101906104049190612b59565b610a6e565b005b61042560048036038101906104209190612ce4565b610a8e565b6040516104329190612bde565b60405180910390f35b610443610ade565b6040516104509190612d20565b60405180910390f35b610473600480360381019061046e9190612cb7565b610b08565b6040516104809190612bde565b60405180910390f35b610491610b5e565b60405161049e9190612a9e565b60405180910390f35b6104c160048036038101906104bc9190612ce4565b610bf0565b6040516104ce9190612bde565b60405180910390f35b6104f160048036038101906104ec9190612b59565b610d01565b6040516104fe9190612bb4565b60405180910390f35b610521600480360381019061051c9190612b59565b610deb565b60405161052e9190612bb4565b60405180910390f35b610551600480360381019061054c9190612dcd565b610e0e565b005b61056d60048036038101906105689190612e5a565b610f12565b005b61058960048036038101906105849190612efc565b611054565b6040516105969190612bde565b60405180910390f35b6105b960048036038101906105b49190612f68565b6110db565b6040516105c6919061301d565b60405180910390f35b6105e960048036038101906105e49190612ce4565b6111eb565b005b6060600380546105fa90613067565b80601f016020809104026020016040519081016040528092919081815260200182805461062690613067565b80156106735780601f1061064857610100808354040283529160200191610673565b820191906000526020600020905b81548152906001019060200180831161065657829003601f168201915b5050505050905090565b6000806106886112e3565b90506106958185856112eb565b600191505092915050565b6000600254905090565b6000806106b56112e3565b90506106c28582856114b6565b6106cd858585611542565b60019150509392505050565b60006012905090565b60006106ec6117c3565b905090565b6000806106fc6112e3565b9050610790818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461078b91906130c8565b6112eb565b600191505092915050565b60004382106107df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d69061316a565b60405180910390fd5b610827600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836118dd565b905092915050565b6108376112e3565b73ffffffffffffffffffffffffffffffffffffffff16610855610ade565b73ffffffffffffffffffffffffffffffffffffffff16146108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a2906131d6565b60405180910390fd5b6108b582826119e9565b5050565b6108ca6108c46112e3565b826119f7565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6109476109416112e3565b82611a05565b50565b6000610997600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611b1f565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109ee6112e3565b73ffffffffffffffffffffffffffffffffffffffff16610a0c610ade565b73ffffffffffffffffffffffffffffffffffffffff1614610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a59906131d6565b60405180910390fd5b610a6c6000611b72565b565b610a8082610a7a6112e3565b836114b6565b610a8a82826119f7565b5050565b6000610ad7600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611c38565b9050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000438210610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b439061316a565b60405180910390fd5b610b576008836118dd565b9050919050565b606060048054610b6d90613067565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9990613067565b8015610be65780601f10610bbb57610100808354040283529160200191610be6565b820191906000526020600020905b815481529060010190602001808311610bc957829003601f168201915b5050505050905090565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008114610cd857600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182610c8c91906131f6565b81548110610c9d57610c9c61322a565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610cdb565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b600080610d0c6112e3565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc9906132cb565b60405180910390fd5b610ddf82868684036112eb565b60019250505092915050565b600080610df66112e3565b9050610e03818585611542565b600191505092915050565b83421115610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4890613337565b60405180910390fd5b6000610eb3610eab7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610e909493929190613357565b60405160208183030381529060405280519060200120611c46565b858585611c60565b9050610ebe81611c8b565b8614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef6906133e8565b60405180910390fd5b610f098188611a05565b50505050505050565b83421115610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90613454565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610f848c611c8b565b89604051602001610f9a96959493929190613474565b6040516020818303038152906040528051906020012090506000610fbd82611c46565b90506000610fcd82878787611c60565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490613521565b60405180910390fd5b6110488a8a8a6112eb565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6110e36129c7565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208263ffffffff168154811061113a5761113961322a565b5b906000526020600020016040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b6111f36112e3565b73ffffffffffffffffffffffffffffffffffffffff16611211610ade565b73ffffffffffffffffffffffffffffffffffffffff1614611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e906131d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce906135b3565b60405180910390fd5b6112e081611b72565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135290613645565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c2906136d7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114a99190612bde565b60405180910390a3505050565b60006114c28484611054565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461153c578181101561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590613743565b60405180910390fd5b61153b84848484036112eb565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a9906137d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990613867565b60405180910390fd5b61162d838383611ce9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa906138f9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461174691906130c8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117aa9190612bde565b60405180910390a36117bd848484611cee565b50505050565b60007f000000000000000000000000420000000000000000000000000000000000004273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561183f57507f000000000000000000000000000000000000000000000000000000000000000a46145b1561186c577fd423c9c6b838296762a6bbf9663d4609148ea6bc83b5e94ce2c05615edc6907290506118da565b6118d77f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7ff997187c3c319ef9e33fa05f852d1612b66e309dc48d97a4b6b39832090a3bec7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611cfe565b90505b90565b6000808380549050905060005b8181101561195c5760006118fe8284611d38565b9050848682815481106119145761191361322a565b5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff16111561194657809250611956565b60018161195391906130c8565b91505b506118ea565b600082146119be578460018361197291906131f6565b815481106119835761198261322a565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166119c1565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169250505092915050565b6119f38282611d5e565b5050565b611a018282611deb565b5050565b6000611a10836108cd565b90506000611a1d8461099e565b905082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611b19828483611e09565b50505050565b600063ffffffff8016821115611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b619061398b565b60405180910390fd5b819050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b6000611c59611c536117c3565b83612002565b9050919050565b6000806000611c7187878787612035565b91509150611c7e81612142565b8192505050949350505050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611cd881611c38565b9150611ce381612317565b50919050565b505050565b611cf983838361232d565b505050565b60008383834630604051602001611d199594939291906139ab565b6040516020818303038152906040528051906020012090509392505050565b60006002828418611d499190613a2d565b828416611d5691906130c8565b905092915050565b611d688282612358565b611d706124b8565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611d966106a0565b1115611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90613ad0565b60405180910390fd5b611de560086124dc836124f2565b50505050565b611df5828261276a565b611e036008612941836124f2565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e455750600081115b15611ffd57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f2357600080611ecc600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612941856124f2565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611f18929190613af0565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ffc57600080611fa5600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124dc856124f2565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611ff1929190613af0565b60405180910390a250505b5b505050565b60008282604051602001612017929190613b91565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612070576000600391509150612139565b601b8560ff16141580156120885750601c8560ff1614155b1561209a576000600491509150612139565b6000600187878787604051600081526020016040526040516120bf9493929190613bc8565b6020604051602081039080840390855afa1580156120e1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213057600060019250925050612139565b80600092509250505b94509492505050565b6000600481111561215657612155613c0d565b5b81600481111561216957612168613c0d565b5b141561217457612314565b6001600481111561218857612187613c0d565b5b81600481111561219b5761219a613c0d565b5b14156121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d390613c88565b60405180910390fd5b600260048111156121f0576121ef613c0d565b5b81600481111561220357612202613c0d565b5b1415612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b90613cf4565b60405180910390fd5b6003600481111561225857612257613c0d565b5b81600481111561226b5761226a613c0d565b5b14156122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a390613d86565b60405180910390fd5b6004808111156122bf576122be613c0d565b5b8160048111156122d2576122d1613c0d565b5b1415612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a90613e18565b60405180910390fd5b5b50565b6001816000016000828254019250508190555050565b612338838383612957565b612353612344846108cd565b61234d846108cd565b83611e09565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf90613e84565b60405180910390fd5b6123d460008383611ce9565b80600260008282546123e691906130c8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461243b91906130c8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124a09190612bde565b60405180910390a36124b460008383611cee565b5050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b600081836124ea91906130c8565b905092915050565b60008060008580549050905060008114612560578560018261251491906131f6565b815481106125255761252461322a565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612563565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16925061259183858763ffffffff16565b91506000811180156125e4575043866001836125ad91906131f6565b815481106125be576125bd61322a565b5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff16145b15612671576125f28261295c565b8660018361260091906131f6565b815481106126115761261061322a565b5b9060005260206000200160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550612761565b85604051806040016040528061268643611b1f565b63ffffffff16815260200161269a8561295c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b50935093915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d190613f16565b60405180910390fd5b6127e682600083611ce9565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561286c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286390613fa8565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546128c391906131f6565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129289190612bde565b60405180910390a361293c83600084611cee565b505050565b6000818361294f91906131f6565b905092915050565b505050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156129bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b69061403a565b60405180910390fd5b819050919050565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a3f578082015181840152602081019050612a24565b83811115612a4e576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a7082612a05565b612a7a8185612a10565b9350612a8a818560208601612a21565b612a9381612a54565b840191505092915050565b60006020820190508181036000830152612ab88184612a65565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612af082612ac5565b9050919050565b612b0081612ae5565b8114612b0b57600080fd5b50565b600081359050612b1d81612af7565b92915050565b6000819050919050565b612b3681612b23565b8114612b4157600080fd5b50565b600081359050612b5381612b2d565b92915050565b60008060408385031215612b7057612b6f612ac0565b5b6000612b7e85828601612b0e565b9250506020612b8f85828601612b44565b9150509250929050565b60008115159050919050565b612bae81612b99565b82525050565b6000602082019050612bc96000830184612ba5565b92915050565b612bd881612b23565b82525050565b6000602082019050612bf36000830184612bcf565b92915050565b600080600060608486031215612c1257612c11612ac0565b5b6000612c2086828701612b0e565b9350506020612c3186828701612b0e565b9250506040612c4286828701612b44565b9150509250925092565b600060ff82169050919050565b612c6281612c4c565b82525050565b6000602082019050612c7d6000830184612c59565b92915050565b6000819050919050565b612c9681612c83565b82525050565b6000602082019050612cb16000830184612c8d565b92915050565b600060208284031215612ccd57612ccc612ac0565b5b6000612cdb84828501612b44565b91505092915050565b600060208284031215612cfa57612cf9612ac0565b5b6000612d0884828501612b0e565b91505092915050565b612d1a81612ae5565b82525050565b6000602082019050612d356000830184612d11565b92915050565b600063ffffffff82169050919050565b612d5481612d3b565b82525050565b6000602082019050612d6f6000830184612d4b565b92915050565b612d7e81612c4c565b8114612d8957600080fd5b50565b600081359050612d9b81612d75565b92915050565b612daa81612c83565b8114612db557600080fd5b50565b600081359050612dc781612da1565b92915050565b60008060008060008060c08789031215612dea57612de9612ac0565b5b6000612df889828a01612b0e565b9650506020612e0989828a01612b44565b9550506040612e1a89828a01612b44565b9450506060612e2b89828a01612d8c565b9350506080612e3c89828a01612db8565b92505060a0612e4d89828a01612db8565b9150509295509295509295565b600080600080600080600060e0888a031215612e7957612e78612ac0565b5b6000612e878a828b01612b0e565b9750506020612e988a828b01612b0e565b9650506040612ea98a828b01612b44565b9550506060612eba8a828b01612b44565b9450506080612ecb8a828b01612d8c565b93505060a0612edc8a828b01612db8565b92505060c0612eed8a828b01612db8565b91505092959891949750929550565b60008060408385031215612f1357612f12612ac0565b5b6000612f2185828601612b0e565b9250506020612f3285828601612b0e565b9150509250929050565b612f4581612d3b565b8114612f5057600080fd5b50565b600081359050612f6281612f3c565b92915050565b60008060408385031215612f7f57612f7e612ac0565b5b6000612f8d85828601612b0e565b9250506020612f9e85828601612f53565b9150509250929050565b612fb181612d3b565b82525050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b612fe881612fb7565b82525050565b6040820160008201516130046000850182612fa8565b5060208201516130176020850182612fdf565b50505050565b60006040820190506130326000830184612fee565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061307f57607f821691505b6020821081141561309357613092613038565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130d382612b23565b91506130de83612b23565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561311357613112613099565b5b828201905092915050565b7f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400600082015250565b6000613154601f83612a10565b915061315f8261311e565b602082019050919050565b6000602082019050818103600083015261318381613147565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006131c0602083612a10565b91506131cb8261318a565b602082019050919050565b600060208201905081810360008301526131ef816131b3565b9050919050565b600061320182612b23565b915061320c83612b23565b92508282101561321f5761321e613099565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006132b5602583612a10565b91506132c082613259565b604082019050919050565b600060208201905081810360008301526132e4816132a8565b9050919050565b7f4552433230566f7465733a207369676e61747572652065787069726564000000600082015250565b6000613321601d83612a10565b915061332c826132eb565b602082019050919050565b6000602082019050818103600083015261335081613314565b9050919050565b600060808201905061336c6000830187612c8d565b6133796020830186612d11565b6133866040830185612bcf565b6133936060830184612bcf565b95945050505050565b7f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000600082015250565b60006133d2601983612a10565b91506133dd8261339c565b602082019050919050565b60006020820190508181036000830152613401816133c5565b9050919050565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b600061343e601d83612a10565b915061344982613408565b602082019050919050565b6000602082019050818103600083015261346d81613431565b9050919050565b600060c0820190506134896000830189612c8d565b6134966020830188612d11565b6134a36040830187612d11565b6134b06060830186612bcf565b6134bd6080830185612bcf565b6134ca60a0830184612bcf565b979650505050505050565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b600061350b601e83612a10565b9150613516826134d5565b602082019050919050565b6000602082019050818103600083015261353a816134fe565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061359d602683612a10565b91506135a882613541565b604082019050919050565b600060208201905081810360008301526135cc81613590565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061362f602483612a10565b915061363a826135d3565b604082019050919050565b6000602082019050818103600083015261365e81613622565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136c1602283612a10565b91506136cc82613665565b604082019050919050565b600060208201905081810360008301526136f0816136b4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061372d601d83612a10565b9150613738826136f7565b602082019050919050565b6000602082019050818103600083015261375c81613720565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006137bf602583612a10565b91506137ca82613763565b604082019050919050565b600060208201905081810360008301526137ee816137b2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613851602383612a10565b915061385c826137f5565b604082019050919050565b6000602082019050818103600083015261388081613844565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138e3602683612a10565b91506138ee82613887565b604082019050919050565b60006020820190508181036000830152613912816138d6565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203360008201527f3220626974730000000000000000000000000000000000000000000000000000602082015250565b6000613975602683612a10565b915061398082613919565b604082019050919050565b600060208201905081810360008301526139a481613968565b9050919050565b600060a0820190506139c06000830188612c8d565b6139cd6020830187612c8d565b6139da6040830186612c8d565b6139e76060830185612bcf565b6139f46080830184612d11565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a3882612b23565b9150613a4383612b23565b925082613a5357613a526139fe565b5b828204905092915050565b7f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60008201527f766572666c6f77696e6720766f74657300000000000000000000000000000000602082015250565b6000613aba603083612a10565b9150613ac582613a5e565b604082019050919050565b60006020820190508181036000830152613ae981613aad565b9050919050565b6000604082019050613b056000830185612bcf565b613b126020830184612bcf565b9392505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000613b5a600283613b19565b9150613b6582613b24565b600282019050919050565b6000819050919050565b613b8b613b8682612c83565b613b70565b82525050565b6000613b9c82613b4d565b9150613ba88285613b7a565b602082019150613bb88284613b7a565b6020820191508190509392505050565b6000608082019050613bdd6000830187612c8d565b613bea6020830186612c59565b613bf76040830185612c8d565b613c046060830184612c8d565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613c72601883612a10565b9150613c7d82613c3c565b602082019050919050565b60006020820190508181036000830152613ca181613c65565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613cde601f83612a10565b9150613ce982613ca8565b602082019050919050565b60006020820190508181036000830152613d0d81613cd1565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d70602283612a10565b9150613d7b82613d14565b604082019050919050565b60006020820190508181036000830152613d9f81613d63565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e02602283612a10565b9150613e0d82613da6565b604082019050919050565b60006020820190508181036000830152613e3181613df5565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613e6e601f83612a10565b9150613e7982613e38565b602082019050919050565b60006020820190508181036000830152613e9d81613e61565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f00602183612a10565b9150613f0b82613ea4565b604082019050919050565b60006020820190508181036000830152613f2f81613ef3565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f92602283612a10565b9150613f9d82613f36565b604082019050919050565b60006020820190508181036000830152613fc181613f85565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203260008201527f3234206269747300000000000000000000000000000000000000000000000000602082015250565b6000614024602783612a10565b915061402f82613fc8565b604082019050919050565b6000602082019050818103600083015261405381614017565b905091905056fea2646970667358221220138b857b6b6d837b7bcbbf0bbebb100d9b44fd2a46f6fbae4444310c2822129c64736f6c634300080c0033", - "nonce": 1 - }, - "0xa0ee7a142d267c1f36714e4a8f75612f20a79720": { - "balance": "0x21e19e0c9bab2400000" - } - }, - "outAlloc": { - "0x4200000000000000000000000000000000000042": { - "storage": { - "0xf980c21174727e87da7d3bd6f27ed8bd6c61e756fae8f17f3567e50f9a4de872": "0x0000000000000000000000000000000000000000000000000000000000000064" - } - }, - "0xa0ee7a142d267c1f36714e4a8f75612f20a79720": { - "balance": "0x21e19e0c9b49a110d00", - "nonce": 1 - }, - "0x0000000000000000000000000000000000000000": { - "balance": "0x117b08b78fce02a6" - } - }, - "txs": [ - { - "EIP1559": { - "chainId": "0xa", - "nonce": "0x0", - "gasLimit": "0xfbe7", - "maxFeePerGas": "0xdd642", - "maxPriorityFeePerGas": "0x45bb2", - "to": "0x4200000000000000000000000000000000000042", - "value": "0x0", - "accessList": [], - "input": "0x095ea7b3000000000000000000000000000000000000000000000000000000000deadeee0000000000000000000000000000000000000000000000000000000000000064", - "r": "0xea7c43d9baf51b4b297b77f638fdc3f1774cf8ac864d7136c5fb3c1ff2a1d1bf", - "s": "0x479f4ad9b9023664a4e515205bc29f19ed6c860992e377e870e68cb8c5194cba", - "yParity": "0x1", - "hash": "0xcb1773e45af35297f17a09011469fcbba0335560690cbc14f8419611441652ae" - } - } - ], - "result": { - "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "txRoot": "0x8d600b536f1ceb840a837785cf46a972f1d7429a395d0fea22d470975069c4cc", - "receiptRoot": "0x1651de9d86025808f854681ab008bab36aa17ca5817a47247249207e56e23b95", - "logsBloom": "0x00000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200040000000000000000020000000000000000000000000000000000008000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000001000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000004000000000000010000000000000000000000000000000000000000000000000000000000000", - "receipts": [ - { - "root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "transactionHash": "0xcb1773e45af35297f17a09011469fcbba0335560690cbc14f8419611441652ae", - "gasUsed": "0xb660", - "blockHash": "0x4b4a6e8b0b94ee2cbe99159012578fda85d8317af23e90fb92ba974d1b6dae14", - "transactionIndex": "0x0", - "type": "0x2", - "status": "0x1", - "cumulativeGasUsed": "0xb660", - "logs": [ - { - "address": "0x4200000000000000000000000000000000000042", - "topics": [ - "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - "0x000000000000000000000000a0ee7a142d267c1f36714e4a8f75612f20a79720", - "0x000000000000000000000000000000000000000000000000000000000deadeee" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000064", - "blockHash": "0x4b4a6e8b0b94ee2cbe99159012578fda85d8317af23e90fb92ba974d1b6dae14", - "blockNumber": "0x75a1d89", - "blockTimestamp": "0x66a814cc", - "transactionHash": "0xcb1773e45af35297f17a09011469fcbba0335560690cbc14f8419611441652ae", - "transactionIndex": "0x0", - "logIndex": "0x0", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200040000000000000000020000000000000000000000000000000000008000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000001000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000004000000000000010000000000000000000000000000000000000000000000000000000000000" - } - ] - } -} \ No newline at end of file diff --git a/fixtures/execution/Multicall3Preinstall.json b/fixtures/execution/Multicall3Preinstall.json deleted file mode 100644 index 8101e2e..0000000 --- a/fixtures/execution/Multicall3Preinstall.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "env": { - "currentCoinbase": "0x0000000000000000000000000000000000000000", - "currentDifficulty": "0xa007e14f44c625904d7d47039486877e86e12a89d546e0e1a362a2fb17b79c3a", - "currentGasLimit": "0x1c9c380", - "previousHash": "0xf5f42bdf56f344c59a1580cfa8fed74f1f68800f5f38499bd241bbe1b6cdfcb5", - "currentNumber": "0x75a1d8c", - "currentTimestamp": "0x66a814d1" - }, - "alloc": { - "0x0000000000000000000000000000000000000000": { - "balance": "0x117b08b474fb13e6", - "nonce": 3 - }, - "0xa0ee7a142d267c1f36714e4a8f75612f20a79720": { - "balance": "0x21e19e0c9bab2400000" - } - }, - "outAlloc": { - "0x0000000000000000000000000000000000000000": { - "balance": "0x117b08b62b56a1e1" - }, - "0xa0ee7a142d267c1f36714e4a8f75612f20a79720": { - "balance": "0x21e19e0c9b67a535d1a", - "nonce": 1 - } - }, - "txs": [ - { - "EIP1559": { - "chainId": "0xa", - "nonce": "0x0", - "gasLimit": "0xd2c9", - "maxFeePerGas": "0xca207", - "maxPriorityFeePerGas": "0x30a9b", - "to": "0xca11bde05977b3631167028862be2a173976ca11", - "value": "0x0", - "accessList": [], - "input": "0x82ad56cb00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000420000000000000000000000000000000000004200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000406fdde03000000000000000000000000000000000000000000000000000000000000000000000000000000004200000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044dd62ed3e000000000000000000000000a0ee7a142d267c1f36714e4a8f75612f20a79720000000000000000000000000000000000000000000000000000000000deadeee00000000000000000000000000000000000000000000000000000000", - "r": "0xa2d599599aada7d2cb5a1055efff0614c7de127c5fb4f5a17f760ff861f341eb", - "s": "0x14054c7a37b36f18aa9e8e08258277e796d1d84a639a14dbb365fa96474f5a03", - "yParity": "0x1", - "hash": "0x127f6f00923b31b9cf117cd336490d6cef58808b57e399a6d91c62e3d1a0d43d" - } - } - ], - "result": { - "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "txRoot": "0xb2ca306b0c8561be7b461cd9f6443e81fa97d5bf9309f86a4505bae9e9cedd2b", - "receiptRoot": "0x8a2435e8a304d276ee6bebb6c6d815d4c35d91446233d5cec6f4636ce6dbd79b", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "receipts": [ - { - "root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "transactionHash": "0x127f6f00923b31b9cf117cd336490d6cef58808b57e399a6d91c62e3d1a0d43d", - "gasUsed": "0x9021", - "blockHash": "0x42d589c3e9bc18c0b27d61d36fea48714c3ac56b59122d6093128f53c3f1a5e3", - "transactionIndex": "0x0", - "type": "0x2", - "status": "0x1", - "cumulativeGasUsed": "0x9021", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - } - ] - } -} \ No newline at end of file diff --git a/fixtures/execution/Weth9Precompile.json b/fixtures/execution/Weth9Precompile.json deleted file mode 100644 index e427662..0000000 --- a/fixtures/execution/Weth9Precompile.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "env": { - "currentCoinbase": "0x0000000000000000000000000000000000000000", - "currentDifficulty": "0xb2218ee88649587d0b873afc0e393ec8d98df20aedecd6fb198516937b13d3b", - "currentGasLimit": "0x1c9c380", - "previousHash": "0x50fc0c982e36916f6ec4e5ae3562ba3a6855f733e5cb13efde15c88a3b17cae2", - "currentNumber": "0x75a1d86", - "currentTimestamp": "0x66a814c5" - }, - "alloc": { - "0xa0ee7a142d267c1f36714e4a8f75612f20a79720": { - "balance": "0x21e19e0c9bab2400000" - }, - "0x0000000000000000000000000000000000000000": { - "balance": "0x117b08b474fb13e6", - "nonce": 3 - }, - "0x4200000000000000000000000000000000000006": { - "balance": "0x86149437ee6847550f8", - "code": "0x6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a7231582091c18790e0cca5011d2518024840ee00fecc67e11f56fd746f2cf84d5b583e0064736f6c63430005110032" - } - }, - "outAlloc": { - "0x4200000000000000000000000000000000000006": { - "balance": "0x8615724359a2bd950f8", - "storage": { - "0x6a706e96617ceafd46f24757f71aad32b88c8bf0b8ae22ec3de611582d2d4a6c": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000" - } - }, - "0xa0ee7a142d267c1f36714e4a8f75612f20a79720": { - "balance": "0x21e0c0012ff5067e020", - "nonce": 1 - }, - "0x0000000000000000000000000000000000000000": { - "balance": "0x117b08b93d372d24" - } - }, - "txs": [ - { - "EIP1559": { - "chainId": "0xa", - "nonce": "0x0", - "gasLimit": "0x10050", - "maxFeePerGas": "0x1083d5", - "maxPriorityFeePerGas": "0x6fc3f", - "to": "0x4200000000000000000000000000000000000006", - "value": "0xde0b6b3a7640000", - "accessList": [], - "input": "0xd0e30db0", - "r": "0xf5ef69574b2e966b78642cd49bfa388125c92899cc80669e7a360d3fc98034fa", - "s": "0x79882861eabe2c110f375f522b0c2cff1eac43d93311412468f2ebc8b7d19bcf", - "yParity": "0x0", - "hash": "0x8cc44f631057a5bc0590310b6bdc1e54043a5a011a96cd47733d83318e1ac668" - } - } - ], - "result": { - "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "txRoot": "0x3ea0854b2c4baf048f391a237a5b88bced1b67087f087c3b5ccf20c6fdd7f94c", - "receiptRoot": "0xc4b290f69c74db3a91e2758c1489a26e40885f0e07e93a5158ffbb86ddbe36c0", - "logsBloom": "0x00000000000000000000040000000000000000000000000000040000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000400000000000000000", - "receipts": [ - { - "root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "transactionHash": "0x8cc44f631057a5bc0590310b6bdc1e54043a5a011a96cd47733d83318e1ac668", - "gasUsed": "0xaf42", - "blockHash": "0x071e6e377b4fd55f0ad172de9a25dbbd0bde1b06297aa1edfe5d053a148bd5c2", - "transactionIndex": "0x0", - "type": "0x2", - "status": "0x1", - "cumulativeGasUsed": "0xaf42", - "logs": [ - { - "address": "0x4200000000000000000000000000000000000006", - "topics": [ - "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", - "0x000000000000000000000000a0ee7a142d267c1f36714e4a8f75612f20a79720" - ], - "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000", - "blockHash": "0x071e6e377b4fd55f0ad172de9a25dbbd0bde1b06297aa1edfe5d053a148bd5c2", - "blockNumber": "0x75a1d86", - "blockTimestamp": "0x66a814c5", - "transactionHash": "0x8cc44f631057a5bc0590310b6bdc1e54043a5a011a96cd47733d83318e1ac668", - "transactionIndex": "0x0", - "logIndex": "0x0", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000040000000000000000000000000000040000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000400000000000000000" - } - ] - } -} \ No newline at end of file diff --git a/fixtures/execution/simple_deposit.json.gz b/fixtures/execution/simple_deposit.json.gz new file mode 100644 index 0000000..ff49b63 Binary files /dev/null and b/fixtures/execution/simple_deposit.json.gz differ diff --git a/fixtures/execution/storage_clear.json.gz b/fixtures/execution/storage_clear.json.gz new file mode 100644 index 0000000..30ff8f3 Binary files /dev/null and b/fixtures/execution/storage_clear.json.gz differ