mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-08 21:08:10 -05:00
* removing skip from test * builder wip * removing todo, it's probably ok * adding more TODOs * adding fromProtoElectra * using lightclient s branch and updating values * minor fixes * rolling back dependency changes * go mod tidy * adding space back in * updating builder changes based on execution request changes * update ssz * changelog * updating based on execution request changes * fixing validation * adding builder test for electra * gaz * attempting to fix test * fixing ssz * fixing build and handling develop changes * gaz * fixing unfinished function * fixing test * fixing important missed regression * removing unneeded validations * missed linting * gofmt * fixing fulu test * fixing changelog * Update bid.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update bid.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update types.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update types.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update james-prysm_builder-electra.md Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update testing/middleware/builder/builder.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * addressing review feedback and updating e2e * fixing parsing bid version * reversing incorrect check * improving tests and updating more code based on review feedback * gofmt * fixing unit tests * more feedback from terence * gofmt * Update api/client/builder/types.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update beacon-chain/rpc/prysm/v1alpha1/validator/proposer_bellatrix.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update beacon-chain/rpc/prysm/v1alpha1/validator/proposer_bellatrix.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update beacon-chain/rpc/prysm/v1alpha1/validator/proposer_bellatrix.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update beacon-chain/rpc/prysm/v1alpha1/validator/proposer_bellatrix.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update api/client/builder/types.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * addressing nitpicks * gofmt * radek feedback * improves error --------- Co-authored-by: Radosław Kapka <rkapka@wp.pl>
107 lines
3.9 KiB
Go
107 lines
3.9 KiB
Go
package testing
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/prysmaticlabs/prysm/v5/api/client/builder"
|
|
"github.com/prysmaticlabs/prysm/v5/beacon-chain/cache"
|
|
"github.com/prysmaticlabs/prysm/v5/beacon-chain/db"
|
|
"github.com/prysmaticlabs/prysm/v5/config/params"
|
|
"github.com/prysmaticlabs/prysm/v5/consensus-types/blocks"
|
|
"github.com/prysmaticlabs/prysm/v5/consensus-types/interfaces"
|
|
"github.com/prysmaticlabs/prysm/v5/consensus-types/primitives"
|
|
v1 "github.com/prysmaticlabs/prysm/v5/proto/engine/v1"
|
|
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
|
"github.com/prysmaticlabs/prysm/v5/runtime/version"
|
|
"github.com/prysmaticlabs/prysm/v5/time/slots"
|
|
)
|
|
|
|
// Config defines a config struct for dependencies into the service.
|
|
type Config struct {
|
|
BeaconDB db.HeadAccessDatabase
|
|
}
|
|
|
|
// MockBuilderService to mock builder.
|
|
type MockBuilderService struct {
|
|
HasConfigured bool
|
|
Payload *v1.ExecutionPayload
|
|
PayloadCapella *v1.ExecutionPayloadCapella
|
|
PayloadDeneb *v1.ExecutionPayloadDeneb
|
|
BlobBundle *v1.BlobsBundle
|
|
ErrSubmitBlindedBlock error
|
|
Bid *ethpb.SignedBuilderBid
|
|
BidCapella *ethpb.SignedBuilderBidCapella
|
|
BidDeneb *ethpb.SignedBuilderBidDeneb
|
|
BidElectra *ethpb.SignedBuilderBidElectra
|
|
RegistrationCache *cache.RegistrationCache
|
|
ErrGetHeader error
|
|
ErrRegisterValidator error
|
|
Cfg *Config
|
|
}
|
|
|
|
// Configured for mocking.
|
|
func (s *MockBuilderService) Configured() bool {
|
|
return s.HasConfigured
|
|
}
|
|
|
|
// SubmitBlindedBlock for mocking.
|
|
func (s *MockBuilderService) SubmitBlindedBlock(_ context.Context, b interfaces.ReadOnlySignedBeaconBlock) (interfaces.ExecutionData, *v1.BlobsBundle, error) {
|
|
switch b.Version() {
|
|
case version.Bellatrix:
|
|
w, err := blocks.WrappedExecutionPayload(s.Payload)
|
|
if err != nil {
|
|
return nil, nil, errors.Wrap(err, "could not wrap payload")
|
|
}
|
|
return w, nil, s.ErrSubmitBlindedBlock
|
|
case version.Capella:
|
|
w, err := blocks.WrappedExecutionPayloadCapella(s.PayloadCapella)
|
|
if err != nil {
|
|
return nil, nil, errors.Wrap(err, "could not wrap capella payload")
|
|
}
|
|
return w, nil, s.ErrSubmitBlindedBlock
|
|
case version.Deneb, version.Electra:
|
|
w, err := blocks.WrappedExecutionPayloadDeneb(s.PayloadDeneb)
|
|
if err != nil {
|
|
return nil, nil, errors.Wrap(err, "could not wrap deneb payload")
|
|
}
|
|
return w, s.BlobBundle, s.ErrSubmitBlindedBlock
|
|
default:
|
|
return nil, nil, errors.New("unknown block version for mocking")
|
|
}
|
|
}
|
|
|
|
// GetHeader for mocking.
|
|
func (s *MockBuilderService) GetHeader(_ context.Context, slot primitives.Slot, _ [32]byte, _ [48]byte) (builder.SignedBid, error) {
|
|
if slots.ToEpoch(slot) >= params.BeaconConfig().ElectraForkEpoch || s.BidElectra != nil {
|
|
return builder.WrappedSignedBuilderBidElectra(s.BidElectra)
|
|
}
|
|
if slots.ToEpoch(slot) >= params.BeaconConfig().DenebForkEpoch || s.BidDeneb != nil {
|
|
return builder.WrappedSignedBuilderBidDeneb(s.BidDeneb)
|
|
}
|
|
if slots.ToEpoch(slot) >= params.BeaconConfig().CapellaForkEpoch || s.BidCapella != nil {
|
|
return builder.WrappedSignedBuilderBidCapella(s.BidCapella)
|
|
}
|
|
w, err := builder.WrappedSignedBuilderBid(s.Bid)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "could not wrap capella bid")
|
|
}
|
|
return w, s.ErrGetHeader
|
|
}
|
|
|
|
// RegistrationByValidatorID returns either the values from the cache or db.
|
|
func (s *MockBuilderService) RegistrationByValidatorID(ctx context.Context, id primitives.ValidatorIndex) (*ethpb.ValidatorRegistrationV1, error) {
|
|
if s.RegistrationCache != nil {
|
|
return s.RegistrationCache.RegistrationByIndex(id)
|
|
}
|
|
if s.Cfg.BeaconDB != nil {
|
|
return s.Cfg.BeaconDB.RegistrationByValidatorID(ctx, id)
|
|
}
|
|
return nil, cache.ErrNotFoundRegistration
|
|
}
|
|
|
|
// RegisterValidator for mocking.
|
|
func (s *MockBuilderService) RegisterValidator(context.Context, []*ethpb.SignedValidatorRegistrationV1) error {
|
|
return s.ErrRegisterValidator
|
|
}
|