diff --git a/Cargo.lock b/Cargo.lock index ac2f870..0f3f6ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -150,6 +150,7 @@ dependencies = [ "alloy-genesis", "alloy-provider", "alloy-rpc-client", + "alloy-rpc-types", "alloy-serde", "alloy-signer", "alloy-transport", @@ -178,6 +179,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-serde", + "arbitrary", "c-kzg", "serde", ] @@ -224,9 +226,12 @@ dependencies = [ "alloy-primitives", "alloy-sol-type-parser", "alloy-sol-types", + "arbitrary", "const-hex", + "derive_arbitrary", "derive_more 0.99.18", "itoa", + "proptest", "serde", "serde_json", "winnow 0.6.18", @@ -241,10 +246,12 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-serde", + "arbitrary", "c-kzg", "derive_more 0.99.18", "k256", "once_cell", + "rand 0.8.5", "serde", "sha2 0.10.8", ] @@ -325,16 +332,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" dependencies = [ "alloy-rlp", + "arbitrary", "bytes", "cfg-if", "const-hex", + "derive_arbitrary", "derive_more 0.99.18", + "ethereum_ssz", "getrandom 0.2.15", "hex-literal", "itoa", "k256", "keccak-asm", "proptest", + "proptest-derive", "rand 0.8.5", "ruint", "serde", @@ -523,6 +534,7 @@ dependencies = [ "alloy-rlp", "alloy-serde", "alloy-sol-types", + "arbitrary", "itertools 0.13.0", "jsonrpsee-types", "serde", @@ -576,6 +588,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e33feda6a53e6079895aed1d08dcb98a1377b000d80d16370fbbdb8155d547ef" dependencies = [ "alloy-primitives", + "arbitrary", "serde", "serde_json", ] @@ -2532,6 +2545,44 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-rlp", + "impl-serde", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-rlp", + "impl-serde", + "primitive-types", + "uint", +] + +[[package]] +name = "ethereum_ssz" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d3627f83d8b87b432a5fad9934b4565260722a141a2c40f371f8080adec9425" +dependencies = [ + "ethereum-types", + "itertools 0.10.5", + "smallvec", +] + [[package]] name = "event-listener" version = "5.3.1" @@ -2613,6 +2664,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ + "arbitrary", "byteorder", "rand 0.8.5", "rustc-hex", @@ -3482,6 +3534,24 @@ dependencies = [ "parity-scale-codec", ] +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + [[package]] name = "impl-trait-for-tuples" version = "0.2.2" @@ -5627,6 +5697,8 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec", + "impl-rlp", + "impl-serde", "uint", ] @@ -5741,6 +5813,17 @@ 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 = "quanta" version = "0.12.3" @@ -8584,6 +8667,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" dependencies = [ "alloy-rlp", + "arbitrary", "ark-ff 0.3.0", "ark-ff 0.4.2", "bytes", @@ -10136,6 +10220,7 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ + "arbitrary", "byteorder", "crunchy", "hex", diff --git a/Cargo.toml b/Cargo.toml index 5e96db0..c9ea196 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -135,6 +135,7 @@ alloy = { version = "0.2", features = [ "signers", "consensus", ] } +alloy-primitives = { version = "0.8", features = ["serde"] } alloy-rlp = "0.3.4" # Tokio diff --git a/crates/net/Cargo.toml b/crates/net/Cargo.toml index f25b554..f2624aa 100644 --- a/crates/net/Cargo.toml +++ b/crates/net/Cargo.toml @@ -40,7 +40,8 @@ arbitrary = { workspace = true, optional = true } [dev-dependencies] arbtest.workspace = true arbitrary.workspace = true +alloy = { workspace = true, features = ["arbitrary"] } [features] default = [] -arbitrary = ["dep:arbitrary"] +arbitrary = ["dep:arbitrary", "alloy/arbitrary"] diff --git a/crates/net/src/types/payload.rs b/crates/net/src/types/payload.rs index 751d6fc..c5c5f77 100644 --- a/crates/net/src/types/payload.rs +++ b/crates/net/src/types/payload.rs @@ -15,6 +15,7 @@ type Transaction = List; /// Represents the Keccak256 hash of the block #[derive(Debug, Clone, Copy, Default, PartialEq, Eq)] +#[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))] pub struct PayloadHash(B256); impl From<&[u8]> for PayloadHash { @@ -281,4 +282,14 @@ mod tests { let expected = b256!("44a0e2b1aba1aae1771eddae1dcd2ad18a8cdac8891517153f03253e49d3f206"); assert_eq!(hash.signature_message(chain_id), expected); } + + #[test] + fn test_inner_payload_hash() { + arbtest::arbtest(|u| { + let inner = B256::from(u.arbitrary::<[u8; 32]>()?); + let hash = PayloadHash::from(inner.as_slice()); + assert_eq!(hash.0, keccak256(inner.as_slice())); + Ok(()) + }); + } }