@@ -402,10 +402,12 @@ func (api *ConsensusAPI) ExchangeTransitionConfigurationV1(config engine.Transit
402402
403403// GetPayloadV1 returns a cached payload by id.
404404func (api * ConsensusAPI ) GetPayloadV1 (payloadID engine.PayloadID ) (* engine.ExecutableData , error ) {
405- if ! payloadID .Is (engine .PayloadV1 ) {
406- return nil , engine .UnsupportedFork
407- }
408- data , err := api .getPayload (payloadID , false )
405+ data , err := api .getPayload (
406+ payloadID ,
407+ false ,
408+ []engine.PayloadVersion {engine .PayloadV1 },
409+ nil ,
410+ )
409411 if err != nil {
410412 return nil , err
411413 }
@@ -414,35 +416,34 @@ func (api *ConsensusAPI) GetPayloadV1(payloadID engine.PayloadID) (*engine.Execu
414416
415417// GetPayloadV2 returns a cached payload by id.
416418func (api * ConsensusAPI ) GetPayloadV2 (payloadID engine.PayloadID ) (* engine.ExecutionPayloadEnvelope , error ) {
417- // executionPayload: ExecutionPayloadV1 | ExecutionPayloadV2 where:
418- //
419- // - ExecutionPayloadV1 MUST be returned if the payload timestamp is lower
420- // than the Shanghai timestamp
421- //
422- // - ExecutionPayloadV2 MUST be returned if the payload timestamp is greater
423- // or equal to the Shanghai timestamp
424- if ! payloadID .Is (engine .PayloadV1 , engine .PayloadV2 ) {
425- return nil , engine .UnsupportedFork
426- }
427- return api .getPayload (payloadID , false )
419+ return api .getPayload (
420+ payloadID ,
421+ false ,
422+ []engine.PayloadVersion {engine .PayloadV1 , engine .PayloadV2 },
423+ []forks.Fork {forks .Shanghai },
424+ )
428425}
429426
430427// GetPayloadV3 returns a cached payload by id. This endpoint should only
431428// be used for the Cancun fork.
432429func (api * ConsensusAPI ) GetPayloadV3 (payloadID engine.PayloadID ) (* engine.ExecutionPayloadEnvelope , error ) {
433- if ! payloadID .Is (engine .PayloadV3 ) {
434- return nil , engine .UnsupportedFork
435- }
436- return api .getPayload (payloadID , false )
430+ return api .getPayload (
431+ payloadID ,
432+ false ,
433+ []engine.PayloadVersion {engine .PayloadV3 },
434+ []forks.Fork {forks .Cancun },
435+ )
437436}
438437
439438// GetPayloadV4 returns a cached payload by id. This endpoint should only
440439// be used for the Prague fork.
441440func (api * ConsensusAPI ) GetPayloadV4 (payloadID engine.PayloadID ) (* engine.ExecutionPayloadEnvelope , error ) {
442- if ! payloadID .Is (engine .PayloadV3 ) {
443- return nil , engine .UnsupportedFork
444- }
445- return api .getPayload (payloadID , false )
441+ return api .getPayload (
442+ payloadID ,
443+ false ,
444+ []engine.PayloadVersion {engine .PayloadV3 },
445+ []forks.Fork {forks .Prague },
446+ )
446447}
447448
448449// GetPayloadV5 returns a cached payload by id. This endpoint should only
@@ -451,18 +452,35 @@ func (api *ConsensusAPI) GetPayloadV4(payloadID engine.PayloadID) (*engine.Execu
451452// This method follows the same specification as engine_getPayloadV4 with
452453// changes of returning BlobsBundleV2 with BlobSidecar version 1.
453454func (api * ConsensusAPI ) GetPayloadV5 (payloadID engine.PayloadID ) (* engine.ExecutionPayloadEnvelope , error ) {
454- if ! payloadID .Is (engine .PayloadV3 ) {
455- return nil , engine .UnsupportedFork
456- }
457- return api .getPayload (payloadID , false )
455+ return api .getPayload (
456+ payloadID ,
457+ false ,
458+ []engine.PayloadVersion {engine .PayloadV3 },
459+ []forks.Fork {
460+ forks .Osaka ,
461+ forks .BPO1 ,
462+ forks .BPO2 ,
463+ forks .BPO3 ,
464+ forks .BPO4 ,
465+ forks .BPO5 ,
466+ })
458467}
459468
460- func (api * ConsensusAPI ) getPayload (payloadID engine.PayloadID , full bool ) (* engine.ExecutionPayloadEnvelope , error ) {
469+ // getPayload will retreive the specified payload and verify it conforms to the
470+ // endpoint's allowed payload versions and forks.
471+ func (api * ConsensusAPI ) getPayload (payloadID engine.PayloadID , full bool , versions []engine.PayloadVersion , forks []forks.Fork ) (* engine.ExecutionPayloadEnvelope , error ) {
461472 log .Trace ("Engine API request received" , "method" , "GetPayload" , "id" , payloadID )
473+ if ! payloadID .Is (versions ... ) {
474+ return nil , engine .UnsupportedFork
475+ }
462476 data := api .localBlocks .get (payloadID , full )
463477 if data == nil {
464478 return nil , engine .UnknownPayload
465479 }
480+ if forks != nil && ! api .checkFork (data .ExecutionPayload .Timestamp , forks ... ) {
481+ return nil , engine .UnsupportedFork
482+ }
483+
466484 return data , nil
467485}
468486
0 commit comments