diff --git a/Cargo.lock b/Cargo.lock index 6059240ad981..a300176471d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1740,6 +1740,16 @@ dependencies = [ "darling_macro 0.10.2", ] +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + [[package]] name = "darling" version = "0.20.3" @@ -1764,6 +1774,20 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + [[package]] name = "darling_core" version = "0.20.3" @@ -1789,6 +1813,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn 1.0.109", +] + [[package]] name = "darling_macro" version = "0.20.3" @@ -2382,6 +2417,18 @@ dependencies = [ "smallvec", ] +[[package]] +name = "ethereum_ssz_derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6085d7fd3cf84bd2b8fec150d54c8467fb491d8db9c460607c5534f653a0ee38" +dependencies = [ + "darling 0.13.4", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ethers-contract" version = "2.0.11" @@ -6450,6 +6497,8 @@ dependencies = [ "alloy-rlp", "arbitrary", "bytes", + "ethereum_ssz", + "ethereum_ssz_derive", "itertools 0.11.0", "jsonrpsee-types", "proptest", @@ -6799,6 +6848,7 @@ dependencies = [ "ark-ff 0.3.0", "ark-ff 0.4.2", "bytes", + "ethereum_ssz", "fastrlp", "num-bigint", "num-traits", diff --git a/crates/rpc/rpc-types/Cargo.toml b/crates/rpc/rpc-types/Cargo.toml index e867d13479c6..7074686e39ec 100644 --- a/crates/rpc/rpc-types/Cargo.toml +++ b/crates/rpc/rpc-types/Cargo.toml @@ -9,8 +9,11 @@ repository.workspace = true description = "Reth RPC types" [dependencies] -# # ethereum +# ethereum alloy-rlp = { workspace = true, features = ["arrayvec", "derive"] } +alloy-primitives = { workspace = true, features = ["rand", "rlp", "serde"] } +ethereum_ssz_derive = { version = "0.5", optional = true } +ethereum_ssz = { version = "0.5", optional = true } # misc thiserror.workspace = true @@ -19,13 +22,13 @@ serde = { workspace = true, features = ["derive"] } serde_with = "3.3" serde_json.workspace = true jsonrpsee-types = { workspace = true, optional = true } -alloy-primitives = { workspace = true, features = ["rand", "rlp", "serde"] } url = "2.3" # necessary so we don't hit a "undeclared 'std'": # https://github.com/paradigmxyz/reth/pull/177#discussion_r1021172198 secp256k1.workspace = true bytes.workspace = true +# arbitrary arbitrary = { workspace = true, features = ["derive"], optional = true } proptest = { workspace = true, optional = true } proptest-derive = { workspace = true, optional = true } @@ -33,8 +36,10 @@ proptest-derive = { workspace = true, optional = true } [features] default = ["jsonrpsee-types"] arbitrary = ["dep:arbitrary", "dep:proptest-derive", "dep:proptest", "alloy-primitives/arbitrary"] +ssz = ["dep:ethereum_ssz" ,"dep:ethereum_ssz_derive", "alloy-primitives/ssz"] optimism = [] + [dev-dependencies] # misc alloy-primitives = { workspace = true, features = ["rand", "rlp", "serde", "arbitrary"] } diff --git a/crates/rpc/rpc-types/src/relay.rs b/crates/rpc/rpc-types/src/relay.rs index c00a33db5c02..51ac83d21649 100644 --- a/crates/rpc/rpc-types/src/relay.rs +++ b/crates/rpc/rpc-types/src/relay.rs @@ -44,6 +44,7 @@ pub struct ValidatorRegistrationMessage { /// (not necessarily a value confirmed by the relay). #[serde_as] #[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[cfg_attr(feature = "ssz", derive(ssz_derive::Encode, ssz_derive::Decode))] pub struct BidTrace { #[serde_as(as = "DisplayFromStr")] pub slot: u64, @@ -64,6 +65,7 @@ pub struct BidTrace { /// SignedBidTrace is a BidTrace with a signature #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[cfg_attr(feature = "ssz", derive(ssz_derive::Encode, ssz_derive::Decode))] pub struct SignedBidTrace { pub message: BidTrace, pub signature: BlsSignature,