diff --git a/Cargo.lock b/Cargo.lock index 9979549445831..25ad17f6e35b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,7 +8,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array", + "generic-array 0.14.6", ] [[package]] @@ -21,7 +21,7 @@ dependencies = [ "cipher 0.3.0", "cpufeatures", "ctr 0.8.0", - "opaque-debug", + "opaque-debug 0.3.0", ] [[package]] @@ -205,6 +205,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "auto_impl" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7862e21c893d65a1650125d157eaeec691439379a1cee17ee49031b79236ada4" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "auto_impl" version = "1.0.1" @@ -241,6 +253,28 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" +[[package]] +name = "base58" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" + +[[package]] +name = "base58check" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ee2fe4c9a0c84515f136aaae2466744a721af6d63339c18689d9e995d74d99b" +dependencies = [ + "base58", + "sha2 0.8.2", +] + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + [[package]] name = "base64" version = "0.13.1" @@ -259,6 +293,12 @@ version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" +[[package]] +name = "bech32" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dabbe35f96fb9507f7330793dc490461b2962659ac5d427181e451a623751d1" + [[package]] name = "beef" version = "0.5.2" @@ -303,6 +343,16 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitvec" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" +dependencies = [ + "either", + "radium 0.3.0", +] + [[package]] name = "bitvec" version = "1.0.1" @@ -310,18 +360,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", - "radium", + "radium 0.7.0", "tap", "wyz", ] +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.6", +] + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding 0.1.5", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + [[package]] name = "block-buffer" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array", + "generic-array 0.14.6", ] [[package]] @@ -330,7 +401,16 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ - "generic-array", + "generic-array 0.14.6", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", ] [[package]] @@ -339,7 +419,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a90ec2df9600c28a01c56c4784c9207a96d2451833aeceb8cc97e4c9548bb78" dependencies = [ - "generic-array", + "generic-array 0.14.6", ] [[package]] @@ -375,6 +455,12 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + [[package]] name = "byteorder" version = "1.4.3" @@ -495,7 +581,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array", + "generic-array 0.14.6", ] [[package]] @@ -604,6 +690,63 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "coins-bip32" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634c509653de24b439672164bbf56f5f582a2ab0e313d3b0f6af0b7345cf2560" +dependencies = [ + "bincode", + "bs58", + "coins-core", + "digest 0.10.6", + "getrandom 0.2.8", + "hmac", + "k256", + "lazy_static", + "serde", + "sha2 0.10.6", + "thiserror", +] + +[[package]] +name = "coins-bip39" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a11892bcac83b4c6e95ab84b5b06c76d9d70ad73548dd07418269c5c7977171" +dependencies = [ + "bitvec 0.17.4", + "coins-bip32", + "getrandom 0.2.8", + "hex", + "hmac", + "pbkdf2", + "rand 0.8.5", + "sha2 0.10.6", + "thiserror", +] + +[[package]] +name = "coins-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c94090a6663f224feae66ab01e41a2555a8296ee07b5f20dab8888bdefc9f617" +dependencies = [ + "base58check", + "base64 0.12.3", + "bech32", + "blake2", + "digest 0.10.6", + "generic-array 0.14.6", + "hex", + "ripemd", + "serde", + "serde_derive", + "sha2 0.10.6", + "sha3", + "thiserror", +] + [[package]] name = "confy" version = "0.5.1" @@ -628,6 +771,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "core-foundation" version = "0.9.3" @@ -759,7 +911,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array", + "generic-array 0.14.6", "rand_core 0.6.4", "subtle", "zeroize", @@ -771,7 +923,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array", + "generic-array 0.14.6", "typenum", ] @@ -1001,20 +1153,29 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "convert_case", + "convert_case 0.4.0", "proc-macro2", "quote", "rustc_version", "syn", ] +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + [[package]] name = "digest" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array", + "generic-array 0.14.6", ] [[package]] @@ -1186,7 +1347,7 @@ dependencies = [ "der", "digest 0.10.6", "ff", - "generic-array", + "generic-array 0.14.6", "group", "pkcs8", "rand_core 0.6.4", @@ -1297,6 +1458,28 @@ dependencies = [ "libc", ] +[[package]] +name = "eth-keystore" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" +dependencies = [ + "aes 0.8.2", + "ctr 0.9.2", + "digest 0.10.6", + "hex", + "hmac", + "pbkdf2", + "rand 0.8.5", + "scrypt", + "serde", + "serde_json", + "sha2 0.10.6", + "sha3", + "thiserror", + "uuid", +] + [[package]] name = "ethabi" version = "18.0.0" @@ -1345,6 +1528,22 @@ dependencies = [ "uint", ] +[[package]] +name = "ethers-contract" +version = "1.0.2" +source = "git+https://github.com/gakonst/ethers-rs#799f752e55e80aa8d6357321d4f5f7ebf66daa8a" +dependencies = [ + "ethers-core", + "ethers-providers", + "futures-util", + "hex", + "once_cell", + "pin-project", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "ethers-core" version = "1.0.2" @@ -1353,31 +1552,75 @@ dependencies = [ "arrayvec", "bytes", "chrono", + "convert_case 0.6.0", "elliptic-curve", "ethabi", - "generic-array", + "generic-array 0.14.6", "hex", "k256", "num_enum", "open-fastrlp", + "proc-macro2", "rand 0.8.5", "rlp", "rlp-derive", "serde", "serde_json", "strum", + "syn", "thiserror", "tiny-keccak", "unicode-xid", ] +[[package]] +name = "ethers-etherscan" +version = "1.0.2" +source = "git+https://github.com/gakonst/ethers-rs#799f752e55e80aa8d6357321d4f5f7ebf66daa8a" +dependencies = [ + "ethers-core", + "getrandom 0.2.8", + "reqwest", + "semver 1.0.16", + "serde", + "serde-aux", + "serde_json", + "thiserror", + "tracing", +] + +[[package]] +name = "ethers-middleware" +version = "1.0.2" +source = "git+https://github.com/gakonst/ethers-rs#799f752e55e80aa8d6357321d4f5f7ebf66daa8a" +dependencies = [ + "async-trait", + "auto_impl 0.5.0", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-providers", + "ethers-signers", + "futures-locks", + "futures-util", + "instant", + "reqwest", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-futures", + "url", +] + [[package]] name = "ethers-providers" version = "1.0.2" source = "git+https://github.com/rjected/ethers-rs?branch=expose-clique-config#7f3f6a87e2cca77e9522f4b91bd66530192db1c9" dependencies = [ "async-trait", - "auto_impl", + "auto_impl 1.0.1", "base64 0.20.0", "enr 0.7.0", "ethers-core", @@ -1406,6 +1649,23 @@ dependencies = [ "ws_stream_wasm", ] +[[package]] +name = "ethers-signers" +version = "1.0.2" +source = "git+https://github.com/rjected/ethers-rs?branch=expose-clique-config#7f3f6a87e2cca77e9522f4b91bd66530192db1c9" +dependencies = [ + "async-trait", + "coins-bip32", + "coins-bip39", + "elliptic-curve", + "eth-keystore", + "ethers-core", + "hex", + "rand 0.8.5", + "sha2 0.10.6", + "thiserror", +] + [[package]] name = "ethnum" version = "1.3.2" @@ -1428,6 +1688,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + [[package]] name = "fastrand" version = "1.8.0" @@ -1543,6 +1809,16 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "futures-locks" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" +dependencies = [ + "futures-channel", + "futures-task", +] + [[package]] name = "futures-macro" version = "0.3.25" @@ -1603,6 +1879,15 @@ dependencies = [ "byteorder", ] +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + [[package]] name = "generic-array" version = "0.14.6" @@ -1643,7 +1928,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" dependencies = [ - "opaque-debug", + "opaque-debug 0.3.0", "polyval", ] @@ -2113,8 +2398,8 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "block-padding", - "generic-array", + "block-padding 0.3.2", + "generic-array 0.14.6", ] [[package]] @@ -2772,6 +3057,12 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + [[package]] name = "opaque-debug" version = "0.3.0" @@ -2785,7 +3076,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" dependencies = [ "arrayvec", - "auto_impl", + "auto_impl 1.0.1", "bytes", "ethereum-types", "open-fastrlp-derive", @@ -2847,7 +3138,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "366e44391a8af4cfd6002ef6ba072bae071a96aafca98d7d448a34c5dca38b6a" dependencies = [ "arrayvec", - "bitvec", + "bitvec 1.0.1", "byte-slice-cast", "bytes", "impl-trait-for-tuples", @@ -2935,12 +3226,35 @@ dependencies = [ "windows-sys 0.42.0", ] +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "paste" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.6", + "hmac", + "password-hash", + "sha2 0.10.6", +] + [[package]] name = "peeking_take_while" version = "0.1.2" @@ -3060,7 +3374,7 @@ checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" dependencies = [ "cfg-if", "cpufeatures", - "opaque-debug", + "opaque-debug 0.3.0", "universal-hash", ] @@ -3191,6 +3505,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" + [[package]] name = "radium" version = "0.7.0" @@ -3388,6 +3708,7 @@ dependencies = [ "http", "http-body", "hyper", + "hyper-rustls", "ipnet", "js-sys", "log", @@ -3395,15 +3716,19 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", + "tokio-rustls", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", + "webpki-roots", "winreg", ] @@ -3458,7 +3783,7 @@ name = "reth-consensus" version = "0.1.0" dependencies = [ "async-trait", - "auto_impl", + "auto_impl 1.0.1", "futures", "reth-interfaces", "reth-primitives", @@ -3512,7 +3837,7 @@ dependencies = [ "bytes", "discv5", "enr 0.7.0", - "generic-array", + "generic-array 0.14.6", "hex", "rand 0.8.5", "reth-net-common", @@ -3551,7 +3876,7 @@ name = "reth-ecies" version = "0.1.0" dependencies = [ "aes 0.8.2", - "block-padding", + "block-padding 0.3.2", "byteorder", "bytes", "cipher 0.4.3", @@ -3559,7 +3884,7 @@ dependencies = [ "digest 0.10.6", "educe", "futures", - "generic-array", + "generic-array 0.14.6", "hex-literal", "hmac", "pin-project", @@ -3610,7 +3935,7 @@ name = "reth-executor" version = "0.1.0" dependencies = [ "async-trait", - "auto_impl", + "auto_impl 1.0.1", "hash-db", "hashbrown 0.13.1", "plain_hasher", @@ -3634,7 +3959,7 @@ version = "0.1.0" dependencies = [ "arbitrary", "async-trait", - "auto_impl", + "auto_impl 1.0.1", "bytes", "futures", "hex-literal", @@ -3739,11 +4064,13 @@ version = "0.1.0" dependencies = [ "aquamarine", "async-trait", - "auto_impl", + "auto_impl 1.0.1", "bytes", "enr 0.7.0", "ethers-core", + "ethers-middleware", "ethers-providers", + "ethers-signers", "fnv", "futures", "hex", @@ -3810,7 +4137,7 @@ version = "0.1.0" dependencies = [ "arbitrary", "async-trait", - "auto_impl", + "auto_impl 1.0.1", "bytes", "futures", "heapless", @@ -3837,7 +4164,7 @@ name = "reth-rlp" version = "0.1.2" dependencies = [ "arrayvec", - "auto_impl", + "auto_impl 1.0.1", "bytes", "criterion", "enr 0.7.0", @@ -3985,10 +4312,10 @@ dependencies = [ [[package]] name = "revm" version = "2.3.1" -source = "git+https://github.com/bluealloy/revm?branch=main#85f2b549631e597f2199ff4b5d58e5fb1c66ea4d" +source = "git+https://github.com/bluealloy/revm?branch=main#7e98fefb9ed256403c232ddbd47a32839eaf75f8" dependencies = [ "arrayref", - "auto_impl", + "auto_impl 1.0.1", "bytes", "derive_more", "fixed-hash", @@ -4005,10 +4332,11 @@ dependencies = [ [[package]] name = "revm_precompiles" version = "1.1.2" -source = "git+https://github.com/bluealloy/revm?branch=main#85f2b549631e597f2199ff4b5d58e5fb1c66ea4d" +source = "git+https://github.com/bluealloy/revm?branch=main#7e98fefb9ed256403c232ddbd47a32839eaf75f8" dependencies = [ "bytes", "hashbrown 0.13.1", + "k256", "num", "once_cell", "ripemd", @@ -4175,6 +4503,15 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher 0.4.3", +] + [[package]] name = "same-file" version = "1.0.6" @@ -4230,6 +4567,18 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac", + "pbkdf2", + "salsa20", + "sha2 0.10.6", +] + [[package]] name = "sct" version = "0.7.0" @@ -4248,7 +4597,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", "der", - "generic-array", + "generic-array 0.14.6", "pkcs8", "subtle", "zeroize", @@ -4362,6 +4711,16 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-aux" +version = "4.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c599b3fd89a75e0c18d6d2be693ddb12cccaf771db4ff9e39097104808a014c0" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "serde_derive" version = "1.0.152" @@ -4459,7 +4818,7 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug", + "opaque-debug 0.3.0", ] [[package]] @@ -4473,6 +4832,18 @@ dependencies = [ "digest 0.10.6", ] +[[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + [[package]] name = "sha2" version = "0.9.9" @@ -4483,7 +4854,7 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug", + "opaque-debug 0.3.0", ] [[package]] @@ -5274,6 +5645,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" + [[package]] name = "unicode-width" version = "0.1.10" @@ -5292,7 +5669,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "generic-array", + "generic-array 0.14.6", "subtle", ] @@ -5324,6 +5701,16 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.8", + "serde", +] + [[package]] name = "valuable" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 351920ea8a18a..3d743d6537e8d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,4 +36,5 @@ default-members = ["bin/reth"] [patch."https://github.com/gakonst/ethers-rs"] ethers = { git = "https://github.com/rjected/ethers-rs", branch = "expose-clique-config" } ethers-core = { git = "https://github.com/rjected/ethers-rs", branch = "expose-clique-config" } -ethers-providers = { git = "https://github.com/rjected/ethers-rs", branch = "expose-clique-config" } \ No newline at end of file +ethers-providers = { git = "https://github.com/rjected/ethers-rs", branch = "expose-clique-config" } +ethers-signers = { git = "https://github.com/rjected/ethers-rs", branch = "expose-clique-config" } \ No newline at end of file diff --git a/crates/net/network/Cargo.toml b/crates/net/network/Cargo.toml index 01b8a11923d2e..7911e35258be6 100644 --- a/crates/net/network/Cargo.toml +++ b/crates/net/network/Cargo.toml @@ -59,6 +59,8 @@ reth-provider = { path = "../../storage/provider", features = ["test-utils"] } reth-tracing = { path = "../../tracing" } ethers-core = { git = "https://github.com/gakonst/ethers-rs", default-features = false } ethers-providers = { git = "https://github.com/gakonst/ethers-rs", default-features = false } +ethers-signers = { git = "https://github.com/gakonst/ethers-rs", default-features = false } +ethers-middleware = { git = "https://github.com/gakonst/ethers-rs", default-features = false } enr = { version = "0.7.0", features = ["serde", "rust-secp256k1"] } diff --git a/crates/net/network/tests/it/connect.rs b/crates/net/network/tests/it/connect.rs index f85b4f070117c..b0bcac4a3d741 100644 --- a/crates/net/network/tests/it/connect.rs +++ b/crates/net/network/tests/it/connect.rs @@ -5,10 +5,12 @@ use crate::{NetworkEventStream, PeerConfig}; use super::testnet::Testnet; use enr::{k256::ecdsa::SigningKey, Enr, EnrPublicKey}; use ethers_core::{ - types::Address, - utils::{ChainConfig, CliqueConfig, Genesis, GenesisAccount, Geth}, + types::{transaction::eip2718::TypedTransaction, Address, TransactionRequest}, + utils::{ChainConfig, Genesis, GenesisAccount, Geth}, }; +use ethers_middleware::SignerMiddleware; use ethers_providers::{Http, Middleware, Provider}; +use ethers_signers::{LocalWallet, Signer}; use futures::StreamExt; use reth_discv4::{bootnodes::mainnet_nodes, Discv4Config}; use reth_eth_wire::DisconnectReason; @@ -36,13 +38,12 @@ fn enr_to_peer_id(enr: Enr) -> PeerId { enr.public_key().encode_uncompressed().into() } -/// Creates a new Geth, using the provided genesis config, with an unused p2p port and temporary -/// data dir. +/// Creates a new Geth with an unused p2p port and temporary data dir. /// /// Returns the new Geth and the temporary directory. -fn create_new_geth(config: Genesis) -> (Geth, tempfile::TempDir) { +fn create_new_geth() -> (Geth, tempfile::TempDir) { let temp_dir = tempfile::tempdir().expect("should create temp dir"); - let geth = Geth::new().data_dir(temp_dir.path()).p2p_port(unused_port()).genesis(config); + let geth = Geth::new().data_dir(temp_dir.path()).p2p_port(unused_port()); (geth, temp_dir) } @@ -79,19 +80,20 @@ fn unused_tcp_udp() -> (SocketAddr, SocketAddr) { (tcp_addr, udp_addr) } -/// Creates a chain config with Clique, using the given chain id and setting the provided address -/// as the single clique singer. Funds the given address with max coins. -fn clique_genesis_funded(chain_id: u64, signer_addr: Address) -> Genesis { - let config = ChainConfig { - chain_id, - clique: Some(CliqueConfig { period: 1, epoch: 30000 }), - ..Default::default() - }; +/// Creates a chain config using the given chain id. +/// Funds the given address with max coins. +fn genesis_funded(chain_id: u64, signer_addr: Address) -> Genesis { + let config = ChainConfig { chain_id, ..Default::default() }; let mut alloc = HashMap::new(); alloc.insert( signer_addr, - GenesisAccount { balance: ethers_core::types::U256::MAX, ..Default::default() }, + GenesisAccount { + balance: ethers_core::types::U256::MAX, + nonce: None, + code: None, + storage: None, + }, ); Genesis { @@ -468,5 +470,121 @@ async fn test_geth_disconnect() { #[serial_test::serial] async fn sync_from_clique_geth() { reth_tracing::init_tracing(); - tokio::time::timeout(GETH_TIMEOUT, async move {}).await.unwrap(); + tokio::time::timeout(GETH_TIMEOUT, async move { + // first create a signer that we will fund so we can make transactions + let chain_id = 1337u64; + let wallet = LocalWallet::new(&mut rand::thread_rng()).with_chain_id(chain_id); + let our_address = wallet.address(); + + let (geth, data_dir) = create_new_geth(); + + // print datadir for debugging + println!("geth datadir: {:?}", data_dir); + + // === fund wallet === + + // create a pre-funded geth + let genesis = genesis_funded(chain_id, wallet.address()); + let geth = geth.genesis(genesis).chain_id(chain_id); + + // geth starts in dev mode, we can spawn it, mine blocks, and shut it down + // we need to clone it because we will be reusing the geth config when we restart p2p + let instance = geth.clone().spawn(); + + // set up ethers provider + let geth_endpoint = SocketAddr::new([127, 0, 0, 1].into(), instance.port()).to_string(); + let provider = Provider::::try_from(format!("http://{geth_endpoint}")).unwrap(); + let provider = + SignerMiddleware::new_with_provider_chain(provider, wallet.clone()).await.unwrap(); + + // === produce blocks === + + // first get the balance and make sure its not zero + let balance = provider.get_balance(our_address, None).await.unwrap(); + assert_ne!(balance, 0u64.into()); + + // check the chain id (for debugging) + let other_chain_id = provider.get_chainid().await.unwrap(); + + println!("chain id: {:?}", other_chain_id); + println!("balance: {:?}", balance); + + // TODO: this doesn't work due to invalid sender - why? + // when this works change the max nonce to something higher + for nonce in 0u64..1 { + // create transactions to send to geth + let _tx: TypedTransaction = TransactionRequest::new() + .to(ethers_core::types::H160::zero()) + .value(ethers_core::types::U256::from(1u64)) + .nonce(nonce) + .chain_id(chain_id) + .into(); + + // let's use the signer middleware + // TODO: re-add + // let pending_tx = provider.send_transaction(tx, None).await.unwrap(); + // println!("pending tx: {:?}", pending_tx); + } + + // get block + let block = provider.get_block_number().await.unwrap(); + println!("block: {}", block); + // assert!(block > 0.into()); + + // === restart geth with p2p === + + // drop geth and restart with p2p + drop(instance); + let geth = geth.disable_discovery(); + let instance = geth.spawn(); + + // TODO: start rest of reth - so we can test syncing + // can we make better test utils to simplify some of the initialization code? + // and reduce some of the reuse? + // TODO: gather genesis information for the test chain to populate a status + + // === network === + + let secret_key = SecretKey::new(&mut rand::thread_rng()); + + let (reth_p2p, reth_disc) = unused_tcp_udp(); + let config = NetworkConfig::builder(Arc::new(TestApi::default()), secret_key) + .listener_addr(reth_p2p) + .discovery_addr(reth_disc) + .build(); + let network = NetworkManager::new(config).await.unwrap(); + + let handle = network.handle().clone(); + tokio::task::spawn(network); + + // create networkeventstream to get the next session established event easily + let mut events = handle.event_listener(); + let geth_p2p_port = instance.p2p_port().unwrap(); + let geth_socket = SocketAddr::new([127, 0, 0, 1].into(), geth_p2p_port); + + // we need to reinitialize the provider because the rpc port may have changed + let geth_endpoint = SocketAddr::new([127, 0, 0, 1].into(), instance.port()).to_string(); + let provider = Provider::::try_from(format!("http://{geth_endpoint}")).unwrap(); + + // === ensure p2p is active === + + // get the peer id we should be expecting + let geth_peer_id: PeerId = enr_to_peer_id(provider.node_info().await.unwrap().enr); + + // add geth as a peer then wait for `PeerAdded` and `SessionEstablished` events. + handle.add_peer(geth_peer_id, geth_socket); + + match events.next().await { + Some(NetworkEvent::PeerAdded(peer_id)) => assert_eq!(peer_id, geth_peer_id), + _ => panic!("Expected a peer added event"), + } + + if let Some(NetworkEvent::SessionEstablished { peer_id, .. }) = events.next().await { + assert_eq!(peer_id, geth_peer_id); + } else { + panic!("Expected a session established event"); + } + }) + .await + .unwrap(); }