diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index 75b263bf6b..a5a9b9372c 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -442,6 +442,12 @@ func (api *ConsensusAPI) GetPayloadV3(payloadID engine.PayloadID) (*engine.Execu // GetPayloadV4 returns a cached payload by id. This endpoint should only // be used for the Prague fork. func (api *ConsensusAPI) GetPayloadV4(payloadID engine.PayloadID) (*engine.ExecutionPayloadEnvelope, error) { + // Reject the request if Osaka has been activated. + // follow https://github.com/ethereum/execution-apis/blob/main/src/engine/osaka.md#prague-api + head := api.eth.BlockChain().CurrentHeader() + if !api.checkFork(head.Time, forks.Prague) { + return nil, unsupportedForkErr("engine_getPayloadV4 is only available at Prague fork") + } if !payloadID.Is(engine.PayloadV3) { return nil, engine.UnsupportedFork } @@ -454,6 +460,10 @@ func (api *ConsensusAPI) GetPayloadV4(payloadID engine.PayloadID) (*engine.Execu // This method follows the same specification as engine_getPayloadV4 with // changes of returning BlobsBundleV2 with BlobSidecar version 1. func (api *ConsensusAPI) GetPayloadV5(payloadID engine.PayloadID) (*engine.ExecutionPayloadEnvelope, error) { + head := api.eth.BlockChain().CurrentHeader() + if api.config().LatestFork(head.Time) < forks.Osaka { + return nil, unsupportedForkErr("engine_getPayloadV5 is not available before Osaka fork") + } if !payloadID.Is(engine.PayloadV3) { return nil, engine.UnsupportedFork }