From ab3e7ac98fb71d04a5b986eca5f07cdb7ff021e3 Mon Sep 17 00:00:00 2001 From: Ishika Choudhury <117741714+Rimeeeeee@users.noreply.github.com> Date: Sun, 31 Aug 2025 12:10:36 +0530 Subject: [PATCH] refactor --- crates/payload/primitives/src/lib.rs | 22 ++++++++++----------- crates/rpc/rpc-engine-api/src/engine_api.rs | 11 +++++++++++ crates/rpc/rpc-engine-api/src/metrics.rs | 2 ++ 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/crates/payload/primitives/src/lib.rs b/crates/payload/primitives/src/lib.rs index bb981321b1..4bf638a158 100644 --- a/crates/payload/primitives/src/lib.rs +++ b/crates/payload/primitives/src/lib.rs @@ -157,17 +157,17 @@ pub fn validate_payload_timestamp( return Err(EngineObjectValidationError::UnsupportedFork) } - // let is_amsterdam = true; /* ///todo chain_spec.is_amstardam_active_at_timestamp(timestamp); - // */ if version.is_v6() && !is_amsterdam { - // // From the Engine API spec: - // // - // // - // // For `engine_getPayloadV5` - // // - // // 1. Client software MUST return -38005: Unsupported fork error if the timestamp of the - // // built payload does not fall within the time frame of the Amsterdam fork. - // return Err(EngineObjectValidationError::UnsupportedFork) - // } + let is_amsterdam = chain_spec.is_amsterdam_active_at_timestamp(timestamp); + if version.is_v6() && !is_amsterdam { + // From the Engine API spec: + // + // + // For `engine_getPayloadV6` + // + // 1. Client software MUST return -38005: Unsupported fork error if the timestamp of the + // built payload does not fall within the time frame of the Amsterdam fork. + return Err(EngineObjectValidationError::UnsupportedFork) + } Ok(()) } diff --git a/crates/rpc/rpc-engine-api/src/engine_api.rs b/crates/rpc/rpc-engine-api/src/engine_api.rs index 96c85d413c..9bececc1d7 100644 --- a/crates/rpc/rpc-engine-api/src/engine_api.rs +++ b/crates/rpc/rpc-engine-api/src/engine_api.rs @@ -594,6 +594,17 @@ where self.get_payload_inner(payload_id, EngineApiMessageVersion::V6).await } + /// Metrics version of `get_payload_v6` + pub async fn get_payload_v6_metered( + &self, + payload_id: PayloadId, + ) -> EngineApiResult { + let start = Instant::now(); + let res = Self::get_payload_v6(self, payload_id).await; + self.inner.metrics.latency.get_payload_v6.record(start.elapsed()); + res + } + /// Fetches all the blocks for the provided range starting at `start`, containing `count` /// blocks and returns the mapped payload bodies. pub async fn get_payload_bodies_by_range_with( diff --git a/crates/rpc/rpc-engine-api/src/metrics.rs b/crates/rpc/rpc-engine-api/src/metrics.rs index a711c4ff58..4944e3564a 100644 --- a/crates/rpc/rpc-engine-api/src/metrics.rs +++ b/crates/rpc/rpc-engine-api/src/metrics.rs @@ -50,6 +50,8 @@ pub(crate) struct EngineApiLatencyMetrics { pub(crate) get_payload_v4: Histogram, /// Latency for `engine_getPayloadV5` pub(crate) get_payload_v5: Histogram, + /// Latency for `engine_getPayloadV6` + pub(crate) get_payload_v6: Histogram, /// Latency for `engine_getPayloadBodiesByRangeV1` pub(crate) get_payload_bodies_by_range_v1: Histogram, /// Latency for `engine_getPayloadBodiesByHashV1`