Skip to content

Commit

Permalink
eth/catalyst: fix panic in TestWithdrawals (ethereum#26563)
Browse files Browse the repository at this point in the history
Fixes a regression introduced in ethereum#26549
  • Loading branch information
fjl authored and shekhirin committed Jun 6, 2023
1 parent 39769a5 commit 90b72e9
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions eth/catalyst/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,19 +175,27 @@ func (api *ConsensusAPI) ForkchoiceUpdatedV1(update beacon.ForkchoiceStateV1, pa

// ForkchoiceUpdatedV2 is equivalent to V1 with the addition of withdrawals in the payload attributes.
func (api *ConsensusAPI) ForkchoiceUpdatedV2(update beacon.ForkchoiceStateV1, payloadAttributes *beacon.PayloadAttributes) (beacon.ForkChoiceResponse, error) {
if !api.eth.BlockChain().Config().IsShanghai(payloadAttributes.Timestamp) {
if payloadAttributes != nil {
if err := api.verifyPayloadAttributes(payloadAttributes); err != nil {
return beacon.STATUS_INVALID, beacon.InvalidPayloadAttributes.With(err)
}
}
return api.forkchoiceUpdated(update, payloadAttributes)
}

func (api *ConsensusAPI) verifyPayloadAttributes(attr *beacon.PayloadAttributes) error {
if !api.eth.BlockChain().Config().IsShanghai(attr.Timestamp) {
// Reject payload attributes with withdrawals before shanghai
if payloadAttributes != nil && payloadAttributes.Withdrawals != nil {
return beacon.STATUS_INVALID, beacon.InvalidPayloadAttributes.With(errors.New("withdrawals before shanghai"))
if attr.Withdrawals != nil {
return errors.New("withdrawals before shanghai")
}
} else {
// Reject payload attributes with nil withdrawals after shanghai
if payloadAttributes != nil && payloadAttributes.Withdrawals == nil {
return beacon.STATUS_INVALID, beacon.InvalidPayloadAttributes.With(errors.New("missing withdrawals list"))
if attr.Withdrawals == nil {
return errors.New("missing withdrawals list")
}
}

return api.forkchoiceUpdated(update, payloadAttributes)
return nil
}

func (api *ConsensusAPI) forkchoiceUpdated(update beacon.ForkchoiceStateV1, payloadAttributes *beacon.PayloadAttributes) (beacon.ForkChoiceResponse, error) {
Expand Down

0 comments on commit 90b72e9

Please sign in to comment.