From 9411be428f16f008e1d033a92404286f4aa2d743 Mon Sep 17 00:00:00 2001 From: jsvisa Date: Fri, 26 Sep 2025 11:44:26 +0800 Subject: [PATCH] eth/catalyst: check getPayloadV4/5 based on Osaka --- eth/catalyst/api.go | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index b37c26149f..88de8a29ec 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -446,7 +446,16 @@ func (api *ConsensusAPI) GetPayloadV4(payloadID engine.PayloadID) (*engine.Execu if !payloadID.Is(engine.PayloadV3) { return nil, engine.UnsupportedFork } - return api.getPayload(payloadID, false) + data, err := api.getPayload(payloadID, false) + if err != nil { + return nil, err + } + + // Check if the payload timestamp is greater or equal to Osaka activation timestamp + if data.ExecutionPayload != nil && api.config().LatestFork(data.ExecutionPayload.Timestamp) >= forks.Osaka { + return nil, engine.UnsupportedFork.With(errors.New("engine_getPayloadV4 is not available after Osaka fork")) + } + return data, nil } // GetPayloadV5 returns a cached payload by id. This endpoint should only @@ -458,7 +467,16 @@ func (api *ConsensusAPI) GetPayloadV5(payloadID engine.PayloadID) (*engine.Execu if !payloadID.Is(engine.PayloadV3) { return nil, engine.UnsupportedFork } - return api.getPayload(payloadID, false) + data, err := api.getPayload(payloadID, false) + if err != nil { + return nil, err + } + + // Check if the payload timestamp falls within the time frame of the Osaka fork + if data.ExecutionPayload != nil && api.config().LatestFork(data.ExecutionPayload.Timestamp) < forks.Osaka { + return nil, engine.UnsupportedFork.With(errors.New("engine_getPayloadV5 is not available after Osaka fork")) + } + return data, nil } func (api *ConsensusAPI) getPayload(payloadID engine.PayloadID, full bool) (*engine.ExecutionPayloadEnvelope, error) {