diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 5f604d6..4711095 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -2,9 +2,9 @@ name: rust on: push: - branches: [ master ] + branches: [master] pull_request: - branches: [ '*' ] + branches: ["*"] jobs: tests: @@ -27,3 +27,41 @@ jobs: - name: cargo test run: cargo test + + clippy: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + components: clippy + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + - run: cargo clippy --workspace --all-targets --all-features + env: + RUSTFLAGS: -Dwarnings + + docs: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@nightly + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + - run: cargo doc --workspace --all-features --no-deps --document-private-items + env: + RUSTDOCFLAGS: "--cfg docsrs -D warnings" + + fmt: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@nightly + with: + components: rustfmt + - run: cargo fmt --all --check diff --git a/.gitignore b/.gitignore index 6594403..45e80d5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ target/ **/__pycache__/ +.idea/ \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 2b89c4c..a264956 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" @@ -66,207 +45,172 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] -name = "alloy-chains" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40646aa7f01e396139cf0d6c3a7475eeb8094a0f41d8199f10860c8aef09d2f1" -dependencies = [ - "num_enum", - "serde", - "strum", -] - -[[package]] -name = "alloy-dyn-abi" -version = "0.6.4" +name = "alloy-primitives" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2919acdad13336bc5dc26b636cdd6892c2f27fb0d4a58320a00c2713cf6a4e9a" +checksum = "99bbad0a6b588ef4aec1b5ddbbfdacd9ef04e00b979617765b03174318ee1f3a" dependencies = [ - "alloy-json-abi 0.6.4", - "alloy-primitives 0.6.4", - "alloy-sol-type-parser 0.6.4", - "alloy-sol-types", - "arbitrary", + "alloy-rlp", + "bytes", + "cfg-if", "const-hex", - "derive_arbitrary", "derive_more", + "hex-literal", "itoa", + "k256", + "keccak-asm", "proptest", + "rand", + "ruint", "serde", - "serde_json", - "winnow 0.6.6", + "tiny-keccak", ] [[package]] -name = "alloy-eips" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" +name = "alloy-rlp" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d58d9f5da7b40e9bfff0b7e7816700be4019db97d4b6359fe7f94a9e22e42ac" dependencies = [ - "alloy-primitives 0.6.4", - "alloy-rlp", - "serde", - "thiserror", + "arrayvec", + "bytes", ] [[package]] -name = "alloy-genesis" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" dependencies = [ - "alloy-primitives 0.6.4", - "alloy-rpc-types", - "serde", + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", ] [[package]] -name = "alloy-json-abi" -version = "0.6.4" +name = "ark-ff" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ed0f2a6c3a1c947b4508522a53a190dba8f94dcd4e3e1a5af945a498e78f2f" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ - "alloy-primitives 0.6.4", - "alloy-sol-type-parser 0.6.4", - "serde", - "serde_json", + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", ] [[package]] -name = "alloy-json-abi" -version = "0.7.0" +name = "ark-ff-asm" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a35ddfd27576474322a5869e4c123e5f3e7b2177297c18e4e82ea501cb125b" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" dependencies = [ - "alloy-primitives 0.7.0", - "alloy-sol-type-parser 0.7.0", - "serde", - "serde_json", + "quote", + "syn 1.0.109", ] [[package]] -name = "alloy-json-rpc" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ - "alloy-primitives 0.6.4", - "serde", - "serde_json", - "thiserror", + "quote", + "syn 1.0.109", ] [[package]] -name = "alloy-network" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" dependencies = [ - "alloy-eips", - "alloy-json-rpc", - "alloy-primitives 0.6.4", - "alloy-rlp", - "serde", + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", ] [[package]] -name = "alloy-primitives" -version = "0.6.4" +name = "ark-ff-macros" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "600d34d8de81e23b6d909c094e23b3d357e01ca36b78a8c5424c501eedbe86f0" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" 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", - "tiny-keccak", + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "alloy-primitives" -version = "0.7.0" +name = "ark-serialize" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99bbad0a6b588ef4aec1b5ddbbfdacd9ef04e00b979617765b03174318ee1f3a" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" dependencies = [ - "alloy-rlp", - "bytes", - "cfg-if", - "const-hex", - "derive_more", - "getrandom", - "hex-literal", - "itoa", - "k256", - "keccak-asm", - "proptest", - "rand", - "ruint", - "serde", - "tiny-keccak", + "ark-std 0.3.0", + "digest 0.9.0", ] [[package]] -name = "alloy-providers" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" -dependencies = [ - "alloy-network", - "alloy-primitives 0.6.4", - "alloy-rpc-client", - "alloy-rpc-trace-types", - "alloy-rpc-types", - "alloy-transport", - "alloy-transport-http", - "async-trait", - "auto_impl", - "reqwest 0.11.27", - "serde", - "thiserror", +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", ] [[package]] -name = "alloy-pubsub" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" dependencies = [ - "alloy-json-rpc", - "alloy-primitives 0.6.4", - "alloy-transport", - "bimap", - "futures", - "serde", - "serde_json", - "tokio", - "tower", - "tracing", + "num-traits", + "rand", ] [[package]] -name = "alloy-rlp" -version = "0.3.4" +name = "ark-std" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d58d9f5da7b40e9bfff0b7e7816700be4019db97d4b6359fe7f94a9e22e42ac" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ - "alloy-rlp-derive", - "arrayvec", - "bytes", + "num-traits", + "rand", ] [[package]] -name = "alloy-rlp-derive" -version = "0.3.4" +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-trait" +version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a047897373be4bbb0224c1afdabca92648dc57a9c9ef6e7b0be3aff7a859c83" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", @@ -274,1526 +218,501 @@ dependencies = [ ] [[package]] -name = "alloy-rpc-client" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" dependencies = [ - "alloy-json-rpc", - "alloy-transport", - "alloy-transport-http", "futures", - "pin-project", - "reqwest 0.11.27", - "serde_json", - "tower", - "tracing", - "url", -] - -[[package]] -name = "alloy-rpc-trace-types" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" -dependencies = [ - "alloy-primitives 0.6.4", - "alloy-rpc-types", - "serde", - "serde_json", -] - -[[package]] -name = "alloy-rpc-types" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" -dependencies = [ - "alloy-primitives 0.6.4", - "alloy-rlp", - "itertools 0.12.1", - "serde", - "serde_json", - "thiserror", + "pharos", + "rustc_version 0.4.0", ] [[package]] -name = "alloy-signer" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" +name = "aurora-engine-modexp" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfacad86e9e138fca0670949eb8ed4ffdf73a55bded8887efe0863cd1a3a6f70" dependencies = [ - "alloy-network", - "alloy-primitives 0.6.4", - "async-trait", - "auto_impl", - "coins-bip32", - "coins-bip39", - "elliptic-curve", - "eth-keystore", - "k256", - "rand", - "thiserror", + "hex", + "num", ] [[package]] -name = "alloy-sol-macro" -version = "0.6.4" +name = "auto_impl" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86ec0a47740b20bc5613b8712d0d321d031c4efc58e9645af96085d5cccfc27" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ - "alloy-json-abi 0.6.4", - "const-hex", - "dunce", - "heck 0.4.1", - "indexmap", - "proc-macro-error", "proc-macro2", "quote", - "serde_json", "syn 2.0.58", - "syn-solidity", - "tiny-keccak", ] [[package]] -name = "alloy-sol-type-parser" -version = "0.6.4" +name = "autocfg" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0045cc89524e1451ccf33e8581355b6027ac7c6e494bb02959d4213ad0d8e91d" -dependencies = [ - "winnow 0.6.6", -] +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" [[package]] -name = "alloy-sol-type-parser" -version = "0.7.0" +name = "backtrace" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715f4d09a330cc181fc7c361b5c5c2766408fa59a0bac60349dcb7baabd404cc" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ - "winnow 0.6.6", + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", ] [[package]] -name = "alloy-sol-types" -version = "0.6.4" +name = "base16ct" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad09ec5853fa700d12d778ad224dcdec636af424d29fad84fb9a2f16a5b0ef09" -dependencies = [ - "alloy-json-abi 0.6.4", - "alloy-primitives 0.6.4", - "alloy-sol-macro", - "const-hex", - "serde", -] +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] -name = "alloy-transport" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" -dependencies = [ - "alloy-json-rpc", - "base64 0.21.7", - "futures-util", - "serde", - "serde_json", - "thiserror", - "tokio", - "tower", - "url", - "wasm-bindgen-futures", -] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] -name = "alloy-transport-http" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" -dependencies = [ - "alloy-json-rpc", - "alloy-transport", - "reqwest 0.11.27", - "serde_json", - "tower", - "url", -] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] -name = "alloy-transport-ipc" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" -dependencies = [ - "alloy-json-rpc", - "alloy-pubsub", - "alloy-transport", - "bytes", - "futures", - "interprocess", - "pin-project", - "serde_json", - "tokio", - "tokio-util", - "tracing", -] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] -name = "alloy-transport-ws" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=785c667#785c667813a6c76794044b943df58fc6e397734d" +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ - "alloy-pubsub", - "alloy-transport", - "futures", - "http 0.2.12", - "serde_json", - "tokio", - "tokio-tungstenite", - "tracing", - "ws_stream_wasm", + "bit-vec", ] [[package]] -name = "android-tzdata" -version = "0.1.1" +name = "bit-vec" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] -name = "android_system_properties" -version = "0.1.5" +name = "bitflags" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "anstream" -version = "0.6.13" +name = "bitflags" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "utf8parse", + "serde", ] [[package]] -name = "anstyle" -version = "1.0.6" +name = "bitvec" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "serde", + "tap", + "wyz", +] [[package]] -name = "anstyle-parse" -version = "0.2.3" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "utf8parse", + "generic-array", ] [[package]] -name = "anstyle-query" -version = "1.0.2" +name = "blst" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" dependencies = [ - "windows-sys 0.52.0", + "cc", + "glob", + "threadpool", + "zeroize", ] [[package]] -name = "anstyle-wincon" -version = "3.0.2" +name = "bumpalo" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" -dependencies = [ - "anstyle", - "windows-sys 0.52.0", -] +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] -name = "arbitrary" -version = "1.3.2" +name = "byte-slice-cast" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] -name = "ark-ff" -version = "0.3.0" +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" -dependencies = [ - "ark-ff-asm 0.3.0", - "ark-ff-macros 0.3.0", - "ark-serialize 0.3.0", - "ark-std 0.3.0", - "derivative", - "num-bigint", - "num-traits", - "paste", - "rustc_version 0.3.3", - "zeroize", -] +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] -name = "ark-ff" -version = "0.4.2" +name = "bytes" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" dependencies = [ - "ark-ff-asm 0.4.2", - "ark-ff-macros 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "derivative", - "digest 0.10.7", - "itertools 0.10.5", - "num-bigint", - "num-traits", - "paste", - "rustc_version 0.4.0", - "zeroize", + "serde", ] [[package]] -name = "ark-ff-asm" -version = "0.3.0" +name = "c-kzg" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +checksum = "3130f3d8717cc02e668a896af24984d5d5d4e8bf12e278e982e0f1bd88a0f9af" dependencies = [ - "quote", - "syn 1.0.109", + "blst", + "cc", + "glob", + "hex", + "libc", + "serde", ] [[package]] -name = "ark-ff-asm" -version = "0.4.2" +name = "cc" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.109", -] +checksum = "17f6e324229dc011159fcc089755d1e2e216a90d43a7dea6853ca740b84f35e7" [[package]] -name = "ark-ff-macros" -version = "0.3.0" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" -dependencies = [ - "num-bigint", - "num-traits", - "quote", - "syn 1.0.109", -] +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "ark-ff-macros" -version = "0.4.2" +name = "chrono" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" dependencies = [ - "num-bigint", "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", ] [[package]] -name = "ark-serialize" -version = "0.3.0" +name = "const-hex" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +checksum = "5ba00838774b4ab0233e355d26710fbfc8327a05c017f6dc4873f876d1f79f78" dependencies = [ - "ark-std 0.3.0", - "digest 0.9.0", + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", ] [[package]] -name = "ark-serialize" -version = "0.4.2" +name = "const-oid" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-std 0.4.0", - "digest 0.10.7", - "num-bigint", -] +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] -name = "ark-std" -version = "0.3.0" +name = "convert_case" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" -dependencies = [ - "num-traits", - "rand", -] +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] -name = "ark-std" -version = "0.4.0" +name = "core-foundation" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ - "num-traits", - "rand", + "core-foundation-sys", + "libc", ] [[package]] -name = "arrayvec" -version = "0.7.4" +name = "core-foundation-sys" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] -name = "ascii-canvas" -version = "3.0.0" +name = "cpufeatures" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ - "term", + "libc", ] [[package]] -name = "async-channel" -version = "2.2.1" +name = "crunchy" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" -dependencies = [ - "concurrent-queue", - "event-listener 5.3.0", - "event-listener-strategy 0.5.1", - "futures-core", - "pin-project-lite", -] +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] -name = "async-lock" -version = "3.3.0" +name = "crypto-bigint" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", - "pin-project-lite", + "generic-array", + "rand_core", + "subtle", + "zeroize", ] [[package]] -name = "async-task" -version = "4.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" - -[[package]] -name = "async-trait" -version = "0.1.80" +name = "crypto-common" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.58", + "generic-array", + "typenum", ] [[package]] -name = "async_io_stream" -version = "0.3.3" +name = "data-encoding" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" -dependencies = [ - "futures", - "pharos", - "rustc_version 0.4.0", -] +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] -name = "atomic" -version = "0.6.0" +name = "der" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ - "bytemuck", + "const-oid", + "zeroize", ] [[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "aurora-engine-modexp" -version = "1.0.0" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfacad86e9e138fca0670949eb8ed4ffdf73a55bded8887efe0863cd1a3a6f70" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "hex", - "num", + "powerfmt", ] [[package]] -name = "auto_impl" -version = "1.2.0" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.109", ] [[package]] -name = "autocfg" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" - -[[package]] -name = "backtrace" -version = "0.3.71" +name = "derive_more" +version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.0", + "syn 1.0.109", ] [[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.13.1" +name = "digest" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] [[package]] -name = "base64" -version = "0.21.7" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] [[package]] -name = "base64ct" -version = "1.6.0" +name = "dyn-clone" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] -name = "bech32" -version = "0.9.1" +name = "ecdsa" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] [[package]] -name = "bimap" -version = "0.6.3" +name = "either" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" [[package]] -name = "bit-set" -version = "0.5.3" +name = "elliptic-curve" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ - "bit-vec", + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", ] [[package]] -name = "bit-vec" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" - -[[package]] -name = "bitflags" -version = "1.3.2" +name = "encoding_rs" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] [[package]] -name = "bitflags" -version = "2.5.0" +name = "enr" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" dependencies = [ - "arbitrary", + "base64 0.21.7", + "bytes", + "hex", + "k256", + "log", + "rand", + "rlp", "serde", + "sha3", + "zeroize", ] [[package]] -name = "bitvec" -version = "1.0.1" +name = "enumn" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" dependencies = [ - "funty", - "radium", - "serde", - "tap", - "wyz", + "proc-macro2", + "quote", + "syn 2.0.58", ] [[package]] -name = "block-buffer" -version = "0.9.0" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "block-buffer" -version = "0.10.4" +name = "errno" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "generic-array", + "libc", + "windows-sys 0.52.0", ] [[package]] -name = "blocking" -version = "1.5.1" +name = "ethabi" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" dependencies = [ - "async-channel", - "async-lock", - "async-task", - "fastrand", - "futures-io", - "futures-lite", - "piper", - "tracing", + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3", + "thiserror", + "uint", ] [[package]] -name = "blst" -version = "0.3.11" +name = "ethbloom" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" dependencies = [ - "cc", - "glob", - "threadpool", - "zeroize", + "crunchy", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", ] [[package]] -name = "bs58" -version = "0.5.1" +name = "ethereum-types" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ - "sha2 0.10.8", - "tinyvec", -] - -[[package]] -name = "bstr" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" -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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" - -[[package]] -name = "byte-slice-cast" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" - -[[package]] -name = "bytemuck" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" -dependencies = [ - "serde", -] - -[[package]] -name = "bzip2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "c-kzg" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a4bc5367b6284358d2a6a6a1dc2d92ec4b86034561c3b9d3341909752fd848" -dependencies = [ - "blst", - "cc", - "glob", - "hex", - "libc", - "serde", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.22", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cc" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f6e324229dc011159fcc089755d1e2e216a90d43a7dea6853ca740b84f35e7" -dependencies = [ - "jobserver", - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits", - "serde", - "windows-targets 0.52.5", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - -[[package]] -name = "clap" -version = "4.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim 0.11.1", - "terminal_size", - "unicase", - "unicode-width", -] - -[[package]] -name = "clap_derive" -version = "4.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.58", -] - -[[package]] -name = "clap_lex" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" - -[[package]] -name = "coins-bip32" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" -dependencies = [ - "bs58", - "coins-core", - "digest 0.10.7", - "hmac 0.12.1", - "k256", - "serde", - "sha2 0.10.8", - "thiserror", -] - -[[package]] -name = "coins-bip39" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" -dependencies = [ - "bitvec", - "coins-bip32", - "hmac 0.12.1", - "once_cell", - "pbkdf2 0.12.2", - "rand", - "sha2 0.10.8", - "thiserror", -] - -[[package]] -name = "coins-core" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" -dependencies = [ - "base64 0.21.7", - "bech32", - "bs58", - "digest 0.10.7", - "generic-array", - "hex", - "ripemd", - "serde", - "serde_derive", - "sha2 0.10.8", - "sha3", - "thiserror", -] - -[[package]] -name = "coins-ledger" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e076e6e5d9708f0b90afe2dbe5a8ba406b5c794347661e6e44618388c7e3a31" -dependencies = [ - "async-trait", - "byteorder", - "cfg-if", - "getrandom", - "hex", - "hidapi-rusb", - "js-sys", - "log", - "nix", - "once_cell", - "thiserror", - "tokio", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", -] - -[[package]] -name = "colorchoice" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" - -[[package]] -name = "comfy-table" -version = "7.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b34115915337defe99b2aff5c2ce6771e5fbc4079f4b506301f5cf394c8452f7" -dependencies = [ - "crossterm", - "strum", - "strum_macros", - "unicode-width", -] - -[[package]] -name = "concurrent-queue" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "const-hex" -version = "1.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ba00838774b4ab0233e355d26710fbfc8327a05c017f6dc4873f876d1f79f78" -dependencies = [ - "cfg-if", - "cpufeatures", - "hex", - "proptest", - "serde", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" - -[[package]] -name = "crossterm" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" -dependencies = [ - "bitflags 2.5.0", - "crossterm_winapi", - "libc", - "parking_lot", - "winapi", -] - -[[package]] -name = "crossterm_winapi" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" -dependencies = [ - "winapi", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "darling" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 2.0.58", -] - -[[package]] -name = "darling_macro" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.58", -] - -[[package]] -name = "data-encoding" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" - -[[package]] -name = "der" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "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.58", -] - -[[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.58", -] - -[[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.58", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version 0.4.0", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dunce" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" - -[[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.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array", - "group", - "pem-rfc7468", - "pkcs8", - "rand_core", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "ena" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" -dependencies = [ - "log", -] - -[[package]] -name = "encoding_rs" -version = "0.8.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enr" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" -dependencies = [ - "base64 0.21.7", - "bytes", - "hex", - "k256", - "log", - "rand", - "rlp", - "serde", - "sha3", - "zeroize", -] - -[[package]] -name = "enumn" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.58", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "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 0.12.1", - "pbkdf2 0.11.0", - "rand", - "scrypt", - "serde", - "serde_json", - "sha2 0.10.8", - "sha3", - "thiserror", - "uuid", -] - -[[package]] -name = "ethabi" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" -dependencies = [ - "ethereum-types", - "hex", - "once_cell", - "regex", - "serde", - "serde_json", - "sha3", - "thiserror", - "uint", -] - -[[package]] -name = "ethbloom" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" -dependencies = [ - "crunchy", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "scale-info", - "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-codec", - "impl-rlp", - "impl-serde", - "primitive-types", - "scale-info", - "uint", -] - -[[package]] -name = "ethereum_ssz" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e61ffea29f26e8249d35128a82ec8d3bd4fbc80179ea5f5e5e3daafef6a80fcb" -dependencies = [ - "ethereum-types", - "itertools 0.10.5", - "smallvec", -] - -[[package]] -name = "ethers-contract" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fceafa3578c836eeb874af87abacfb041f92b4da0a78a5edd042564b8ecdaaa" -dependencies = [ - "const-hex", - "ethers-contract-abigen", - "ethers-contract-derive", - "ethers-core", - "ethers-providers", - "futures-util", - "once_cell", - "pin-project", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "ethers-contract-abigen" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04ba01fbc2331a38c429eb95d4a570166781f14290ef9fdb144278a90b5a739b" -dependencies = [ - "Inflector", - "const-hex", - "dunce", - "ethers-core", - "eyre", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "serde", - "serde_json", - "syn 2.0.58", - "toml", - "walkdir", -] - -[[package]] -name = "ethers-contract-derive" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87689dcabc0051cde10caaade298f9e9093d65f6125c14575db3fd8c669a168f" -dependencies = [ - "Inflector", - "const-hex", - "ethers-contract-abigen", - "ethers-core", - "proc-macro2", - "quote", - "serde_json", - "syn 2.0.58", + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "scale-info", + "uint", ] [[package]] @@ -1804,7 +723,6 @@ checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" dependencies = [ "arrayvec", "bytes", - "cargo_metadata", "chrono", "const-hex", "elliptic-curve", @@ -1812,46 +730,18 @@ dependencies = [ "generic-array", "k256", "num_enum", - "once_cell", "open-fastrlp", "rand", "rlp", "serde", "serde_json", "strum", - "syn 2.0.58", "tempfile", "thiserror", "tiny-keccak", "unicode-xid", ] -[[package]] -name = "ethers-middleware" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f9fdf09aec667c099909d91908d5eaf9be1bd0e2500ba4172c1d28bfaa43de" -dependencies = [ - "async-trait", - "auto_impl", - "ethers-contract", - "ethers-core", - "ethers-providers", - "ethers-signers", - "futures-channel", - "futures-locks", - "futures-util", - "instant", - "reqwest 0.11.27", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", - "tracing-futures", - "url", -] - [[package]] name = "ethers-providers" version = "2.0.14" @@ -1870,550 +760,78 @@ dependencies = [ "futures-timer", "futures-util", "hashers", - "http 0.2.12", + "http", "instant", "jsonwebtoken", "once_cell", - "pin-project", - "reqwest 0.11.27", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-tungstenite", - "tracing", - "tracing-futures", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winapi", - "ws_stream_wasm", -] - -[[package]] -name = "ethers-signers" -version = "2.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" -dependencies = [ - "async-trait", - "coins-bip32", - "coins-bip39", - "coins-ledger", - "const-hex", - "elliptic-curve", - "eth-keystore", - "ethers-core", - "futures-executor", - "futures-util", - "home", - "rand", - "rusoto_core", - "rusoto_kms", - "semver 1.0.22", - "sha2 0.10.8", - "spki", - "thiserror", - "tracing", - "trezor-client", -] - -[[package]] -name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332f51cb23d20b0de8458b86580878211da09bcd4503cb579c225b3d124cabb3" -dependencies = [ - "event-listener 5.3.0", - "pin-project-lite", -] - -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fastrand" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" - -[[package]] -name = "fastrlp" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" -dependencies = [ - "arrayvec", - "auto_impl", - "bytes", -] - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "rand_core", - "subtle", -] - -[[package]] -name = "figment" -version = "0.10.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdefe49ed1057d124dc81a0681c30dd07de56ad96e32adc7b64e8f28eaab31c4" -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.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "foundry-block-explorers" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee75d972291181ae98bd1b48647ca8d8832159012b240ca1b7225085d4a63f00" -dependencies = [ - "alloy-chains", - "alloy-json-abi 0.7.0", - "alloy-primitives 0.7.0", - "foundry-compilers", - "reqwest 0.12.2", - "semver 1.0.22", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "foundry-cheatcodes" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=0ab9e3c6fbeaa921c503c2ba1f319834b23f424b#0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" -dependencies = [ - "alloy-dyn-abi", - "alloy-genesis", - "alloy-json-abi 0.6.4", - "alloy-primitives 0.6.4", - "alloy-providers", - "alloy-rpc-types", - "alloy-signer", - "alloy-sol-types", - "base64 0.21.7", - "const-hex", - "eyre", - "foundry-cheatcodes-spec", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-evm-core", - "foundry-wallets", - "itertools 0.11.0", - "jsonpath_lib", - "k256", - "p256", - "parking_lot", - "revm", - "serde_json", - "thiserror", - "toml", - "tracing", - "walkdir", -] - -[[package]] -name = "foundry-cheatcodes-spec" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=0ab9e3c6fbeaa921c503c2ba1f319834b23f424b#0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" -dependencies = [ - "alloy-sol-types", - "foundry-macros", - "serde", -] - -[[package]] -name = "foundry-common" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=0ab9e3c6fbeaa921c503c2ba1f319834b23f424b#0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi 0.6.4", - "alloy-json-rpc", - "alloy-primitives 0.6.4", - "alloy-providers", - "alloy-pubsub", - "alloy-rpc-client", - "alloy-rpc-types", - "alloy-signer", - "alloy-sol-types", - "alloy-transport", - "alloy-transport-http", - "alloy-transport-ipc", - "alloy-transport-ws", - "async-trait", - "clap", - "comfy-table", - "const-hex", - "dunce", - "ethers-core", - "ethers-middleware", - "ethers-providers", - "ethers-signers", - "eyre", - "foundry-block-explorers", - "foundry-compilers", - "foundry-config", - "glob", - "globset", - "once_cell", - "rand", - "reqwest 0.11.27", - "semver 1.0.22", - "serde", - "serde_json", - "tempfile", - "thiserror", - "tokio", - "tower", - "tracing", - "url", - "walkdir", - "yansi 0.5.1", -] - -[[package]] -name = "foundry-compilers" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd3323f90e9f256a2c359dbb1cc7e1b7e4fef9e04e5a82693895e959a6efe010" -dependencies = [ - "alloy-json-abi 0.7.0", - "alloy-primitives 0.7.0", - "cfg-if", - "dirs", - "dunce", - "home", - "itertools 0.12.1", - "md-5 0.10.6", - "memmap2", - "once_cell", - "path-slash", - "rayon", - "regex", - "semver 1.0.22", - "serde", - "serde_json", - "sha2 0.10.8", - "solang-parser", - "svm-rs", - "svm-rs-builds", - "thiserror", - "tokio", - "tracing", - "walkdir", - "yansi 0.5.1", -] - -[[package]] -name = "foundry-config" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=0ab9e3c6fbeaa921c503c2ba1f319834b23f424b#0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" -dependencies = [ - "Inflector", - "alloy-chains", - "alloy-primitives 0.6.4", - "dirs-next", - "dunce", - "eyre", - "figment", - "foundry-block-explorers", - "foundry-compilers", - "globset", - "number_prefix", - "once_cell", - "path-slash", - "regex", - "reqwest 0.11.27", - "revm-primitives", - "semver 1.0.22", - "serde", - "serde_json", - "serde_regex", - "thiserror", - "toml", - "toml_edit 0.21.1", - "tracing", - "walkdir", -] - -[[package]] -name = "foundry-evm" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=0ab9e3c6fbeaa921c503c2ba1f319834b23f424b#0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi 0.6.4", - "alloy-primitives 0.6.4", - "alloy-sol-types", - "const-hex", - "eyre", - "foundry-cheatcodes", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-evm-core", - "foundry-evm-coverage", - "foundry-evm-fuzz", - "foundry-evm-traces", - "hashbrown", - "itertools 0.11.0", - "parking_lot", - "proptest", - "rand", - "rayon", - "revm", - "revm-inspectors", - "thiserror", - "tracing", -] - -[[package]] -name = "foundry-evm-core" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=0ab9e3c6fbeaa921c503c2ba1f319834b23f424b#0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" -dependencies = [ - "alloy-dyn-abi", - "alloy-genesis", - "alloy-json-abi 0.6.4", - "alloy-primitives 0.6.4", - "alloy-providers", - "alloy-rpc-types", - "alloy-sol-types", - "alloy-transport", - "auto_impl", - "const-hex", - "derive_more", - "eyre", - "foundry-cheatcodes-spec", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-macros", - "futures", - "itertools 0.11.0", - "once_cell", - "parking_lot", - "revm", - "revm-inspectors", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "foundry-evm-coverage" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=0ab9e3c6fbeaa921c503c2ba1f319834b23f424b#0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" -dependencies = [ - "alloy-primitives 0.6.4", - "eyre", - "foundry-common", - "foundry-compilers", - "foundry-evm-core", - "revm", - "semver 1.0.22", - "tracing", -] - -[[package]] -name = "foundry-evm-fuzz" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=0ab9e3c6fbeaa921c503c2ba1f319834b23f424b#0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi 0.6.4", - "alloy-primitives 0.6.4", - "arbitrary", - "eyre", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-evm-core", - "foundry-evm-coverage", - "foundry-evm-traces", - "hashbrown", - "itertools 0.11.0", - "parking_lot", - "proptest", - "rand", - "revm", + "pin-project", + "reqwest", "serde", + "serde_json", "thiserror", + "tokio", + "tokio-tungstenite", "tracing", + "tracing-futures", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "ws_stream_wasm", ] [[package]] -name = "foundry-evm-traces" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=0ab9e3c6fbeaa921c503c2ba1f319834b23f424b#0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" +name = "fastrand" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi 0.6.4", - "alloy-primitives 0.6.4", - "alloy-sol-types", - "const-hex", - "eyre", - "foundry-block-explorers", - "foundry-common", - "foundry-compilers", - "foundry-config", - "foundry-evm-core", - "futures", - "hashbrown", - "itertools 0.11.0", - "once_cell", - "revm-inspectors", - "serde", - "tokio", - "tracing", - "yansi 0.5.1", + "arrayvec", + "auto_impl", + "bytes", ] [[package]] -name = "foundry-macros" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=0ab9e3c6fbeaa921c503c2ba1f319834b23f424b#0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.58", + "rand_core", + "subtle", ] [[package]] -name = "foundry-wallets" -version = "0.2.0" -source = "git+https://github.com/foundry-rs/foundry?rev=0ab9e3c6fbeaa921c503c2ba1f319834b23f424b#0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ - "alloy-primitives 0.6.4", - "async-trait", - "clap", - "const-hex", - "derive_builder", - "ethers-core", - "ethers-providers", - "ethers-signers", - "eyre", - "foundry-common", - "foundry-config", - "itertools 0.11.0", - "rpassword", - "rusoto_core", - "rusoto_kms", - "serde", - "thiserror", - "tracing", + "byteorder", + "rand", + "rustc-hex", + "static_assertions", ] [[package]] -name = "fs4" -version = "0.7.0" +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29f9df8a11882c4e3335eb2d18a0137c505d9ca927470b0cac9c6f0ae07d28f7" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "rustix", - "windows-sys 0.48.0", + "percent-encoding", ] [[package]] @@ -2470,26 +888,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" -[[package]] -name = "futures-lite" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" -dependencies = [ - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "futures-locks" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" -dependencies = [ - "futures-channel", - "futures-task", -] - [[package]] name = "futures-macro" version = "0.3.30" @@ -2568,10 +966,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi", - "wasm-bindgen", ] [[package]] @@ -2586,19 +982,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", - "regex-syntax", -] - [[package]] name = "gloo-timers" version = "0.2.6" @@ -2633,7 +1016,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http 0.2.12", + "http", "indexmap", "slab", "tokio", @@ -2667,12 +1050,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - [[package]] name = "hermit-abi" version = "0.3.9" @@ -2694,28 +1071,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.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac", - "digest 0.9.0", -] - [[package]] name = "hmac" version = "0.12.1" @@ -2725,15 +1080,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" @@ -2745,17 +1091,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http-body" version = "0.4.6" @@ -2763,30 +1098,7 @@ 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.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" -dependencies = [ - "bytes", - "http 1.1.0", -] - -[[package]] -name = "http-body-util" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" -dependencies = [ - "bytes", - "futures-core", - "http 1.1.0", - "http-body 1.0.0", + "http", "pin-project-lite", ] @@ -2813,8 +1125,8 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http 0.2.12", - "http-body 0.4.6", + "http", + "http-body", "httparse", "httpdate", "itoa", @@ -2826,40 +1138,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186548d73ac615b32a73aafe38fb4f56c0d340e110e5a200bcadbaf2e199263a" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "httparse", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" -dependencies = [ - "http 0.2.12", - "hyper 0.14.28", - "log", - "rustls 0.20.9", - "rustls-native-certs", - "tokio", - "tokio-rustls 0.23.4", -] - [[package]] name = "hyper-rustls" version = "0.24.2" @@ -2867,62 +1145,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http 0.2.12", - "hyper 0.14.28", - "rustls 0.21.10", - "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "hyper 1.2.0", - "pin-project-lite", - "socket2", + "http", + "hyper", + "rustls", "tokio", - "tower", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", + "tokio-rustls", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" version = "0.5.0" @@ -2971,12 +1200,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - [[package]] name = "indexmap" version = "2.2.6" @@ -2993,21 +1216,6 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" -[[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", -] - [[package]] name = "instant" version = "0.1.12" @@ -3017,33 +1225,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "interprocess" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f2533f3be42fffe3b5e63b71aeca416c1c3bc33e4e27be018521e76b1f38fb" -dependencies = [ - "blocking", - "cfg-if", - "futures-core", - "futures-io", - "intmap", - "libc", - "once_cell", - "rustc_version 0.4.0", - "spinning", - "thiserror", - "to_method", - "tokio", - "winapi", -] - -[[package]] -name = "intmap" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae52f28f45ac2bc96edb7714de995cffc174a395fb0abf5bff453587c980d7b9" - [[package]] name = "ipnet" version = "2.9.0" @@ -3054,25 +1235,7 @@ checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" name = "itertools" version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] @@ -3083,15 +1246,6 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" -[[package]] -name = "jobserver" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685a7d121ee3f65ae4fddd72b25a04bb36b6af81bc0828f7d5434c0fe60fa3a2" -dependencies = [ - "libc", -] - [[package]] name = "js-sys" version = "0.3.69" @@ -3101,17 +1255,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jsonpath_lib" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f" -dependencies = [ - "log", - "serde", - "serde_json", -] - [[package]] name = "jsonwebtoken" version = "8.3.0" @@ -3136,7 +1279,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "once_cell", - "sha2 0.10.8", + "sha2", "signature", ] @@ -3159,36 +1302,6 @@ dependencies = [ "sha3-asm", ] -[[package]] -name = "lalrpop" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" -dependencies = [ - "ascii-canvas", - "bit-set", - "ena", - "itertools 0.11.0", - "lalrpop-util", - "petgraph", - "regex", - "regex-syntax", - "string_cache", - "term", - "tiny-keccak", - "unicode-xid", - "walkdir", -] - -[[package]] -name = "lalrpop-util" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" -dependencies = [ - "regex-automata", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -3210,28 +1323,6 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.5.0", - "libc", -] - -[[package]] -name = "libusb1-sys" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d0e2afce4245f2c9a418511e5af8718bcaf2fa408aefb259504d1a9cb25f27" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "linux-raw-sys" version = "0.4.13" @@ -3254,51 +1345,12 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" -[[package]] -name = "md-5" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "opaque-debug", -] - -[[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.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" -[[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.9.1" @@ -3334,25 +1386,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.7.1", - "pin-utils", -] - [[package]] name = "num" version = "0.4.2" @@ -3466,12 +1499,6 @@ dependencies = [ "syn 2.0.58", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "object" version = "0.32.2" @@ -3487,12 +1514,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - [[package]] name = "open-fastrlp" version = "0.1.4" @@ -3518,30 +1539,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2 0.10.8", -] - [[package]] name = "parity-scale-codec" version = "3.6.9" @@ -3568,12 +1565,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "parking" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" - [[package]] name = "parking_lot" version = "0.12.1" @@ -3597,74 +1588,12 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "password-hash" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" -dependencies = [ - "base64ct", - "rand_core", - "subtle", -] - [[package]] name = "paste" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" -[[package]] -name = "path-slash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" - -[[package]] -name = "pbkdf2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" -dependencies = [ - "digest 0.10.7", - "hmac 0.12.1", - "password-hash", - "sha2 0.10.8", -] - -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest 0.10.7", - "hmac 0.12.1", -] - -[[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 1.0.1", -] - -[[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.58", -] - [[package]] name = "pem" version = "1.1.1" @@ -3674,15 +1603,6 @@ dependencies = [ "base64 0.13.1", ] -[[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" @@ -3700,16 +1620,6 @@ dependencies = [ "ucd-trie", ] -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap", -] - [[package]] name = "pharos" version = "0.5.3" @@ -3720,57 +1630,6 @@ dependencies = [ "rustc_version 0.4.0", ] -[[package]] -name = "phf" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" -dependencies = [ - "phf_macros", - "phf_shared 0.11.2", -] - -[[package]] -name = "phf_generator" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" -dependencies = [ - "phf_shared 0.11.2", - "rand", -] - -[[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.58", -] - -[[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" @@ -3803,17 +1662,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "piper" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - [[package]] name = "pkcs8" version = "0.10.2" @@ -3824,12 +1672,6 @@ dependencies = [ "spki", ] -[[package]] -name = "pkg-config" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" - [[package]] name = "powerfmt" version = "0.2.0" @@ -3842,31 +1684,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "prettyplease" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3928fb5db768cb86f891ff014f0144589297e3c6a1aba6ed7cecfdace270c7" -dependencies = [ - "proc-macro2", - "syn 2.0.58", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - [[package]] name = "primitive-types" version = "0.12.2" @@ -3909,50 +1726,13 @@ dependencies = [ "toml_edit 0.21.1", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" 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.58", - "version_check", - "yansi 1.0.1", + "unicode-ident", ] [[package]] @@ -3975,37 +1755,6 @@ dependencies = [ "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 = "pyo3" version = "0.19.2" @@ -4015,7 +1764,7 @@ dependencies = [ "cfg-if", "indoc", "libc", - "memoffset 0.9.1", + "memoffset", "parking_lot", "pyo3-build-config", "pyo3-ffi", @@ -4070,11 +1819,13 @@ dependencies = [ name = "pyrevm" version = "0.2.7" dependencies = [ - "foundry-evm", + "ethers-core", + "ethers-providers", "pyo3", "revm", "revm-interpreter", "ruint", + "tracing", ] [[package]] @@ -4137,26 +1888,6 @@ dependencies = [ "rand_core", ] -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -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 = "redox_syscall" version = "0.4.1" @@ -4166,17 +1897,6 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_users" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" -dependencies = [ - "getrandom", - "libredox", - "thiserror", -] - [[package]] name = "regex" version = "1.10.4" @@ -4218,10 +1938,10 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.28", - "hyper-rustls 0.24.2", + "http", + "http-body", + "hyper", + "hyper-rustls", "ipnet", "js-sys", "log", @@ -4229,8 +1949,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.10", - "rustls-native-certs", + "rustls", "rustls-pemfile", "serde", "serde_json", @@ -4238,7 +1957,7 @@ dependencies = [ "sync_wrapper", "system-configuration", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "tower-service", "url", "wasm-bindgen", @@ -4248,75 +1967,29 @@ dependencies = [ "winreg", ] -[[package]] -name = "reqwest" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d66674f2b6fb864665eea7a3c1ac4e3dfacd2fda83cf6f935a612e01b0e3338" -dependencies = [ - "base64 0.21.7", - "bytes", - "futures-core", - "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "http-body-util", - "hyper 1.2.0", - "hyper-util", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - [[package]] name = "revm" -version = "6.1.0" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d35316fc02d99e42831356c71e882f5d385c77b78f64a44ae82f2f9a4b8b72f" +checksum = "24fd3ed4b62dc61c647552d8b781811ae25ec74d23309055077e4dfb392444d2" dependencies = [ "auto_impl", "cfg-if", + "dyn-clone", + "ethers-core", + "ethers-providers", "revm-interpreter", "revm-precompile", "serde", "serde_json", -] - -[[package]] -name = "revm-inspectors" -version = "0.1.0" -source = "git+https://github.com/paradigmxyz/evm-inspectors?rev=5d560be#5d560be4cf022912f4f53f4e5ea71f81253b3c3d" -dependencies = [ - "alloy-primitives 0.6.4", - "alloy-rpc-trace-types", - "alloy-rpc-types", - "alloy-sol-types", - "anstyle", - "colorchoice", - "revm", - "serde", + "tokio", ] [[package]] name = "revm-interpreter" -version = "3.1.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fa10c2dc1e8f4934bdc763a2c09371bcec29e50c22e55e3eb325ee0cba09064" +checksum = "9f0a1818f8c876b0d71a0714217c34da7df8a42c0462750768779d55680e4554" dependencies = [ "revm-primitives", "serde", @@ -4324,9 +1997,9 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "4.1.0" +version = "5.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db828d49d329560a70809d9d1fa0c74695edb49f50c5332db3eb24483076deac" +checksum = "7a9645a70f1df1e5bd7fa8718b9ba486fac9c3f0467aa6b58e7f590d5f6fd0f7" dependencies = [ "aurora-engine-modexp", "c-kzg", @@ -4335,23 +2008,24 @@ dependencies = [ "revm-primitives", "ripemd", "secp256k1", - "sha2 0.10.8", + "sha2", "substrate-bn", ] [[package]] name = "revm-primitives" -version = "2.1.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fecd125aad58e135e2ca5771ed6e4e7b1f05fa3a64e0dfb9cc643b7a800a8435" +checksum = "cbbc9640790cebcb731289afb7a7d96d16ad94afeb64b5d0b66443bd151e79d6" dependencies = [ - "alloy-primitives 0.6.4", + "alloy-primitives", "auto_impl", "bitflags 2.5.0", "bitvec", "c-kzg", "cfg-if", "derive_more", + "dyn-clone", "enumn", "hashbrown", "hex", @@ -4365,7 +2039,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "hmac 0.12.1", + "hmac", "subtle", ] @@ -4430,27 +2104,6 @@ dependencies = [ "syn 1.0.109", ] -[[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "ruint" version = "1.12.1" @@ -4458,7 +2111,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f308135fef9fc398342da5472ce7c484529df23743fb7c734e0f3d472971e62" dependencies = [ "alloy-rlp", - "arbitrary", "ark-ff 0.3.0", "ark-ff 0.4.2", "bytes", @@ -4483,99 +2135,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f86854cf50259291520509879a5c294c3c9a4c334e9ff65071c51e42ef1e2343" -[[package]] -name = "rusb" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45fff149b6033f25e825cbb7b2c625a11ee8e6dac09264d49beb125e39aa97bf" -dependencies = [ - "libc", - "libusb1-sys", -] - -[[package]] -name = "rusoto_core" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db30db44ea73551326269adcf7a2169428a054f14faf9e1768f2163494f2fa2" -dependencies = [ - "async-trait", - "base64 0.13.1", - "bytes", - "crc32fast", - "futures", - "http 0.2.12", - "hyper 0.14.28", - "hyper-rustls 0.23.2", - "lazy_static", - "log", - "rusoto_credential", - "rusoto_signature", - "rustc_version 0.4.0", - "serde", - "serde_json", - "tokio", - "xml-rs", -] - -[[package]] -name = "rusoto_credential" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee0a6c13db5aad6047b6a44ef023dbbc21a056b6dab5be3b79ce4283d5c02d05" -dependencies = [ - "async-trait", - "chrono", - "dirs-next", - "futures", - "hyper 0.14.28", - "serde", - "serde_json", - "shlex", - "tokio", - "zeroize", -] - -[[package]] -name = "rusoto_kms" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e1fc19cfcfd9f6b2f96e36d5b0dddda9004d2cbfc2d17543e3b9f10cc38fce8" -dependencies = [ - "async-trait", - "bytes", - "futures", - "rusoto_core", - "serde", - "serde_json", -] - -[[package]] -name = "rusoto_signature" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ae95491c8b4847931e291b151127eccd6ff8ca13f33603eb3d0035ecb05272" -dependencies = [ - "base64 0.13.1", - "bytes", - "chrono", - "digest 0.9.0", - "futures", - "hex", - "hmac 0.11.0", - "http 0.2.12", - "hyper 0.14.28", - "log", - "md-5 0.9.1", - "percent-encoding", - "pin-project-lite", - "rusoto_credential", - "rustc_version 0.4.0", - "serde", - "sha2 0.9.9", - "tokio", -] - [[package]] name = "rustc-demangle" version = "0.1.23" @@ -4619,18 +2178,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rustls" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" -dependencies = [ - "log", - "ring 0.16.20", - "sct", - "webpki", -] - [[package]] name = "rustls" version = "0.21.10" @@ -4643,18 +2190,6 @@ dependencies = [ "sct", ] -[[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", - "schannel", - "security-framework", -] - [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -4698,24 +2233,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" -[[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -dependencies = [ - "cipher", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "scale-info" version = "2.11.2" @@ -4740,33 +2257,12 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "schannel" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "scopeguard" 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 0.12.1", - "pbkdf2 0.11.0", - "salsa20", - "sha2 0.10.8", -] - [[package]] name = "sct" version = "0.7.1" @@ -4797,6 +2293,7 @@ version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" dependencies = [ + "rand", "secp256k1-sys", ] @@ -4809,29 +2306,6 @@ dependencies = [ "cc", ] -[[package]] -name = "security-framework" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "semver" version = "0.11.0" @@ -4846,9 +2320,6 @@ name = "semver" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" -dependencies = [ - "serde", -] [[package]] name = "semver-parser" @@ -4903,25 +2374,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_spanned" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -4935,27 +2387,14 @@ dependencies = [ ] [[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.9.9" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "block-buffer 0.9.0", "cfg-if", "cpufeatures", - "digest 0.9.0", - "opaque-debug", + "digest 0.10.7", ] [[package]] @@ -4989,21 +2428,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] - [[package]] name = "signature" version = "2.2.0" @@ -5026,12 +2450,6 @@ dependencies = [ "time", ] -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - [[package]] name = "slab" version = "0.4.9" @@ -5057,20 +2475,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "solang-parser" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" -dependencies = [ - "itertools 0.11.0", - "lalrpop", - "lalrpop-util", - "phf", - "thiserror", - "unicode-xid", -] - [[package]] name = "spin" version = "0.5.2" @@ -5083,15 +2487,6 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "spinning" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d4f0e86297cad2658d92a707320d87bf4e6ae1050287f51d19b67ef3f153a7b" -dependencies = [ - "lock_api", -] - [[package]] name = "spki" version = "0.7.3" @@ -5108,31 +2503,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - [[package]] name = "strum" version = "0.26.2" @@ -5148,7 +2518,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", "rustversion", @@ -5170,42 +2540,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "svm-rs" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd5e919f01c9280dce59ab66296449d0e9144b8472b8892fbacf9612998b653" -dependencies = [ - "const-hex", - "dirs", - "fs4", - "once_cell", - "reqwest 0.11.27", - "semver 1.0.22", - "serde", - "serde_json", - "sha2 0.10.8", - "thiserror", - "url", - "zip", -] - -[[package]] -name = "svm-rs-builds" -version = "0.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bcf7abc816dd67daf88fccfb835118b0e71cf8cc3e1d0e120893e139799df6c" -dependencies = [ - "build_const", - "const-hex", - "semver 1.0.22", - "serde_json", - "svm-rs", -] +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" @@ -5229,18 +2566,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "syn-solidity" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3d0961cd53c23ea94eeec56ba940f636f6394788976e9f16ca5ee0aca7464a" -dependencies = [ - "paste", - "proc-macro2", - "quote", - "syn 2.0.58", -] - [[package]] name = "sync_wrapper" version = "0.1.2" @@ -5292,27 +2617,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "term" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" -dependencies = [ - "dirs-next", - "rustversion", - "winapi", -] - -[[package]] -name = "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", -] - [[package]] name = "thiserror" version = "1.0.58" @@ -5397,12 +2701,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" -[[package]] -name = "to_method" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8" - [[package]] name = "tokio" version = "1.37.0" @@ -5415,7 +2713,6 @@ dependencies = [ "mio", "num_cpus", "pin-project-lite", - "signal-hook-registry", "socket2", "tokio-macros", "windows-sys 0.48.0", @@ -5432,24 +2729,13 @@ dependencies = [ "syn 2.0.58", ] -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls 0.20.9", - "tokio", - "webpki", -] - [[package]] name = "tokio-rustls" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.21.10", + "rustls", "tokio", ] @@ -5461,9 +2747,9 @@ checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ "futures-util", "log", - "rustls 0.21.10", + "rustls", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "tungstenite", "webpki-roots", ] @@ -5476,34 +2762,17 @@ checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", - "futures-io", "futures-sink", "pin-project-lite", "tokio", "tracing", ] -[[package]] -name = "toml" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.22.9", -] - [[package]] name = "toml_datetime" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" -dependencies = [ - "serde", -] [[package]] name = "toml_edit" @@ -5513,7 +2782,7 @@ checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ "indexmap", "toml_datetime", - "winnow 0.5.40", + "winnow", ] [[package]] @@ -5524,7 +2793,7 @@ checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ "indexmap", "toml_datetime", - "winnow 0.5.40", + "winnow", ] [[package]] @@ -5535,44 +2804,9 @@ checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.22.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow 0.6.6", + "winnow", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - [[package]] name = "tower-service" version = "0.3.2" @@ -5585,7 +2819,6 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5621,20 +2854,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "trezor-client" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f62c95b37f6c769bd65a0d0beb8b2b003e72998003b896a616a6777c645c05ed" -dependencies = [ - "byteorder", - "hex", - "protobuf", - "rusb", - "thiserror", - "tracing", -] - [[package]] name = "try-lock" version = "0.2.5" @@ -5650,11 +2869,11 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http 0.2.12", + "http", "httparse", "log", "rand", - "rustls 0.21.10", + "rustls", "sha1", "thiserror", "url", @@ -5679,7 +2898,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ - "arbitrary", "byteorder", "crunchy", "hex", @@ -5692,24 +2910,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" @@ -5731,12 +2931,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-width" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" - [[package]] name = "unicode-xid" version = "0.2.4" @@ -5778,34 +2972,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom", - "serde", -] - [[package]] name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.4" @@ -5821,16 +2993,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" @@ -5922,16 +3084,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" -dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", -] - [[package]] name = "webpki-roots" version = "0.25.4" @@ -5954,30 +3106,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.5", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -6126,15 +3260,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winnow" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c976aaaa0e1f90dbb21e9587cdaf1d9679a1cde8875c0d6bd83ab96a208352" -dependencies = [ - "memchr", -] - [[package]] name = "winreg" version = "0.50.0" @@ -6173,24 +3298,6 @@ dependencies = [ "tap", ] -[[package]] -name = "xml-rs" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" - -[[package]] -name = "yansi" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" - -[[package]] -name = "yansi" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" - [[package]] name = "zerocopy" version = "0.7.32" @@ -6230,52 +3337,3 @@ dependencies = [ "quote", "syn 2.0.58", ] - -[[package]] -name = "zip" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" -dependencies = [ - "aes", - "byteorder", - "bzip2", - "constant_time_eq", - "crc32fast", - "crossbeam-utils", - "flate2", - "hmac 0.12.1", - "pbkdf2 0.11.0", - "sha1", - "time", - "zstd", -] - -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.10+zstd.1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" -dependencies = [ - "cc", - "pkg-config", -] diff --git a/Cargo.toml b/Cargo.toml index 00116c1..6b0112e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,8 +7,12 @@ edition = "2021" crate-type = ["cdylib"] [dependencies] -foundry-evm = { git = "https://github.com/foundry-rs/foundry", rev = "0ab9e3c6fbeaa921c503c2ba1f319834b23f424b" } -revm = "6.1" -revm-interpreter = "=3.1" +revm = { "version"="7.1.0", features=["ethersdb", "serde", "serde-json", "std"] } +revm-interpreter = "3.3.0" +tracing = "0.1" pyo3 = { version = "0.19", features = ["extension-module"] } ruint = { version = "1.10", features = ["pyo3"] } + +# needed for ethersdb +ethers-core = "2.0.14" +ethers-providers = "2.0.14" diff --git a/README.md b/README.md index 3272b79..b4e0236 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,9 @@ Here we show how you can fork from Ethereum mainnet and simulate a transaction from `vitalik.eth`. ```python -from pyrevm import * +from pyrevm import EVM, Env, BlockEnv -address = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" # vitalik.eth +address = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" # vitalik.eth address2 = "0xBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" fork_url = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27" @@ -28,37 +28,66 @@ fork_url = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27" # set up an evm evm = EVM( # can fork from a remote node - fork_url=fork_url, + fork_url=fork_url, # can set tracing to true/false - tracing = True, + tracing=True, # can configure the environment - env = Env( - block = BlockEnv( timestamp = 100 - )) -); + env=Env( + block=BlockEnv(timestamp=100) + ) +) vb_before = evm.basic(address) assert vb_before != 0 # Execute the tx -evm.call_raw_committing( - caller = address, - to = address2, - value = 10000 +evm.message_call( + caller=address, + to=address2, + value=10000 # data -); +) assert vb_before != evm.basic(address) assert evm.basic(address2).balance == 10000 ``` +### Tracing +There is also support for tracing: +```python +from pyrevm import EVM + +EVM(tracing=True) +``` + +### Transactions + +There is support for checkpoints: + +```python +from pyrevm import EVM + +evm = EVM() +checkpoint = evm.snapshot() +evm.message_call( + caller=..., + to=..., + value=..., +) +evm.revert(checkpoint) # or: evm.commit() to clear all checkpoints +``` + +**Note**: in contrast to the Rust library, the Python library does not automatically commit to database. + +See more usage examples in the [pytests](./pytest/test.py). + ## Develop We use Poetry for virtual environment management and [Maturin](https://github.com/PyO3/maturin) as our Rust <> Python FFI build system. The Rust bindings are auto-generated from the macros provided by [PyO3](https://pyo3.rs/v0.17.1/). -To build the library, run `poetry run maturin develop` +To build the library, run `make build`. To run the tests, run `make test`. -Note: If building for production, do not forget the `--release` flag, else performance will be degraded. +Note: If building for production, use `make build-prod`, else performance will be degraded. ## Benchmarks diff --git a/bench/snailtracer/snailtracer.py b/bench/snailtracer/snailtracer.py index c696bc5..cf20661 100644 --- a/bench/snailtracer/snailtracer.py +++ b/bench/snailtracer/snailtracer.py @@ -35,7 +35,7 @@ def _benchmark( warmup_runs: int = 2, ) -> None: def bench() -> None: - evm.call_raw( + evm.message_call( caller=caller_address, to=contract_address, data=call_data, diff --git a/pyrevm.pyi b/pyrevm.pyi index 20c3e27..de7f9f1 100644 --- a/pyrevm.pyi +++ b/pyrevm.pyi @@ -1,5 +1,6 @@ from typing import Optional, Type + class CfgEnv: def __new__(cls: Type["CfgEnv"]) -> "CfgEnv": ... @@ -13,8 +14,26 @@ class BlockEnv: prevrandao: Optional[bytes] = None, basefee: Optional[int] = None, gas_limit: Optional[int] = None, + excess_blob_gas: Optional[int] = None, ) -> "BlockEnv": ... + @property + def number(self) -> Optional[int]: ... + @property + def coinbase(self) -> Optional[str]: ... + @property + def timestamp(self) -> Optional[int]: ... + @property + def difficulty(self) -> Optional[int]: ... + @property + def prevrandao(self) -> Optional[bytes]: ... + @property + def basefee(self) -> Optional[int]: ... + @property + def gas_limit(self) -> Optional[int]: ... + @property + def excess_blob_gas(self) -> Optional[int]: ... + class TxEnv: def __new__( cls: Type["TxEnv"], @@ -24,11 +43,31 @@ class TxEnv: gas_priority_fee: Optional[int] = None, to: Optional[str] = None, value: Optional[int] = None, - data: Optional[list[int]] = None, + data: Optional[bytes] = None, chain_id: Optional[int] = None, nonce: Optional[int] = None, + salt: Optional[int] = None, ) -> "TxEnv": ... + @property + def caller(self) -> Optional[str]: ... + @property + def gas_limit(self) -> Optional[int]: ... + @property + def gas_price(self) -> Optional[int]: ... + @property + def gas_priority_fee(self) -> Optional[int]: ... + @property + def to(self) -> Optional[str]: ... + @property + def value(self) -> Optional[int]: ... + @property + def data(self) -> Optional[bytes]: ... + @property + def chain_id(self) -> Optional[int]: ... + @property + def nonce(self) -> Optional[int]: ... + class Env: def __new__( cls: Type["Env"], @@ -36,65 +75,234 @@ class Env: block: Optional[BlockEnv] = None, tx: Optional[TxEnv] = None, ) -> "Env": ... - -class AccountInfo: @property - def balance(self: "AccountInfo") -> int: ... + def cfg(self: "AccountInfo") -> Optional[CfgEnv]: ... @property - def nonce(self: "AccountInfo") -> int: ... + def block(self: "AccountInfo") -> Optional[BlockEnv]: ... + @property + def tx(self: "AccountInfo") -> Optional[TxEnv]: ... + + +class JournalCheckpoint: @property - def code(self: "AccountInfo") -> list[int]: ... + def log_i(self) -> int: ... @property - def code_hash(self: "AccountInfo") -> list[int]: ... + def journal_i(self) -> int: ... + + +class AccountInfo: def __new__( cls: Type["AccountInfo"], nonce: int = 0, - code_hash: Optional[list[int]] = None, - code: Optional[list[int]] = None, + code_hash: Optional[bytes] = None, + code: Optional[bytes] = None, ) -> "AccountInfo": ... -class EvmOpts: - env: Env - fork_url: Optional[str] - fork_block_number: Optional[int] - gas_limit: int - tracing: bool + @property + def balance(self: "AccountInfo") -> int: ... + @property + def nonce(self: "AccountInfo") -> int: ... + @property + def code(self: "AccountInfo") -> Optional[bytes]: ... + @property + def code_hash(self: "AccountInfo") -> Optional[bytes]: ... + + +class ExecutionResult: def __new__( - cls: Type["EvmOpts"], - env: Optional[Env], - fork_url: Optional[str], - ) -> "EvmOpts": ... + cls: Type["ExecutionResult"], + is_success: bool, + is_halt: bool, + reason: str, + gas_used: int, + gas_refunded: int, + ) -> "ExecutionResult": ... + @property + def is_success(self) -> bool: ... + @property + def is_halt(self) -> bool: ... + @property + def reason(self) -> str: ... + @property + def gas_used(self) -> int: ... + @property + def gas_refunded(self) -> int: ... + @property + def logs(self) -> list["Log"]: ... + class EVM: def __new__( cls: Type["EVM"], env: Optional[Env] = None, fork_url: Optional[str] = None, - fork_block_number: Optional[int] = None, + fork_block: Optional[str] = None, gas_limit: int = 2**64 - 1, tracing: bool = False, - ) -> "EVM": ... - def basic(self: "EVM", address: str) -> Optional[AccountInfo]: ... - def insert_account_info(self: "EVM", address: str, info: AccountInfo) -> None: ... - def call_raw_committing( - self: "EVM", - caller: str, - to: str, - value: Optional[int] = None, - data: Optional[list[int]] = None, - ) -> list[int]: ... - def call_raw( + spec_id="SHANGHAI", + ) -> "EVM": + """ + Creates a new EVM instance. + :param env: The environment. + :param fork_url: The fork URL. + :param fork_block: The fork block number. Either a block hash starting with 0x or a block number: + Supported block numbers: Latest, Finalized, Safe, Earliest, Pending + :param gas_limit: The gas limit. + :param tracing: Whether to enable tracing. + :param spec_id: The spec ID. + """ + + def snapshot(self: "EVM") -> JournalCheckpoint: ... + + def revert(self: "EVM", checkpoint: JournalCheckpoint) -> None: ... + def commit(self: "EVM") -> None: ... + + def basic(self: "EVM", address: str) -> AccountInfo: + """ + Returns the basic account info for the given address. + :param address: The address of the account. + :return: The account info. + """ + + def get_code(self: "EVM", address: str) -> Optional[bytes]: + """ + Returns the code of the given address. + :param address: The address. + :return: The code. + """ + + def insert_account_info(self: "EVM", address: str, info: AccountInfo) -> None: + """ + Inserts the given account info into the state. + :param address: The address of the account. + :param info: The account info. + """ + + def message_call( self: "EVM", caller: str, to: str, + calldata: Optional[bytes] = None, value: Optional[int] = None, - data: Optional[list[int]] = None, - ) -> list[int]: ... + gas: Optional[int] = None, + gas_price: Optional[int] = None, + is_static = False, + ) -> bytes: + """ + Processes a raw call, without committing the result to the state. + :param caller: The address of the caller. + :param to: The address of the callee. + :param calldata: The calldata. + :param value: The value to be transferred. + :param gas: The gas supplied for the call. + :param gas_price: The gas price for the call. Defaults to 0. + :param is_static: Whether the call is static (i.e. does not change the state). + :return: The return data and a list of changes to the state. + """ + def deploy( self: "EVM", deployer: str, - code: list[int], + code: bytes, value: Optional[int] = None, - ) -> str: ... - def get_balance(self: "EVM", address: str) -> int: ... - def set_balance(self: "EVM", address: str, balance: int) -> None: ... + gas: Optional[int] = None, + is_static = False, + _abi: Optional[list[dict]] = None + ) -> str: + """ + Deploys the given code. + :param deployer: The address of the deployer. + :param code: The code. + :param value: The value. + :param gas: The gas. + :param is_static: Whether the deployment is static (i.e. does not change the state). + :param _abi: The ABI. + :return: The address of the deployed contract. + """ + + def get_balance(self: "EVM", address: str) -> int: + """ + Returns the balance of the given address. + :param address: The address. + :return: The balance. + """ + + def set_balance(self: "EVM", address: str, balance: int) -> None: + """ + Sets the balance of the given address. + :param address: The address. + :param balance: The balance. + """ + + def storage(self: "EVM", address: str, index: int) -> Optional[int]: + """ + Returns the storage value of the given address at the given index. + :param address: The address. + :param index: The index. + :return: The storage value. + """ + + def block_hash(self: "EVM", number: int) -> Optional[bytes]: + """ + Returns the block hash of the given number. + :param number: The number. + :return: The block hash. + """ + + @property + def env(self: "EVM") -> Env: + """ Get the environment. """ + + @property + def tracing(self: "EVM") -> bool: + """ Whether tracing is enabled. """ + + @tracing.setter + def set_tracing(self: "EVM", value: bool) -> None: + """ Set whether tracing is enabled. """ + + @property + def result(self: "EVM") -> Optional[ExecutionResult]: + """ The result of the execution. """ + + @property + def checkpoint_ids(self: "EVM") -> set[JournalCheckpoint]: + """ The checkpoint IDs. """ + + @property + def journal_depth(self: "EVM") -> int: + """ The journal depth. """ + + @property + def journal_len(self: "EVM") -> int: + """ The journal length. """ + + @property + def journal_str(self: "EVM") -> str: + """ The journal string. """ + + @property + def db_accounts(self: "EVM") -> dict[str, AccountInfo]: + """ The accounts in the database. """ + + @property + def journal_state(self: "EVM") -> dict[str, AccountInfo]: + """ The state in the journal. """ + + def set_block_env(self: "EVM", block: BlockEnv) -> None: + """ Set the block environment. """ + + def reset_transient_storage(self: "EVM") -> None: + """ Reset the transient storage. """ + + +class Log: + @property + def address(self) -> str: ... + + @property + def topics(self) -> list[str]: ... + + @property + def data(self) -> tuple[list[bytes], bytes]: + """ :return: A tuple with a list of topics and the log data. """ diff --git a/pytest/contracts/blueprint.bin b/pytest/contracts/blueprint.bin new file mode 100644 index 0000000..a24c8c0 --- /dev/null +++ b/pytest/contracts/blueprint.bin @@ -0,0 +1,4 @@ +61002761000f6000396100276000f35f3560e01c63c2985578811861001f573461002357607b60405260206040f35b5f5ffd5b5f80fd8418278000a16576797065728300030b0012 + +only the first line is read in the code. This was generated based on vyper: +@external def foo() -> uint256: return 123 diff --git a/pytest/test.py b/pytest/test.py index 2f0290d..90e23ed 100644 --- a/pytest/test.py +++ b/pytest/test.py @@ -1,12 +1,20 @@ +import json import os.path +import pytest from pyrevm import EVM, Env, BlockEnv, AccountInfo address = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" # vitalik.eth -address2 = "0xBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" +address2 = "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" fork_url = "https://mainnet.infura.io/v3/c60b0bb42f8a4c6481ecd229eddaca27" +KWARG_CASES = [ + {"fork_url": fork_url}, + {"fork_url": fork_url, "tracing": False, "fork_block": "latest"}, + {}, +] + def load_contract_bin(contract_name: str) -> bytes: with open( @@ -25,7 +33,7 @@ def encode_address(address: str) -> str: return f'{"0" * 24}{address[2:]}' -def test_revm(): +def test_revm_fork(): # set up an evm evm = EVM( # can fork from a remote node @@ -36,11 +44,13 @@ def test_revm(): env=Env(block=BlockEnv(timestamp=100, prevrandao=bytes([0] * 32))), ) + assert evm.env.block.timestamp == 100 + vb_before = evm.basic(address) assert vb_before is not None # Execute the tx - evm.call_raw_committing( + evm.message_call( caller=address, to=address2, value=10000 @@ -57,17 +67,26 @@ def test_revm(): def test_deploy(): evm = EVM() - vb_before = evm.basic(address) - assert vb_before is not None - assert vb_before.nonce == 0 + account_before = evm.basic(address) + assert account_before is not None + assert account_before.nonce == 0 + assert account_before.code == b"\0" # Deploy the contract - deployed_at = evm.deploy( - deployer=address, - code=list(bytes.fromhex("6060")), - ) + code = load_contract_bin("blueprint.bin") + deployed_at = evm.deploy(address, code) assert deployed_at == "0x3e4ea2156166390f880071d94458efb098473311" + deployed_code = evm.get_code(deployed_at) + assert deployed_code.hex().rstrip('0') in code.hex() + assert evm.basic(deployed_at).code.hex() == deployed_code.hex() + + result = evm.message_call( + address, + deployed_at, + calldata=b'\xc2\x98Ux' # ==method_id('foo()') + ) + assert int(result.hex(), 16) == 123 def test_balances(): @@ -78,24 +97,38 @@ def test_balances(): assert vb_before.balance == 0 # Give ether - AMT = 10000 - evm.set_balance(address, AMT) + amount = 10000 + evm.set_balance(address, amount) - assert evm.get_balance(address) == AMT - assert evm.basic(address).balance == AMT + assert evm.get_balance(address) == amount + assert evm.basic(address).balance == amount -def test_call_raw(): - evm = EVM() - evm.insert_account_info( - address, AccountInfo(code=load_contract_bin("full_math.bin")) - ) +def test_balances_fork(): + evm = EVM(fork_url=fork_url, fork_block="0x3b01f793ed1923cd82df5fe345b3e12211aedd514c8546e69efd6386dc0c9a97") + + vb_before = evm.basic(address) + assert vb_before.balance == 955628344913799071315 + + amount = 10000 + evm.set_balance(address, amount) + + assert evm.get_balance(address) == amount + assert evm.basic(address).balance == amount + + +@pytest.mark.parametrize("kwargs", KWARG_CASES) +def test_message_call(kwargs): + evm = EVM(**kwargs) + info = AccountInfo(code=load_contract_bin("full_math.bin")) + evm.insert_account_info(address, info) + assert evm.basic(address).code == info.code # mulDiv() -> 64 * 8 / 2 - result = evm.call_raw( + result = evm.message_call( caller=address2, to=address, - data=bytes.fromhex( + calldata=bytes.fromhex( f"aa9a0912{encode_uint(64)}{encode_uint(8)}{encode_uint(2)}" ), ) @@ -103,17 +136,18 @@ def test_call_raw(): assert int.from_bytes(result, "big") == 256 -def test_call_committing(): - evm = EVM() +@pytest.mark.parametrize("kwargs", KWARG_CASES) +def test_call_committing(kwargs): + evm = EVM(**kwargs) evm.insert_account_info( address, AccountInfo(code=load_contract_bin("full_math.bin")) ) # mulDivRoundingUp() -> 64 * 8 / 3 - result = evm.call_raw_committing( + result = evm.message_call( caller=address2, to=address, - data=bytes.fromhex( + calldata=bytes.fromhex( f"0af8b27f{encode_uint(64)}{encode_uint(8)}{encode_uint(3)}" ), ) @@ -121,25 +155,82 @@ def test_call_committing(): assert int.from_bytes(result, "big") == 171 -def test_call_empty_result(): +def test_call_revert(): evm = EVM() + amount = 10000 + evm.set_balance(address2, amount) + + checkpoint = evm.snapshot() + evm.message_call( + caller=address2, + to=address, + value=amount, + ) + + assert evm.get_balance(address) == amount + evm.revert(checkpoint) + assert evm.get_balance(address) == 0 + assert evm.get_balance(address2) == amount + + +@pytest.mark.parametrize("kwargs", KWARG_CASES) +def test_call_empty_result(kwargs): + evm = EVM(**kwargs) evm.insert_account_info(address, AccountInfo(code=load_contract_bin("weth_9.bin"))) evm.set_balance(address2, 10000) - deposit = evm.call_raw_committing( + deposit = evm.message_call( caller=address2, to=address, value=10000, - data=bytes.fromhex("d0e30db0"), + calldata=bytes.fromhex("d0e30db0"), ) - assert deposit == [] + assert deposit == b"" - balance = evm.call_raw( + balance = evm.message_call( caller=address2, to=address, - data=bytes.fromhex("70a08231" + encode_address(address2)), + calldata=bytes.fromhex("70a08231" + encode_address(address2)), ) assert int.from_bytes(balance, "big") == 10000 + assert not evm.tracing + + +def test_tracing(capsys): + evm = EVM(tracing=True) + evm.insert_account_info(address, AccountInfo(code=load_contract_bin("weth_9.bin"))) + evm.set_balance(address2, 10000) + evm.message_call( + caller=address2, + to=address, + value=10000, + calldata=bytes.fromhex("d0e30db0"), + ) + assert evm.tracing + captured = capsys.readouterr() + traces = [json.loads(i) for i in captured.out.split("\n") if i] + assert {'gasUsed': '0xffffffffffff5011', + 'output': '0x', + 'pass': True, + 'stateRoot': '0x0000000000000000000000000000000000000000000000000000000000000000'} == traces[-1] + assert len(traces) == 128 + + +def test_blueprint(): + evm = EVM() + # bytecode based on vyper `@external def foo() -> uint256: return 123` + bytecode = load_contract_bin("blueprint.bin") + + bytecode = b"\xFE\x71\x00" + bytecode + bytecode_len = len(bytecode) + bytecode_len_hex = hex(bytecode_len)[2:].rjust(4, "0") + + # prepend a quick deploy preamble + deploy_preamble = bytes.fromhex("61" + bytecode_len_hex + "3d81600a3d39f3") + deploy_bytecode = deploy_preamble + bytecode + + deployer_address = evm.deploy(address, deploy_bytecode) + assert evm.basic(deployer_address).code.hex().rstrip('0') in deploy_bytecode.hex() diff --git a/src/database.rs b/src/database.rs new file mode 100644 index 0000000..3022354 --- /dev/null +++ b/src/database.rs @@ -0,0 +1,129 @@ +use crate::empty_db_wrapper::EmptyDBWrapper; +use crate::utils::pyerr; +use ethers_core::types::BlockId; +use ethers_providers::{Http, Provider}; +use pyo3::{PyErr, PyResult}; +use revm::db::{CacheDB, DbAccount, EthersDB}; +use revm::precompile::{Address, B256}; +use revm::primitives::{AccountInfo, Bytecode, HashMap, State}; +use revm::Database; +use revm_interpreter::primitives::db::{DatabaseCommit, DatabaseRef}; +use ruint::aliases::U256; +use std::str::FromStr; +use std::sync::Arc; + +type MemDB = CacheDB; +type ForkDB = CacheDB>>; + +/// A wrapper around the `CacheDB` and `EthersDB` to provide a common interface +/// without needing dynamic lifetime and generic parameters (unsupported in PyO3) +#[derive(Clone, Debug)] +pub(crate) enum DB { + Memory(MemDB), + Fork(ForkDB), +} + +impl DB { + pub(crate) fn new_memory() -> Self { + DB::Memory(MemDB::new(EmptyDBWrapper::default())) + } + + pub(crate) fn new_fork(fork_url: &str, fork_block: Option<&str>) -> PyResult { + let provider = Provider::::try_from(fork_url).map_err(pyerr)?; + let block = fork_block + .map(BlockId::from_str) + .map_or(Ok(None), |v| v.map(Some)) + .map_err(pyerr)?; + let db = EthersDB::new(Arc::new(provider), block) + .unwrap_or_else(|| panic!("Could not create EthersDB")); + Ok(DB::Fork(CacheDB::new(db))) + } + + /// Insert account info but not override storage + pub(crate) fn insert_account_info(&mut self, address: Address, info: AccountInfo) { + match self { + DB::Memory(db) => db.insert_account_info(address, info), + DB::Fork(db) => db.insert_account_info(address, info), + } + } + + pub(crate) fn get_accounts(&self) -> &HashMap { + match self { + DB::Memory(db) => &db.accounts, + DB::Fork(db) => &db.accounts, + } + } +} + +impl Database for DB { + type Error = PyErr; + + fn basic(&mut self, address: Address) -> Result, Self::Error> { + Ok(match self { + DB::Memory(db) => db.basic(address).map_err(pyerr)?, + DB::Fork(db) => db.basic(address).map_err(pyerr)?, + }) + } + + fn code_by_hash(&mut self, code_hash: B256) -> Result { + Ok(match self { + DB::Memory(db) => db.code_by_hash(code_hash).map_err(pyerr)?, + DB::Fork(db) => db.code_by_hash(code_hash).map_err(pyerr)?, + }) + } + + fn storage(&mut self, address: Address, index: U256) -> Result { + Ok(match self { + DB::Memory(db) => db.storage(address, index).map_err(pyerr)?, + DB::Fork(db) => db.storage(address, index).map_err(pyerr)?, + }) + } + + fn block_hash(&mut self, number: U256) -> Result { + Ok(match self { + DB::Memory(db) => db.block_hash(number).map_err(pyerr)?, + DB::Fork(db) => db.block_hash(number).map_err(pyerr)?, + }) + } +} + +impl DatabaseCommit for DB { + fn commit(&mut self, changes: State) { + match self { + DB::Memory(ref mut db) => db.commit(changes), + DB::Fork(ref mut db) => db.commit(changes), + } + } +} + +impl DatabaseRef for DB { + type Error = PyErr; + + fn basic_ref(&self, address: Address) -> Result, Self::Error> { + Ok(match self { + DB::Memory(db) => db.basic_ref(address).map_err(pyerr)?, + DB::Fork(db) => db.basic_ref(address).map_err(pyerr)?, + }) + } + + fn code_by_hash_ref(&self, code_hash: B256) -> Result { + Ok(match self { + DB::Memory(db) => db.code_by_hash_ref(code_hash).map_err(pyerr)?, + DB::Fork(db) => db.code_by_hash_ref(code_hash).map_err(pyerr)?, + }) + } + + fn storage_ref(&self, address: Address, index: U256) -> Result { + Ok(match self { + DB::Memory(db) => db.storage_ref(address, index).map_err(pyerr)?, + DB::Fork(db) => db.storage_ref(address, index).map_err(pyerr)?, + }) + } + + fn block_hash_ref(&self, number: U256) -> Result { + Ok(match self { + DB::Memory(db) => db.block_hash_ref(number).map_err(pyerr)?, + DB::Fork(db) => db.block_hash_ref(number).map_err(pyerr)?, + }) + } +} diff --git a/src/empty_db_wrapper.rs b/src/empty_db_wrapper.rs new file mode 100644 index 0000000..7d7ff9a --- /dev/null +++ b/src/empty_db_wrapper.rs @@ -0,0 +1,33 @@ +use revm::primitives::{Address, B256, U256}; +use revm::{ + db::{DatabaseRef, EmptyDB}, + primitives::{AccountInfo, Bytecode}, +}; +use std::convert::Infallible; + +/// An empty database that always returns default values when queried. +/// This will also _always_ return `Some(AccountInfo)`. +/// +/// Copied from Foundry: +#[derive(Clone, Debug, Default)] +pub(crate) struct EmptyDBWrapper(EmptyDB); + +impl DatabaseRef for EmptyDBWrapper { + type Error = Infallible; + + fn basic_ref(&self, _address: Address) -> Result, Self::Error> { + // Note: this will always return `Some(AccountInfo)`, for the reason explained above + Ok(Some(AccountInfo::default())) + } + + fn code_by_hash_ref(&self, code_hash: B256) -> Result { + self.0.code_by_hash_ref(code_hash) + } + fn storage_ref(&self, address: Address, index: U256) -> Result { + self.0.storage_ref(address, index) + } + + fn block_hash_ref(&self, number: U256) -> Result { + self.0.block_hash_ref(number) + } +} diff --git a/src/evm.rs b/src/evm.rs index 9024a67..b03fb0a 100644 --- a/src/evm.rs +++ b/src/evm.rs @@ -1,179 +1,375 @@ +use crate::database::DB; +use crate::executor::call_evm; +use crate::types::{PyByteVec, PyDB}; use crate::{ - types::{AccountInfo, Env}, - utils::addr, + types::{AccountInfo, BlockEnv, Env, ExecutionResult, JournalCheckpoint}, + utils::{addr, pyerr}, }; -use foundry_evm::{ - backend::Backend, - executors::{Executor, ExecutorBuilder}, - fork::CreateFork, - opts::EvmOpts, - utils::RuntimeOrHandle, +use pyo3::exceptions::{PyKeyError, PyOverflowError}; +use pyo3::types::PyBytes; +use pyo3::{pyclass, pymethods, PyObject, PyResult, Python}; +use revm::precompile::{Address, Bytes}; +use revm::primitives::ExecutionResult::Success; +use revm::primitives::{ + BlockEnv as RevmBlockEnv, CreateScheme, Env as RevmEnv, ExecutionResult as RevmExecutionResult, + HandlerCfg, Output, SpecId, TransactTo, TxEnv, }; -use pyo3::exceptions::PyRuntimeError; -use pyo3::prelude::*; -use revm::{primitives::U256, Database}; +use revm::{primitives::U256, Evm, EvmContext, JournalCheckpoint as RevmCheckpoint}; +use std::collections::{HashMap, HashSet}; use std::fmt::Debug; +use std::mem::replace; +use tracing::trace; +#[derive(Debug)] #[pyclass] -pub struct EVM(Executor); +pub struct EVM { + /// Context of execution. + context: EvmContext, -impl EVM { - pub fn db(&self) -> &Backend { - &self.0.backend - } -} + /// Handler configuration. + handler_cfg: HandlerCfg, + + /// The gas limit for calls and deployments. This is different from the gas limit imposed by + /// the passed in environment, as those limits are used by the EVM for certain opcodes like + /// `gaslimit`. + gas_limit: U256, + + /// whether to trace the execution to stdout + #[pyo3(get, set)] + tracing: bool, -fn pyerr(err: T) -> pyo3::PyErr { - PyRuntimeError::new_err(format!("{:?}", err)) + /// Checkpoints for reverting state + /// We cannot use Revm's checkpointing mechanism as it is not serializable + checkpoints: HashMap, + + /// The result of the last transaction + result: Option, } #[pymethods] impl EVM { + /// Create a new EVM instance. #[new] - #[pyo3(signature = (env=None, fork_url=None, fork_block_number=None, gas_limit=18446744073709551615, tracing=false))] + #[pyo3(signature = (env = None, fork_url = None, fork_block = None, gas_limit = 18446744073709551615, tracing = false, spec_id = "LATEST"))] fn new( env: Option, - fork_url: Option, - fork_block_number: Option, + fork_url: Option<&str>, + fork_block: Option<&str>, gas_limit: u64, tracing: bool, + spec_id: &str, ) -> PyResult { - let evm_opts = EvmOpts { - fork_url: fork_url.clone(), - fork_block_number, - ..Default::default() + let spec = SpecId::from(spec_id); + let env = env.unwrap_or_default().into(); + let db = fork_url + .map(|url| DB::new_fork(url, fork_block)) + .unwrap_or(Ok(DB::new_memory()))?; + + let Evm { context, .. } = Evm::builder().with_env(Box::new(env)).with_db(db).build(); + Ok(EVM { + context: context.evm, + gas_limit: U256::from(gas_limit), + handler_cfg: HandlerCfg::new(spec), + tracing, + checkpoints: HashMap::new(), + result: None, + }) + } + + fn snapshot(&mut self) -> PyResult { + let checkpoint = JournalCheckpoint { + log_i: self.context.journaled_state.logs.len(), + journal_i: self.context.journaled_state.journal.len(), }; + self.checkpoints + .insert(checkpoint, self.context.journaled_state.checkpoint()); + Ok(checkpoint) + } + + fn revert(&mut self, checkpoint: JournalCheckpoint) -> PyResult<()> { + if self.context.journaled_state.depth == 0 { + return Err(PyOverflowError::new_err(format!( + "No checkpoint to revert to: {:?}", + self.context.journaled_state + ))); + } - let fork_opts = if let Some(fork_url) = fork_url { - let env = RuntimeOrHandle::new() - .block_on(evm_opts.evm_env()) - .map_err(pyerr)?; - Some(CreateFork { - url: fork_url, - enable_caching: true, - env, - evm_opts, - }) + if let Some(revm_checkpoint) = self.checkpoints.remove(&checkpoint) { + self.context + .journaled_state + .checkpoint_revert(revm_checkpoint); + Ok(()) } else { - None - }; + Err(PyKeyError::new_err("Invalid checkpoint")) + } + } - let db = Backend::spawn(fork_opts); + fn commit(&mut self) { + self.context.journaled_state.checkpoint_commit(); + } - let executor = ExecutorBuilder::default() - .gas_limit(U256::from(gas_limit)) - .inspectors(|stack| stack.trace(tracing)) - .build(env.unwrap_or_default().into(), db); + /// Get basic account information. + fn basic(&mut self, address: &str) -> PyResult { + let (account, _) = self.context.load_account(addr(address)?).map_err(pyerr)?; + Ok(account.info.clone().into()) + } - Ok(EVM(executor)) + fn get_code(&mut self, address: &str, py: Python<'_>) -> PyResult> { + let (code, _) = self.context.code(addr(address)?).map_err(pyerr)?; + if code.is_empty() { + return Ok(None); + } + Ok(Some(PyBytes::new(py, code.bytecode.as_ref()).into())) } - /// Inserts the provided account information in the database at - /// the specified address. - fn basic(mut _self: PyRefMut<'_, Self>, address: &str) -> PyResult> { - let db = &mut _self.0.backend; - let acc = db.basic(addr(address)?).map_err(pyerr)?; - Ok(acc.map(Into::into)) + /// Get storage value of address at index. + fn storage(&mut self, address: &str, index: U256) -> PyResult> { + let (account, _) = self.context.load_account(addr(address)?).map_err(pyerr)?; + Ok(account.storage.get(&index).map(|s| s.present_value)) } - /// Inserts the provided account information in the database at - /// the specified address. - fn insert_account_info( - mut _self: PyRefMut<'_, Self>, - address: &str, - info: AccountInfo, - ) -> PyResult<()> { - let db = &mut _self.0.backend; - db.insert_account_info(addr(address)?, info.into()); + /// Get block hash by block number. + fn block_hash(&mut self, number: U256, py: Python<'_>) -> PyResult> { + let bytes = self.context.block_hash(number).map_err(pyerr)?; + if bytes.is_empty() { + return Ok(None); + } + Ok(Some(PyBytes::new(py, bytes.as_ref()).into())) + } + /// Inserts the provided account information in the database at the specified address. + fn insert_account_info(&mut self, address: &str, info: AccountInfo) -> PyResult<()> { + let target = addr(address)?; + match self.context.journaled_state.state.get_mut(&target) { + // account is cold, just insert into the DB, so it's retrieved next time + None => self.context.db.insert_account_info(target, info.into()), + // just replace the account info + Some(acc) => acc.info = info.into(), + } Ok(()) } /// Set the balance of a given address. - fn set_balance(mut _self: PyRefMut<'_, Self>, address: &str, balance: U256) -> PyResult<()> { - _self - .0 - .set_balance(addr(address)?, balance) - .map_err(pyerr)?; + fn set_balance(&mut self, address: &str, balance: U256) -> PyResult<()> { + let address_ = addr(address)?; + let account = { + let (account, _) = self.context.load_account(address_).map_err(pyerr)?; + account.info.balance = balance; + account.clone() + }; + self.context.journaled_state.state.insert(address_, account); + self.context.journaled_state.touch(&address_); Ok(()) } /// Retrieve the balance of a given address. - fn get_balance(_self: PyRef<'_, Self>, address: &str) -> PyResult { - let balance = _self.0.get_balance(addr(address)?).map_err(pyerr)?; + fn get_balance(&mut self, address: &str) -> PyResult { + let (balance, _) = self.context.balance(addr(address)?).map_err(pyerr)?; Ok(balance) } - fn call_raw_committing( - mut _self: PyRefMut<'_, Self>, - caller: &str, - to: &str, - value: Option, - data: Option>, - ) -> PyResult> { - let res = _self - .0 - .call_raw_committing( - // TODO: The constant type conversions when - // crossing the boundary is annoying. Can we pass it - // a type that's already an `Address`? - addr(caller)?, - addr(to)?, - data.unwrap_or_default().into(), - value.unwrap_or_default(), - ) - .map_err(pyerr)?; - - if res.reverted { - return Err(pyerr(res.exit_reason)); - } - - // TODO: Return the traces back to the user. - Ok(res.result.to_vec()) - } - - fn call_raw( - _self: PyRef<'_, Self>, + #[pyo3(signature = (caller, to, calldata = None, value = None, gas = None, gas_price = None, is_static = false))] + pub fn message_call( + &mut self, caller: &str, to: &str, + calldata: Option, value: Option, - data: Option>, - ) -> PyResult> { - let res = _self - .0 - .call_raw( - addr(caller)?, - addr(to)?, - data.unwrap_or_default().into(), - value.unwrap_or_default(), - ) - .map_err(pyerr)?; - - if res.reverted { - return Err(pyerr(res.exit_reason)); + gas: Option, + gas_price: Option, + is_static: bool, + py: Python<'_>, + ) -> PyResult { + let env = self.build_test_env( + addr(caller)?, + TransactTo::Call(addr(to)?), + calldata.unwrap_or_default().into(), + value.unwrap_or_default(), + gas, + gas_price, + ); + match self.call_with_env(env, is_static) { + Ok(data) => Ok(PyBytes::new(py, data.as_ref()).into()), + Err(e) => Err(e), } - - Ok(res.result.to_vec()) } /// Deploy a contract with the given code. + #[pyo3(signature = (deployer, code, value = None, gas = None, gas_price = None, is_static = false, _abi = None))] fn deploy( - mut _self: PyRefMut<'_, Self>, + &mut self, deployer: &str, - code: Option>, + code: PyByteVec, value: Option, + gas: Option, + gas_price: Option, + is_static: bool, _abi: Option<&str>, ) -> PyResult { - let res = _self - .0 - .deploy( - addr(deployer)?, - code.unwrap_or_default().into(), - value.unwrap_or_default(), - None, - ) - .map_err(pyerr)?; - - Ok(format!("{:?}", res.address)) + let env = self.build_test_env( + addr(deployer)?, + TransactTo::Create(CreateScheme::Create), + code.into(), + value.unwrap_or_default(), + gas, + gas_price, + ); + match self.deploy_with_env(env, is_static) { + Ok((_, address)) => Ok(format!("{:?}", address)), + Err(e) => Err(e), + } + } + + #[getter] + fn env(&self) -> Env { + (*self.context.env).clone().into() + } + + #[getter] + fn result(&self) -> Option { + self.result.clone().map(|r| r.into()) + } + + #[getter] + fn checkpoint_ids(&self) -> HashSet { + self.checkpoints.keys().cloned().collect() + } + + #[getter] + fn journal_depth(&self) -> usize { + self.context.journaled_state.depth + } + + #[getter] + fn journal_len(&self) -> usize { + self.context.journaled_state.journal.len() + } + + #[getter] + fn journal_str(&self) -> String { + format!("{:?}", self.context.journaled_state) + } + + #[getter] + fn db_accounts(&self) -> PyDB { + self.context + .db + .get_accounts() + .iter() + .map(|(address, db_acc)| (address.to_string(), db_acc.info.clone().into())) + .collect() + } + + #[getter] + fn journal_state(&self) -> PyDB { + self.context + .journaled_state + .state + .iter() + .map(|(address, acc)| (address.to_string(), acc.info.clone().into())) + .collect() + } + + fn set_block_env(&mut self, block: BlockEnv) { + self.context.env.block = block.into(); + } + + fn reset_transient_storage(&mut self) { + self.context.journaled_state.transient_storage.clear(); + } + + fn __str__(&self) -> String { + format!("{:?}", self) + } +} + +impl EVM { + /// Creates the environment to use when executing a transaction in a test context + /// + /// If using a backend with cheat codes, `tx.gas_price` and `block.number` will be overwritten by + /// the cheatcode state inbetween calls. + fn build_test_env( + &self, + caller: Address, + transact_to: TransactTo, + data: Bytes, + value: U256, + gas: Option, + gas_price: Option, + ) -> RevmEnv { + RevmEnv { + cfg: self.context.env.cfg.clone(), + // We always set the gas price to 0, so we can execute the transaction regardless of + // network conditions - the actual gas price is kept in `evm.block` and is applied by + // the cheatcode handler if it is enabled + block: RevmBlockEnv { + basefee: U256::ZERO, + gas_limit: self.gas_limit, + ..self.context.env.block.clone() + }, + tx: TxEnv { + caller, + transact_to, + data, + value, + // As above, we set the gas price to 0. + gas_price: gas_price.unwrap_or(U256::ZERO), + gas_priority_fee: None, + gas_limit: gas.unwrap_or(self.gas_limit).to(), + ..self.context.env.tx.clone() + }, + } + } + + /// Deploys a contract using the given `env` and commits the new state to the underlying + /// database + fn deploy_with_env(&mut self, env: RevmEnv, is_static: bool) -> PyResult<(Bytes, Address)> { + debug_assert!( + matches!(env.tx.transact_to, TransactTo::Create(_)), + "Expect create transaction" + ); + trace!(sender=?env.tx.caller, "deploying contract"); + + let result = self.run_env(env, is_static)?; + + if let Success { output, .. } = result { + if let Output::Create(out, address) = output { + Ok((out, address.unwrap())) + } else { + Err(pyerr(output.clone())) + } + } else { + Err(pyerr(result.clone())) + } + } + + fn call_with_env(&mut self, env: RevmEnv, is_static: bool) -> PyResult { + debug_assert!( + matches!(env.tx.transact_to, TransactTo::Call(_)), + "Expect call transaction" + ); + trace!(sender=?env.tx.caller, "deploying contract"); + + let result = self.run_env(env, is_static)?; + if let Success { output, .. } = result { + if let Output::Call(_) = output { + Ok(output.into_data()) + } else { + Err(pyerr(output)) + } + } else { + Err(pyerr(result)) + } + } + + fn run_env(&mut self, env: RevmEnv, is_static: bool) -> PyResult { + self.context.env = Box::new(env); + let evm_context: EvmContext = + replace(&mut self.context, EvmContext::new(DB::new_memory())); + let (result, evm_context) = + call_evm(evm_context, self.handler_cfg, self.tracing, is_static)?; + self.context = evm_context; + self.result = Some(result.clone()); + Ok(result) } } diff --git a/src/executor.rs b/src/executor.rs new file mode 100644 index 0000000..6d38409 --- /dev/null +++ b/src/executor.rs @@ -0,0 +1,194 @@ +use crate::database::DB; +use crate::utils::pyerr; +use pyo3::exceptions::PyRuntimeError; +use pyo3::PyResult; +use revm::inspectors::TracerEip3155; +use revm::precompile::Log; +use revm::primitives::TransactTo; +use revm::primitives::{ExecutionResult, ShanghaiSpec}; +use revm::{ + inspector_handle_register, Context, ContextWithHandlerCfg, Evm, EvmContext, FrameOrResult, + FrameResult, +}; +use revm_interpreter::primitives::HandlerCfg; +use revm_interpreter::{gas, CallInputs, CreateInputs, SuccessOrHalt}; +use std::mem::replace; + +/// Calls the EVM with the given context and handler configuration. +pub(crate) fn call_evm( + evm_context: EvmContext, + handler_cfg: HandlerCfg, + tracing: bool, + is_static: bool, +) -> PyResult<(ExecutionResult, EvmContext)> { + if tracing { + let tracer = TracerEip3155::new(Box::new(crate::pystdout::PySysStdout {}), true); + let evm = Evm::builder() + .with_context_with_handler_cfg(ContextWithHandlerCfg { + cfg: handler_cfg, + context: Context { + evm: evm_context, + external: tracer, + }, + }) + .append_handler_register(inspector_handle_register) + .build(); + run_evm(evm, is_static) + } else { + let evm = Evm::builder() + .with_context_with_handler_cfg(ContextWithHandlerCfg { + cfg: handler_cfg, + context: Context { + evm: evm_context, + external: (), + }, + }) + .build(); + run_evm(evm, is_static) + } +} + +/// Calls the given evm. This is originally a copy of revm::Evm::transact, but it calls our own output function +fn run_evm( + mut evm: Evm<'_, EXT, DB>, + is_static: bool, +) -> PyResult<(ExecutionResult, EvmContext)> { + let logs_i = evm.context.evm.journaled_state.logs.len(); + + evm.handler + .validation() + .env(&evm.context.evm.env) + .map_err(pyerr)?; + let initial_gas_spend = evm + .handler + .validation() + .initial_tx_gas(&evm.context.evm.env) + .map_err(|e| { + let tx = &evm.context.evm.env.tx; + PyRuntimeError::new_err(format!( + "Initial gas spend is {} but gas limit is {}. Error: {:?}", + gas::validate_initial_tx_gas::( + &tx.data, + tx.transact_to.is_create(), + &tx.access_list + ), + tx.gas_limit, + e + )) + })?; + + evm.handler + .validation() + .tx_against_state(&mut evm.context) + .map_err(pyerr)?; + + let ctx = &mut evm.context; + let pre_exec = evm.handler.pre_execution(); + + // load access list and beneficiary if needed. + pre_exec.load_accounts(ctx).map_err(pyerr)?; + + // load precompiles + ctx.evm.set_precompiles(pre_exec.load_precompiles()); + + // deduce caller balance with its limit. + pre_exec.deduct_caller(ctx).map_err(pyerr)?; + + let gas_limit = ctx.evm.env.tx.gas_limit - initial_gas_spend; + + let exec = evm.handler.execution(); + // call inner handling of call/create + let first_frame_or_result = match ctx.evm.env.tx.transact_to { + TransactTo::Call(_) => exec + .call(ctx, call_inputs(&ctx, gas_limit, is_static)) + .map_err(pyerr)?, + TransactTo::Create(_) => exec + .create( + ctx, + CreateInputs::new_boxed(&ctx.evm.env.tx, gas_limit).unwrap(), + ) + .map_err(pyerr)?, + }; + + // Starts the main running loop. + let mut result = match first_frame_or_result { + FrameOrResult::Frame(first_frame) => evm.start_the_loop(first_frame).map_err(pyerr)?, + FrameOrResult::Result(result) => result, + }; + + let ctx = &mut evm.context; + + // handle output of call/create calls. + evm.handler + .execution() + .last_frame_return(ctx, &mut result) + .map_err(pyerr)?; + + let post_exec = evm.handler.post_execution(); + // Reimburse the caller + post_exec + .reimburse_caller(ctx, result.gas()) + .map_err(pyerr)?; + // Reward beneficiary + post_exec + .reward_beneficiary(ctx, result.gas()) + .map_err(pyerr)?; + + let logs = ctx.evm.journaled_state.logs[logs_i..].to_vec(); + + // Returns output of transaction. + Ok((output(ctx, result, logs)?, evm.context.evm)) +} + +fn call_inputs( + ctx: &&mut Context, + gas_limit: u64, + is_static: bool, +) -> Box { + let mut inputs = CallInputs::new_boxed(&ctx.evm.env.tx, gas_limit).unwrap(); + inputs.is_static = is_static; + inputs +} + +/// Returns the output of the transaction. +/// This is mostly copied from revm::handler::mainnet::post_execution::output +/// However, we removed the journal finalization to keep the transaction open. +#[inline] +fn output( + context: &mut Context, + result: FrameResult, + logs: Vec, +) -> PyResult { + replace(&mut context.evm.error, Ok(())).map_err(pyerr)?; + // used gas with refund calculated. + let gas_refunded = result.gas().refunded() as u64; + let final_gas_used = result.gas().spend() - gas_refunded; + let output = result.output(); + let instruction_result = result.into_interpreter_result(); + + let result = match instruction_result.result.into() { + SuccessOrHalt::Success(reason) => ExecutionResult::Success { + reason, + gas_used: final_gas_used, + gas_refunded, + logs, + output, + }, + SuccessOrHalt::Revert => ExecutionResult::Revert { + gas_used: final_gas_used, + output: output.into_data(), + }, + SuccessOrHalt::Halt(reason) => ExecutionResult::Halt { + reason, + gas_used: final_gas_used, + }, + // Only two internal return flags. + SuccessOrHalt::FatalExternalError + | SuccessOrHalt::InternalContinue + | SuccessOrHalt::InternalCallOrCreate => { + panic!("Internal return flags should remain internal {instruction_result:?}") + } + }; + + Ok(result) +} diff --git a/src/lib.rs b/src/lib.rs index d10318f..1365d27 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,12 +5,6 @@ #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] #![allow(clippy::too_many_arguments)] -// `pyo3` feature. -use ruint as _; - -// Pinning `revm`. -use revm_interpreter as _; - use pyo3::prelude::*; mod types; @@ -19,6 +13,10 @@ pub use types::*; mod evm; pub use evm::EVM; +mod database; +mod empty_db_wrapper; +mod executor; +mod pystdout; mod utils; #[pymodule] @@ -27,12 +25,13 @@ fn pyrevm(_py: Python<'_>, m: &PyModule) -> PyResult<()> { // Types m.add_class::()?; - m.add_class::()?; - m.add_class::()?; m.add_class::()?; m.add_class::()?; m.add_class::()?; + m.add_class::()?; + m.add_class::()?; + m.add_class::()?; Ok(()) } diff --git a/src/pystdout.rs b/src/pystdout.rs new file mode 100644 index 0000000..c1535fc --- /dev/null +++ b/src/pystdout.rs @@ -0,0 +1,25 @@ +use pyo3::types::PyDict; +use pyo3::Python; +use std::io::Write; + +pub(crate) struct PySysStdout; + +// alloow us to capture stdout from python +// based on https://github.com/PyO3/pyo3/discussions/1960#discussioncomment-8414724 +impl Write for PySysStdout { + fn write(&mut self, buf: &[u8]) -> std::io::Result { + let s = std::str::from_utf8(buf).unwrap(); + Python::with_gil(|py| { + let locals = PyDict::new(py); + locals.set_item("s", s).unwrap(); + py.run("print(s, end='')", None, Some(locals)).unwrap(); + }); + Ok(buf.len()) + } + fn flush(&mut self) -> std::io::Result<()> { + Python::with_gil(|py| { + py.run("import sys;sys.stdout.flush()", None, None).unwrap(); + }); + Ok(()) + } +} diff --git a/src/types/checkpoint.rs b/src/types/checkpoint.rs new file mode 100644 index 0000000..d09b5a6 --- /dev/null +++ b/src/types/checkpoint.rs @@ -0,0 +1,9 @@ +use pyo3::pyclass; +use std::hash::Hash; + +#[pyclass(get_all)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +pub struct JournalCheckpoint { + pub log_i: usize, + pub journal_i: usize, +} diff --git a/src/types/evm_env.rs b/src/types/evm_env.rs index 94a6476..5a5c923 100644 --- a/src/types/evm_env.rs +++ b/src/types/evm_env.rs @@ -1,5 +1,7 @@ use crate::utils::{addr, addr_or_zero}; -use pyo3::{exceptions::PyTypeError, prelude::*, types::PyBytes}; +use pyo3::{ + exceptions::PyTypeError, pyclass, pymethods, types::PyBytes, PyObject, PyResult, Python, +}; use revm::primitives::{ BlobExcessGasAndPrice, BlockEnv as RevmBlockEnv, CfgEnv as RevmCfgEnv, CreateScheme, Env as RevmEnv, TransactTo, TxEnv as RevmTxEnv, B256, U256, @@ -7,7 +9,6 @@ use revm::primitives::{ #[pyclass] #[derive(Clone, Debug, Default)] - pub struct Env(RevmEnv); #[pymethods] @@ -20,6 +21,25 @@ impl Env { tx: tx.unwrap_or_default().into(), }) } + + #[getter] + fn cfg(&self) -> CfgEnv { + self.0.cfg.clone().into() + } + + #[getter] + fn block(&self) -> BlockEnv { + self.0.block.clone().into() + } + + #[getter] + fn tx(&self) -> TxEnv { + self.0.tx.clone().into() + } + + fn __str__(&self) -> PyResult { + Ok(format!("{:?}", self)) + } } impl From for Env { @@ -51,6 +71,7 @@ impl TxEnv { data: Option>, chain_id: Option, nonce: Option, + salt: Option, ) -> PyResult { Ok(TxEnv(RevmTxEnv { caller: addr_or_zero(caller)?, @@ -58,9 +79,10 @@ impl TxEnv { gas_price: gas_price.unwrap_or_default(), gas_priority_fee: gas_priority_fee.map(Into::into), transact_to: match to { - Some(inner) => TransactTo::Call(addr(inner)?), - // TODO: Figure out how to integrate CREATE2 here - None => TransactTo::Create(CreateScheme::Create), + Some(inner) => TransactTo::call(addr(inner)?), + None => salt + .map(TransactTo::create2) + .unwrap_or_else(TransactTo::create), }, value: value.unwrap_or_default(), data: data.unwrap_or_default().into(), @@ -70,6 +92,66 @@ impl TxEnv { ..Default::default() })) } + + #[getter] + fn caller(&self) -> String { + self.0.caller.to_string() + } + + #[getter] + fn gas_limit(&self) -> u64 { + self.0.gas_limit + } + + #[getter] + fn gas_price(&self) -> U256 { + self.0.gas_price + } + + #[getter] + fn gas_priority_fee(&self) -> Option { + self.0.gas_priority_fee.map(Into::into) + } + + #[getter] + fn to(&self) -> Option { + match &self.0.transact_to { + TransactTo::Call(address) => Some(format!("{:?}", address)), + TransactTo::Create(_) => None, + } + } + + #[getter] + fn value(&self) -> U256 { + self.0.value + } + + #[getter] + fn data(&self, py: Python<'_>) -> PyObject { + PyBytes::new(py, self.0.data.as_ref()).into() + } + + #[getter] + fn chain_id(&self) -> Option { + self.0.chain_id + } + + #[getter] + fn nonce(&self) -> Option { + self.0.nonce + } + + #[getter] + fn salt(&self) -> Option { + if let TransactTo::Create(CreateScheme::Create2 { salt }) = self.0.transact_to { + return Some(salt); + } + None + } + + fn __str__(&self) -> PyResult { + Ok(format!("{:?}", self)) + } } impl From for RevmTxEnv { @@ -78,6 +160,12 @@ impl From for RevmTxEnv { } } +impl From for TxEnv { + fn from(val: RevmTxEnv) -> Self { + TxEnv(val) + } +} + #[pyclass] #[derive(Clone, Debug, Default)] pub struct BlockEnv(RevmBlockEnv); @@ -115,6 +203,51 @@ impl BlockEnv { })) } + #[getter] + fn number(&self) -> U256 { + self.0.number + } + + #[getter] + fn coinbase(&self) -> String { + self.0.coinbase.to_string() + } + + #[getter] + fn timestamp(&self) -> U256 { + self.0.timestamp + } + + #[getter] + fn difficulty(&self) -> U256 { + self.0.difficulty + } + + #[getter] + fn prevrandao(&self, py: Python<'_>) -> Option { + self.0 + .prevrandao + .map(|i| PyBytes::new(py, i.0.as_ref()).into()) + } + + #[getter] + fn basefee(&self) -> U256 { + self.0.basefee + } + + #[getter] + fn gas_limit(&self) -> U256 { + self.0.gas_limit + } + + #[getter] + fn excess_blob_gas(&self) -> Option { + self.0 + .blob_excess_gas_and_price + .clone() + .map(|i| i.excess_blob_gas) + } + fn __str__(&self) -> PyResult { Ok(format!("{:?}", self)) } @@ -126,6 +259,12 @@ impl From for RevmBlockEnv { } } +impl From for BlockEnv { + fn from(val: RevmBlockEnv) -> Self { + BlockEnv(val) + } +} + #[pyclass] #[derive(Default, Clone, Debug)] pub struct CfgEnv(RevmCfgEnv); @@ -147,3 +286,9 @@ impl From for RevmCfgEnv { env.0 } } + +impl From for CfgEnv { + fn from(val: RevmCfgEnv) -> Self { + CfgEnv(val) + } +} diff --git a/src/types/execution_result.rs b/src/types/execution_result.rs new file mode 100644 index 0000000..33178f4 --- /dev/null +++ b/src/types/execution_result.rs @@ -0,0 +1,87 @@ +use pyo3::types::PyBytes; +use pyo3::{pyclass, pymethods, PyObject, Python}; +use revm::primitives::{ExecutionResult as RevmExecutionResult, Log as RevmLog}; + +#[derive(Debug, Clone, Hash)] +#[pyclass] +pub struct Log(RevmLog); + +#[pymethods] +impl Log { + #[getter] + fn address(&self) -> String { + self.0.address.to_string() + } + + #[getter] + fn topics(&self) -> Vec { + self.0.topics().iter().map(|x| x.to_string()).collect() + } + + #[getter] + fn data(&self, py: Python<'_>) -> (Vec, PyObject) { + let topics = self + .0 + .data + .topics() + .iter() + .map(|t| PyBytes::new(py, &t.0).into()) + .collect(); + let data = PyBytes::new(py, &self.0.data.data).into(); + (topics, data) + } +} + +/// Result of a transaction execution. +#[derive(Debug, Clone, Hash)] +#[pyclass(get_all)] +pub struct ExecutionResult { + is_success: bool, + is_halt: bool, + reason: String, + gas_used: u64, + gas_refunded: u64, + logs: Vec, +} + +#[pymethods] +impl ExecutionResult {} + +impl From for ExecutionResult { + fn from(result: RevmExecutionResult) -> Self { + ExecutionResult { + is_success: result.is_success(), + is_halt: result.is_halt(), + reason: match result { + RevmExecutionResult::Success { reason, .. } => format!("{:?}", reason), + RevmExecutionResult::Revert { .. } => String::from("Revert"), + RevmExecutionResult::Halt { reason, .. } => format!("{:?}", reason), + }, + gas_used: match result { + RevmExecutionResult::Success { gas_used, .. } => gas_used, + RevmExecutionResult::Revert { gas_used, .. } => gas_used, + RevmExecutionResult::Halt { gas_used, .. } => gas_used, + }, + gas_refunded: match result { + RevmExecutionResult::Success { gas_refunded, .. } => gas_refunded, + _ => u64::default(), + }, + logs: match result { + RevmExecutionResult::Success { logs, .. } => logs.into_iter().map(Log).collect(), + _ => Vec::new(), + }, + } + } +} + +impl From for Log { + fn from(env: RevmLog) -> Self { + Log(env) + } +} + +impl From for RevmLog { + fn from(env: Log) -> Self { + env.0 + } +} diff --git a/src/types/info.rs b/src/types/info.rs index 9ffcca1..3375899 100644 --- a/src/types/info.rs +++ b/src/types/info.rs @@ -17,17 +17,17 @@ impl AccountInfo { _self.0.nonce } #[getter] - fn code(_self: PyRef<'_, Self>) -> Vec { + fn code(_self: PyRef<'_, Self>, py: Python<'_>) -> Option { _self .0 .code .as_ref() - .map(|x| x.bytes().to_vec()) - .unwrap_or_default() + .map(|bytecode| PyBytes::new(py, bytecode.bytes()).into()) } + #[getter] - fn code_hash(_self: PyRef<'_, Self>) -> [u8; 32] { - _self.0.code_hash.0 + fn code_hash(_self: PyRef<'_, Self>, py: Python<'_>) -> PyObject { + PyBytes::new(py, &_self.0.code_hash.0).into() } #[new] diff --git a/src/types/mod.rs b/src/types/mod.rs index 15921d0..de02f3e 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -1,8 +1,17 @@ +use std::collections::HashMap; + +mod checkpoint; +pub use checkpoint::*; + mod evm_env; pub use evm_env::*; -mod opts; -pub use opts::EvmOpts; +mod execution_result; +pub use execution_result::*; mod info; -pub use info::AccountInfo; +pub use info::*; + +// In Py03 we use vec to represent bytes +pub(crate) type PyByteVec = Vec; +pub(crate) type PyDB = HashMap; diff --git a/src/types/opts.rs b/src/types/opts.rs deleted file mode 100644 index d0df934..0000000 --- a/src/types/opts.rs +++ /dev/null @@ -1,24 +0,0 @@ -use super::Env; -use pyo3::prelude::*; - -#[pyclass] -#[derive(Clone, Debug, Default)] -pub struct EvmOpts { - pub env: Env, - pub fork_url: Option, - pub fork_block_number: Option, - pub gas_limit: u64, - pub tracing: bool, -} - -#[pymethods] -impl EvmOpts { - #[new] - fn new(env: Option, fork_url: Option) -> Self { - Self { - env: env.unwrap_or_default(), - fork_url, - ..Default::default() - } - } -} diff --git a/src/utils.rs b/src/utils.rs index a91c4de..bee54be 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,5 +1,7 @@ +use pyo3::exceptions::PyRuntimeError; use pyo3::{exceptions::PyTypeError, prelude::*}; use revm::primitives::Address; +use std::fmt::Debug; pub(crate) fn addr(s: &str) -> Result { s.parse::
() @@ -12,3 +14,8 @@ pub(crate) fn addr_or_zero(s: Option<&str>) -> Result { None => Ok(Address::ZERO), } } + +/// Convert a Rust error into a Python error. +pub(crate) fn pyerr(err: T) -> PyErr { + PyRuntimeError::new_err(format!("{:?}", err)) +}