@ -173,8 +173,8 @@ func newConsensusAPIWithoutHeartbeat(eth *eth.Ethereum) *ConsensusAPI {
// and return its payloadID.
func ( api * ConsensusAPI ) ForkchoiceUpdatedV1 ( update engine . ForkchoiceStateV1 , payloadAttributes * engine . PayloadAttributes ) ( engine . ForkChoiceResponse , error ) {
if payloadAttributes != nil {
if payloadAttributes . Withdrawals != nil {
return engine . STATUS_INVALID , engine . InvalidParams . With ( errors . New ( "withdrawals not supported in V1" ) )
if payloadAttributes . Withdrawals != nil || payloadAttributes . BeaconRoot != nil {
return engine . STATUS_INVALID , engine . InvalidParams . With ( errors . New ( "withdrawals and beacon root not supported in V1" ) )
}
if api . eth . BlockChain ( ) . Config ( ) . IsShanghai ( api . eth . BlockChain ( ) . Config ( ) . LondonBlock , payloadAttributes . Timestamp ) {
return engine . STATUS_INVALID , engine . InvalidParams . With ( errors . New ( "forkChoiceUpdateV1 called post-shanghai" ) )
@ -183,23 +183,31 @@ func (api *ConsensusAPI) ForkchoiceUpdatedV1(update engine.ForkchoiceStateV1, pa
return api . forkchoiceUpdated ( update , payloadAttributes , engine . PayloadV1 , false )
}
// ForkchoiceUpdatedV2 is equivalent to V1 with the addition of withdrawals in the payload attributes.
// ForkchoiceUpdatedV2 is equivalent to V1 with the addition of withdrawals in the payload
// attributes. It supports both PayloadAttributesV1 and PayloadAttributesV2.
func ( api * ConsensusAPI ) ForkchoiceUpdatedV2 ( update engine . ForkchoiceStateV1 , params * engine . PayloadAttributes ) ( engine . ForkChoiceResponse , error ) {
if params != nil {
if params . Withdrawals == nil {
return engine . STATUS_INVALID , engine . InvalidParams . With ( errors . New ( "missing withdrawals" ) )
switch api . eth . BlockChain ( ) . Config ( ) . LatestFork ( params . Timestamp ) {
case forks . Paris :
if params . Withdrawals != nil {
return engine . STATUS_INVALID , engine . InvalidParams . With ( errors . New ( "withdrawals before shanghai" ) )
}
case forks . Shanghai :
if params . Withdrawals == nil {
return engine . STATUS_INVALID , engine . InvalidParams . With ( errors . New ( "missing withdrawals" ) )
}
default :
return engine . STATUS_INVALID , engine . UnsupportedFork . With ( errors . New ( "forkchoiceUpdatedV2 must only be called with paris and shanghai payloads" ) )
}
if params . BeaconRoot != nil {
return engine . STATUS_INVALID , engine . InvalidParams . With ( errors . New ( "unexpected beacon root" ) )
}
if api . eth . BlockChain ( ) . Config ( ) . LatestFork ( params . Timestamp ) != forks . Shanghai {
return engine . STATUS_INVALID , engine . UnsupportedFork . With ( errors . New ( "forkchoiceUpdatedV2 must only be called for shanghai payloads" ) )
}
}
return api . forkchoiceUpdated ( update , params , engine . PayloadV2 , false )
}
// ForkchoiceUpdatedV3 is equivalent to V2 with the addition of parent beacon block root in the payload attributes.
// ForkchoiceUpdatedV3 is equivalent to V2 with the addition of parent beacon block root
// in the payload attributes. It supports only PayloadAttributesV3.
func ( api * ConsensusAPI ) ForkchoiceUpdatedV3 ( update engine . ForkchoiceStateV1 , params * engine . PayloadAttributes ) ( engine . ForkChoiceResponse , error ) {
if params != nil {
// TODO(matt): according to https://github.com/ethereum/execution-apis/pull/498,