Files
Preston Van Loon 2fd6bd8150 Add golang.org/x/tools modernize static analyzer and fix violations (#15946)
* Ran gopls modernize to fix everything

go run golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize@latest -fix -test ./...

* Override rules_go provided dependency for golang.org/x/tools to v0.38.0.

To update this, checked out rules_go, then ran `bazel run //go/tools/releaser -- upgrade-dep -mirror=false org_golang_x_tools` and copied the patches.

* Fix buildtag violations and ignore buildtag violations in external

* Introduce modernize analyzer package.

* Add modernize "any" analyzer.

* Fix violations of any analyzer

* Add modernize "appendclipped" analyzer.

* Fix violations of appendclipped

* Add modernize "bloop" analyzer.

* Add modernize "fmtappendf" analyzer.

* Add modernize "forvar" analyzer.

* Add modernize "mapsloop" analyzer.

* Add modernize "minmax" analyzer.

* Fix violations of minmax analyzer

* Add modernize "omitzero" analyzer.

* Add modernize "rangeint" analyzer.

* Fix violations of rangeint.

* Add modernize "reflecttypefor" analyzer.

* Fix violations of reflecttypefor analyzer.

* Add modernize "slicescontains" analyzer.

* Add modernize "slicessort" analyzer.

* Add modernize "slicesdelete" analyzer. This is disabled by default for now. See https://go.dev/issue/73686.

* Add modernize "stringscutprefix" analyzer.

* Add modernize "stringsbuilder" analyzer.

* Fix violations of stringsbuilder analyzer.

* Add modernize "stringsseq" analyzer.

* Add modernize "testingcontext" analyzer.

* Add modernize "waitgroup" analyzer.

* Changelog fragment

* gofmt

* gazelle

* Add modernize "newexpr" analyzer.

* Disable newexpr until go1.26

* Add more details in WORKSPACE on how to update the override

* @nalepae feedback on min()

* gofmt

* Fix violations of forvar
2025-11-14 01:27:22 +00:00

107 lines
3.0 KiB
Go

package payloadattribute
import (
field_params "github.com/OffchainLabs/prysm/v7/config/fieldparams"
"github.com/OffchainLabs/prysm/v7/consensus-types/blocks"
"github.com/OffchainLabs/prysm/v7/consensus-types/interfaces"
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
enginev1 "github.com/OffchainLabs/prysm/v7/proto/engine/v1"
"github.com/OffchainLabs/prysm/v7/runtime/version"
"github.com/pkg/errors"
)
var (
_ = Attributer(&data{})
)
type data struct {
version int
timeStamp uint64
prevRandao []byte
suggestedFeeRecipient []byte
withdrawals []*enginev1.Withdrawal
parentBeaconBlockRoot []byte
}
var (
errNilPayloadAttribute = errors.New("received nil payload attribute")
errUnsupportedPayloadAttribute = errors.New("unsupported payload attribute")
errNoParentRoot = errors.New("parent root is empty")
)
// New returns a new payload attribute with the given input object.
func New(i any) (Attributer, error) {
switch a := i.(type) {
case nil:
return nil, blocks.ErrNilObject
case *enginev1.PayloadAttributes:
return initPayloadAttributeFromV1(a)
case *enginev1.PayloadAttributesV2:
return initPayloadAttributeFromV2(a)
case *enginev1.PayloadAttributesV3:
return initPayloadAttributeFromV3(a)
default:
return nil, errors.Wrapf(errUnsupportedPayloadAttribute, "unable to create payload attribute from type %T", i)
}
}
// EmptyWithVersion returns an empty payload attribute with the given version.
func EmptyWithVersion(version int) Attributer {
return &data{
version: version,
}
}
func initPayloadAttributeFromV1(a *enginev1.PayloadAttributes) (Attributer, error) {
if a == nil {
return nil, errNilPayloadAttribute
}
return &data{
version: version.Bellatrix,
prevRandao: a.PrevRandao,
timeStamp: a.Timestamp,
suggestedFeeRecipient: a.SuggestedFeeRecipient,
}, nil
}
func initPayloadAttributeFromV2(a *enginev1.PayloadAttributesV2) (Attributer, error) {
if a == nil {
return nil, errNilPayloadAttribute
}
return &data{
version: version.Capella,
prevRandao: a.PrevRandao,
timeStamp: a.Timestamp,
suggestedFeeRecipient: a.SuggestedFeeRecipient,
withdrawals: a.Withdrawals,
}, nil
}
func initPayloadAttributeFromV3(a *enginev1.PayloadAttributesV3) (Attributer, error) {
if a == nil {
return nil, errNilPayloadAttribute
}
return &data{
version: version.Deneb,
prevRandao: a.PrevRandao,
timeStamp: a.Timestamp,
suggestedFeeRecipient: a.SuggestedFeeRecipient,
withdrawals: a.Withdrawals,
parentBeaconBlockRoot: a.ParentBeaconBlockRoot,
}, nil
}
// EventData holds the values for a PayloadAttributes event.
type EventData struct {
ProposerIndex primitives.ValidatorIndex
ProposalSlot primitives.Slot
ParentBlockNumber uint64
ParentBlockHash []byte
Attributer Attributer
HeadBlock interfaces.ReadOnlySignedBeaconBlock
HeadRoot [field_params.RootLength]byte
}