diff --git a/beacon-chain/rpc/apimiddleware/custom_hooks.go b/beacon-chain/rpc/apimiddleware/custom_hooks.go index 9b2d13fa07..1a1d6a14a4 100644 --- a/beacon-chain/rpc/apimiddleware/custom_hooks.go +++ b/beacon-chain/rpc/apimiddleware/custom_hooks.go @@ -130,28 +130,6 @@ func wrapValidatorIndicesArray( return true, nil } -// https://ethereum.github.io/beacon-apis/#/Validator/publishAggregateAndProofs expects posting a top-level array. -// We make it more proto-friendly by wrapping it in a struct with a 'data' field. -func wrapSignedAggregateAndProofArray( - endpoint *apimiddleware.Endpoint, - _ http.ResponseWriter, - req *http.Request, -) (apimiddleware.RunDefault, apimiddleware.ErrorJson) { - if _, ok := endpoint.PostRequest.(*SubmitAggregateAndProofsRequestJson); ok { - data := make([]*SignedAggregateAttestationAndProofJson, 0) - if err := json.NewDecoder(req.Body).Decode(&data); err != nil { - return false, apimiddleware.InternalServerErrorWithMessage(err, "could not decode body") - } - j := &SubmitAggregateAndProofsRequestJson{Data: data} - b, err := json.Marshal(j) - if err != nil { - return false, apimiddleware.InternalServerErrorWithMessage(err, "could not marshal wrapped body") - } - req.Body = io.NopCloser(bytes.NewReader(b)) - } - return true, nil -} - // https://ethereum.github.io/beacon-apis/#/Validator/prepareBeaconCommitteeSubnet expects posting a top-level array. // We make it more proto-friendly by wrapping it in a struct with a 'data' field. func wrapBeaconCommitteeSubscriptionsArray( diff --git a/beacon-chain/rpc/apimiddleware/custom_hooks_test.go b/beacon-chain/rpc/apimiddleware/custom_hooks_test.go index 42f709cc46..d0b8fb76c6 100644 --- a/beacon-chain/rpc/apimiddleware/custom_hooks_test.go +++ b/beacon-chain/rpc/apimiddleware/custom_hooks_test.go @@ -140,46 +140,6 @@ func TestWrapBLSChangesArray(t *testing.T) { }) } -func TestWrapSignedAggregateAndProofArray(t *testing.T) { - t.Run("ok", func(t *testing.T) { - endpoint := &apimiddleware.Endpoint{ - PostRequest: &SubmitAggregateAndProofsRequestJson{}, - } - unwrappedAggs := []*SignedAggregateAttestationAndProofJson{{Signature: "sig"}} - unwrappedAggsJson, err := json.Marshal(unwrappedAggs) - require.NoError(t, err) - - var body bytes.Buffer - _, err = body.Write(unwrappedAggsJson) - require.NoError(t, err) - request := httptest.NewRequest("POST", "http://foo.example", &body) - - runDefault, errJson := wrapSignedAggregateAndProofArray(endpoint, nil, request) - require.Equal(t, true, errJson == nil) - assert.Equal(t, apimiddleware.RunDefault(true), runDefault) - wrappedAggs := &SubmitAggregateAndProofsRequestJson{} - require.NoError(t, json.NewDecoder(request.Body).Decode(wrappedAggs)) - require.Equal(t, 1, len(wrappedAggs.Data), "wrong number of wrapped items") - assert.Equal(t, "sig", wrappedAggs.Data[0].Signature) - }) - - t.Run("invalid_body", func(t *testing.T) { - endpoint := &apimiddleware.Endpoint{ - PostRequest: &SubmitAggregateAndProofsRequestJson{}, - } - var body bytes.Buffer - _, err := body.Write([]byte("invalid")) - require.NoError(t, err) - request := httptest.NewRequest("POST", "http://foo.example", &body) - - runDefault, errJson := wrapSignedAggregateAndProofArray(endpoint, nil, request) - require.Equal(t, false, errJson == nil) - assert.Equal(t, apimiddleware.RunDefault(false), runDefault) - assert.Equal(t, true, strings.Contains(errJson.Msg(), "could not decode body")) - assert.Equal(t, http.StatusInternalServerError, errJson.StatusCode()) - }) -} - func TestWrapBeaconCommitteeSubscriptionsArray(t *testing.T) { t.Run("ok", func(t *testing.T) { endpoint := &apimiddleware.Endpoint{ diff --git a/beacon-chain/rpc/apimiddleware/endpoint_factory.go b/beacon-chain/rpc/apimiddleware/endpoint_factory.go index 8ce956678f..de98ed33bd 100644 --- a/beacon-chain/rpc/apimiddleware/endpoint_factory.go +++ b/beacon-chain/rpc/apimiddleware/endpoint_factory.go @@ -68,7 +68,6 @@ func (_ *BeaconEndpointFactory) Paths() []string { "/eth/v1/validator/attestation_data", "/eth/v1/validator/beacon_committee_subscriptions", "/eth/v1/validator/sync_committee_subscriptions", - "/eth/v1/validator/aggregate_and_proofs", "/eth/v1/validator/sync_committee_contribution", "/eth/v1/validator/prepare_beacon_proposer", "/eth/v1/validator/register_validator", @@ -273,11 +272,6 @@ func (_ *BeaconEndpointFactory) Create(path string) (*apimiddleware.Endpoint, er endpoint.Hooks = apimiddleware.HookCollection{ OnPreDeserializeRequestBodyIntoContainer: wrapSyncCommitteeSubscriptionsArray, } - case "/eth/v1/validator/aggregate_and_proofs": - endpoint.PostRequest = &SubmitAggregateAndProofsRequestJson{} - endpoint.Hooks = apimiddleware.HookCollection{ - OnPreDeserializeRequestBodyIntoContainer: wrapSignedAggregateAndProofArray, - } case "/eth/v1/validator/sync_committee_contribution": endpoint.GetResponse = &ProduceSyncCommitteeContributionResponseJson{} endpoint.RequestQueryParams = []apimiddleware.QueryParam{{Name: "slot"}, {Name: "subcommittee_index"}, {Name: "beacon_block_root", Hex: true}} diff --git a/beacon-chain/rpc/apimiddleware/structs.go b/beacon-chain/rpc/apimiddleware/structs.go index 7bebcdf4a5..41592d2b45 100644 --- a/beacon-chain/rpc/apimiddleware/structs.go +++ b/beacon-chain/rpc/apimiddleware/structs.go @@ -298,10 +298,6 @@ type SyncCommitteeSubscriptionJson struct { UntilEpoch string `json:"until_epoch"` } -type SubmitAggregateAndProofsRequestJson struct { - Data []*SignedAggregateAttestationAndProofJson `json:"data"` -} - type ProduceSyncCommitteeContributionResponseJson struct { Data *SyncCommitteeContributionJson `json:"data"` } diff --git a/beacon-chain/rpc/core/BUILD.bazel b/beacon-chain/rpc/core/BUILD.bazel index 9abb6483d1..9d156c648c 100644 --- a/beacon-chain/rpc/core/BUILD.bazel +++ b/beacon-chain/rpc/core/BUILD.bazel @@ -4,6 +4,7 @@ go_library( name = "go_default_library", srcs = [ "errors.go", + "log.go", "validator.go", ], importpath = "github.com/prysmaticlabs/prysm/v4/beacon-chain/rpc/core", @@ -19,11 +20,14 @@ go_library( "//beacon-chain/core/transition:go_default_library", "//beacon-chain/operations/synccommittee:go_default_library", "//beacon-chain/p2p:go_default_library", + "//config/fieldparams:go_default_library", + "//config/params:go_default_library", "//consensus-types/primitives:go_default_library", "//encoding/bytesutil:go_default_library", "//proto/prysm/v1alpha1:go_default_library", "//runtime/version:go_default_library", "@com_github_pkg_errors//:go_default_library", + "@com_github_sirupsen_logrus//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_x_sync//errgroup:go_default_library", ], diff --git a/beacon-chain/rpc/core/log.go b/beacon-chain/rpc/core/log.go new file mode 100644 index 0000000000..6fa1855871 --- /dev/null +++ b/beacon-chain/rpc/core/log.go @@ -0,0 +1,5 @@ +package core + +import "github.com/sirupsen/logrus" + +var log = logrus.WithField("prefix", "rpc/core") diff --git a/beacon-chain/rpc/core/validator.go b/beacon-chain/rpc/core/validator.go index ff52e7d9ee..a9df7c665e 100644 --- a/beacon-chain/rpc/core/validator.go +++ b/beacon-chain/rpc/core/validator.go @@ -1,8 +1,11 @@ package core import ( + "bytes" "context" + "fmt" "sort" + "time" "github.com/pkg/errors" "github.com/prysmaticlabs/prysm/v4/beacon-chain/blockchain" @@ -15,13 +18,34 @@ import ( "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/transition" "github.com/prysmaticlabs/prysm/v4/beacon-chain/operations/synccommittee" "github.com/prysmaticlabs/prysm/v4/beacon-chain/p2p" + fieldparams "github.com/prysmaticlabs/prysm/v4/config/fieldparams" + "github.com/prysmaticlabs/prysm/v4/config/params" "github.com/prysmaticlabs/prysm/v4/consensus-types/primitives" "github.com/prysmaticlabs/prysm/v4/encoding/bytesutil" ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/v4/runtime/version" + "github.com/sirupsen/logrus" "golang.org/x/sync/errgroup" ) +// AggregateBroadcastFailedError represents an error scenario where +// broadcasting an aggregate selection proof failed. +type AggregateBroadcastFailedError struct { + err error +} + +// NewAggregateBroadcastFailedError creates a new error instance. +func NewAggregateBroadcastFailedError(err error) AggregateBroadcastFailedError { + return AggregateBroadcastFailedError{ + err: err, + } +} + +// Error returns the underlying error message. +func (e *AggregateBroadcastFailedError) Error() string { + return fmt.Sprintf("could not broadcast signed aggregated attestation: %s", e.err.Error()) +} + // ComputeValidatorPerformance reports the validator's latest balance along with other important metrics on // rewards and penalties throughout its lifecycle in the beacon chain. func ComputeValidatorPerformance( @@ -179,7 +203,7 @@ func ComputeValidatorPerformance( func SubmitSignedContributionAndProof( ctx context.Context, s *ethpb.SignedContributionAndProof, - p2p p2p.Broadcaster, + broadcaster p2p.Broadcaster, pool synccommittee.Pool, notifier opfeed.Notifier, ) *RpcError { @@ -187,7 +211,7 @@ func SubmitSignedContributionAndProof( // Broadcasting and saving contribution into the pool in parallel. As one fail should not affect another. errs.Go(func() error { - return p2p.Broadcast(ctx, s) + return broadcaster.Broadcast(ctx, s) }) if err := pool.SaveSyncCommitteeContribution(s.Message.Contribution); err != nil { @@ -209,3 +233,40 @@ func SubmitSignedContributionAndProof( return nil } + +// SubmitSignedAggregateSelectionProof verifies given aggregate and proofs and publishes them on appropriate gossipsub topic. +func SubmitSignedAggregateSelectionProof( + ctx context.Context, + req *ethpb.SignedAggregateSubmitRequest, + genesisTime time.Time, + broadcaster p2p.Broadcaster, +) *RpcError { + if req.SignedAggregateAndProof == nil || req.SignedAggregateAndProof.Message == nil || + req.SignedAggregateAndProof.Message.Aggregate == nil || req.SignedAggregateAndProof.Message.Aggregate.Data == nil { + return &RpcError{Err: errors.New("signed aggregate request can't be nil"), Reason: BadRequest} + } + emptySig := make([]byte, fieldparams.BLSSignatureLength) + if bytes.Equal(req.SignedAggregateAndProof.Signature, emptySig) || + bytes.Equal(req.SignedAggregateAndProof.Message.SelectionProof, emptySig) { + return &RpcError{Err: errors.New("signed signatures can't be zero hashes"), Reason: BadRequest} + } + + // As a preventive measure, a beacon node shouldn't broadcast an attestation whose slot is out of range. + if err := helpers.ValidateAttestationTime(req.SignedAggregateAndProof.Message.Aggregate.Data.Slot, + genesisTime, params.BeaconNetworkConfig().MaximumGossipClockDisparity); err != nil { + return &RpcError{Err: errors.New("attestation slot is no longer valid from current time"), Reason: BadRequest} + } + + if err := broadcaster.Broadcast(ctx, req.SignedAggregateAndProof); err != nil { + return &RpcError{Err: &AggregateBroadcastFailedError{err: err}, Reason: Internal} + } + + log.WithFields(logrus.Fields{ + "slot": req.SignedAggregateAndProof.Message.Aggregate.Data.Slot, + "committeeIndex": req.SignedAggregateAndProof.Message.Aggregate.Data.CommitteeIndex, + "validatorIndex": req.SignedAggregateAndProof.Message.AggregatorIndex, + "aggregatedCount": req.SignedAggregateAndProof.Message.Aggregate.AggregationBits.Count(), + }).Debug("Broadcasting aggregated attestation and proof") + + return nil +} diff --git a/beacon-chain/rpc/eth/shared/BUILD.bazel b/beacon-chain/rpc/eth/shared/BUILD.bazel index 0a30a9fe82..51c11f0fdb 100644 --- a/beacon-chain/rpc/eth/shared/BUILD.bazel +++ b/beacon-chain/rpc/eth/shared/BUILD.bazel @@ -1,8 +1,9 @@ -load("@prysm//tools/go:def.bzl", "go_library") +load("@prysm//tools/go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", srcs = [ + "errors.go", "request.go", "structs.go", ], @@ -14,6 +15,15 @@ go_library( "//network/http:go_default_library", "//proto/prysm/v1alpha1:go_default_library", "@com_github_ethereum_go_ethereum//common/hexutil:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["errors_test.go"], + embed = [":go_default_library"], + deps = [ + "//testing/assert:go_default_library", "@com_github_pkg_errors//:go_default_library", ], ) diff --git a/beacon-chain/rpc/eth/shared/errors.go b/beacon-chain/rpc/eth/shared/errors.go new file mode 100644 index 0000000000..61328136ce --- /dev/null +++ b/beacon-chain/rpc/eth/shared/errors.go @@ -0,0 +1,28 @@ +package shared + +import ( + "fmt" + "strings" +) + +// DecodeError represents an error resulting from trying to decode an HTTP request. +// It tracks the full field name for which decoding failed. +type DecodeError struct { + path []string + err error +} + +// NewDecodeError wraps an error (either the initial decoding error or another DecodeError). +// The current field that failed decoding must be passed in. +func NewDecodeError(err error, field string) *DecodeError { + de, ok := err.(*DecodeError) + if ok { + return &DecodeError{path: append([]string{field}, de.path...), err: de.err} + } + return &DecodeError{path: []string{field}, err: err} +} + +// Error returns the formatted error message which contains the full field name and the actual decoding error. +func (e *DecodeError) Error() string { + return fmt.Sprintf("could not decode %s: %s", strings.Join(e.path, "."), e.err.Error()) +} diff --git a/beacon-chain/rpc/eth/shared/errors_test.go b/beacon-chain/rpc/eth/shared/errors_test.go new file mode 100644 index 0000000000..19e7248b89 --- /dev/null +++ b/beacon-chain/rpc/eth/shared/errors_test.go @@ -0,0 +1,16 @@ +package shared + +import ( + "testing" + + "github.com/pkg/errors" + "github.com/prysmaticlabs/prysm/v4/testing/assert" +) + +func TestDecodeError(t *testing.T) { + e := errors.New("not a number") + de := NewDecodeError(e, "Z") + de = NewDecodeError(de, "Y") + de = NewDecodeError(de, "X") + assert.Equal(t, "could not decode X.Y.Z: not a number", de.Error()) +} diff --git a/beacon-chain/rpc/eth/shared/structs.go b/beacon-chain/rpc/eth/shared/structs.go index 47f01ce103..08bf85fd4b 100644 --- a/beacon-chain/rpc/eth/shared/structs.go +++ b/beacon-chain/rpc/eth/shared/structs.go @@ -4,23 +4,22 @@ import ( "strconv" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/pkg/errors" "github.com/prysmaticlabs/prysm/v4/consensus-types/primitives" eth "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1" ) type Attestation struct { - AggregationBits string `json:"aggregation_bits" validate:"required,hexadecimal"` - Data AttestationData `json:"data" validate:"required"` - Signature string `json:"signature" validate:"required,hexadecimal"` + AggregationBits string `json:"aggregation_bits" validate:"required,hexadecimal"` + Data *AttestationData `json:"data" validate:"required"` + Signature string `json:"signature" validate:"required,hexadecimal"` } type AttestationData struct { - Slot string `json:"slot" validate:"required,number,gte=0"` - CommitteeIndex string `json:"index" validate:"required,number,gte=0"` - BeaconBlockRoot string `json:"beacon_block_root" validate:"required,hexadecimal"` - Source Checkpoint `json:"source" validate:"required"` - Target Checkpoint `json:"target" validate:"required"` + Slot string `json:"slot" validate:"required,number,gte=0"` + CommitteeIndex string `json:"index" validate:"required,number,gte=0"` + BeaconBlockRoot string `json:"beacon_block_root" validate:"required,hexadecimal"` + Source *Checkpoint `json:"source" validate:"required"` + Target *Checkpoint `json:"target" validate:"required"` } type Checkpoint struct { @@ -29,14 +28,14 @@ type Checkpoint struct { } type SignedContributionAndProof struct { - Message ContributionAndProof `json:"message" validate:"required"` - Signature string `json:"signature" validate:"required,hexadecimal"` + Message *ContributionAndProof `json:"message" validate:"required"` + Signature string `json:"signature" validate:"required,hexadecimal"` } type ContributionAndProof struct { - AggregatorIndex string `json:"aggregator_index" validate:"required,number,gte=0"` - Contribution SyncCommitteeContribution `json:"contribution" validate:"required"` - SelectionProof string `json:"selection_proof" validate:"required,hexadecimal"` + AggregatorIndex string `json:"aggregator_index" validate:"required,number,gte=0"` + Contribution *SyncCommitteeContribution `json:"contribution" validate:"required"` + SelectionProof string `json:"selection_proof" validate:"required,hexadecimal"` } type SyncCommitteeContribution struct { @@ -47,52 +46,185 @@ type SyncCommitteeContribution struct { Signature string `json:"signature" hex:"true" validate:"required,hexadecimal"` } +type SignedAggregateAttestationAndProof struct { + Message *AggregateAttestationAndProof `json:"message" validate:"required"` + Signature string `json:"signature" validate:"required,hexadecimal"` +} + +type AggregateAttestationAndProof struct { + AggregatorIndex string `json:"aggregator_index" validate:"required,number,gte=0"` + Aggregate *Attestation `json:"aggregate" validate:"required"` + SelectionProof string `json:"selection_proof" validate:"required,hexadecimal"` +} + func (s *SignedContributionAndProof) ToConsensus() (*eth.SignedContributionAndProof, error) { + msg, err := s.Message.ToConsensus() + if err != nil { + return nil, NewDecodeError(err, "Message") + } sig, err := hexutil.Decode(s.Signature) if err != nil { - return nil, errors.Wrap(err, "could not decode s.Signature") - } - aggregatorIndex, err := strconv.ParseUint(s.Message.AggregatorIndex, 10, 64) - if err != nil { - return nil, errors.Wrap(err, "could not decode s.Message.AggregatorIndex") - } - selectionProof, err := hexutil.Decode(s.Message.SelectionProof) - if err != nil { - return nil, errors.Wrap(err, "could not decode s.Message.SelectionProof") - } - slot, err := strconv.ParseUint(s.Message.Contribution.Slot, 10, 64) - if err != nil { - return nil, errors.Wrap(err, "could not decode s.Message.Contribution.Slot") - } - beaconBlockRoot, err := hexutil.Decode(s.Message.Contribution.BeaconBlockRoot) - if err != nil { - return nil, errors.Wrap(err, "could not decode s.Message.Contribution.BeaconBlockRoot") - } - subcommitteeIndex, err := strconv.ParseUint(s.Message.Contribution.SubcommitteeIndex, 10, 64) - if err != nil { - return nil, errors.Wrap(err, "could not decode s.Message.Contribution.SubcommitteeIndex") - } - aggregationBits, err := hexutil.Decode(s.Message.Contribution.AggregationBits) - if err != nil { - return nil, errors.Wrap(err, "could not decode s.Message.Contribution.AggregationBits") - } - contributionSig, err := hexutil.Decode(s.Message.Contribution.Signature) - if err != nil { - return nil, errors.Wrap(err, "could not decode s.Message.Contribution.Signature") + return nil, NewDecodeError(err, "Signature") } return ð.SignedContributionAndProof{ - Message: ð.ContributionAndProof{ - AggregatorIndex: primitives.ValidatorIndex(aggregatorIndex), - Contribution: ð.SyncCommitteeContribution{ - Slot: primitives.Slot(slot), - BlockRoot: beaconBlockRoot, - SubcommitteeIndex: subcommitteeIndex, - AggregationBits: aggregationBits, - Signature: contributionSig, - }, - SelectionProof: selectionProof, - }, + Message: msg, Signature: sig, }, nil } + +func (c *ContributionAndProof) ToConsensus() (*eth.ContributionAndProof, error) { + contribution, err := c.Contribution.ToConsensus() + if err != nil { + return nil, NewDecodeError(err, "Contribution") + } + aggregatorIndex, err := strconv.ParseUint(c.AggregatorIndex, 10, 64) + if err != nil { + return nil, NewDecodeError(err, "AggregatorIndex") + } + selectionProof, err := hexutil.Decode(c.SelectionProof) + if err != nil { + return nil, NewDecodeError(err, "SelectionProof") + } + + return ð.ContributionAndProof{ + AggregatorIndex: primitives.ValidatorIndex(aggregatorIndex), + Contribution: contribution, + SelectionProof: selectionProof, + }, nil +} + +func (s *SyncCommitteeContribution) ToConsensus() (*eth.SyncCommitteeContribution, error) { + slot, err := strconv.ParseUint(s.Slot, 10, 64) + if err != nil { + return nil, NewDecodeError(err, "Slot") + } + bbRoot, err := hexutil.Decode(s.BeaconBlockRoot) + if err != nil { + return nil, NewDecodeError(err, "BeaconBlockRoot") + } + subcommitteeIndex, err := strconv.ParseUint(s.SubcommitteeIndex, 10, 64) + if err != nil { + return nil, NewDecodeError(err, "SubcommitteeIndex") + } + aggBits, err := hexutil.Decode(s.AggregationBits) + if err != nil { + return nil, NewDecodeError(err, "AggregationBits") + } + sig, err := hexutil.Decode(s.Signature) + if err != nil { + return nil, NewDecodeError(err, "Signature") + } + + return ð.SyncCommitteeContribution{ + Slot: primitives.Slot(slot), + BlockRoot: bbRoot, + SubcommitteeIndex: subcommitteeIndex, + AggregationBits: aggBits, + Signature: sig, + }, nil +} + +func (s *SignedAggregateAttestationAndProof) ToConsensus() (*eth.SignedAggregateAttestationAndProof, error) { + msg, err := s.Message.ToConsensus() + if err != nil { + return nil, NewDecodeError(err, "Message") + } + sig, err := hexutil.Decode(s.Signature) + if err != nil { + return nil, NewDecodeError(err, "Signature") + } + + return ð.SignedAggregateAttestationAndProof{ + Message: msg, + Signature: sig, + }, nil +} + +func (a *AggregateAttestationAndProof) ToConsensus() (*eth.AggregateAttestationAndProof, error) { + aggIndex, err := strconv.ParseUint(a.AggregatorIndex, 10, 64) + if err != nil { + return nil, NewDecodeError(err, "AggregatorIndex") + } + agg, err := a.Aggregate.ToConsensus() + if err != nil { + return nil, NewDecodeError(err, "Aggregate") + } + proof, err := hexutil.Decode(a.SelectionProof) + if err != nil { + return nil, NewDecodeError(err, "SelectionProof") + } + return ð.AggregateAttestationAndProof{ + AggregatorIndex: primitives.ValidatorIndex(aggIndex), + Aggregate: agg, + SelectionProof: proof, + }, nil +} + +func (a *Attestation) ToConsensus() (*eth.Attestation, error) { + aggBits, err := hexutil.Decode(a.AggregationBits) + if err != nil { + return nil, NewDecodeError(err, "AggregationBits") + } + data, err := a.Data.ToConsensus() + if err != nil { + return nil, NewDecodeError(err, "Data") + } + sig, err := hexutil.Decode(a.Signature) + if err != nil { + return nil, NewDecodeError(err, "Signature") + } + + return ð.Attestation{ + AggregationBits: aggBits, + Data: data, + Signature: sig, + }, nil +} + +func (a *AttestationData) ToConsensus() (*eth.AttestationData, error) { + slot, err := strconv.ParseUint(a.Slot, 10, 64) + if err != nil { + return nil, NewDecodeError(err, "Slot") + } + committeeIndex, err := strconv.ParseUint(a.CommitteeIndex, 10, 64) + if err != nil { + return nil, NewDecodeError(err, "CommitteeIndex") + } + bbRoot, err := hexutil.Decode(a.BeaconBlockRoot) + if err != nil { + return nil, NewDecodeError(err, "BeaconBlockRoot") + } + source, err := a.Source.ToConsensus() + if err != nil { + return nil, NewDecodeError(err, "Source") + } + target, err := a.Target.ToConsensus() + if err != nil { + return nil, NewDecodeError(err, "Target") + } + + return ð.AttestationData{ + Slot: primitives.Slot(slot), + CommitteeIndex: primitives.CommitteeIndex(committeeIndex), + BeaconBlockRoot: bbRoot, + Source: source, + Target: target, + }, nil +} + +func (c *Checkpoint) ToConsensus() (*eth.Checkpoint, error) { + epoch, err := strconv.ParseUint(c.Epoch, 10, 64) + if err != nil { + return nil, NewDecodeError(err, "Epoch") + } + root, err := hexutil.Decode(c.Root) + if err != nil { + return nil, NewDecodeError(err, "Root") + } + + return ð.Checkpoint{ + Epoch: primitives.Epoch(epoch), + Root: root, + }, nil +} diff --git a/beacon-chain/rpc/eth/validator/handlers.go b/beacon-chain/rpc/eth/validator/handlers.go index b49e54ace5..65c50c3f19 100644 --- a/beacon-chain/rpc/eth/validator/handlers.go +++ b/beacon-chain/rpc/eth/validator/handlers.go @@ -60,17 +60,17 @@ func (s *Server) GetAggregateAttestation(w http.ResponseWriter, r *http.Request) } response := &AggregateAttestationResponse{ - Data: shared.Attestation{ + Data: &shared.Attestation{ AggregationBits: hexutil.Encode(bestMatchingAtt.AggregationBits), - Data: shared.AttestationData{ + Data: &shared.AttestationData{ Slot: strconv.FormatUint(uint64(bestMatchingAtt.Data.Slot), 10), CommitteeIndex: strconv.FormatUint(uint64(bestMatchingAtt.Data.CommitteeIndex), 10), BeaconBlockRoot: hexutil.Encode(bestMatchingAtt.Data.BeaconBlockRoot), - Source: shared.Checkpoint{ + Source: &shared.Checkpoint{ Epoch: strconv.FormatUint(uint64(bestMatchingAtt.Data.Source.Epoch), 10), Root: hexutil.Encode(bestMatchingAtt.Data.Source.Root), }, - Target: shared.Checkpoint{ + Target: &shared.Checkpoint{ Epoch: strconv.FormatUint(uint64(bestMatchingAtt.Data.Target.Epoch), 10), Root: hexutil.Encode(bestMatchingAtt.Data.Target.Root), }, @@ -82,24 +82,24 @@ func (s *Server) GetAggregateAttestation(w http.ResponseWriter, r *http.Request) // SubmitContributionAndProofs publishes multiple signed sync committee contribution and proofs. func (s *Server) SubmitContributionAndProofs(w http.ResponseWriter, r *http.Request) { - var req SubmitContributionAndProofsRequest - if r.Body == http.NoBody { http2.HandleError(w, "No data submitted", http.StatusBadRequest) return } + var req SubmitContributionAndProofsRequest if err := json.NewDecoder(r.Body).Decode(&req.Data); err != nil { http2.HandleError(w, "Could not decode request body: "+err.Error(), http.StatusBadRequest) return } validate := validator.New() + if err := validate.Struct(req); err != nil { + http2.HandleError(w, err.Error(), http.StatusBadRequest) + return + } + for _, item := range req.Data { - if err := validate.Struct(item); err != nil { - http2.HandleError(w, err.Error(), http.StatusBadRequest) - return - } consensusItem, err := item.ToConsensus() if err != nil { http2.HandleError(w, "Could not convert request contribution to consensus contribution: "+err.Error(), http.StatusBadRequest) @@ -111,3 +111,53 @@ func (s *Server) SubmitContributionAndProofs(w http.ResponseWriter, r *http.Requ } } } + +// SubmitAggregateAndProofs verifies given aggregate and proofs and publishes them on appropriate gossipsub topic. +func (s *Server) SubmitAggregateAndProofs(w http.ResponseWriter, r *http.Request) { + if r.Body == http.NoBody { + http2.HandleError(w, "No data submitted", http.StatusBadRequest) + return + } + + var req SubmitAggregateAndProofsRequest + if err := json.NewDecoder(r.Body).Decode(&req.Data); err != nil { + http2.HandleError(w, "Could not decode request body: "+err.Error(), http.StatusBadRequest) + return + } + + validate := validator.New() + if err := validate.Struct(req); err != nil { + http2.HandleError(w, err.Error(), http.StatusBadRequest) + return + } + + genesisTime := s.TimeFetcher.GenesisTime() + + broadcastFailed := false + for _, item := range req.Data { + consensusItem, err := item.ToConsensus() + if err != nil { + http2.HandleError(w, "Could not convert request aggregate to consensus aggregate: "+err.Error(), http.StatusBadRequest) + return + } + rpcError := core.SubmitSignedAggregateSelectionProof( + r.Context(), + ðpbalpha.SignedAggregateSubmitRequest{SignedAggregateAndProof: consensusItem}, + genesisTime, + s.Broadcaster, + ) + if rpcError != nil { + _, ok := rpcError.Err.(*core.AggregateBroadcastFailedError) + if ok { + broadcastFailed = true + } else { + http2.HandleError(w, rpcError.Err.Error(), core.ErrorReasonToHTTP(rpcError.Reason)) + return + } + } + } + + if broadcastFailed { + http2.HandleError(w, "Could not broadcast one or more signed aggregated attestations", http.StatusInternalServerError) + } +} diff --git a/beacon-chain/rpc/eth/validator/handlers_test.go b/beacon-chain/rpc/eth/validator/handlers_test.go index 0f2c3d7db7..2c0f65a831 100644 --- a/beacon-chain/rpc/eth/validator/handlers_test.go +++ b/beacon-chain/rpc/eth/validator/handlers_test.go @@ -343,14 +343,14 @@ func TestSubmitContributionAndProofs(t *testing.T) { s.SubmitContributionAndProofs(writer, request) assert.Equal(t, http.StatusBadRequest, writer.Code) + e := &http2.DefaultErrorJson{} + require.NoError(t, json.Unmarshal(writer.Body.Bytes(), e)) + assert.Equal(t, http.StatusBadRequest, e.Code) }) t.Run("no body", func(t *testing.T) { s.SyncCommitteePool = synccommittee.NewStore() - var body bytes.Buffer - _, err := body.WriteString(invalidContribution) - require.NoError(t, err) request := httptest.NewRequest(http.MethodPost, "http://example.com", nil) writer := httptest.NewRecorder() writer.Body = &bytes.Buffer{} @@ -364,6 +364,73 @@ func TestSubmitContributionAndProofs(t *testing.T) { }) } +func TestSubmitAggregateAndProofs(t *testing.T) { + s := &Server{ + TimeFetcher: &mockChain.ChainService{}, + } + + t.Run("single", func(t *testing.T) { + broadcaster := &p2pmock.MockBroadcaster{} + s.Broadcaster = broadcaster + + var body bytes.Buffer + _, err := body.WriteString(singleAggregate) + require.NoError(t, err) + request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) + writer := httptest.NewRecorder() + writer.Body = &bytes.Buffer{} + + s.SubmitAggregateAndProofs(writer, request) + assert.Equal(t, http.StatusOK, writer.Code) + assert.Equal(t, 1, len(broadcaster.BroadcastMessages)) + }) + + t.Run("multiple", func(t *testing.T) { + broadcaster := &p2pmock.MockBroadcaster{} + s.Broadcaster = broadcaster + s.SyncCommitteePool = synccommittee.NewStore() + + var body bytes.Buffer + _, err := body.WriteString(multipleAggregates) + require.NoError(t, err) + request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) + writer := httptest.NewRecorder() + writer.Body = &bytes.Buffer{} + + s.SubmitAggregateAndProofs(writer, request) + assert.Equal(t, http.StatusOK, writer.Code) + assert.Equal(t, 2, len(broadcaster.BroadcastMessages)) + }) + + t.Run("invalid", func(t *testing.T) { + var body bytes.Buffer + _, err := body.WriteString(invalidAggregate) + require.NoError(t, err) + request := httptest.NewRequest(http.MethodPost, "http://example.com", &body) + writer := httptest.NewRecorder() + writer.Body = &bytes.Buffer{} + + s.SubmitAggregateAndProofs(writer, request) + assert.Equal(t, http.StatusBadRequest, writer.Code) + e := &http2.DefaultErrorJson{} + require.NoError(t, json.Unmarshal(writer.Body.Bytes(), e)) + assert.Equal(t, http.StatusBadRequest, e.Code) + }) + + t.Run("no body", func(t *testing.T) { + request := httptest.NewRequest(http.MethodPost, "http://example.com", nil) + writer := httptest.NewRecorder() + writer.Body = &bytes.Buffer{} + + s.SubmitAggregateAndProofs(writer, request) + assert.Equal(t, http.StatusBadRequest, writer.Code) + e := &http2.DefaultErrorJson{} + require.NoError(t, json.Unmarshal(writer.Body.Bytes(), e)) + assert.Equal(t, http.StatusBadRequest, e.Code) + assert.Equal(t, true, strings.Contains(e.Message, "No data submitted")) + }) +} + const ( singleContribution = `[ { @@ -427,5 +494,109 @@ const ( }, "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" } +]` + singleAggregate = `[ + { + "message": { + "aggregator_index": "1", + "aggregate": { + "aggregation_bits": "0x01", + "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", + "data": { + "slot": "1", + "index": "1", + "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", + "source": { + "epoch": "1", + "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" + }, + "target": { + "epoch": "1", + "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" + } + } + }, + "selection_proof": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" + }, + "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" + } +]` + multipleAggregates = `[ + { + "message": { + "aggregator_index": "1", + "aggregate": { + "aggregation_bits": "0x01", + "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", + "data": { + "slot": "1", + "index": "1", + "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", + "source": { + "epoch": "1", + "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" + }, + "target": { + "epoch": "1", + "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" + } + } + }, + "selection_proof": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" + }, + "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" + }, +{ + "message": { + "aggregator_index": "1", + "aggregate": { + "aggregation_bits": "0x01", + "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", + "data": { + "slot": "1", + "index": "1", + "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", + "source": { + "epoch": "1", + "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" + }, + "target": { + "epoch": "1", + "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" + } + } + }, + "selection_proof": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" + }, + "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" + } +] +` + // aggregator_index is invalid + invalidAggregate = `[ + { + "message": { + "aggregator_index": "foo", + "aggregate": { + "aggregation_bits": "0x01", + "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", + "data": { + "slot": "1", + "index": "1", + "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", + "source": { + "epoch": "1", + "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" + }, + "target": { + "epoch": "1", + "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" + } + } + }, + "selection_proof": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" + }, + "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" + } ]` ) diff --git a/beacon-chain/rpc/eth/validator/structs.go b/beacon-chain/rpc/eth/validator/structs.go index d4ee3ae605..96f6e652e0 100644 --- a/beacon-chain/rpc/eth/validator/structs.go +++ b/beacon-chain/rpc/eth/validator/structs.go @@ -3,9 +3,13 @@ package validator import "github.com/prysmaticlabs/prysm/v4/beacon-chain/rpc/eth/shared" type AggregateAttestationResponse struct { - Data shared.Attestation `json:"data"` + Data *shared.Attestation `json:"data" validate:"required"` } type SubmitContributionAndProofsRequest struct { - Data []shared.SignedContributionAndProof `json:"data"` + Data []*shared.SignedContributionAndProof `json:"data" validate:"required"` +} + +type SubmitAggregateAndProofsRequest struct { + Data []*shared.SignedAggregateAttestationAndProof `json:"data" validate:"required"` } diff --git a/beacon-chain/rpc/eth/validator/validator.go b/beacon-chain/rpc/eth/validator/validator.go index 6c409db338..37653b569c 100644 --- a/beacon-chain/rpc/eth/validator/validator.go +++ b/beacon-chain/rpc/eth/validator/validator.go @@ -803,55 +803,6 @@ func (vs *Server) ProduceAttestationData(ctx context.Context, req *ethpbv1.Produ return ðpbv1.ProduceAttestationDataResponse{Data: attData}, nil } -// SubmitAggregateAndProofs verifies given aggregate and proofs and publishes them on appropriate gossipsub topic. -func (vs *Server) SubmitAggregateAndProofs(ctx context.Context, req *ethpbv1.SubmitAggregateAndProofsRequest) (*empty.Empty, error) { - ctx, span := trace.StartSpan(ctx, "validator.SubmitAggregateAndProofs") - defer span.End() - - for _, agg := range req.Data { - if agg == nil || agg.Message == nil || agg.Message.Aggregate == nil || agg.Message.Aggregate.Data == nil { - return nil, status.Error(codes.InvalidArgument, "Signed aggregate request can't be nil") - } - sigLen := fieldparams.BLSSignatureLength - emptySig := make([]byte, sigLen) - if bytes.Equal(agg.Signature, emptySig) || bytes.Equal(agg.Message.SelectionProof, emptySig) || bytes.Equal(agg.Message.Aggregate.Signature, emptySig) { - return nil, status.Error(codes.InvalidArgument, "Signed signatures can't be zero hashes") - } - if len(agg.Signature) != sigLen || len(agg.Message.Aggregate.Signature) != sigLen { - return nil, status.Errorf(codes.InvalidArgument, "Incorrect signature length. Expected %d bytes", sigLen) - } - - // As a preventive measure, a beacon node shouldn't broadcast an attestation whose slot is out of range. - if err := helpers.ValidateAttestationTime(agg.Message.Aggregate.Data.Slot, - vs.TimeFetcher.GenesisTime(), params.BeaconNetworkConfig().MaximumGossipClockDisparity); err != nil { - return nil, status.Error(codes.InvalidArgument, "Attestation slot is no longer valid from current time") - } - } - - broadcastFailed := false - for _, agg := range req.Data { - v1alpha1Agg := migration.V1SignedAggregateAttAndProofToV1Alpha1(agg) - if err := vs.Broadcaster.Broadcast(ctx, v1alpha1Agg); err != nil { - broadcastFailed = true - } else { - log.WithFields(log.Fields{ - "slot": agg.Message.Aggregate.Data.Slot, - "committeeIndex": agg.Message.Aggregate.Data.Index, - "validatorIndex": agg.Message.AggregatorIndex, - "aggregatedCount": agg.Message.Aggregate.AggregationBits.Count(), - }).Debug("Broadcasting aggregated attestation and proof") - } - } - - if broadcastFailed { - return nil, status.Errorf( - codes.Internal, - "Could not broadcast one or more signed aggregated attestations") - } - - return &emptypb.Empty{}, nil -} - // SubmitBeaconCommitteeSubscription searches using discv5 for peers related to the provided subnet information // and replaces current peers with those ones if necessary. func (vs *Server) SubmitBeaconCommitteeSubscription(ctx context.Context, req *ethpbv1.SubmitBeaconCommitteeSubscriptionsRequest) (*emptypb.Empty, error) { diff --git a/beacon-chain/rpc/eth/validator/validator_test.go b/beacon-chain/rpc/eth/validator/validator_test.go index c8a88e1853..5dc1df04da 100644 --- a/beacon-chain/rpc/eth/validator/validator_test.go +++ b/beacon-chain/rpc/eth/validator/validator_test.go @@ -3,7 +3,6 @@ package validator import ( "context" "fmt" - "strconv" "testing" "time" @@ -1610,286 +1609,6 @@ func TestSubmitSyncCommitteeSubscription_SyncNotReady(t *testing.T) { assert.ErrorContains(t, "Syncing to latest head, not ready to respond", err) } -func TestSubmitAggregateAndProofs(t *testing.T) { - ctx := context.Background() - params.SetupTestConfigCleanup(t) - c := params.BeaconNetworkConfig() - c.MaximumGossipClockDisparity = time.Hour - params.OverrideBeaconNetworkConfig(c) - root := bytesutil.PadTo([]byte("root"), 32) - sig := bytesutil.PadTo([]byte("sig"), fieldparams.BLSSignatureLength) - proof := bytesutil.PadTo([]byte("proof"), fieldparams.BLSSignatureLength) - att := ðpbv1.Attestation{ - AggregationBits: []byte{0, 1}, - Data: ðpbv1.AttestationData{ - Slot: 1, - Index: 1, - BeaconBlockRoot: root, - Source: ðpbv1.Checkpoint{ - Epoch: 1, - Root: root, - }, - Target: ðpbv1.Checkpoint{ - Epoch: 1, - Root: root, - }, - }, - Signature: sig, - } - - t.Run("OK", func(t *testing.T) { - chainSlot := primitives.Slot(0) - chain := &mockChain.ChainService{ - Genesis: time.Now(), Slot: &chainSlot, - } - broadcaster := &p2pmock.MockBroadcaster{} - vs := Server{ - TimeFetcher: chain, - Broadcaster: broadcaster, - } - - req := ðpbv1.SubmitAggregateAndProofsRequest{ - Data: []*ethpbv1.SignedAggregateAttestationAndProof{ - { - Message: ðpbv1.AggregateAttestationAndProof{ - AggregatorIndex: 1, - Aggregate: att, - SelectionProof: proof, - }, - Signature: sig, - }, - }, - } - - _, err := vs.SubmitAggregateAndProofs(ctx, req) - require.NoError(t, err) - assert.Equal(t, true, broadcaster.BroadcastCalled) - }) - - t.Run("nil aggregate", func(t *testing.T) { - broadcaster := &p2pmock.MockBroadcaster{} - vs := Server{ - Broadcaster: broadcaster, - } - - req := ðpbv1.SubmitAggregateAndProofsRequest{ - Data: []*ethpbv1.SignedAggregateAttestationAndProof{ - nil, - }, - } - _, err := vs.SubmitAggregateAndProofs(ctx, req) - require.NotNil(t, err) - assert.ErrorContains(t, "Signed aggregate request can't be nil", err) - assert.Equal(t, false, broadcaster.BroadcastCalled) - - req = ðpbv1.SubmitAggregateAndProofsRequest{ - Data: []*ethpbv1.SignedAggregateAttestationAndProof{ - { - Message: nil, - Signature: sig, - }, - }, - } - _, err = vs.SubmitAggregateAndProofs(ctx, req) - require.NotNil(t, err) - assert.ErrorContains(t, "Signed aggregate request can't be nil", err) - assert.Equal(t, false, broadcaster.BroadcastCalled) - - req = ðpbv1.SubmitAggregateAndProofsRequest{ - Data: []*ethpbv1.SignedAggregateAttestationAndProof{ - { - Message: ðpbv1.AggregateAttestationAndProof{ - AggregatorIndex: 1, - Aggregate: ðpbv1.Attestation{ - AggregationBits: []byte{0, 1}, - Data: nil, - Signature: sig, - }, - SelectionProof: proof, - }, - Signature: sig, - }, - }, - } - _, err = vs.SubmitAggregateAndProofs(ctx, req) - require.NotNil(t, err) - assert.ErrorContains(t, "Signed aggregate request can't be nil", err) - assert.Equal(t, false, broadcaster.BroadcastCalled) - }) - - t.Run("zero signature", func(t *testing.T) { - broadcaster := &p2pmock.MockBroadcaster{} - vs := Server{ - Broadcaster: broadcaster, - } - req := ðpbv1.SubmitAggregateAndProofsRequest{ - Data: []*ethpbv1.SignedAggregateAttestationAndProof{ - { - Message: ðpbv1.AggregateAttestationAndProof{ - AggregatorIndex: 1, - Aggregate: att, - SelectionProof: proof, - }, - Signature: make([]byte, 96), - }, - }, - } - _, err := vs.SubmitAggregateAndProofs(ctx, req) - require.NotNil(t, err) - assert.ErrorContains(t, "Signed signatures can't be zero hashes", err) - assert.Equal(t, false, broadcaster.BroadcastCalled) - }) - - t.Run("zero proof", func(t *testing.T) { - broadcaster := &p2pmock.MockBroadcaster{} - vs := Server{ - Broadcaster: broadcaster, - } - req := ðpbv1.SubmitAggregateAndProofsRequest{ - Data: []*ethpbv1.SignedAggregateAttestationAndProof{ - { - Message: ðpbv1.AggregateAttestationAndProof{ - AggregatorIndex: 1, - Aggregate: att, - SelectionProof: make([]byte, 96), - }, - Signature: sig, - }, - }, - } - _, err := vs.SubmitAggregateAndProofs(ctx, req) - require.NotNil(t, err) - assert.ErrorContains(t, "Signed signatures can't be zero hashes", err) - assert.Equal(t, false, broadcaster.BroadcastCalled) - }) - - t.Run("zero message signature", func(t *testing.T) { - broadcaster := &p2pmock.MockBroadcaster{} - vs := Server{ - Broadcaster: broadcaster, - } - req := ðpbv1.SubmitAggregateAndProofsRequest{ - Data: []*ethpbv1.SignedAggregateAttestationAndProof{ - { - Message: ðpbv1.AggregateAttestationAndProof{ - AggregatorIndex: 1, - Aggregate: ðpbv1.Attestation{ - AggregationBits: []byte{0, 1}, - Data: ðpbv1.AttestationData{ - Slot: 1, - Index: 1, - BeaconBlockRoot: root, - Source: ðpbv1.Checkpoint{ - Epoch: 1, - Root: root, - }, - Target: ðpbv1.Checkpoint{ - Epoch: 1, - Root: root, - }, - }, - Signature: make([]byte, 96), - }, - SelectionProof: proof, - }, - Signature: sig, - }, - }, - } - _, err := vs.SubmitAggregateAndProofs(ctx, req) - require.NotNil(t, err) - assert.ErrorContains(t, "Signed signatures can't be zero hashes", err) - assert.Equal(t, false, broadcaster.BroadcastCalled) - }) - - t.Run("wrong signature length", func(t *testing.T) { - broadcaster := &p2pmock.MockBroadcaster{} - vs := Server{ - Broadcaster: broadcaster, - } - - req := ðpbv1.SubmitAggregateAndProofsRequest{ - Data: []*ethpbv1.SignedAggregateAttestationAndProof{ - { - Message: ðpbv1.AggregateAttestationAndProof{ - AggregatorIndex: 1, - Aggregate: att, - SelectionProof: proof, - }, - Signature: make([]byte, 99), - }, - }, - } - _, err := vs.SubmitAggregateAndProofs(ctx, req) - require.NotNil(t, err) - assert.ErrorContains(t, "Incorrect signature length. Expected "+strconv.Itoa(96)+" bytes", err) - assert.Equal(t, false, broadcaster.BroadcastCalled) - - req = ðpbv1.SubmitAggregateAndProofsRequest{ - Data: []*ethpbv1.SignedAggregateAttestationAndProof{ - { - Message: ðpbv1.AggregateAttestationAndProof{ - AggregatorIndex: 1, - Aggregate: ðpbv1.Attestation{ - AggregationBits: []byte{0, 1}, - Data: ðpbv1.AttestationData{ - Slot: 1, - Index: 1, - BeaconBlockRoot: root, - Source: ðpbv1.Checkpoint{ - Epoch: 1, - Root: root, - }, - Target: ðpbv1.Checkpoint{ - Epoch: 1, - Root: root, - }, - }, - Signature: make([]byte, 99), - }, - SelectionProof: proof, - }, - Signature: sig, - }, - }, - } - _, err = vs.SubmitAggregateAndProofs(ctx, req) - require.NotNil(t, err) - assert.ErrorContains(t, "Incorrect signature length. Expected "+strconv.Itoa(96)+" bytes", err) - assert.Equal(t, false, broadcaster.BroadcastCalled) - }) - - t.Run("invalid attestation time", func(t *testing.T) { - chainSlot := primitives.Slot(0) - chain := &mockChain.ChainService{ - Genesis: time.Now().Add(time.Hour * 2), Slot: &chainSlot, - } - broadcaster := &p2pmock.MockBroadcaster{} - vs := Server{ - TimeFetcher: chain, - Broadcaster: broadcaster, - } - - req := ðpbv1.SubmitAggregateAndProofsRequest{ - Data: []*ethpbv1.SignedAggregateAttestationAndProof{ - { - Message: ðpbv1.AggregateAttestationAndProof{ - AggregatorIndex: 1, - Aggregate: att, - SelectionProof: proof, - }, - Signature: sig, - }, - }, - } - - _, err := vs.SubmitAggregateAndProofs(ctx, req) - require.NotNil(t, err) - assert.ErrorContains(t, "Attestation slot is no longer valid from current time", err) - assert.Equal(t, false, broadcaster.BroadcastCalled) - }) -} - func TestProduceSyncCommitteeContribution(t *testing.T) { ctx := context.Background() root := bytesutil.PadTo([]byte("root"), 32) diff --git a/beacon-chain/rpc/prysm/v1alpha1/validator/aggregator.go b/beacon-chain/rpc/prysm/v1alpha1/validator/aggregator.go index 62dc70d08a..0b972b2d2d 100644 --- a/beacon-chain/rpc/prysm/v1alpha1/validator/aggregator.go +++ b/beacon-chain/rpc/prysm/v1alpha1/validator/aggregator.go @@ -1,16 +1,14 @@ package validator import ( - "bytes" "context" "github.com/prysmaticlabs/prysm/v4/beacon-chain/core/helpers" - fieldparams "github.com/prysmaticlabs/prysm/v4/config/fieldparams" + "github.com/prysmaticlabs/prysm/v4/beacon-chain/rpc/core" "github.com/prysmaticlabs/prysm/v4/config/params" "github.com/prysmaticlabs/prysm/v4/encoding/bytesutil" ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/v4/time/slots" - "github.com/sirupsen/logrus" "go.opencensus.io/trace" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -115,32 +113,8 @@ func (vs *Server) SubmitSignedAggregateSelectionProof( ctx context.Context, req *ethpb.SignedAggregateSubmitRequest, ) (*ethpb.SignedAggregateSubmitResponse, error) { - if req.SignedAggregateAndProof == nil || req.SignedAggregateAndProof.Message == nil || - req.SignedAggregateAndProof.Message.Aggregate == nil || req.SignedAggregateAndProof.Message.Aggregate.Data == nil { - return nil, status.Error(codes.InvalidArgument, "Signed aggregate request can't be nil") + if err := core.SubmitSignedAggregateSelectionProof(ctx, req, vs.TimeFetcher.GenesisTime(), vs.P2P); err != nil { + return nil, status.Errorf(core.ErrorReasonToGRPC(err.Reason), "Could not submit aggregate: %v", err.Err) } - emptySig := make([]byte, fieldparams.BLSSignatureLength) - if bytes.Equal(req.SignedAggregateAndProof.Signature, emptySig) || - bytes.Equal(req.SignedAggregateAndProof.Message.SelectionProof, emptySig) { - return nil, status.Error(codes.InvalidArgument, "Signed signatures can't be zero hashes") - } - - // As a preventive measure, a beacon node shouldn't broadcast an attestation whose slot is out of range. - if err := helpers.ValidateAttestationTime(req.SignedAggregateAndProof.Message.Aggregate.Data.Slot, - vs.TimeFetcher.GenesisTime(), params.BeaconNetworkConfig().MaximumGossipClockDisparity); err != nil { - return nil, status.Error(codes.InvalidArgument, "Attestation slot is no longer valid from current time") - } - - if err := vs.P2P.Broadcast(ctx, req.SignedAggregateAndProof); err != nil { - return nil, status.Errorf(codes.Internal, "Could not broadcast signed aggregated attestation: %v", err) - } - - log.WithFields(logrus.Fields{ - "slot": req.SignedAggregateAndProof.Message.Aggregate.Data.Slot, - "committeeIndex": req.SignedAggregateAndProof.Message.Aggregate.Data.CommitteeIndex, - "validatorIndex": req.SignedAggregateAndProof.Message.AggregatorIndex, - "aggregatedCount": req.SignedAggregateAndProof.Message.Aggregate.AggregationBits.Count(), - }).Debug("Broadcasting aggregated attestation and proof") - return ðpb.SignedAggregateSubmitResponse{}, nil } diff --git a/beacon-chain/rpc/prysm/v1alpha1/validator/aggregator_test.go b/beacon-chain/rpc/prysm/v1alpha1/validator/aggregator_test.go index d79e4ff83d..18597d735b 100644 --- a/beacon-chain/rpc/prysm/v1alpha1/validator/aggregator_test.go +++ b/beacon-chain/rpc/prysm/v1alpha1/validator/aggregator_test.go @@ -398,7 +398,9 @@ func TestSubmitAggregateAndProof_SelectsMostBitsWhenOwnAttestationNotPresent(t * } func TestSubmitSignedAggregateSelectionProof_ZeroHashesSignatures(t *testing.T) { - aggregatorServer := &Server{} + aggregatorServer := &Server{ + TimeFetcher: &mock.ChainService{Genesis: time.Now()}, + } req := ðpb.SignedAggregateSubmitRequest{ SignedAggregateAndProof: ðpb.SignedAggregateAttestationAndProof{ Signature: make([]byte, fieldparams.BLSSignatureLength), @@ -410,7 +412,7 @@ func TestSubmitSignedAggregateSelectionProof_ZeroHashesSignatures(t *testing.T) }, } _, err := aggregatorServer.SubmitSignedAggregateSelectionProof(context.Background(), req) - require.ErrorContains(t, "Signed signatures can't be zero hashes", err) + require.ErrorContains(t, "signed signatures can't be zero hashes", err) req = ðpb.SignedAggregateSubmitRequest{ SignedAggregateAndProof: ðpb.SignedAggregateAttestationAndProof{ @@ -424,7 +426,7 @@ func TestSubmitSignedAggregateSelectionProof_ZeroHashesSignatures(t *testing.T) }, } _, err = aggregatorServer.SubmitSignedAggregateSelectionProof(context.Background(), req) - require.ErrorContains(t, "Signed signatures can't be zero hashes", err) + require.ErrorContains(t, "signed signatures can't be zero hashes", err) } func TestSubmitSignedAggregateSelectionProof_InvalidSlot(t *testing.T) { @@ -442,5 +444,5 @@ func TestSubmitSignedAggregateSelectionProof_InvalidSlot(t *testing.T) { }, } _, err := aggregatorServer.SubmitSignedAggregateSelectionProof(context.Background(), req) - require.ErrorContains(t, "Attestation slot is no longer valid from current time", err) + require.ErrorContains(t, "attestation slot is no longer valid from current time", err) } diff --git a/beacon-chain/rpc/service.go b/beacon-chain/rpc/service.go index 74cd2781bd..3ba7c0300f 100644 --- a/beacon-chain/rpc/service.go +++ b/beacon-chain/rpc/service.go @@ -287,6 +287,7 @@ func (s *Service) Start() { s.cfg.Router.HandleFunc("/eth/v1/validator/aggregate_attestation", validatorServerV1.GetAggregateAttestation).Methods(http.MethodGet) s.cfg.Router.HandleFunc("/eth/v1/validator/contribution_and_proofs", validatorServerV1.SubmitContributionAndProofs).Methods(http.MethodPost) + s.cfg.Router.HandleFunc("/eth/v1/validator/aggregate_and_proofs", validatorServerV1.SubmitAggregateAndProofs).Methods(http.MethodPost) nodeServer := &nodev1alpha1.Server{ LogsStreamer: logs.NewStreamServer(), diff --git a/proto/eth/service/validator_service.pb.go b/proto/eth/service/validator_service.pb.go index 114828f289..7deb39451a 100755 --- a/proto/eth/service/validator_service.pb.go +++ b/proto/eth/service/validator_service.pb.go @@ -47,7 +47,7 @@ var file_proto_eth_service_validator_service_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x73, 0x7a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x32, 0xf7, 0x13, 0x0a, 0x0f, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x56, 0x61, 0x6c, + 0x74, 0x6f, 0x32, 0xd4, 0x12, 0x0a, 0x0f, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0xa3, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, @@ -150,73 +150,63 @@ var file_proto_eth_service_validator_service_proto_rawDesc = []byte{ 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x12, 0xa0, 0x01, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x41, 0x67, 0x67, - 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x12, - 0x30, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x34, 0x3a, 0x01, 0x2a, 0x22, 0x2f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, - 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, - 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x12, 0xbd, 0x01, 0x0a, 0x21, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x3a, 0x01, 0x2a, 0x22, 0x39, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x42, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, 0x22, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, - 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0xd7, 0x01, 0x0a, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, - 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x53, 0x79, - 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, - 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, + 0x74, 0x61, 0x12, 0xbd, 0x01, 0x0a, 0x21, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x44, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x3e, 0x3a, 0x01, 0x2a, 0x22, 0x39, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x79, 0x6e, + 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, + 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, + 0x3a, 0x01, 0x2a, 0x22, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, + 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, + 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd7, 0x01, 0x0a, + 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x38, 0x12, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x74, 0x68, - 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x79, - 0x6e, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x90, 0x01, 0x0a, 0x0b, 0x47, 0x65, - 0x74, 0x4c, 0x69, 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x23, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4c, - 0x69, 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, - 0x2b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, - 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x6c, 0x69, 0x76, 0x65, - 0x6e, 0x65, 0x73, 0x73, 0x2f, 0x7b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x7d, 0x42, 0x96, 0x01, 0x0a, - 0x18, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, - 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, - 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x74, 0x68, 0x2f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xaa, 0x02, 0x14, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, - 0x75, 0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xca, 0x02, - 0x14, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x12, 0x38, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, + 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x90, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4c, 0x69, + 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x23, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x76, 0x65, + 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x4c, 0x69, 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6e, 0x65, 0x73, + 0x73, 0x2f, 0x7b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x7d, 0x42, 0x96, 0x01, 0x0a, 0x18, 0x6f, 0x72, + 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, + 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, + 0x76, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0xaa, 0x02, 0x14, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, + 0x45, 0x74, 0x68, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xca, 0x02, 0x14, 0x45, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_proto_eth_service_validator_service_proto_goTypes = []interface{}{ @@ -227,21 +217,20 @@ var file_proto_eth_service_validator_service_proto_goTypes = []interface{}{ (*v1.PrepareBeaconProposerRequest)(nil), // 4: ethereum.eth.v1.PrepareBeaconProposerRequest (*v1.SubmitValidatorRegistrationsRequest)(nil), // 5: ethereum.eth.v1.SubmitValidatorRegistrationsRequest (*v1.ProduceAttestationDataRequest)(nil), // 6: ethereum.eth.v1.ProduceAttestationDataRequest - (*v1.SubmitAggregateAndProofsRequest)(nil), // 7: ethereum.eth.v1.SubmitAggregateAndProofsRequest - (*v1.SubmitBeaconCommitteeSubscriptionsRequest)(nil), // 8: ethereum.eth.v1.SubmitBeaconCommitteeSubscriptionsRequest - (*v2.SubmitSyncCommitteeSubscriptionsRequest)(nil), // 9: ethereum.eth.v2.SubmitSyncCommitteeSubscriptionsRequest - (*v2.ProduceSyncCommitteeContributionRequest)(nil), // 10: ethereum.eth.v2.ProduceSyncCommitteeContributionRequest - (*v2.GetLivenessRequest)(nil), // 11: ethereum.eth.v2.GetLivenessRequest - (*v1.AttesterDutiesResponse)(nil), // 12: ethereum.eth.v1.AttesterDutiesResponse - (*v1.ProposerDutiesResponse)(nil), // 13: ethereum.eth.v1.ProposerDutiesResponse - (*v2.SyncCommitteeDutiesResponse)(nil), // 14: ethereum.eth.v2.SyncCommitteeDutiesResponse - (*v2.ProduceBlockResponseV2)(nil), // 15: ethereum.eth.v2.ProduceBlockResponseV2 - (*v2.SSZContainer)(nil), // 16: ethereum.eth.v2.SSZContainer - (*v2.ProduceBlindedBlockResponse)(nil), // 17: ethereum.eth.v2.ProduceBlindedBlockResponse - (*empty.Empty)(nil), // 18: google.protobuf.Empty - (*v1.ProduceAttestationDataResponse)(nil), // 19: ethereum.eth.v1.ProduceAttestationDataResponse - (*v2.ProduceSyncCommitteeContributionResponse)(nil), // 20: ethereum.eth.v2.ProduceSyncCommitteeContributionResponse - (*v2.GetLivenessResponse)(nil), // 21: ethereum.eth.v2.GetLivenessResponse + (*v1.SubmitBeaconCommitteeSubscriptionsRequest)(nil), // 7: ethereum.eth.v1.SubmitBeaconCommitteeSubscriptionsRequest + (*v2.SubmitSyncCommitteeSubscriptionsRequest)(nil), // 8: ethereum.eth.v2.SubmitSyncCommitteeSubscriptionsRequest + (*v2.ProduceSyncCommitteeContributionRequest)(nil), // 9: ethereum.eth.v2.ProduceSyncCommitteeContributionRequest + (*v2.GetLivenessRequest)(nil), // 10: ethereum.eth.v2.GetLivenessRequest + (*v1.AttesterDutiesResponse)(nil), // 11: ethereum.eth.v1.AttesterDutiesResponse + (*v1.ProposerDutiesResponse)(nil), // 12: ethereum.eth.v1.ProposerDutiesResponse + (*v2.SyncCommitteeDutiesResponse)(nil), // 13: ethereum.eth.v2.SyncCommitteeDutiesResponse + (*v2.ProduceBlockResponseV2)(nil), // 14: ethereum.eth.v2.ProduceBlockResponseV2 + (*v2.SSZContainer)(nil), // 15: ethereum.eth.v2.SSZContainer + (*v2.ProduceBlindedBlockResponse)(nil), // 16: ethereum.eth.v2.ProduceBlindedBlockResponse + (*empty.Empty)(nil), // 17: google.protobuf.Empty + (*v1.ProduceAttestationDataResponse)(nil), // 18: ethereum.eth.v1.ProduceAttestationDataResponse + (*v2.ProduceSyncCommitteeContributionResponse)(nil), // 19: ethereum.eth.v2.ProduceSyncCommitteeContributionResponse + (*v2.GetLivenessResponse)(nil), // 20: ethereum.eth.v2.GetLivenessResponse } var file_proto_eth_service_validator_service_proto_depIdxs = []int32{ 0, // 0: ethereum.eth.service.BeaconValidator.GetAttesterDuties:input_type -> ethereum.eth.v1.AttesterDutiesRequest @@ -254,28 +243,26 @@ var file_proto_eth_service_validator_service_proto_depIdxs = []int32{ 4, // 7: ethereum.eth.service.BeaconValidator.PrepareBeaconProposer:input_type -> ethereum.eth.v1.PrepareBeaconProposerRequest 5, // 8: ethereum.eth.service.BeaconValidator.SubmitValidatorRegistration:input_type -> ethereum.eth.v1.SubmitValidatorRegistrationsRequest 6, // 9: ethereum.eth.service.BeaconValidator.ProduceAttestationData:input_type -> ethereum.eth.v1.ProduceAttestationDataRequest - 7, // 10: ethereum.eth.service.BeaconValidator.SubmitAggregateAndProofs:input_type -> ethereum.eth.v1.SubmitAggregateAndProofsRequest - 8, // 11: ethereum.eth.service.BeaconValidator.SubmitBeaconCommitteeSubscription:input_type -> ethereum.eth.v1.SubmitBeaconCommitteeSubscriptionsRequest - 9, // 12: ethereum.eth.service.BeaconValidator.SubmitSyncCommitteeSubscription:input_type -> ethereum.eth.v2.SubmitSyncCommitteeSubscriptionsRequest - 10, // 13: ethereum.eth.service.BeaconValidator.ProduceSyncCommitteeContribution:input_type -> ethereum.eth.v2.ProduceSyncCommitteeContributionRequest - 11, // 14: ethereum.eth.service.BeaconValidator.GetLiveness:input_type -> ethereum.eth.v2.GetLivenessRequest - 12, // 15: ethereum.eth.service.BeaconValidator.GetAttesterDuties:output_type -> ethereum.eth.v1.AttesterDutiesResponse - 13, // 16: ethereum.eth.service.BeaconValidator.GetProposerDuties:output_type -> ethereum.eth.v1.ProposerDutiesResponse - 14, // 17: ethereum.eth.service.BeaconValidator.GetSyncCommitteeDuties:output_type -> ethereum.eth.v2.SyncCommitteeDutiesResponse - 15, // 18: ethereum.eth.service.BeaconValidator.ProduceBlockV2:output_type -> ethereum.eth.v2.ProduceBlockResponseV2 - 16, // 19: ethereum.eth.service.BeaconValidator.ProduceBlockV2SSZ:output_type -> ethereum.eth.v2.SSZContainer - 17, // 20: ethereum.eth.service.BeaconValidator.ProduceBlindedBlock:output_type -> ethereum.eth.v2.ProduceBlindedBlockResponse - 16, // 21: ethereum.eth.service.BeaconValidator.ProduceBlindedBlockSSZ:output_type -> ethereum.eth.v2.SSZContainer - 18, // 22: ethereum.eth.service.BeaconValidator.PrepareBeaconProposer:output_type -> google.protobuf.Empty - 18, // 23: ethereum.eth.service.BeaconValidator.SubmitValidatorRegistration:output_type -> google.protobuf.Empty - 19, // 24: ethereum.eth.service.BeaconValidator.ProduceAttestationData:output_type -> ethereum.eth.v1.ProduceAttestationDataResponse - 18, // 25: ethereum.eth.service.BeaconValidator.SubmitAggregateAndProofs:output_type -> google.protobuf.Empty - 18, // 26: ethereum.eth.service.BeaconValidator.SubmitBeaconCommitteeSubscription:output_type -> google.protobuf.Empty - 18, // 27: ethereum.eth.service.BeaconValidator.SubmitSyncCommitteeSubscription:output_type -> google.protobuf.Empty - 20, // 28: ethereum.eth.service.BeaconValidator.ProduceSyncCommitteeContribution:output_type -> ethereum.eth.v2.ProduceSyncCommitteeContributionResponse - 21, // 29: ethereum.eth.service.BeaconValidator.GetLiveness:output_type -> ethereum.eth.v2.GetLivenessResponse - 15, // [15:30] is the sub-list for method output_type - 0, // [0:15] is the sub-list for method input_type + 7, // 10: ethereum.eth.service.BeaconValidator.SubmitBeaconCommitteeSubscription:input_type -> ethereum.eth.v1.SubmitBeaconCommitteeSubscriptionsRequest + 8, // 11: ethereum.eth.service.BeaconValidator.SubmitSyncCommitteeSubscription:input_type -> ethereum.eth.v2.SubmitSyncCommitteeSubscriptionsRequest + 9, // 12: ethereum.eth.service.BeaconValidator.ProduceSyncCommitteeContribution:input_type -> ethereum.eth.v2.ProduceSyncCommitteeContributionRequest + 10, // 13: ethereum.eth.service.BeaconValidator.GetLiveness:input_type -> ethereum.eth.v2.GetLivenessRequest + 11, // 14: ethereum.eth.service.BeaconValidator.GetAttesterDuties:output_type -> ethereum.eth.v1.AttesterDutiesResponse + 12, // 15: ethereum.eth.service.BeaconValidator.GetProposerDuties:output_type -> ethereum.eth.v1.ProposerDutiesResponse + 13, // 16: ethereum.eth.service.BeaconValidator.GetSyncCommitteeDuties:output_type -> ethereum.eth.v2.SyncCommitteeDutiesResponse + 14, // 17: ethereum.eth.service.BeaconValidator.ProduceBlockV2:output_type -> ethereum.eth.v2.ProduceBlockResponseV2 + 15, // 18: ethereum.eth.service.BeaconValidator.ProduceBlockV2SSZ:output_type -> ethereum.eth.v2.SSZContainer + 16, // 19: ethereum.eth.service.BeaconValidator.ProduceBlindedBlock:output_type -> ethereum.eth.v2.ProduceBlindedBlockResponse + 15, // 20: ethereum.eth.service.BeaconValidator.ProduceBlindedBlockSSZ:output_type -> ethereum.eth.v2.SSZContainer + 17, // 21: ethereum.eth.service.BeaconValidator.PrepareBeaconProposer:output_type -> google.protobuf.Empty + 17, // 22: ethereum.eth.service.BeaconValidator.SubmitValidatorRegistration:output_type -> google.protobuf.Empty + 18, // 23: ethereum.eth.service.BeaconValidator.ProduceAttestationData:output_type -> ethereum.eth.v1.ProduceAttestationDataResponse + 17, // 24: ethereum.eth.service.BeaconValidator.SubmitBeaconCommitteeSubscription:output_type -> google.protobuf.Empty + 17, // 25: ethereum.eth.service.BeaconValidator.SubmitSyncCommitteeSubscription:output_type -> google.protobuf.Empty + 19, // 26: ethereum.eth.service.BeaconValidator.ProduceSyncCommitteeContribution:output_type -> ethereum.eth.v2.ProduceSyncCommitteeContributionResponse + 20, // 27: ethereum.eth.service.BeaconValidator.GetLiveness:output_type -> ethereum.eth.v2.GetLivenessResponse + 14, // [14:28] is the sub-list for method output_type + 0, // [0:14] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name @@ -327,7 +314,6 @@ type BeaconValidatorClient interface { PrepareBeaconProposer(ctx context.Context, in *v1.PrepareBeaconProposerRequest, opts ...grpc.CallOption) (*empty.Empty, error) SubmitValidatorRegistration(ctx context.Context, in *v1.SubmitValidatorRegistrationsRequest, opts ...grpc.CallOption) (*empty.Empty, error) ProduceAttestationData(ctx context.Context, in *v1.ProduceAttestationDataRequest, opts ...grpc.CallOption) (*v1.ProduceAttestationDataResponse, error) - SubmitAggregateAndProofs(ctx context.Context, in *v1.SubmitAggregateAndProofsRequest, opts ...grpc.CallOption) (*empty.Empty, error) SubmitBeaconCommitteeSubscription(ctx context.Context, in *v1.SubmitBeaconCommitteeSubscriptionsRequest, opts ...grpc.CallOption) (*empty.Empty, error) SubmitSyncCommitteeSubscription(ctx context.Context, in *v2.SubmitSyncCommitteeSubscriptionsRequest, opts ...grpc.CallOption) (*empty.Empty, error) ProduceSyncCommitteeContribution(ctx context.Context, in *v2.ProduceSyncCommitteeContributionRequest, opts ...grpc.CallOption) (*v2.ProduceSyncCommitteeContributionResponse, error) @@ -432,15 +418,6 @@ func (c *beaconValidatorClient) ProduceAttestationData(ctx context.Context, in * return out, nil } -func (c *beaconValidatorClient) SubmitAggregateAndProofs(ctx context.Context, in *v1.SubmitAggregateAndProofsRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/ethereum.eth.service.BeaconValidator/SubmitAggregateAndProofs", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *beaconValidatorClient) SubmitBeaconCommitteeSubscription(ctx context.Context, in *v1.SubmitBeaconCommitteeSubscriptionsRequest, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) err := c.cc.Invoke(ctx, "/ethereum.eth.service.BeaconValidator/SubmitBeaconCommitteeSubscription", in, out, opts...) @@ -489,7 +466,6 @@ type BeaconValidatorServer interface { PrepareBeaconProposer(context.Context, *v1.PrepareBeaconProposerRequest) (*empty.Empty, error) SubmitValidatorRegistration(context.Context, *v1.SubmitValidatorRegistrationsRequest) (*empty.Empty, error) ProduceAttestationData(context.Context, *v1.ProduceAttestationDataRequest) (*v1.ProduceAttestationDataResponse, error) - SubmitAggregateAndProofs(context.Context, *v1.SubmitAggregateAndProofsRequest) (*empty.Empty, error) SubmitBeaconCommitteeSubscription(context.Context, *v1.SubmitBeaconCommitteeSubscriptionsRequest) (*empty.Empty, error) SubmitSyncCommitteeSubscription(context.Context, *v2.SubmitSyncCommitteeSubscriptionsRequest) (*empty.Empty, error) ProduceSyncCommitteeContribution(context.Context, *v2.ProduceSyncCommitteeContributionRequest) (*v2.ProduceSyncCommitteeContributionResponse, error) @@ -530,9 +506,6 @@ func (*UnimplementedBeaconValidatorServer) SubmitValidatorRegistration(context.C func (*UnimplementedBeaconValidatorServer) ProduceAttestationData(context.Context, *v1.ProduceAttestationDataRequest) (*v1.ProduceAttestationDataResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ProduceAttestationData not implemented") } -func (*UnimplementedBeaconValidatorServer) SubmitAggregateAndProofs(context.Context, *v1.SubmitAggregateAndProofsRequest) (*empty.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method SubmitAggregateAndProofs not implemented") -} func (*UnimplementedBeaconValidatorServer) SubmitBeaconCommitteeSubscription(context.Context, *v1.SubmitBeaconCommitteeSubscriptionsRequest) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method SubmitBeaconCommitteeSubscription not implemented") } @@ -730,24 +703,6 @@ func _BeaconValidator_ProduceAttestationData_Handler(srv interface{}, ctx contex return interceptor(ctx, in, info, handler) } -func _BeaconValidator_SubmitAggregateAndProofs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(v1.SubmitAggregateAndProofsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(BeaconValidatorServer).SubmitAggregateAndProofs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ethereum.eth.service.BeaconValidator/SubmitAggregateAndProofs", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(BeaconValidatorServer).SubmitAggregateAndProofs(ctx, req.(*v1.SubmitAggregateAndProofsRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _BeaconValidator_SubmitBeaconCommitteeSubscription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(v1.SubmitBeaconCommitteeSubscriptionsRequest) if err := dec(in); err != nil { @@ -864,10 +819,6 @@ var _BeaconValidator_serviceDesc = grpc.ServiceDesc{ MethodName: "ProduceAttestationData", Handler: _BeaconValidator_ProduceAttestationData_Handler, }, - { - MethodName: "SubmitAggregateAndProofs", - Handler: _BeaconValidator_SubmitAggregateAndProofs_Handler, - }, { MethodName: "SubmitBeaconCommitteeSubscription", Handler: _BeaconValidator_SubmitBeaconCommitteeSubscription_Handler, diff --git a/proto/eth/service/validator_service.pb.gw.go b/proto/eth/service/validator_service.pb.gw.go index 15ad7b00ea..f4825efced 100755 --- a/proto/eth/service/validator_service.pb.gw.go +++ b/proto/eth/service/validator_service.pb.gw.go @@ -625,40 +625,6 @@ func local_request_BeaconValidator_ProduceAttestationData_0(ctx context.Context, } -func request_BeaconValidator_SubmitAggregateAndProofs_0(ctx context.Context, marshaler runtime.Marshaler, client BeaconValidatorClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1.SubmitAggregateAndProofsRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.SubmitAggregateAndProofs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_BeaconValidator_SubmitAggregateAndProofs_0(ctx context.Context, marshaler runtime.Marshaler, server BeaconValidatorServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1.SubmitAggregateAndProofsRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.SubmitAggregateAndProofs(ctx, &protoReq) - return msg, metadata, err - -} - func request_BeaconValidator_SubmitBeaconCommitteeSubscription_0(ctx context.Context, marshaler runtime.Marshaler, client BeaconValidatorClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq v1.SubmitBeaconCommitteeSubscriptionsRequest var metadata runtime.ServerMetadata @@ -1069,29 +1035,6 @@ func RegisterBeaconValidatorHandlerServer(ctx context.Context, mux *runtime.Serv }) - mux.Handle("POST", pattern_BeaconValidator_SubmitAggregateAndProofs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/ethereum.eth.service.BeaconValidator/SubmitAggregateAndProofs") - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_BeaconValidator_SubmitAggregateAndProofs_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_BeaconValidator_SubmitAggregateAndProofs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_BeaconValidator_SubmitBeaconCommitteeSubscription_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1425,26 +1368,6 @@ func RegisterBeaconValidatorHandlerClient(ctx context.Context, mux *runtime.Serv }) - mux.Handle("POST", pattern_BeaconValidator_SubmitAggregateAndProofs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/ethereum.eth.service.BeaconValidator/SubmitAggregateAndProofs") - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_BeaconValidator_SubmitAggregateAndProofs_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_BeaconValidator_SubmitAggregateAndProofs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_BeaconValidator_SubmitBeaconCommitteeSubscription_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1549,8 +1472,6 @@ var ( pattern_BeaconValidator_ProduceAttestationData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"internal", "eth", "v1", "validator", "attestation_data"}, "")) - pattern_BeaconValidator_SubmitAggregateAndProofs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"internal", "eth", "v1", "validator", "aggregate_and_proofs"}, "")) - pattern_BeaconValidator_SubmitBeaconCommitteeSubscription_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"internal", "eth", "v1", "validator", "beacon_committee_subscriptions"}, "")) pattern_BeaconValidator_SubmitSyncCommitteeSubscription_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"internal", "eth", "v1", "validator", "sync_committee_subscriptions"}, "")) @@ -1581,8 +1502,6 @@ var ( forward_BeaconValidator_ProduceAttestationData_0 = runtime.ForwardResponseMessage - forward_BeaconValidator_SubmitAggregateAndProofs_0 = runtime.ForwardResponseMessage - forward_BeaconValidator_SubmitBeaconCommitteeSubscription_0 = runtime.ForwardResponseMessage forward_BeaconValidator_SubmitSyncCommitteeSubscription_0 = runtime.ForwardResponseMessage diff --git a/proto/eth/service/validator_service.proto b/proto/eth/service/validator_service.proto index 7e68dd0a15..f00a6247a9 100644 --- a/proto/eth/service/validator_service.proto +++ b/proto/eth/service/validator_service.proto @@ -200,21 +200,6 @@ service BeaconValidator { option (google.api.http) = { get: "/internal/eth/v1/validator/attestation_data" }; } - // SubmitAggregateAndProofs verifies given aggregate and proofs and publishes them on appropriate gossipsub topic. - // - // Response usage: - // - 200: Successful response - // - 400: Invalid request syntax - // - 500: Beacon node internal error - // - // Spec: https://ethereum.github.io/beacon-APIs/?urls.primaryName=v2.3.0#/Validator/publishAggregateAndProofs - rpc SubmitAggregateAndProofs(v1.SubmitAggregateAndProofsRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - post: "/internal/eth/v1/validator/aggregate_and_proofs" - body: "*" - }; - } - // SubmitBeaconCommitteeSubscription searches using discv5 for peers related to // the provided subnet information and replaces current peers with those ones if necessary. // diff --git a/proto/eth/v1/validator.pb.go b/proto/eth/v1/validator.pb.go index d68c18a229..338d5b6466 100755 --- a/proto/eth/v1/validator.pb.go +++ b/proto/eth/v1/validator.pb.go @@ -875,53 +875,6 @@ func (x *ProduceAttestationDataResponse) GetData() *AttestationData { return nil } -type SubmitAggregateAndProofsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Data []*SignedAggregateAttestationAndProof `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` -} - -func (x *SubmitAggregateAndProofsRequest) Reset() { - *x = SubmitAggregateAndProofsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_eth_v1_validator_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SubmitAggregateAndProofsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SubmitAggregateAndProofsRequest) ProtoMessage() {} - -func (x *SubmitAggregateAndProofsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_eth_v1_validator_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SubmitAggregateAndProofsRequest.ProtoReflect.Descriptor instead. -func (*SubmitAggregateAndProofsRequest) Descriptor() ([]byte, []int) { - return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{12} -} - -func (x *SubmitAggregateAndProofsRequest) GetData() []*SignedAggregateAttestationAndProof { - if x != nil { - return x.Data - } - return nil -} - type SubmitBeaconCommitteeSubscriptionsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -933,7 +886,7 @@ type SubmitBeaconCommitteeSubscriptionsRequest struct { func (x *SubmitBeaconCommitteeSubscriptionsRequest) Reset() { *x = SubmitBeaconCommitteeSubscriptionsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_eth_v1_validator_proto_msgTypes[13] + mi := &file_proto_eth_v1_validator_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -946,7 +899,7 @@ func (x *SubmitBeaconCommitteeSubscriptionsRequest) String() string { func (*SubmitBeaconCommitteeSubscriptionsRequest) ProtoMessage() {} func (x *SubmitBeaconCommitteeSubscriptionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_eth_v1_validator_proto_msgTypes[13] + mi := &file_proto_eth_v1_validator_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -959,7 +912,7 @@ func (x *SubmitBeaconCommitteeSubscriptionsRequest) ProtoReflect() protoreflect. // Deprecated: Use SubmitBeaconCommitteeSubscriptionsRequest.ProtoReflect.Descriptor instead. func (*SubmitBeaconCommitteeSubscriptionsRequest) Descriptor() ([]byte, []int) { - return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{13} + return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{12} } func (x *SubmitBeaconCommitteeSubscriptionsRequest) GetData() []*BeaconCommitteeSubscribe { @@ -984,7 +937,7 @@ type BeaconCommitteeSubscribe struct { func (x *BeaconCommitteeSubscribe) Reset() { *x = BeaconCommitteeSubscribe{} if protoimpl.UnsafeEnabled { - mi := &file_proto_eth_v1_validator_proto_msgTypes[14] + mi := &file_proto_eth_v1_validator_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -997,7 +950,7 @@ func (x *BeaconCommitteeSubscribe) String() string { func (*BeaconCommitteeSubscribe) ProtoMessage() {} func (x *BeaconCommitteeSubscribe) ProtoReflect() protoreflect.Message { - mi := &file_proto_eth_v1_validator_proto_msgTypes[14] + mi := &file_proto_eth_v1_validator_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1010,7 +963,7 @@ func (x *BeaconCommitteeSubscribe) ProtoReflect() protoreflect.Message { // Deprecated: Use BeaconCommitteeSubscribe.ProtoReflect.Descriptor instead. func (*BeaconCommitteeSubscribe) Descriptor() ([]byte, []int) { - return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{14} + return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{13} } func (x *BeaconCommitteeSubscribe) GetValidatorIndex() github_com_prysmaticlabs_prysm_v4_consensus_types_primitives.ValidatorIndex { @@ -1059,7 +1012,7 @@ type PrepareBeaconProposerRequest struct { func (x *PrepareBeaconProposerRequest) Reset() { *x = PrepareBeaconProposerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_eth_v1_validator_proto_msgTypes[15] + mi := &file_proto_eth_v1_validator_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1072,7 +1025,7 @@ func (x *PrepareBeaconProposerRequest) String() string { func (*PrepareBeaconProposerRequest) ProtoMessage() {} func (x *PrepareBeaconProposerRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_eth_v1_validator_proto_msgTypes[15] + mi := &file_proto_eth_v1_validator_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1085,7 +1038,7 @@ func (x *PrepareBeaconProposerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareBeaconProposerRequest.ProtoReflect.Descriptor instead. func (*PrepareBeaconProposerRequest) Descriptor() ([]byte, []int) { - return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{15} + return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{14} } func (x *PrepareBeaconProposerRequest) GetRecipients() []*PrepareBeaconProposerRequest_FeeRecipientContainer { @@ -1106,7 +1059,7 @@ type SubmitValidatorRegistrationsRequest struct { func (x *SubmitValidatorRegistrationsRequest) Reset() { *x = SubmitValidatorRegistrationsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_eth_v1_validator_proto_msgTypes[16] + mi := &file_proto_eth_v1_validator_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1119,7 +1072,7 @@ func (x *SubmitValidatorRegistrationsRequest) String() string { func (*SubmitValidatorRegistrationsRequest) ProtoMessage() {} func (x *SubmitValidatorRegistrationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_eth_v1_validator_proto_msgTypes[16] + mi := &file_proto_eth_v1_validator_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1132,7 +1085,7 @@ func (x *SubmitValidatorRegistrationsRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use SubmitValidatorRegistrationsRequest.ProtoReflect.Descriptor instead. func (*SubmitValidatorRegistrationsRequest) Descriptor() ([]byte, []int) { - return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{16} + return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{15} } func (x *SubmitValidatorRegistrationsRequest) GetRegistrations() []*SubmitValidatorRegistrationsRequest_SignedValidatorRegistration { @@ -1154,7 +1107,7 @@ type PrepareBeaconProposerRequest_FeeRecipientContainer struct { func (x *PrepareBeaconProposerRequest_FeeRecipientContainer) Reset() { *x = PrepareBeaconProposerRequest_FeeRecipientContainer{} if protoimpl.UnsafeEnabled { - mi := &file_proto_eth_v1_validator_proto_msgTypes[17] + mi := &file_proto_eth_v1_validator_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1167,7 +1120,7 @@ func (x *PrepareBeaconProposerRequest_FeeRecipientContainer) String() string { func (*PrepareBeaconProposerRequest_FeeRecipientContainer) ProtoMessage() {} func (x *PrepareBeaconProposerRequest_FeeRecipientContainer) ProtoReflect() protoreflect.Message { - mi := &file_proto_eth_v1_validator_proto_msgTypes[17] + mi := &file_proto_eth_v1_validator_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1180,7 +1133,7 @@ func (x *PrepareBeaconProposerRequest_FeeRecipientContainer) ProtoReflect() prot // Deprecated: Use PrepareBeaconProposerRequest_FeeRecipientContainer.ProtoReflect.Descriptor instead. func (*PrepareBeaconProposerRequest_FeeRecipientContainer) Descriptor() ([]byte, []int) { - return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{15, 0} + return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{14, 0} } func (x *PrepareBeaconProposerRequest_FeeRecipientContainer) GetFeeRecipient() []byte { @@ -1211,7 +1164,7 @@ type SubmitValidatorRegistrationsRequest_ValidatorRegistration struct { func (x *SubmitValidatorRegistrationsRequest_ValidatorRegistration) Reset() { *x = SubmitValidatorRegistrationsRequest_ValidatorRegistration{} if protoimpl.UnsafeEnabled { - mi := &file_proto_eth_v1_validator_proto_msgTypes[18] + mi := &file_proto_eth_v1_validator_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1224,7 +1177,7 @@ func (x *SubmitValidatorRegistrationsRequest_ValidatorRegistration) String() str func (*SubmitValidatorRegistrationsRequest_ValidatorRegistration) ProtoMessage() {} func (x *SubmitValidatorRegistrationsRequest_ValidatorRegistration) ProtoReflect() protoreflect.Message { - mi := &file_proto_eth_v1_validator_proto_msgTypes[18] + mi := &file_proto_eth_v1_validator_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1237,7 +1190,7 @@ func (x *SubmitValidatorRegistrationsRequest_ValidatorRegistration) ProtoReflect // Deprecated: Use SubmitValidatorRegistrationsRequest_ValidatorRegistration.ProtoReflect.Descriptor instead. func (*SubmitValidatorRegistrationsRequest_ValidatorRegistration) Descriptor() ([]byte, []int) { - return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{16, 0} + return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{15, 0} } func (x *SubmitValidatorRegistrationsRequest_ValidatorRegistration) GetFeeRecipient() []byte { @@ -1280,7 +1233,7 @@ type SubmitValidatorRegistrationsRequest_SignedValidatorRegistration struct { func (x *SubmitValidatorRegistrationsRequest_SignedValidatorRegistration) Reset() { *x = SubmitValidatorRegistrationsRequest_SignedValidatorRegistration{} if protoimpl.UnsafeEnabled { - mi := &file_proto_eth_v1_validator_proto_msgTypes[19] + mi := &file_proto_eth_v1_validator_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1293,7 +1246,7 @@ func (x *SubmitValidatorRegistrationsRequest_SignedValidatorRegistration) String func (*SubmitValidatorRegistrationsRequest_SignedValidatorRegistration) ProtoMessage() {} func (x *SubmitValidatorRegistrationsRequest_SignedValidatorRegistration) ProtoReflect() protoreflect.Message { - mi := &file_proto_eth_v1_validator_proto_msgTypes[19] + mi := &file_proto_eth_v1_validator_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1306,7 +1259,7 @@ func (x *SubmitValidatorRegistrationsRequest_SignedValidatorRegistration) ProtoR // Deprecated: Use SubmitValidatorRegistrationsRequest_SignedValidatorRegistration.ProtoReflect.Descriptor instead. func (*SubmitValidatorRegistrationsRequest_SignedValidatorRegistration) Descriptor() ([]byte, []int) { - return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{16, 1} + return file_proto_eth_v1_validator_proto_rawDescGZIP(), []int{15, 1} } func (x *SubmitValidatorRegistrationsRequest_SignedValidatorRegistration) GetMessage() *SubmitValidatorRegistrationsRequest_ValidatorRegistration { @@ -1532,125 +1485,118 @@ var file_proto_eth_v1_validator_proto_rawDesc = []byte{ 0x65, 0x12, 0x34, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6a, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, - 0x6f, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x6a, 0x0a, 0x29, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0xbc, 0x03, 0x0a, 0x18, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x78, 0x0a, 0x0f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x4f, 0x82, 0xb5, 0x18, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, - 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, 0x63, 0x6f, 0x6e, - 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, - 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x78, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, - 0x4f, 0x82, 0xb5, 0x18, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, - 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, - 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x73, 0x5f, 0x61, - 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x73, 0x41, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x59, - 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x42, 0x45, 0x82, 0xb5, - 0x18, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, - 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, - 0x2f, 0x76, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x2d, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x53, - 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, - 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x69, 0x73, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xc4, - 0x02, 0x0a, 0x1c, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x63, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x42, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, - 0x65, 0x6e, 0x74, 0x73, 0x1a, 0xbe, 0x01, 0x0a, 0x15, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, - 0x70, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x2b, - 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, 0x52, 0x0c, 0x66, - 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x78, 0x0a, 0x0f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x42, 0x4f, 0x82, 0xb5, 0x18, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, - 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x73, - 0x65, 0x6e, 0x73, 0x75, 0x73, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, 0x6d, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xeb, 0x03, 0x0a, 0x23, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x76, 0x0a, - 0x0d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, - 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x9f, 0x01, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x2b, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, 0x52, 0x0c, - 0x66, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x67, 0x61, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1e, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x34, 0x38, 0x52, - 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x1a, 0xa9, 0x01, 0x0a, 0x1b, 0x53, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6a, 0x0a, 0x29, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, + 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0xbc, 0x03, 0x0a, 0x18, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x12, 0x78, 0x0a, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x4f, 0x82, 0xb5, 0x18, 0x4b, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, + 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, + 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x78, 0x0a, 0x0f, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x42, 0x4f, 0x82, 0xb5, 0x18, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, + 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x65, + 0x6e, 0x73, 0x75, 0x73, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, + 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x73, 0x41, 0x74, 0x53, 0x6c, + 0x6f, 0x74, 0x12, 0x59, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x42, 0x45, 0x82, 0xb5, 0x18, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, + 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, + 0x73, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x73, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x23, 0x0a, + 0x0d, 0x69, 0x73, 0x5f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x22, 0xc4, 0x02, 0x0a, 0x1c, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x63, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, + 0x65, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, + 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x0a, 0x72, 0x65, + 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0xbe, 0x01, 0x0a, 0x15, 0x46, 0x65, 0x65, + 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, + 0x30, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, + 0x78, 0x0a, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x4f, 0x82, 0xb5, 0x18, 0x4b, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, + 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, + 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, + 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xeb, 0x03, 0x0a, 0x23, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x76, 0x0a, 0x0d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x39, 0x36, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2a, 0x87, 0x02, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x45, 0x4e, 0x44, 0x49, - 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x51, 0x55, 0x45, 0x55, - 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x4f, - 0x4e, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x43, 0x54, 0x49, - 0x56, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, - 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x45, 0x44, 0x10, 0x04, - 0x12, 0x14, 0x0a, 0x10, 0x45, 0x58, 0x49, 0x54, 0x45, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x4c, 0x41, - 0x53, 0x48, 0x45, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x58, 0x49, 0x54, 0x45, 0x44, - 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x45, 0x44, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x57, 0x49, - 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x5f, 0x50, 0x4f, 0x53, 0x53, 0x49, 0x42, 0x4c, - 0x45, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, - 0x4c, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, - 0x56, 0x45, 0x10, 0x09, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, - 0x0a, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x58, 0x49, 0x54, 0x45, 0x44, 0x10, 0x0b, 0x12, 0x0e, 0x0a, - 0x0a, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x10, 0x0c, 0x42, 0x7b, 0x0a, - 0x13, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, - 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0xaa, 0x02, 0x0f, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0f, 0x45, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x9f, 0x01, 0x0a, 0x15, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, + 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, + 0x32, 0x30, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1e, 0x0a, 0x06, 0x70, + 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, + 0x02, 0x34, 0x38, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x1a, 0xa9, 0x01, 0x0a, 0x1b, + 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x65, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x24, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x39, 0x36, 0x52, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2a, 0x87, 0x02, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, 0x0a, 0x13, 0x50, + 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, + 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x43, 0x54, 0x49, + 0x56, 0x45, 0x5f, 0x4f, 0x4e, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, + 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, + 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, + 0x45, 0x44, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x58, 0x49, 0x54, 0x45, 0x44, 0x5f, 0x55, + 0x4e, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x45, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x58, + 0x49, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x45, 0x44, 0x10, 0x06, 0x12, 0x17, + 0x0a, 0x13, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x5f, 0x50, 0x4f, 0x53, + 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x57, 0x49, 0x54, 0x48, 0x44, + 0x52, 0x41, 0x57, 0x41, 0x4c, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, + 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x09, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, + 0x49, 0x4e, 0x47, 0x10, 0x0a, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x58, 0x49, 0x54, 0x45, 0x44, 0x10, + 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x10, + 0x0c, 0x42, 0x7b, 0x0a, 0x13, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, + 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x34, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0xaa, 0x02, 0x0f, 0x45, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0f, 0x45, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x76, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1666,7 +1612,7 @@ func file_proto_eth_v1_validator_proto_rawDescGZIP() []byte { } var file_proto_eth_v1_validator_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_proto_eth_v1_validator_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_proto_eth_v1_validator_proto_msgTypes = make([]protoimpl.MessageInfo, 19) var file_proto_eth_v1_validator_proto_goTypes = []interface{}{ (ValidatorStatus)(0), // 0: ethereum.eth.v1.ValidatorStatus (*ValidatorContainer)(nil), // 1: ethereum.eth.v1.ValidatorContainer @@ -1681,35 +1627,32 @@ var file_proto_eth_v1_validator_proto_goTypes = []interface{}{ (*ProduceBlockResponse)(nil), // 10: ethereum.eth.v1.ProduceBlockResponse (*ProduceAttestationDataRequest)(nil), // 11: ethereum.eth.v1.ProduceAttestationDataRequest (*ProduceAttestationDataResponse)(nil), // 12: ethereum.eth.v1.ProduceAttestationDataResponse - (*SubmitAggregateAndProofsRequest)(nil), // 13: ethereum.eth.v1.SubmitAggregateAndProofsRequest - (*SubmitBeaconCommitteeSubscriptionsRequest)(nil), // 14: ethereum.eth.v1.SubmitBeaconCommitteeSubscriptionsRequest - (*BeaconCommitteeSubscribe)(nil), // 15: ethereum.eth.v1.BeaconCommitteeSubscribe - (*PrepareBeaconProposerRequest)(nil), // 16: ethereum.eth.v1.PrepareBeaconProposerRequest - (*SubmitValidatorRegistrationsRequest)(nil), // 17: ethereum.eth.v1.SubmitValidatorRegistrationsRequest - (*PrepareBeaconProposerRequest_FeeRecipientContainer)(nil), // 18: ethereum.eth.v1.PrepareBeaconProposerRequest.FeeRecipientContainer - (*SubmitValidatorRegistrationsRequest_ValidatorRegistration)(nil), // 19: ethereum.eth.v1.SubmitValidatorRegistrationsRequest.ValidatorRegistration - (*SubmitValidatorRegistrationsRequest_SignedValidatorRegistration)(nil), // 20: ethereum.eth.v1.SubmitValidatorRegistrationsRequest.SignedValidatorRegistration - (*BeaconBlock)(nil), // 21: ethereum.eth.v1.BeaconBlock - (*AttestationData)(nil), // 22: ethereum.eth.v1.AttestationData - (*SignedAggregateAttestationAndProof)(nil), // 23: ethereum.eth.v1.SignedAggregateAttestationAndProof + (*SubmitBeaconCommitteeSubscriptionsRequest)(nil), // 13: ethereum.eth.v1.SubmitBeaconCommitteeSubscriptionsRequest + (*BeaconCommitteeSubscribe)(nil), // 14: ethereum.eth.v1.BeaconCommitteeSubscribe + (*PrepareBeaconProposerRequest)(nil), // 15: ethereum.eth.v1.PrepareBeaconProposerRequest + (*SubmitValidatorRegistrationsRequest)(nil), // 16: ethereum.eth.v1.SubmitValidatorRegistrationsRequest + (*PrepareBeaconProposerRequest_FeeRecipientContainer)(nil), // 17: ethereum.eth.v1.PrepareBeaconProposerRequest.FeeRecipientContainer + (*SubmitValidatorRegistrationsRequest_ValidatorRegistration)(nil), // 18: ethereum.eth.v1.SubmitValidatorRegistrationsRequest.ValidatorRegistration + (*SubmitValidatorRegistrationsRequest_SignedValidatorRegistration)(nil), // 19: ethereum.eth.v1.SubmitValidatorRegistrationsRequest.SignedValidatorRegistration + (*BeaconBlock)(nil), // 20: ethereum.eth.v1.BeaconBlock + (*AttestationData)(nil), // 21: ethereum.eth.v1.AttestationData } var file_proto_eth_v1_validator_proto_depIdxs = []int32{ 0, // 0: ethereum.eth.v1.ValidatorContainer.status:type_name -> ethereum.eth.v1.ValidatorStatus 2, // 1: ethereum.eth.v1.ValidatorContainer.validator:type_name -> ethereum.eth.v1.Validator 5, // 2: ethereum.eth.v1.AttesterDutiesResponse.data:type_name -> ethereum.eth.v1.AttesterDuty 8, // 3: ethereum.eth.v1.ProposerDutiesResponse.data:type_name -> ethereum.eth.v1.ProposerDuty - 21, // 4: ethereum.eth.v1.ProduceBlockResponse.data:type_name -> ethereum.eth.v1.BeaconBlock - 22, // 5: ethereum.eth.v1.ProduceAttestationDataResponse.data:type_name -> ethereum.eth.v1.AttestationData - 23, // 6: ethereum.eth.v1.SubmitAggregateAndProofsRequest.data:type_name -> ethereum.eth.v1.SignedAggregateAttestationAndProof - 15, // 7: ethereum.eth.v1.SubmitBeaconCommitteeSubscriptionsRequest.data:type_name -> ethereum.eth.v1.BeaconCommitteeSubscribe - 18, // 8: ethereum.eth.v1.PrepareBeaconProposerRequest.recipients:type_name -> ethereum.eth.v1.PrepareBeaconProposerRequest.FeeRecipientContainer - 20, // 9: ethereum.eth.v1.SubmitValidatorRegistrationsRequest.registrations:type_name -> ethereum.eth.v1.SubmitValidatorRegistrationsRequest.SignedValidatorRegistration - 19, // 10: ethereum.eth.v1.SubmitValidatorRegistrationsRequest.SignedValidatorRegistration.message:type_name -> ethereum.eth.v1.SubmitValidatorRegistrationsRequest.ValidatorRegistration - 11, // [11:11] is the sub-list for method output_type - 11, // [11:11] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 20, // 4: ethereum.eth.v1.ProduceBlockResponse.data:type_name -> ethereum.eth.v1.BeaconBlock + 21, // 5: ethereum.eth.v1.ProduceAttestationDataResponse.data:type_name -> ethereum.eth.v1.AttestationData + 14, // 6: ethereum.eth.v1.SubmitBeaconCommitteeSubscriptionsRequest.data:type_name -> ethereum.eth.v1.BeaconCommitteeSubscribe + 17, // 7: ethereum.eth.v1.PrepareBeaconProposerRequest.recipients:type_name -> ethereum.eth.v1.PrepareBeaconProposerRequest.FeeRecipientContainer + 19, // 8: ethereum.eth.v1.SubmitValidatorRegistrationsRequest.registrations:type_name -> ethereum.eth.v1.SubmitValidatorRegistrationsRequest.SignedValidatorRegistration + 18, // 9: ethereum.eth.v1.SubmitValidatorRegistrationsRequest.SignedValidatorRegistration.message:type_name -> ethereum.eth.v1.SubmitValidatorRegistrationsRequest.ValidatorRegistration + 10, // [10:10] is the sub-list for method output_type + 10, // [10:10] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_proto_eth_v1_validator_proto_init() } @@ -1865,18 +1808,6 @@ func file_proto_eth_v1_validator_proto_init() { } } file_proto_eth_v1_validator_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitAggregateAndProofsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_eth_v1_validator_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitBeaconCommitteeSubscriptionsRequest); i { case 0: return &v.state @@ -1888,7 +1819,7 @@ func file_proto_eth_v1_validator_proto_init() { return nil } } - file_proto_eth_v1_validator_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_proto_eth_v1_validator_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BeaconCommitteeSubscribe); i { case 0: return &v.state @@ -1900,7 +1831,7 @@ func file_proto_eth_v1_validator_proto_init() { return nil } } - file_proto_eth_v1_validator_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_proto_eth_v1_validator_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PrepareBeaconProposerRequest); i { case 0: return &v.state @@ -1912,7 +1843,7 @@ func file_proto_eth_v1_validator_proto_init() { return nil } } - file_proto_eth_v1_validator_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_proto_eth_v1_validator_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitValidatorRegistrationsRequest); i { case 0: return &v.state @@ -1924,7 +1855,7 @@ func file_proto_eth_v1_validator_proto_init() { return nil } } - file_proto_eth_v1_validator_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_proto_eth_v1_validator_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PrepareBeaconProposerRequest_FeeRecipientContainer); i { case 0: return &v.state @@ -1936,7 +1867,7 @@ func file_proto_eth_v1_validator_proto_init() { return nil } } - file_proto_eth_v1_validator_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_proto_eth_v1_validator_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitValidatorRegistrationsRequest_ValidatorRegistration); i { case 0: return &v.state @@ -1948,7 +1879,7 @@ func file_proto_eth_v1_validator_proto_init() { return nil } } - file_proto_eth_v1_validator_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_proto_eth_v1_validator_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubmitValidatorRegistrationsRequest_SignedValidatorRegistration); i { case 0: return &v.state @@ -1968,7 +1899,7 @@ func file_proto_eth_v1_validator_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_eth_v1_validator_proto_rawDesc, NumEnums: 1, - NumMessages: 20, + NumMessages: 19, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/eth/v1/validator.proto b/proto/eth/v1/validator.proto index 1317932761..d7a12a1533 100644 --- a/proto/eth/v1/validator.proto +++ b/proto/eth/v1/validator.proto @@ -175,10 +175,6 @@ message ProduceAttestationDataResponse { AttestationData data = 1; } -message SubmitAggregateAndProofsRequest { - repeated SignedAggregateAttestationAndProof data = 1; -} - message SubmitBeaconCommitteeSubscriptionsRequest { repeated BeaconCommitteeSubscribe data = 1; }