diff --git a/api/headers.go b/api/headers.go index 189737843314..0f0a1977d55f 100644 --- a/api/headers.go +++ b/api/headers.go @@ -8,6 +8,7 @@ const ( ExecutionPayloadValueHeader = "Eth-Execution-Payload-Value" ConsensusBlockValueHeader = "Eth-Consensus-Block-Value" ExecutionPayloadIncludedHeader = "Eth-Execution-Payload-Included" + BlobDataIncludedHeader = "Eth-Blob-Data-Included" JsonMediaType = "application/json" OctetStreamMediaType = "application/octet-stream" EventStreamMediaType = "text/event-stream" diff --git a/api/server/structs/block.go b/api/server/structs/block.go index 8ae1f4f22265..583f0c5a3196 100644 --- a/api/server/structs/block.go +++ b/api/server/structs/block.go @@ -614,17 +614,3 @@ type SignedExecutionPayloadEnvelopeContents struct { KzgProofs []string `json:"kzg_proofs"` Blobs []string `json:"blobs"` } - -// BlindedExecutionPayloadEnvelope replaces the full payload with payload_root so its HTR matches the full envelope. -type BlindedExecutionPayloadEnvelope struct { - PayloadRoot string `json:"payload_root"` - ExecutionRequests *ExecutionRequestsGloas `json:"execution_requests"` - BuilderIndex string `json:"builder_index"` - BeaconBlockRoot string `json:"beacon_block_root"` - ParentBeaconBlockRoot string `json:"parent_beacon_block_root"` -} - -type SignedBlindedExecutionPayloadEnvelope struct { - Message *BlindedExecutionPayloadEnvelope `json:"message"` - Signature string `json:"signature"` -} diff --git a/api/server/structs/conversions_block_gloas.go b/api/server/structs/conversions_block_gloas.go index a375d48031e4..05509af3211b 100644 --- a/api/server/structs/conversions_block_gloas.go +++ b/api/server/structs/conversions_block_gloas.go @@ -127,77 +127,6 @@ func (e *SignedExecutionPayloadEnvelope) ToConsensus() (*eth.SignedExecutionPayl }, nil } -func BlindedExecutionPayloadEnvelopeFromConsensus(b *eth.WireBlindedExecutionPayloadEnvelope) (*BlindedExecutionPayloadEnvelope, error) { - if b == nil { - return nil, errNilValue - } - var requests *ExecutionRequestsGloas - if b.ExecutionRequests != nil { - requests = ExecutionRequestsGloasFromConsensus(b.ExecutionRequests) - } - return &BlindedExecutionPayloadEnvelope{ - PayloadRoot: hexutil.Encode(b.PayloadRoot), - ExecutionRequests: requests, - BuilderIndex: fmt.Sprintf("%d", b.BuilderIndex), - BeaconBlockRoot: hexutil.Encode(b.BeaconBlockRoot), - ParentBeaconBlockRoot: hexutil.Encode(b.ParentBeaconBlockRoot), - }, nil -} - -func (b *BlindedExecutionPayloadEnvelope) ToConsensus() (*eth.WireBlindedExecutionPayloadEnvelope, error) { - if b == nil { - return nil, server.NewDecodeError(errNilValue, "BlindedExecutionPayloadEnvelope") - } - payloadRoot, err := bytesutil.DecodeHexWithLength(b.PayloadRoot, fieldparams.RootLength) - if err != nil { - return nil, server.NewDecodeError(err, "PayloadRoot") - } - var requests *enginev1.ExecutionRequestsGloas - if b.ExecutionRequests != nil { - requests, err = b.ExecutionRequests.ToConsensus() - if err != nil { - return nil, server.NewDecodeError(err, "ExecutionRequests") - } - } - builderIndex, err := strconv.ParseUint(b.BuilderIndex, 10, 64) - if err != nil { - return nil, server.NewDecodeError(err, "BuilderIndex") - } - beaconBlockRoot, err := bytesutil.DecodeHexWithLength(b.BeaconBlockRoot, fieldparams.RootLength) - if err != nil { - return nil, server.NewDecodeError(err, "BeaconBlockRoot") - } - parentBeaconBlockRoot, err := bytesutil.DecodeHexWithLength(b.ParentBeaconBlockRoot, fieldparams.RootLength) - if err != nil { - return nil, server.NewDecodeError(err, "ParentBeaconBlockRoot") - } - return ð.WireBlindedExecutionPayloadEnvelope{ - PayloadRoot: payloadRoot, - ExecutionRequests: requests, - BuilderIndex: primitives.BuilderIndex(builderIndex), - BeaconBlockRoot: beaconBlockRoot, - ParentBeaconBlockRoot: parentBeaconBlockRoot, - }, nil -} - -func (s *SignedBlindedExecutionPayloadEnvelope) ToConsensus() (*eth.SignedWireBlindedExecutionPayloadEnvelope, error) { - if s == nil { - return nil, server.NewDecodeError(errNilValue, "SignedBlindedExecutionPayloadEnvelope") - } - msg, err := s.Message.ToConsensus() - if err != nil { - return nil, server.NewDecodeError(err, "Message") - } - sig, err := bytesutil.DecodeHexWithLength(s.Signature, fieldparams.BLSSignatureLength) - if err != nil { - return nil, server.NewDecodeError(err, "Signature") - } - return ð.SignedWireBlindedExecutionPayloadEnvelope{ - Message: msg, - Signature: sig, - }, nil -} - // SignedExecutionPayloadEnvelopeContentsFromConsensus builds the API struct // used for stateless envelope publishing from native components. func SignedExecutionPayloadEnvelopeContentsFromConsensus(signed *eth.SignedExecutionPayloadEnvelope, kzgProofs [][]byte, blobs [][]byte) (*SignedExecutionPayloadEnvelopeContents, error) { diff --git a/api/server/structs/conversions_block_gloas_test.go b/api/server/structs/conversions_block_gloas_test.go index 7e5c6122ad37..406cfa8ccede 100644 --- a/api/server/structs/conversions_block_gloas_test.go +++ b/api/server/structs/conversions_block_gloas_test.go @@ -5,7 +5,6 @@ import ( "testing" fieldparams "github.com/OffchainLabs/prysm/v7/config/fieldparams" - "github.com/OffchainLabs/prysm/v7/consensus-types/primitives" enginev1 "github.com/OffchainLabs/prysm/v7/proto/engine/v1" eth "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1" "github.com/OffchainLabs/prysm/v7/testing/require" @@ -55,118 +54,6 @@ func TestExecutionPayloadEnvelopeFromConsensus_NilRequests(t *testing.T) { require.Equal(t, (*ExecutionRequestsGloas)(nil), result.ExecutionRequests) } -func testWireBlindedProto() *eth.WireBlindedExecutionPayloadEnvelope { - return ð.WireBlindedExecutionPayloadEnvelope{ - PayloadRoot: fillByteSlice(32, 0x55), - ExecutionRequests: &enginev1.ExecutionRequestsGloas{}, - BuilderIndex: 7, - BeaconBlockRoot: fillByteSlice(32, 0x33), - ParentBeaconBlockRoot: fillByteSlice(32, 0x44), - } -} - -// HTR(blinded) must equal HTR(full) so the validator signature stays valid against either form. -func TestWireBlindedHTRMatchesFull(t *testing.T) { - full := ð.ExecutionPayloadEnvelope{ - Payload: &enginev1.ExecutionPayloadGloas{ - ParentHash: fillByteSlice(32, 0x01), - FeeRecipient: fillByteSlice(20, 0x02), - StateRoot: fillByteSlice(32, 0x03), - ReceiptsRoot: fillByteSlice(32, 0x04), - LogsBloom: fillByteSlice(256, 0x05), - PrevRandao: fillByteSlice(32, 0x06), - BaseFeePerGas: fillByteSlice(32, 0x07), - BlockHash: fillByteSlice(32, 0x08), - Transactions: [][]byte{[]byte("tx1"), []byte("tx2")}, - Withdrawals: []*enginev1.Withdrawal{}, - SlotNumber: primitives.Slot(100), - }, - ExecutionRequests: &enginev1.ExecutionRequestsGloas{}, - BuilderIndex: primitives.BuilderIndex(42), - BeaconBlockRoot: fillByteSlice(32, 0x09), - ParentBeaconBlockRoot: fillByteSlice(32, 0x0a), - } - - blinded, err := full.WireBlinded() - require.NoError(t, err) - fullHTR, err := full.HashTreeRoot() - require.NoError(t, err) - blindedHTR, err := blinded.HashTreeRoot() - require.NoError(t, err) - require.Equal(t, fullHTR, blindedHTR) - - // SSZ roundtrip. - enc, err := blinded.MarshalSSZ() - require.NoError(t, err) - decoded := ð.WireBlindedExecutionPayloadEnvelope{} - require.NoError(t, decoded.UnmarshalSSZ(enc)) - rtHTR, err := decoded.HashTreeRoot() - require.NoError(t, err) - require.Equal(t, fullHTR, rtHTR) - - // Signed wrapper SSZ roundtrip. - signedBlinded, err := (ð.SignedExecutionPayloadEnvelope{ - Message: full, - Signature: fillByteSlice(96, 0x0b), - }).WireBlinded() - require.NoError(t, err) - signedEnc, err := signedBlinded.MarshalSSZ() - require.NoError(t, err) - decodedSigned := ð.SignedWireBlindedExecutionPayloadEnvelope{} - require.NoError(t, decodedSigned.UnmarshalSSZ(signedEnc)) - rtBlindedHTR, err := decodedSigned.Message.HashTreeRoot() - require.NoError(t, err) - require.Equal(t, fullHTR, rtBlindedHTR) -} - -func TestBlindedExecutionPayloadEnvelopeFromConsensus(t *testing.T) { - b := testWireBlindedProto() - result, err := BlindedExecutionPayloadEnvelopeFromConsensus(b) - require.NoError(t, err) - require.Equal(t, hexutil.Encode(b.PayloadRoot), result.PayloadRoot) - require.Equal(t, "7", result.BuilderIndex) - require.Equal(t, hexutil.Encode(b.BeaconBlockRoot), result.BeaconBlockRoot) - require.Equal(t, hexutil.Encode(b.ParentBeaconBlockRoot), result.ParentBeaconBlockRoot) - require.NotNil(t, result.ExecutionRequests) -} - -func TestBlindedExecutionPayloadEnvelopeFromConsensus_Nil(t *testing.T) { - _, err := BlindedExecutionPayloadEnvelopeFromConsensus(nil) - require.NotNil(t, err) -} - -func TestBlindedExecutionPayloadEnvelope_ToConsensusRoundTrip(t *testing.T) { - b := testWireBlindedProto() - api, err := BlindedExecutionPayloadEnvelopeFromConsensus(b) - require.NoError(t, err) - back, err := api.ToConsensus() - require.NoError(t, err) - require.DeepEqual(t, b.PayloadRoot, back.PayloadRoot) - require.Equal(t, b.BuilderIndex, back.BuilderIndex) - require.DeepEqual(t, b.BeaconBlockRoot, back.BeaconBlockRoot) - require.DeepEqual(t, b.ParentBeaconBlockRoot, back.ParentBeaconBlockRoot) - require.NotNil(t, back.ExecutionRequests) -} - -func TestSignedBlindedExecutionPayloadEnvelope_ToConsensus(t *testing.T) { - msg, err := BlindedExecutionPayloadEnvelopeFromConsensus(testWireBlindedProto()) - require.NoError(t, err) - sig := fillByteSlice(96, 0x66) - signed := &SignedBlindedExecutionPayloadEnvelope{Message: msg, Signature: hexutil.Encode(sig)} - result, err := signed.ToConsensus() - require.NoError(t, err) - require.NotNil(t, result.Message) - require.DeepEqual(t, sig, result.Signature) -} - -func TestSignedBlindedExecutionPayloadEnvelope_ToConsensus_BadSignature(t *testing.T) { - msg, err := BlindedExecutionPayloadEnvelopeFromConsensus(testWireBlindedProto()) - require.NoError(t, err) - signed := &SignedBlindedExecutionPayloadEnvelope{Message: msg, Signature: "0xdead"} - _, err = signed.ToConsensus() - require.NotNil(t, err) -} - func TestBlockContentsGloasFromConsensus(t *testing.T) { block := util.NewBeaconBlockGloas().Block env := testEnvelopeProto() diff --git a/api/server/structs/endpoints_validator.go b/api/server/structs/endpoints_validator.go index 8db73167b0a6..52a33aea5ec2 100644 --- a/api/server/structs/endpoints_validator.go +++ b/api/server/structs/endpoints_validator.go @@ -164,9 +164,9 @@ type ValidatorParticipation struct { PreviousEpochHeadAttestingGwei string `json:"previous_epoch_head_attesting_gwei"` } -type GetValidatorBlindedExecutionPayloadEnvelopeResponse struct { - Version string `json:"version"` - Data *BlindedExecutionPayloadEnvelope `json:"data"` +type GetValidatorExecutionPayloadEnvelopeResponse struct { + Version string `json:"version"` + Data *ExecutionPayloadEnvelope `json:"data"` } type ActiveSetChanges struct { diff --git a/beacon-chain/rpc/endpoints.go b/beacon-chain/rpc/endpoints.go index 70507a3dfd27..0d1fe6dfd954 100644 --- a/beacon-chain/rpc/endpoints.go +++ b/beacon-chain/rpc/endpoints.go @@ -204,28 +204,27 @@ func (s *Service) validatorEndpoints( rewardFetcher rewards.BlockRewardsFetcher, ) []endpoint { server := &validator.Server{ - HeadFetcher: s.cfg.HeadFetcher, - TimeFetcher: s.cfg.GenesisTimeFetcher, - SyncChecker: s.cfg.SyncService, - OptimisticModeFetcher: s.cfg.OptimisticModeFetcher, - AttestationCache: s.cfg.AttestationCache, - AttestationsPool: s.cfg.AttestationsPool, - PeerManager: s.cfg.PeerManager, - Broadcaster: s.cfg.Broadcaster, - V1Alpha1Server: validatorServer, - ExecutionPayloadEnvelopeCache: s.cfg.ExecutionPayloadEnvelopeCache, - Stater: stater, - SyncCommitteePool: s.cfg.SyncCommitteeObjectPool, - ChainInfoFetcher: s.cfg.ChainInfoFetcher, - BeaconDB: s.cfg.BeaconDB, - BlockBuilder: s.cfg.BlockBuilder, - OperationNotifier: s.cfg.OperationNotifier, - ProposerPreferencesCache: s.cfg.ProposerPreferencesCache, - SubscribedValidatorsCache: s.cfg.SubscribedValidatorsCache, - PayloadIDCache: s.cfg.PayloadIDCache, - PayloadAttestationPool: s.cfg.PayloadAttestationPool, - CoreService: coreService, - BlockRewardFetcher: rewardFetcher, + HeadFetcher: s.cfg.HeadFetcher, + TimeFetcher: s.cfg.GenesisTimeFetcher, + SyncChecker: s.cfg.SyncService, + OptimisticModeFetcher: s.cfg.OptimisticModeFetcher, + AttestationCache: s.cfg.AttestationCache, + AttestationsPool: s.cfg.AttestationsPool, + PeerManager: s.cfg.PeerManager, + Broadcaster: s.cfg.Broadcaster, + V1Alpha1Server: validatorServer, + Stater: stater, + SyncCommitteePool: s.cfg.SyncCommitteeObjectPool, + ChainInfoFetcher: s.cfg.ChainInfoFetcher, + BeaconDB: s.cfg.BeaconDB, + BlockBuilder: s.cfg.BlockBuilder, + OperationNotifier: s.cfg.OperationNotifier, + ProposerPreferencesCache: s.cfg.ProposerPreferencesCache, + SubscribedValidatorsCache: s.cfg.SubscribedValidatorsCache, + PayloadIDCache: s.cfg.PayloadIDCache, + PayloadAttestationPool: s.cfg.PayloadAttestationPool, + CoreService: coreService, + BlockRewardFetcher: rewardFetcher, } const namespace = "validator" @@ -569,37 +568,36 @@ func (s *Service) beaconEndpoints( coreService *core.Service, ) []endpoint { server := &beacon.Server{ - CanonicalHistory: ch, - BeaconDB: s.cfg.BeaconDB, - AttestationCache: s.cfg.AttestationCache, - AttestationsPool: s.cfg.AttestationsPool, - SlashingsPool: s.cfg.SlashingsPool, - ChainInfoFetcher: s.cfg.ChainInfoFetcher, - GenesisTimeFetcher: s.cfg.GenesisTimeFetcher, - BlockNotifier: s.cfg.BlockNotifier, - OperationNotifier: s.cfg.OperationNotifier, - Broadcaster: s.cfg.Broadcaster, - BlockReceiver: s.cfg.BlockReceiver, - StateGenService: s.cfg.StateGen, - Stater: stater, - Blocker: blocker, - OptimisticModeFetcher: s.cfg.OptimisticModeFetcher, - HeadFetcher: s.cfg.HeadFetcher, - TimeFetcher: s.cfg.GenesisTimeFetcher, - VoluntaryExitsPool: s.cfg.ExitPool, - V1Alpha1ValidatorServer: validatorServer, - DataColumnReceiver: s.cfg.DataColumnReceiver, - SyncChecker: s.cfg.SyncService, - ExecutionReconstructor: s.cfg.ExecutionReconstructor, - BLSChangesPool: s.cfg.BLSChangesPool, - PayloadAttestationPool: s.cfg.PayloadAttestationPool, - PayloadAttestationReceiver: s.cfg.PayloadAttestationReceiver, - FinalizationFetcher: s.cfg.FinalizationFetcher, - ForkchoiceFetcher: s.cfg.ForkchoiceFetcher, - CoreService: coreService, - AttestationStateFetcher: s.cfg.AttestationReceiver, - ExecutionPayloadEnvelopeCache: s.cfg.ExecutionPayloadEnvelopeCache, - PayloadEnvelopeVerifier: verification.NewEnvelopeVerifier, + CanonicalHistory: ch, + BeaconDB: s.cfg.BeaconDB, + AttestationCache: s.cfg.AttestationCache, + AttestationsPool: s.cfg.AttestationsPool, + SlashingsPool: s.cfg.SlashingsPool, + ChainInfoFetcher: s.cfg.ChainInfoFetcher, + GenesisTimeFetcher: s.cfg.GenesisTimeFetcher, + BlockNotifier: s.cfg.BlockNotifier, + OperationNotifier: s.cfg.OperationNotifier, + Broadcaster: s.cfg.Broadcaster, + BlockReceiver: s.cfg.BlockReceiver, + StateGenService: s.cfg.StateGen, + Stater: stater, + Blocker: blocker, + OptimisticModeFetcher: s.cfg.OptimisticModeFetcher, + HeadFetcher: s.cfg.HeadFetcher, + TimeFetcher: s.cfg.GenesisTimeFetcher, + VoluntaryExitsPool: s.cfg.ExitPool, + V1Alpha1ValidatorServer: validatorServer, + DataColumnReceiver: s.cfg.DataColumnReceiver, + SyncChecker: s.cfg.SyncService, + ExecutionReconstructor: s.cfg.ExecutionReconstructor, + BLSChangesPool: s.cfg.BLSChangesPool, + PayloadAttestationPool: s.cfg.PayloadAttestationPool, + PayloadAttestationReceiver: s.cfg.PayloadAttestationReceiver, + FinalizationFetcher: s.cfg.FinalizationFetcher, + ForkchoiceFetcher: s.cfg.ForkchoiceFetcher, + CoreService: coreService, + AttestationStateFetcher: s.cfg.AttestationReceiver, + PayloadEnvelopeVerifier: verification.NewEnvelopeVerifier, } const namespace = "beacon" diff --git a/beacon-chain/rpc/eth/beacon/BUILD.bazel b/beacon-chain/rpc/eth/beacon/BUILD.bazel index 1b7c5531b675..4aede6818253 100644 --- a/beacon-chain/rpc/eth/beacon/BUILD.bazel +++ b/beacon-chain/rpc/eth/beacon/BUILD.bazel @@ -92,7 +92,6 @@ go_test( "//api/server/structs:go_default_library", "//beacon-chain/blockchain/kzg:go_default_library", "//beacon-chain/blockchain/testing:go_default_library", - "//beacon-chain/cache:go_default_library", "//beacon-chain/core/signing:go_default_library", "//beacon-chain/core/time:go_default_library", "//beacon-chain/core/transition:go_default_library", diff --git a/beacon-chain/rpc/eth/beacon/handlers_gloas.go b/beacon-chain/rpc/eth/beacon/handlers_gloas.go index 5bc8ff7d6c67..5efc115183c3 100644 --- a/beacon-chain/rpc/eth/beacon/handlers_gloas.go +++ b/beacon-chain/rpc/eth/beacon/handlers_gloas.go @@ -91,12 +91,14 @@ func (s *Server) GetExecutionPayloadEnvelope(w http.ResponseWriter, r *http.Requ }) } -// PublishExecutionPayloadEnvelope broadcasts a signed envelope. Eth-Execution-Payload-Blinded -// selects the body: true=blinded (stateful, BN reconstructs from cache), false=contents (stateless). -// Endpoint: POST /eth/v1/beacon/execution_payload_envelopes +// PublishExecutionPayloadEnvelope broadcasts a signed envelope. Eth-Blob-Data-Included selects the +// body: true=contents with blobs+proofs, false=bare signed envelope (BN attaches cached blob data). func (s *Server) PublishExecutionPayloadEnvelope(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "beacon.PublishExecutionPayloadEnvelope") defer span.End() + if shared.IsSyncing(ctx, w, s.SyncChecker, s.HeadFetcher, s.TimeFetcher, s.OptimisticModeFetcher) { + return + } versionHeader := r.Header.Get(api.VersionHeader) if versionHeader == "" { httputil.HandleError(w, api.VersionHeader+" header is required", http.StatusBadRequest) @@ -107,14 +109,14 @@ func (s *Server) PublishExecutionPayloadEnvelope(w http.ResponseWriter, r *http. httputil.HandleError(w, api.VersionHeader+" header must be gloas or later", http.StatusBadRequest) return } - blindedHeader := r.Header.Get(api.ExecutionPayloadBlindedHeader) - if blindedHeader == "" { - httputil.HandleError(w, api.ExecutionPayloadBlindedHeader+" header is required", http.StatusBadRequest) + blobDataHeader := r.Header.Get(api.BlobDataIncludedHeader) + if blobDataHeader == "" { + httputil.HandleError(w, api.BlobDataIncludedHeader+" header is required", http.StatusBadRequest) return } - isBlinded, err := strconv.ParseBool(blindedHeader) + blobDataIncluded, err := strconv.ParseBool(blobDataHeader) if err != nil { - httputil.HandleError(w, "invalid "+api.ExecutionPayloadBlindedHeader+" value: "+err.Error(), http.StatusBadRequest) + httputil.HandleError(w, "invalid "+api.BlobDataIncludedHeader+" value: "+err.Error(), http.StatusBadRequest) return } @@ -124,78 +126,48 @@ func (s *Server) PublishExecutionPayloadEnvelope(w http.ResponseWriter, r *http. return } - if isBlinded { - s.publishBlindedEnvelope(ctx, w, r, body) + if blobDataIncluded { + s.publishEnvelopeContents(ctx, w, r, body) return } - s.publishEnvelopeContents(ctx, w, r, body) + s.publishBareEnvelope(ctx, w, r, body) } -// publishBlindedEnvelope reconstructs the full envelope from cache by beacon_block_root. -// HTR(blinded) == HTR(full), so the validator signature stays valid. -func (s *Server) publishBlindedEnvelope(ctx context.Context, w http.ResponseWriter, r *http.Request, body []byte) { - signedBlinded := ð.SignedWireBlindedExecutionPayloadEnvelope{} +// publishBareEnvelope handles the stateful flow (header=false): the body carries only the signed +// envelope and the BN attaches the blobs and KZG proofs cached at block production. +func (s *Server) publishBareEnvelope(ctx context.Context, w http.ResponseWriter, r *http.Request, body []byte) { + signed := ð.SignedExecutionPayloadEnvelope{} if httputil.IsRequestSsz(r) { - if err := signedBlinded.UnmarshalSSZ(body); err != nil { - httputil.HandleError(w, "could not decode SSZ blinded envelope: "+err.Error(), http.StatusBadRequest) + if err := signed.UnmarshalSSZ(body); err != nil { + httputil.HandleError(w, "could not decode SSZ envelope: "+err.Error(), http.StatusBadRequest) return } } else { - var jsonBlinded structs.SignedBlindedExecutionPayloadEnvelope - if err := json.Unmarshal(body, &jsonBlinded); err != nil { - httputil.HandleError(w, "could not decode JSON blinded envelope: "+err.Error(), http.StatusBadRequest) + var jsonEnvelope structs.SignedExecutionPayloadEnvelope + if err := json.Unmarshal(body, &jsonEnvelope); err != nil { + httputil.HandleError(w, "could not decode JSON envelope: "+err.Error(), http.StatusBadRequest) return } - consensus, err := jsonBlinded.ToConsensus() + consensus, err := jsonEnvelope.ToConsensus() if err != nil { - httputil.HandleError(w, "invalid signed blinded envelope: "+err.Error(), http.StatusBadRequest) + httputil.HandleError(w, "invalid signed envelope: "+err.Error(), http.StatusBadRequest) return } - signedBlinded = consensus + signed = consensus } - if signedBlinded.Message == nil { - httputil.HandleError(w, "blinded envelope message is nil", http.StatusBadRequest) + if signed.Message == nil || signed.Message.Payload == nil { + httputil.HandleError(w, "envelope message or payload is nil", http.StatusBadRequest) return } - cached, ok := s.ExecutionPayloadEnvelopeCache.Contents() - if !ok || cached.Envelope == nil { - httputil.HandleError(w, "no cached execution payload envelope to reconstruct from", http.StatusBadRequest) - return - } - if !bytes.Equal(cached.Envelope.BeaconBlockRoot, signedBlinded.Message.BeaconBlockRoot) { - httputil.HandleError(w, "cached envelope beacon_block_root does not match blinded envelope", http.StatusBadRequest) - return - } - blindedRoot, err := signedBlinded.Message.HashTreeRoot() - if err != nil { - httputil.HandleError(w, "could not hash blinded envelope: "+err.Error(), http.StatusInternalServerError) - return - } - cachedRoot, err := cached.Envelope.HashTreeRoot() - if err != nil { - httputil.HandleError(w, "could not hash cached envelope: "+err.Error(), http.StatusInternalServerError) - return - } - if blindedRoot != cachedRoot { - httputil.HandleError(w, "cached envelope hash tree root does not match blinded envelope", http.StatusBadRequest) - return - } - - // Consensus-level broadcast_validation needs the full envelope; reconstruct it from cache for - // the check only. The publish-side reconstruction + sidecar broadcast happens in the v1alpha1 - // server (shared with the gRPC path), so forward the blinded arm and let it rebuild the payload. - full := ð.SignedExecutionPayloadEnvelope{ - Message: cached.Envelope, - Signature: signedBlinded.Signature, - } - - if !s.validateEnvelopeBroadcast(ctx, w, r, full) { + if !s.validateEnvelopeBroadcast(ctx, w, r, signed) { return } + // The cached-envelope match (and the cache-miss 400) happens in the v1alpha1 server, shared + // with the gRPC path. generic := ð.GenericSignedExecutionPayloadEnvelope{ - Envelope: ð.GenericSignedExecutionPayloadEnvelope_Blinded{Blinded: signedBlinded}, + Envelope: ð.GenericSignedExecutionPayloadEnvelope_SignedEnvelope{SignedEnvelope: signed}, } if _, err := s.V1Alpha1ValidatorServer.PublishExecutionPayloadEnvelope(ctx, generic); err != nil { writeEnvelopePublishError(w, err) @@ -204,12 +176,12 @@ func (s *Server) publishBlindedEnvelope(ctx context.Context, w http.ResponseWrit w.WriteHeader(http.StatusOK) } -// writeEnvelopePublishError maps the v1alpha1 publish outcome to the spec status -// codes: InvalidArgument -> 400, Aborted -> 202 (broadcast ok, import failed). +// writeEnvelopePublishError maps the v1alpha1 publish outcome to the spec status codes: +// InvalidArgument/FailedPrecondition -> 400, Aborted -> 202 (broadcast ok, import failed). func writeEnvelopePublishError(w http.ResponseWriter, err error) { if st, ok := status.FromError(err); ok { switch st.Code() { - case codes.InvalidArgument: + case codes.InvalidArgument, codes.FailedPrecondition: httputil.HandleError(w, st.Message(), http.StatusBadRequest) case codes.Aborted: httputil.HandleError(w, st.Message(), http.StatusAccepted) @@ -221,7 +193,7 @@ func writeEnvelopePublishError(w http.ResponseWriter, err error) { httputil.HandleError(w, "could not publish execution payload envelope: "+err.Error(), http.StatusInternalServerError) } -// publishEnvelopeContents handles the stateless flow (header=false). +// publishEnvelopeContents handles the stateless flow (header=true). func (s *Server) publishEnvelopeContents(ctx context.Context, w http.ResponseWriter, r *http.Request, body []byte) { if httputil.IsRequestSsz(r) { contents := ð.SignedExecutionPayloadEnvelopeContents{} diff --git a/beacon-chain/rpc/eth/beacon/handlers_gloas_test.go b/beacon-chain/rpc/eth/beacon/handlers_gloas_test.go index ed9c8abe2f80..2d0eea4a6ef3 100644 --- a/beacon-chain/rpc/eth/beacon/handlers_gloas_test.go +++ b/beacon-chain/rpc/eth/beacon/handlers_gloas_test.go @@ -13,13 +13,13 @@ import ( "github.com/OffchainLabs/prysm/v7/api/server/structs" "github.com/OffchainLabs/prysm/v7/beacon-chain/blockchain/kzg" chainMock "github.com/OffchainLabs/prysm/v7/beacon-chain/blockchain/testing" - "github.com/OffchainLabs/prysm/v7/beacon-chain/cache" dbTest "github.com/OffchainLabs/prysm/v7/beacon-chain/db/testing" executiontesting "github.com/OffchainLabs/prysm/v7/beacon-chain/execution/testing" mockp2p "github.com/OffchainLabs/prysm/v7/beacon-chain/p2p/testing" "github.com/OffchainLabs/prysm/v7/beacon-chain/rpc/lookup" "github.com/OffchainLabs/prysm/v7/beacon-chain/rpc/testutil" "github.com/OffchainLabs/prysm/v7/beacon-chain/state" + mockSync "github.com/OffchainLabs/prysm/v7/beacon-chain/sync/initial-sync/testing" "github.com/OffchainLabs/prysm/v7/beacon-chain/verification" fieldparams "github.com/OffchainLabs/prysm/v7/config/fieldparams" "github.com/OffchainLabs/prysm/v7/config/params" @@ -34,19 +34,12 @@ import ( mock2 "github.com/OffchainLabs/prysm/v7/testing/mock" "github.com/OffchainLabs/prysm/v7/testing/require" "github.com/OffchainLabs/prysm/v7/testing/util" - "github.com/ethereum/go-ethereum/common/hexutil" "go.uber.org/mock/gomock" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/emptypb" ) -func envelopeCacheFor(signed *ethpb.SignedExecutionPayloadEnvelope) *cache.ExecutionPayloadEnvelopeCache { - c := cache.NewExecutionPayloadEnvelopeCache() - c.Set(&cache.ExecutionPayloadContents{Envelope: signed.Message}) - return c -} - type mockEnvelopeVerifier struct { errSlotAboveFinalized error errSlotMatchesBlock error @@ -102,21 +95,19 @@ func wireEnvelopeGossipDeps(t *testing.T, s *Server) { if s.HeadFetcher == nil { s.HeadFetcher = chain } + if s.SyncChecker == nil { + s.SyncChecker = &mockSync.Sync{IsSyncing: false} + } s.PayloadEnvelopeVerifier = func(_ interfaces.ROSignedExecutionPayloadEnvelope, _ []verification.Requirement) verification.ExecutionPayloadEnvelopeVerifier { return &mockEnvelopeVerifier{} } } -func blindedJSONBody(t *testing.T, signed *ethpb.SignedExecutionPayloadEnvelope) []byte { +func bareEnvelopeJSONBody(t *testing.T, signed *ethpb.SignedExecutionPayloadEnvelope) []byte { t.Helper() - blinded, err := signed.WireBlinded() + msg, err := structs.SignedExecutionPayloadEnvelopeFromConsensus(signed) require.NoError(t, err) - msg, err := structs.BlindedExecutionPayloadEnvelopeFromConsensus(blinded.Message) - require.NoError(t, err) - body, err := json.Marshal(&structs.SignedBlindedExecutionPayloadEnvelope{ - Message: msg, - Signature: hexutil.Encode(blinded.Signature), - }) + body, err := json.Marshal(msg) require.NoError(t, err) return body } @@ -232,8 +223,8 @@ func testSignedEnvelope() *ethpb.SignedExecutionPayloadEnvelope { } } -// Stateful: body is the spec-wire blinded envelope; BN reconstructs full from cache. -func TestPublishExecutionPayloadEnvelope_StatefulBlinded_OK(t *testing.T) { +// Stateful: body is the bare signed envelope; BN attaches cached blobs and KZG proofs. +func TestPublishExecutionPayloadEnvelope_StatefulBareEnvelope_OK(t *testing.T) { params.SetupTestConfigCleanup(t) cfg := params.BeaconConfig().Copy() cfg.GloasForkEpoch = 0 @@ -247,16 +238,15 @@ func TestPublishExecutionPayloadEnvelope_StatefulBlinded_OK(t *testing.T) { gomock.Any(), gomock.Any(), ).Return(&emptypb.Empty{}, nil) - body := blindedJSONBody(t, signed) + body := bareEnvelopeJSONBody(t, signed) s := &Server{ - V1Alpha1ValidatorServer: v1alpha1Server, - ExecutionPayloadEnvelopeCache: envelopeCacheFor(signed), + V1Alpha1ValidatorServer: v1alpha1Server, } wireEnvelopeGossipDeps(t, s) req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader(body)) req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "true") + req.Header.Set(api.BlobDataIncludedHeader, "false") w := httptest.NewRecorder() w.Body = &bytes.Buffer{} @@ -264,9 +254,9 @@ func TestPublishExecutionPayloadEnvelope_StatefulBlinded_OK(t *testing.T) { require.Equal(t, http.StatusOK, w.Code) } -// Missing Eth-Execution-Payload-Blinded header must be a 400. -func TestPublishExecutionPayloadEnvelope_MissingBlindedHeader(t *testing.T) { - s := &Server{} +// Missing Eth-Blob-Data-Included header must be a 400. +func TestPublishExecutionPayloadEnvelope_MissingBlobDataHeader(t *testing.T) { + s := &Server{SyncChecker: &mockSync.Sync{IsSyncing: false}} req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader([]byte("{}"))) req.Header.Set(api.VersionHeader, version.String(version.Gloas)) w := httptest.NewRecorder() @@ -274,14 +264,31 @@ func TestPublishExecutionPayloadEnvelope_MissingBlindedHeader(t *testing.T) { s.PublishExecutionPayloadEnvelope(w, req) require.Equal(t, http.StatusBadRequest, w.Code) - assert.Equal(t, true, bytes.Contains(w.Body.Bytes(), []byte(api.ExecutionPayloadBlindedHeader))) + assert.Equal(t, true, bytes.Contains(w.Body.Bytes(), []byte(api.BlobDataIncludedHeader))) +} + +func TestPublishExecutionPayloadEnvelope_Syncing(t *testing.T) { + s := &Server{ + SyncChecker: &mockSync.Sync{IsSyncing: true}, + HeadFetcher: &chainMock.ChainService{}, + TimeFetcher: &chainMock.ChainService{}, + OptimisticModeFetcher: &chainMock.ChainService{}, + } + req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader([]byte("{}"))) + req.Header.Set(api.VersionHeader, version.String(version.Gloas)) + req.Header.Set(api.BlobDataIncludedHeader, "true") + w := httptest.NewRecorder() + w.Body = &bytes.Buffer{} + + s.PublishExecutionPayloadEnvelope(w, req) + require.Equal(t, http.StatusServiceUnavailable, w.Code) } func TestPublishExecutionPayloadEnvelope_InvalidBody(t *testing.T) { - s := &Server{} + s := &Server{SyncChecker: &mockSync.Sync{IsSyncing: false}} req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader([]byte("not json"))) req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "false") + req.Header.Set(api.BlobDataIncludedHeader, "true") w := httptest.NewRecorder() w.Body = &bytes.Buffer{} @@ -313,7 +320,7 @@ func TestPublishExecutionPayloadEnvelope_StatelessContents_NoBlobs(t *testing.T) wireEnvelopeGossipDeps(t, s) req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader(body)) req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "false") + req.Header.Set(api.BlobDataIncludedHeader, "true") w := httptest.NewRecorder() w.Body = &bytes.Buffer{} @@ -339,7 +346,7 @@ func TestPublishExecutionPayloadEnvelope_ImportFailureReturns202(t *testing.T) { wireEnvelopeGossipDeps(t, s) req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader(body)) req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "false") + req.Header.Set(api.BlobDataIncludedHeader, "true") w := httptest.NewRecorder() w.Body = &bytes.Buffer{} @@ -401,7 +408,7 @@ func TestPublishExecutionPayloadEnvelope_StatelessContents_WithBlobs(t *testing. wireEnvelopeGossipDeps(t, s) req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader(body)) req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "false") + req.Header.Set(api.BlobDataIncludedHeader, "true") w := httptest.NewRecorder() w.Body = &bytes.Buffer{} @@ -423,16 +430,15 @@ func TestPublishExecutionPayloadEnvelope_ServerError(t *testing.T) { ).Return(nil, status.Error(codes.Internal, "broadcast failed")) signed := testSignedEnvelope() - body := blindedJSONBody(t, signed) + body := bareEnvelopeJSONBody(t, signed) s := &Server{ - V1Alpha1ValidatorServer: v1alpha1Server, - ExecutionPayloadEnvelopeCache: envelopeCacheFor(signed), + V1Alpha1ValidatorServer: v1alpha1Server, } wireEnvelopeGossipDeps(t, s) req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader(body)) req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "true") + req.Header.Set(api.BlobDataIncludedHeader, "false") w := httptest.NewRecorder() w.Body = &bytes.Buffer{} @@ -440,8 +446,8 @@ func TestPublishExecutionPayloadEnvelope_ServerError(t *testing.T) { require.Equal(t, http.StatusInternalServerError, w.Code) } -// SSZ stateful: send SignedWireBlindedExecutionPayloadEnvelope, header=true. -func TestPublishExecutionPayloadEnvelope_SSZ_StatefulBlinded(t *testing.T) { +// SSZ stateful: send the bare SignedExecutionPayloadEnvelope, header=false. +func TestPublishExecutionPayloadEnvelope_SSZ_StatefulBareEnvelope(t *testing.T) { params.SetupTestConfigCleanup(t) cfg := params.BeaconConfig().Copy() cfg.GloasForkEpoch = 0 @@ -449,9 +455,7 @@ func TestPublishExecutionPayloadEnvelope_SSZ_StatefulBlinded(t *testing.T) { ctrl := gomock.NewController(t) signed := testSignedEnvelope() - blinded, err := signed.WireBlinded() - require.NoError(t, err) - sszBody, err := blinded.MarshalSSZ() + sszBody, err := signed.MarshalSSZ() require.NoError(t, err) v1alpha1Server := mock2.NewMockBeaconNodeValidatorServer(ctrl) @@ -460,14 +464,13 @@ func TestPublishExecutionPayloadEnvelope_SSZ_StatefulBlinded(t *testing.T) { ).Return(&emptypb.Empty{}, nil) s := &Server{ - V1Alpha1ValidatorServer: v1alpha1Server, - ExecutionPayloadEnvelopeCache: envelopeCacheFor(signed), + V1Alpha1ValidatorServer: v1alpha1Server, } wireEnvelopeGossipDeps(t, s) req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader(sszBody)) req.Header.Set("Content-Type", "application/octet-stream") req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "true") + req.Header.Set(api.BlobDataIncludedHeader, "false") w := httptest.NewRecorder() w.Body = &bytes.Buffer{} @@ -475,60 +478,39 @@ func TestPublishExecutionPayloadEnvelope_SSZ_StatefulBlinded(t *testing.T) { require.Equal(t, http.StatusOK, w.Code) } -// SSZ stateful with no cache entry must fail (cannot reconstruct full). -func TestPublishExecutionPayloadEnvelope_SSZ_StatefulBlinded_CacheMiss(t *testing.T) { +// Stateful publish with no cached blobs/proofs: the v1alpha1 server's +// FailedPrecondition must surface as the spec 400. +func TestPublishExecutionPayloadEnvelope_StatefulBareEnvelope_CacheMiss(t *testing.T) { params.SetupTestConfigCleanup(t) cfg := params.BeaconConfig().Copy() cfg.GloasForkEpoch = 0 params.OverrideBeaconConfig(cfg) + ctrl := gomock.NewController(t) signed := testSignedEnvelope() - blinded, err := signed.WireBlinded() - require.NoError(t, err) - sszBody, err := blinded.MarshalSSZ() + sszBody, err := signed.MarshalSSZ() require.NoError(t, err) + v1alpha1Server := mock2.NewMockBeaconNodeValidatorServer(ctrl) + v1alpha1Server.EXPECT().PublishExecutionPayloadEnvelope( + gomock.Any(), gomock.Any(), + ).Return(nil, status.Error(codes.FailedPrecondition, + "envelope without blob data was submitted but the beacon node has no cached blobs and KZG proofs")) + s := &Server{ - ExecutionPayloadEnvelopeCache: cache.NewExecutionPayloadEnvelopeCache(), + V1Alpha1ValidatorServer: v1alpha1Server, } + wireEnvelopeGossipDeps(t, s) req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader(sszBody)) req.Header.Set("Content-Type", "application/octet-stream") req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "true") + req.Header.Set(api.BlobDataIncludedHeader, "false") w := httptest.NewRecorder() w.Body = &bytes.Buffer{} s.PublishExecutionPayloadEnvelope(w, req) require.Equal(t, http.StatusBadRequest, w.Code) - assert.Equal(t, true, bytes.Contains(w.Body.Bytes(), []byte("no cached execution payload envelope"))) -} - -// A cached envelope whose HTR differs from the signed blinded envelope must be rejected, -// even when the beacon_block_root matches. -func TestPublishExecutionPayloadEnvelope_StatefulBlinded_HTRMismatch(t *testing.T) { - params.SetupTestConfigCleanup(t) - cfg := params.BeaconConfig().Copy() - cfg.GloasForkEpoch = 0 - params.OverrideBeaconConfig(cfg) - - signed := testSignedEnvelope() - body := blindedJSONBody(t, signed) - - tampered := testSignedEnvelope() - tampered.Message.BuilderIndex = signed.Message.BuilderIndex + 1 - - s := &Server{ - ExecutionPayloadEnvelopeCache: envelopeCacheFor(tampered), - } - req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader(body)) - req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "true") - w := httptest.NewRecorder() - w.Body = &bytes.Buffer{} - - s.PublishExecutionPayloadEnvelope(w, req) - require.Equal(t, http.StatusBadRequest, w.Code) - assert.Equal(t, true, bytes.Contains(w.Body.Bytes(), []byte("hash tree root does not match"))) + assert.Equal(t, true, bytes.Contains(w.Body.Bytes(), []byte("no cached blobs and KZG proofs"))) } func TestPublishExecutionPayloadEnvelope_SSZ_Contents(t *testing.T) { @@ -555,7 +537,7 @@ func TestPublishExecutionPayloadEnvelope_SSZ_Contents(t *testing.T) { req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader(sszBody)) req.Header.Set("Content-Type", "application/octet-stream") req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "false") + req.Header.Set(api.BlobDataIncludedHeader, "true") w := httptest.NewRecorder() w.Body = &bytes.Buffer{} @@ -572,7 +554,7 @@ func TestPublishExecutionPayloadEnvelope_BroadcastValidation(t *testing.T) { signed := testSignedEnvelope() envRoot := bytesutil.ToBytes32(signed.Message.BeaconBlockRoot) envSlot := primitives.Slot(signed.Message.Payload.SlotNumber) - body := blindedJSONBody(t, signed) + body := bareEnvelopeJSONBody(t, signed) // State that fails gloas.VerifyExecutionPayloadEnvelope (slot mismatch is // enough). Lets us exercise the consensus path and assert it actually runs. @@ -662,16 +644,15 @@ func TestPublishExecutionPayloadEnvelope_BroadcastValidation(t *testing.T) { chainSvc.MockCanonicalFull = map[primitives.Slot]bool{envSlot: false} } s := &Server{ - V1Alpha1ValidatorServer: v1alpha1Server, - ForkchoiceFetcher: chainSvc, - HeadFetcher: chainSvc, - FinalizationFetcher: chainSvc, - ExecutionPayloadEnvelopeCache: envelopeCacheFor(signed), + V1Alpha1ValidatorServer: v1alpha1Server, + ForkchoiceFetcher: chainSvc, + HeadFetcher: chainSvc, + FinalizationFetcher: chainSvc, } wireEnvelopeGossipDeps(t, s) req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope"+tc.query, bytes.NewReader(body)) req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "true") + req.Header.Set(api.BlobDataIncludedHeader, "false") w := httptest.NewRecorder() w.Body = &bytes.Buffer{} @@ -778,11 +759,12 @@ func TestPublishExecutionPayloadEnvelope_GossipValidation(t *testing.T) { s := &Server{ Blocker: tc.blocker, HeadFetcher: chainSvc, + SyncChecker: &mockSync.Sync{IsSyncing: false}, PayloadEnvelopeVerifier: verification.NewEnvelopeVerifier, } req := httptest.NewRequest(http.MethodPost, "/eth/v1/beacon/execution_payload_envelope", bytes.NewReader(body)) req.Header.Set(api.VersionHeader, version.String(version.Gloas)) - req.Header.Set(api.ExecutionPayloadBlindedHeader, "false") + req.Header.Set(api.BlobDataIncludedHeader, "true") w := httptest.NewRecorder() w.Body = &bytes.Buffer{} diff --git a/beacon-chain/rpc/eth/beacon/server.go b/beacon-chain/rpc/eth/beacon/server.go index 8d885ab80aa7..91c0a6e47005 100644 --- a/beacon-chain/rpc/eth/beacon/server.go +++ b/beacon-chain/rpc/eth/beacon/server.go @@ -58,6 +58,4 @@ type Server struct { AttestationStateFetcher blockchain.AttestationStateFetcher // PayloadEnvelopeVerifier runs gossip-level checks on published envelopes. PayloadEnvelopeVerifier verification.NewExecutionPayloadEnvelopeVerifier - // ExecutionPayloadEnvelopeCache reconstructs the full envelope in the blinded publish flow. - ExecutionPayloadEnvelopeCache *cache.ExecutionPayloadEnvelopeCache } diff --git a/beacon-chain/rpc/eth/validator/handlers_block_gloas.go b/beacon-chain/rpc/eth/validator/handlers_block_gloas.go index 060bbf9de457..1645a17e4d0d 100644 --- a/beacon-chain/rpc/eth/validator/handlers_block_gloas.go +++ b/beacon-chain/rpc/eth/validator/handlers_block_gloas.go @@ -102,7 +102,7 @@ func (s *Server) ProduceBlockV4(w http.ResponseWriter, r *http.Request) { } // A self-built block carries its payload inline as GloasContents. An external builder bid (or - // include_payload=false) yields the block alone; its payload is revealed separately (beacon-APIs #580). + // include_payload=false) yields the block alone; its payload is revealed separately. var block *eth.BeaconBlockGloas var contents *eth.BeaconBlockContentsGloas switch b := v1alpha1resp.Block.(type) { @@ -188,9 +188,8 @@ func (s *Server) ProduceBlockV4(w http.ResponseWriter, r *http.Request) { }) } -// ExecutionPayloadEnvelope returns the cached envelope in blinded form (payload_root); -// HTR equivalence lets the VC sign the blinded form for the full envelope. -// Endpoint: GET /eth/v1/validator/execution_payload_envelopes/{slot}/{beacon_block_root} +// ExecutionPayloadEnvelope returns the cached execution payload envelope for the VC to sign and +// publish. Endpoint: GET /eth/v1/validator/execution_payload_envelopes/{slot}/{beacon_block_root} func (s *Server) ExecutionPayloadEnvelope(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "validator.ExecutionPayloadEnvelope") defer span.End() @@ -234,34 +233,34 @@ func (s *Server) ExecutionPayloadEnvelope(w http.ResponseWriter, r *http.Request httputil.HandleError(w, "could not get execution payload envelope: "+err.Error(), http.StatusInternalServerError) return } - if resp.Blinded == nil { + if resp.Envelope == nil { httputil.HandleError(w, "execution payload envelope not found", http.StatusNotFound) return } - if !bytes.Equal(resp.Blinded.BeaconBlockRoot, beaconBlockRoot) { + if !bytes.Equal(resp.Envelope.BeaconBlockRoot, beaconBlockRoot) { httputil.HandleError(w, "cached envelope beacon_block_root does not match request", http.StatusNotFound) return } - blinded := resp.Blinded + envelope := resp.Envelope w.Header().Set(api.VersionHeader, version.String(version.Gloas)) if httputil.RespondWithSsz(r) { - sszBytes, err := blinded.MarshalSSZ() + sszBytes, err := envelope.MarshalSSZ() if err != nil { - httputil.HandleError(w, "could not marshal blinded envelope to SSZ: "+err.Error(), http.StatusInternalServerError) + httputil.HandleError(w, "could not marshal envelope to SSZ: "+err.Error(), http.StatusInternalServerError) return } httputil.WriteSsz(w, sszBytes) return } - jsonEnvelope, err := structs.BlindedExecutionPayloadEnvelopeFromConsensus(blinded) + jsonEnvelope, err := structs.ExecutionPayloadEnvelopeFromConsensus(envelope) if err != nil { httputil.HandleError(w, "could not convert envelope to JSON: "+err.Error(), http.StatusInternalServerError) return } - httputil.WriteJson(w, &structs.GetValidatorBlindedExecutionPayloadEnvelopeResponse{ + httputil.WriteJson(w, &structs.GetValidatorExecutionPayloadEnvelopeResponse{ Version: version.String(version.Gloas), Data: jsonEnvelope, }) diff --git a/beacon-chain/rpc/eth/validator/handlers_block_gloas_test.go b/beacon-chain/rpc/eth/validator/handlers_block_gloas_test.go index 5cc2bd5326f4..fc97bf545a57 100644 --- a/beacon-chain/rpc/eth/validator/handlers_block_gloas_test.go +++ b/beacon-chain/rpc/eth/validator/handlers_block_gloas_test.go @@ -307,7 +307,7 @@ func TestProduceBlockV4_SSZ_IncludePayloadTrue(t *testing.T) { assert.Equal(t, true, writer.Body.Len() > 0) } -// GET returns blinded SSZ that must roundtrip with HTR matching the full envelope. +// GET returns the full envelope SSZ that must roundtrip with a matching HTR. func TestExecutionPayloadEnvelope_SSZ(t *testing.T) { params.SetupTestConfigCleanup(t) cfg := params.BeaconConfig().Copy() @@ -316,11 +316,9 @@ func TestExecutionPayloadEnvelope_SSZ(t *testing.T) { ctrl := gomock.NewController(t) envelope := testEnvelope() - wireBlinded, err := envelope.WireBlinded() - require.NoError(t, err) v1alpha1Server := mock2.NewMockBeaconNodeValidatorServer(ctrl) v1alpha1Server.EXPECT().GetExecutionPayloadEnvelope(gomock.Any(), gomock.Any()).Return( - ð.ExecutionPayloadEnvelopeResponse{Blinded: wireBlinded}, nil, + ð.ExecutionPayloadEnvelopeResponse{Envelope: envelope}, nil, ) server := &Server{V1Alpha1Server: v1alpha1Server} @@ -336,11 +334,11 @@ func TestExecutionPayloadEnvelope_SSZ(t *testing.T) { assert.Equal(t, "application/octet-stream", writer.Header().Get("Content-Type")) assert.Equal(t, version.String(version.Gloas), writer.Header().Get("Eth-Consensus-Version")) - blinded := ð.WireBlindedExecutionPayloadEnvelope{} - require.NoError(t, blinded.UnmarshalSSZ(writer.Body.Bytes())) + decoded := ð.ExecutionPayloadEnvelope{} + require.NoError(t, decoded.UnmarshalSSZ(writer.Body.Bytes())) wantHTR, err := envelope.HashTreeRoot() require.NoError(t, err) - gotHTR, err := blinded.HashTreeRoot() + gotHTR, err := decoded.HashTreeRoot() require.NoError(t, err) assert.Equal(t, wantHTR, gotHTR) } @@ -353,11 +351,9 @@ func TestExecutionPayloadEnvelope_BeaconBlockRootMismatch(t *testing.T) { ctrl := gomock.NewController(t) envelope := testEnvelope() - wireBlinded, err := envelope.WireBlinded() - require.NoError(t, err) v1alpha1Server := mock2.NewMockBeaconNodeValidatorServer(ctrl) v1alpha1Server.EXPECT().GetExecutionPayloadEnvelope(gomock.Any(), gomock.Any()).Return( - ð.ExecutionPayloadEnvelopeResponse{Blinded: wireBlinded}, nil, + ð.ExecutionPayloadEnvelopeResponse{Envelope: envelope}, nil, ) server := &Server{V1Alpha1Server: v1alpha1Server} diff --git a/beacon-chain/rpc/eth/validator/server.go b/beacon-chain/rpc/eth/validator/server.go index aa50ec7b159f..daf7e4704009 100644 --- a/beacon-chain/rpc/eth/validator/server.go +++ b/beacon-chain/rpc/eth/validator/server.go @@ -20,26 +20,25 @@ import ( // Server defines a server implementation of the gRPC Validator service, // providing RPC endpoints intended for validator clients. type Server struct { - HeadFetcher blockchain.HeadFetcher - TimeFetcher blockchain.TimeFetcher - SyncChecker sync.Checker - AttestationCache *cache.AttestationCache - AttestationsPool attestations.Pool - PeerManager p2p.PeerManager - Broadcaster p2p.Broadcaster - Stater lookup.Stater - OptimisticModeFetcher blockchain.OptimisticModeFetcher - SyncCommitteePool synccommittee.Pool - V1Alpha1Server eth.BeaconNodeValidatorServer - ExecutionPayloadEnvelopeCache *cache.ExecutionPayloadEnvelopeCache - ChainInfoFetcher blockchain.ChainInfoFetcher - BeaconDB db.HeadAccessDatabase - BlockBuilder builder.BlockBuilder - OperationNotifier operation.Notifier - CoreService *core.Service - BlockRewardFetcher rewards.BlockRewardsFetcher - ProposerPreferencesCache *cache.ProposerPreferencesCache - SubscribedValidatorsCache *cache.SubscribedValidatorsCache - PayloadIDCache *cache.PayloadIDCache - PayloadAttestationPool payloadattestation.PoolManager + HeadFetcher blockchain.HeadFetcher + TimeFetcher blockchain.TimeFetcher + SyncChecker sync.Checker + AttestationCache *cache.AttestationCache + AttestationsPool attestations.Pool + PeerManager p2p.PeerManager + Broadcaster p2p.Broadcaster + Stater lookup.Stater + OptimisticModeFetcher blockchain.OptimisticModeFetcher + SyncCommitteePool synccommittee.Pool + V1Alpha1Server eth.BeaconNodeValidatorServer + ChainInfoFetcher blockchain.ChainInfoFetcher + BeaconDB db.HeadAccessDatabase + BlockBuilder builder.BlockBuilder + OperationNotifier operation.Notifier + CoreService *core.Service + BlockRewardFetcher rewards.BlockRewardsFetcher + ProposerPreferencesCache *cache.ProposerPreferencesCache + SubscribedValidatorsCache *cache.SubscribedValidatorsCache + PayloadIDCache *cache.PayloadIDCache + PayloadAttestationPool payloadattestation.PoolManager } diff --git a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_payload_envelope.go b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_payload_envelope.go index 858e4a685cd5..8d885ca664d1 100644 --- a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_payload_envelope.go +++ b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_payload_envelope.go @@ -80,10 +80,8 @@ func extractExecutionPayloadGloas(local *consensusblocks.GetPayloadResponse) *en return nil } -// GetExecutionPayloadEnvelope implements the gRPC endpoint: -// /eth/v1alpha1/validator/execution_payload_envelope/{slot}/{builder_index} -// It returns the stored execution payload envelope for a slot/builder and, for -// self-build envelopes, computes the post-payload state root on demand. +// GetExecutionPayloadEnvelope returns the cached execution payload envelope for the requested +// slot so the proposer can sign and publish it. func (vs *Server) GetExecutionPayloadEnvelope( ctx context.Context, req *ethpb.ExecutionPayloadEnvelopeRequest, @@ -107,21 +105,13 @@ func (vs *Server) GetExecutionPayloadEnvelope( "execution payload envelope not found for slot %d", req.Slot) } - // Return the blinded wire form (payload_root); the signer validates over its HTR, which equals - // the full envelope's HTR, and the BN reconstructs the full payload from this cache on publish. - blinded, err := contents.Envelope.WireBlinded() - if err != nil { - return nil, status.Errorf(codes.Internal, "could not build blinded envelope: %v", err) - } return ðpb.ExecutionPayloadEnvelopeResponse{ - Blinded: blinded, + Envelope: contents.Envelope, }, nil } -// PublishExecutionPayloadEnvelope validates and broadcasts a signed execution payload envelope. -// This is called by validators after signing the envelope retrieved from GetExecutionPayloadEnvelope. -// -// gRPC endpoint: POST /eth/v1alpha1/validator/execution_payload_envelope +// PublishExecutionPayloadEnvelope validates and broadcasts a signed execution payload envelope, +// called by validators after signing the envelope from GetExecutionPayloadEnvelope. func (vs *Server) PublishExecutionPayloadEnvelope( ctx context.Context, req *ethpb.GenericSignedExecutionPayloadEnvelope, @@ -181,7 +171,7 @@ func (vs *Server) PublishExecutionPayloadEnvelope( return nil, status.Errorf(codes.Internal, "could not wrap signed envelope: %v", err) } if err := vs.ExecutionPayloadEnvelopeReceiver.ReceiveExecutionPayloadEnvelope(ctx, roSigned); err != nil { - // Broadcast already succeeded; import failed. REST maps Aborted -> 202 (beacon-APIs #580). + // Broadcast already succeeded; import failed. REST maps Aborted -> 202. return nil, status.Errorf(codes.Aborted, "failed to receive execution payload envelope: %v", err) } @@ -190,9 +180,8 @@ func (vs *Server) PublishExecutionPayloadEnvelope( return &emptypb.Empty{}, nil } -// resolveEnvelopeToPublish turns the generic publish request into the full signed envelope plus any -// caller-supplied blobs. The blinded (stateful) arm reconstructs the full envelope from the cache by -// matching beacon_block_root; the contents (stateless) arm carries everything in the request. +// resolveEnvelopeToPublish extracts the signed envelope plus any caller-supplied blobs. The stateful +// signed_envelope arm must match the cached envelope so its precomputed data columns apply. func (vs *Server) resolveEnvelopeToPublish(req *ethpb.GenericSignedExecutionPayloadEnvelope) (*ethpb.SignedExecutionPayloadEnvelope, [][]byte, [][]byte, error) { switch { case req.GetContents() != nil: @@ -202,33 +191,29 @@ func (vs *Server) resolveEnvelopeToPublish(req *ethpb.GenericSignedExecutionPayl return nil, nil, nil, status.Error(codes.InvalidArgument, "signed envelope or payload cannot be nil") } return c.SignedExecutionPayloadEnvelope, c.Blobs, c.KzgProofs, nil - case req.GetBlinded() != nil: - b := req.GetBlinded() - if b.Message == nil { - return nil, nil, nil, status.Error(codes.InvalidArgument, "blinded envelope message cannot be nil") + case req.GetSignedEnvelope() != nil: + signed := req.GetSignedEnvelope() + if signed.Message == nil || signed.Message.Payload == nil { + return nil, nil, nil, status.Error(codes.InvalidArgument, "signed envelope or payload cannot be nil") } cached, ok := vs.ExecutionPayloadEnvelopeCache.Contents() if !ok || cached.Envelope == nil { - return nil, nil, nil, status.Error(codes.FailedPrecondition, "no cached execution payload envelope to reconstruct from") - } - cachedBlinded, err := cached.Envelope.WireBlinded() - if err != nil { - return nil, nil, nil, status.Errorf(codes.Internal, "could not derive blinded envelope from cache: %v", err) + return nil, nil, nil, status.Error(codes.FailedPrecondition, "envelope without blob data was submitted but the beacon node has no cached blobs and KZG proofs") } - cachedRoot, err := cachedBlinded.HashTreeRoot() + cachedRoot, err := cached.Envelope.HashTreeRoot() if err != nil { - return nil, nil, nil, status.Errorf(codes.Internal, "could not hash cached blinded envelope: %v", err) + return nil, nil, nil, status.Errorf(codes.Internal, "could not hash cached envelope: %v", err) } - blindedRoot, err := b.Message.HashTreeRoot() + submittedRoot, err := signed.Message.HashTreeRoot() if err != nil { - return nil, nil, nil, status.Errorf(codes.Internal, "could not hash blinded envelope: %v", err) + return nil, nil, nil, status.Errorf(codes.Internal, "could not hash submitted envelope: %v", err) } - if cachedRoot != blindedRoot { - return nil, nil, nil, status.Error(codes.InvalidArgument, "cached envelope does not match blinded envelope") + if cachedRoot != submittedRoot { + return nil, nil, nil, status.Error(codes.InvalidArgument, "cached execution payload envelope does not match submitted envelope") } - return ðpb.SignedExecutionPayloadEnvelope{Message: cached.Envelope, Signature: b.Signature}, nil, nil, nil + return signed, nil, nil, nil default: - return nil, nil, nil, status.Error(codes.InvalidArgument, "generic signed execution payload envelope must set contents or blinded") + return nil, nil, nil, status.Error(codes.InvalidArgument, "generic signed execution payload envelope must set contents or signed_envelope") } } diff --git a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_payload_envelope_test.go b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_payload_envelope_test.go index 149162c99d5d..e9d8c1f24a8c 100644 --- a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_payload_envelope_test.go +++ b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_payload_envelope_test.go @@ -23,6 +23,7 @@ import ( "github.com/pkg/errors" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) func testGloasBlock(t *testing.T) (*consensusblocks.GetPayloadResponse, interfaces.SignedBeaconBlock) { @@ -119,7 +120,7 @@ func TestGetExecutionPayloadEnvelopeRPC_PreFork(t *testing.T) { func TestPublishExecutionPayloadEnvelope_NilRequest(t *testing.T) { vs := &Server{} _, err := vs.PublishExecutionPayloadEnvelope(t.Context(), nil) - require.ErrorContains(t, "must set contents or blinded", err) + require.ErrorContains(t, "must set contents or signed_envelope", err) _, err = vs.PublishExecutionPayloadEnvelope(t.Context(), ðpb.GenericSignedExecutionPayloadEnvelope{ Envelope: ðpb.GenericSignedExecutionPayloadEnvelope_Contents{ @@ -232,15 +233,78 @@ func TestGetExecutionPayloadEnvelopeRPC_Success(t *testing.T) { }) require.NoError(t, err) require.NotNil(t, resp) - // The RPC returns the blinded wire form; its HTR must equal the cached full envelope's HTR. - require.NotNil(t, resp.Blinded) + require.NotNil(t, resp.Envelope) wantHTR, err := envelope.HashTreeRoot() require.NoError(t, err) - gotHTR, err := resp.Blinded.HashTreeRoot() + gotHTR, err := resp.Envelope.HashTreeRoot() require.NoError(t, err) require.Equal(t, wantHTR, gotHTR) } +// Stateful publish: bare signed_envelope arm must match the cached envelope by HTR. +func TestPublishExecutionPayloadEnvelope_SignedEnvelopeArm(t *testing.T) { + params.SetupTestConfigCleanup(t) + cfg := params.BeaconConfig().Copy() + cfg.GloasForkEpoch = 0 + params.OverrideBeaconConfig(cfg) + + envelope := ðpb.ExecutionPayloadEnvelope{ + Payload: &enginev1.ExecutionPayloadGloas{ + ParentHash: make([]byte, 32), + FeeRecipient: make([]byte, 20), + StateRoot: make([]byte, 32), + ReceiptsRoot: make([]byte, 32), + LogsBloom: make([]byte, 256), + PrevRandao: make([]byte, 32), + BaseFeePerGas: make([]byte, 32), + BlockHash: make([]byte, 32), + ExtraData: make([]byte, 0), + SlotNumber: 1, + }, + ExecutionRequests: &enginev1.ExecutionRequestsGloas{}, + BuilderIndex: 0, + BeaconBlockRoot: make([]byte, 32), + ParentBeaconBlockRoot: make([]byte, 32), + } + signed := ðpb.SignedExecutionPayloadEnvelope{Message: envelope, Signature: make([]byte, 96)} + statefulReq := ðpb.GenericSignedExecutionPayloadEnvelope{ + Envelope: ðpb.GenericSignedExecutionPayloadEnvelope_SignedEnvelope{SignedEnvelope: signed}, + } + + t.Run("cache miss", func(t *testing.T) { + vs := &Server{ExecutionPayloadEnvelopeCache: cache.NewExecutionPayloadEnvelopeCache()} + _, err := vs.PublishExecutionPayloadEnvelope(t.Context(), statefulReq) + require.ErrorContains(t, "no cached blobs and KZG proofs", err) + require.Equal(t, codes.FailedPrecondition, status.Code(err)) + }) + + t.Run("cached envelope mismatch", func(t *testing.T) { + tampered := proto.Clone(envelope).(*ethpb.ExecutionPayloadEnvelope) + tampered.BuilderIndex = envelope.BuilderIndex + 1 + vs := &Server{ExecutionPayloadEnvelopeCache: cache.NewExecutionPayloadEnvelopeCache()} + vs.ExecutionPayloadEnvelopeCache.Set(&cache.ExecutionPayloadContents{Envelope: tampered}) + _, err := vs.PublishExecutionPayloadEnvelope(t.Context(), statefulReq) + require.ErrorContains(t, "does not match submitted envelope", err) + require.Equal(t, codes.InvalidArgument, status.Code(err)) + }) + + t.Run("success", func(t *testing.T) { + broadcaster := &mockp2p.MockBroadcaster{} + receiver := &mockExecutionPayloadEnvelopeReceiver{} + vs := &Server{ + P2P: broadcaster, + ExecutionPayloadEnvelopeReceiver: receiver, + ExecutionPayloadEnvelopeCache: cache.NewExecutionPayloadEnvelopeCache(), + } + vs.ExecutionPayloadEnvelopeCache.Set(&cache.ExecutionPayloadContents{Envelope: envelope}) + resp, err := vs.PublishExecutionPayloadEnvelope(t.Context(), statefulReq) + require.NoError(t, err) + require.NotNil(t, resp) + require.Equal(t, true, broadcaster.BroadcastCalled.Load()) + require.Equal(t, 1, receiver.calls) + }) +} + func TestPublishExecutionPayloadEnvelope_Success(t *testing.T) { params.SetupTestConfigCleanup(t) cfg := params.BeaconConfig().Copy() diff --git a/changelog/james-prysm_revert-blinded-payload.md b/changelog/james-prysm_revert-blinded-payload.md new file mode 100644 index 000000000000..998f64e850c1 --- /dev/null +++ b/changelog/james-prysm_revert-blinded-payload.md @@ -0,0 +1,3 @@ +### Changed + +- Removed the blinded execution payload envelope publish flow in favor of publishing the full signed envelope or envelope contents, per beacon-APIs #624. diff --git a/proto/prysm/v1alpha1/BUILD.bazel b/proto/prysm/v1alpha1/BUILD.bazel index 292e00eadb2a..3b6f9fcaba59 100644 --- a/proto/prysm/v1alpha1/BUILD.bazel +++ b/proto/prysm/v1alpha1/BUILD.bazel @@ -215,8 +215,6 @@ ssz_gloas_objs = [ "SignedBlindedExecutionPayloadEnvelope", "SignedExecutionPayloadEnvelope", "SignedExecutionPayloadEnvelopeContents", - "SignedWireBlindedExecutionPayloadEnvelope", - "WireBlindedExecutionPayloadEnvelope", "BeaconBlockGloas", "BeaconBlockContentsGloas", "SignedBeaconBlockGloas", diff --git a/proto/prysm/v1alpha1/gloas.go b/proto/prysm/v1alpha1/gloas.go index c6621af7461d..611b16189d47 100644 --- a/proto/prysm/v1alpha1/gloas.go +++ b/proto/prysm/v1alpha1/gloas.go @@ -48,38 +48,3 @@ func (payment *BuilderPendingPayment) Copy() *BuilderPendingPayment { ProposerIndex: payment.ProposerIndex, } } - -// WireBlinded derives the spec-wire blinded envelope from a full one: payload_root is -// HashTreeRoot(payload), so HashTreeRoot(blinded) == HashTreeRoot(full) and a validator signature -// over either form is valid against the other. -func (e *ExecutionPayloadEnvelope) WireBlinded() (*WireBlindedExecutionPayloadEnvelope, error) { - if e == nil { - return nil, nil - } - payloadRoot, err := e.Payload.HashTreeRoot() - if err != nil { - return nil, err - } - return &WireBlindedExecutionPayloadEnvelope{ - PayloadRoot: payloadRoot[:], - ExecutionRequests: e.ExecutionRequests, - BuilderIndex: e.BuilderIndex, - BeaconBlockRoot: bytesutil.SafeCopyBytes(e.BeaconBlockRoot), - ParentBeaconBlockRoot: bytesutil.SafeCopyBytes(e.ParentBeaconBlockRoot), - }, nil -} - -// WireBlinded lifts a signed envelope to its blinded form, preserving the signature. -func (e *SignedExecutionPayloadEnvelope) WireBlinded() (*SignedWireBlindedExecutionPayloadEnvelope, error) { - if e == nil { - return nil, nil - } - msg, err := e.Message.WireBlinded() - if err != nil { - return nil, err - } - return &SignedWireBlindedExecutionPayloadEnvelope{ - Message: msg, - Signature: bytesutil.SafeCopyBytes(e.Signature), - }, nil -} diff --git a/proto/prysm/v1alpha1/gloas.minimal.pb.go b/proto/prysm/v1alpha1/gloas.minimal.pb.go index b1c88313acf4..c7c0b0ebc2a3 100644 --- a/proto/prysm/v1alpha1/gloas.minimal.pb.go +++ b/proto/prysm/v1alpha1/gloas.minimal.pb.go @@ -1883,140 +1883,12 @@ func (x *SignedBlindedExecutionPayloadEnvelope) GetSignature() []byte { return nil } -type WireBlindedExecutionPayloadEnvelope struct { - state protoimpl.MessageState `protogen:"open.v1"` - PayloadRoot []byte `protobuf:"bytes,1,opt,name=payload_root,json=payloadRoot,proto3" json:"payload_root,omitempty" ssz-size:"32"` - ExecutionRequests *v1.ExecutionRequestsGloas `protobuf:"bytes,2,opt,name=execution_requests,json=executionRequests,proto3" json:"execution_requests,omitempty"` - BuilderIndex github_com_OffchainLabs_prysm_v7_consensus_types_primitives.BuilderIndex `protobuf:"varint,3,opt,name=builder_index,json=builderIndex,proto3" json:"builder_index,omitempty" cast-type:"github.com/OffchainLabs/prysm/v7/consensus-types/primitives.BuilderIndex"` - BeaconBlockRoot []byte `protobuf:"bytes,4,opt,name=beacon_block_root,json=beaconBlockRoot,proto3" json:"beacon_block_root,omitempty" ssz-size:"32"` - ParentBeaconBlockRoot []byte `protobuf:"bytes,5,opt,name=parent_beacon_block_root,json=parentBeaconBlockRoot,proto3" json:"parent_beacon_block_root,omitempty" ssz-size:"32"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *WireBlindedExecutionPayloadEnvelope) Reset() { - *x = WireBlindedExecutionPayloadEnvelope{} - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *WireBlindedExecutionPayloadEnvelope) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WireBlindedExecutionPayloadEnvelope) ProtoMessage() {} - -func (x *WireBlindedExecutionPayloadEnvelope) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[22] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WireBlindedExecutionPayloadEnvelope.ProtoReflect.Descriptor instead. -func (*WireBlindedExecutionPayloadEnvelope) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{22} -} - -func (x *WireBlindedExecutionPayloadEnvelope) GetPayloadRoot() []byte { - if x != nil { - return x.PayloadRoot - } - return nil -} - -func (x *WireBlindedExecutionPayloadEnvelope) GetExecutionRequests() *v1.ExecutionRequestsGloas { - if x != nil { - return x.ExecutionRequests - } - return nil -} - -func (x *WireBlindedExecutionPayloadEnvelope) GetBuilderIndex() github_com_OffchainLabs_prysm_v7_consensus_types_primitives.BuilderIndex { - if x != nil { - return x.BuilderIndex - } - return github_com_OffchainLabs_prysm_v7_consensus_types_primitives.BuilderIndex(0) -} - -func (x *WireBlindedExecutionPayloadEnvelope) GetBeaconBlockRoot() []byte { - if x != nil { - return x.BeaconBlockRoot - } - return nil -} - -func (x *WireBlindedExecutionPayloadEnvelope) GetParentBeaconBlockRoot() []byte { - if x != nil { - return x.ParentBeaconBlockRoot - } - return nil -} - -type SignedWireBlindedExecutionPayloadEnvelope struct { - state protoimpl.MessageState `protogen:"open.v1"` - Message *WireBlindedExecutionPayloadEnvelope `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty" ssz-size:"96"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *SignedWireBlindedExecutionPayloadEnvelope) Reset() { - *x = SignedWireBlindedExecutionPayloadEnvelope{} - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SignedWireBlindedExecutionPayloadEnvelope) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignedWireBlindedExecutionPayloadEnvelope) ProtoMessage() {} - -func (x *SignedWireBlindedExecutionPayloadEnvelope) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[23] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SignedWireBlindedExecutionPayloadEnvelope.ProtoReflect.Descriptor instead. -func (*SignedWireBlindedExecutionPayloadEnvelope) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{23} -} - -func (x *SignedWireBlindedExecutionPayloadEnvelope) GetMessage() *WireBlindedExecutionPayloadEnvelope { - if x != nil { - return x.Message - } - return nil -} - -func (x *SignedWireBlindedExecutionPayloadEnvelope) GetSignature() []byte { - if x != nil { - return x.Signature - } - return nil -} - type GenericSignedExecutionPayloadEnvelope struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Envelope: // // *GenericSignedExecutionPayloadEnvelope_Contents - // *GenericSignedExecutionPayloadEnvelope_Blinded + // *GenericSignedExecutionPayloadEnvelope_SignedEnvelope Envelope isGenericSignedExecutionPayloadEnvelope_Envelope `protobuf_oneof:"envelope"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -2024,7 +1896,7 @@ type GenericSignedExecutionPayloadEnvelope struct { func (x *GenericSignedExecutionPayloadEnvelope) Reset() { *x = GenericSignedExecutionPayloadEnvelope{} - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[24] + mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2036,7 +1908,7 @@ func (x *GenericSignedExecutionPayloadEnvelope) String() string { func (*GenericSignedExecutionPayloadEnvelope) ProtoMessage() {} func (x *GenericSignedExecutionPayloadEnvelope) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[24] + mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2049,7 +1921,7 @@ func (x *GenericSignedExecutionPayloadEnvelope) ProtoReflect() protoreflect.Mess // Deprecated: Use GenericSignedExecutionPayloadEnvelope.ProtoReflect.Descriptor instead. func (*GenericSignedExecutionPayloadEnvelope) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{24} + return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{22} } func (x *GenericSignedExecutionPayloadEnvelope) GetEnvelope() isGenericSignedExecutionPayloadEnvelope_Envelope { @@ -2068,10 +1940,10 @@ func (x *GenericSignedExecutionPayloadEnvelope) GetContents() *SignedExecutionPa return nil } -func (x *GenericSignedExecutionPayloadEnvelope) GetBlinded() *SignedWireBlindedExecutionPayloadEnvelope { +func (x *GenericSignedExecutionPayloadEnvelope) GetSignedEnvelope() *SignedExecutionPayloadEnvelope { if x != nil { - if x, ok := x.Envelope.(*GenericSignedExecutionPayloadEnvelope_Blinded); ok { - return x.Blinded + if x, ok := x.Envelope.(*GenericSignedExecutionPayloadEnvelope_SignedEnvelope); ok { + return x.SignedEnvelope } } return nil @@ -2085,14 +1957,14 @@ type GenericSignedExecutionPayloadEnvelope_Contents struct { Contents *SignedExecutionPayloadEnvelopeContents `protobuf:"bytes,1,opt,name=contents,proto3,oneof"` } -type GenericSignedExecutionPayloadEnvelope_Blinded struct { - Blinded *SignedWireBlindedExecutionPayloadEnvelope `protobuf:"bytes,2,opt,name=blinded,proto3,oneof"` +type GenericSignedExecutionPayloadEnvelope_SignedEnvelope struct { + SignedEnvelope *SignedExecutionPayloadEnvelope `protobuf:"bytes,2,opt,name=signed_envelope,json=signedEnvelope,proto3,oneof"` } func (*GenericSignedExecutionPayloadEnvelope_Contents) isGenericSignedExecutionPayloadEnvelope_Envelope() { } -func (*GenericSignedExecutionPayloadEnvelope_Blinded) isGenericSignedExecutionPayloadEnvelope_Envelope() { +func (*GenericSignedExecutionPayloadEnvelope_SignedEnvelope) isGenericSignedExecutionPayloadEnvelope_Envelope() { } type Builder struct { @@ -2109,7 +1981,7 @@ type Builder struct { func (x *Builder) Reset() { *x = Builder{} - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[25] + mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2121,7 +1993,7 @@ func (x *Builder) String() string { func (*Builder) ProtoMessage() {} func (x *Builder) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[25] + mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2134,7 +2006,7 @@ func (x *Builder) ProtoReflect() protoreflect.Message { // Deprecated: Use Builder.ProtoReflect.Descriptor instead. func (*Builder) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{25} + return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{23} } func (x *Builder) GetPubkey() []byte { @@ -2890,43 +2762,7 @@ var file_proto_prysm_v1alpha1_gloas_proto_rawDesc = []byte{ 0x70, 0x65, 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, 0x22, 0x93, 0x03, 0x0a, 0x23, 0x57, 0x69, 0x72, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, - 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x0c, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x59, 0x0a, 0x12, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x6e, 0x67, 0x69, - 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x47, 0x6c, 0x6f, 0x61, 0x73, 0x52, 0x11, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, - 0x71, 0x0a, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x4c, 0x82, 0xb5, 0x18, 0x48, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, - 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x12, 0x32, 0x0a, 0x11, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, - 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x0f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3f, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, - 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, - 0x52, 0x15, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0xa7, 0x01, 0x0a, 0x29, 0x53, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x57, 0x69, 0x72, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, - 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x54, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, - 0x69, 0x72, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, - 0x70, 0x65, 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, 0x22, 0xee, 0x01, 0x0a, 0x25, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x69, 0x67, + 0x65, 0x22, 0xf2, 0x01, 0x0a, 0x25, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x5b, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, @@ -2934,46 +2770,46 @@ var file_proto_prysm_v1alpha1_gloas_proto_rawDesc = []byte{ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x48, 0x00, 0x52, 0x08, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5c, 0x0a, 0x07, 0x62, 0x6c, 0x69, 0x6e, - 0x64, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x57, 0x69, 0x72, 0x65, 0x42, 0x6c, 0x69, 0x6e, - 0x64, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x48, 0x00, 0x52, 0x07, 0x62, - 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, - 0x70, 0x65, 0x22, 0xc1, 0x03, 0x0a, 0x07, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x1e, - 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, - 0x8a, 0xb5, 0x18, 0x02, 0x34, 0x38, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x1f, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x05, 0x8a, 0xb5, 0x18, 0x01, 0x31, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x33, 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, - 0x32, 0x30, 0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x5e, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x04, 0x42, 0x44, 0x82, 0xb5, 0x18, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, - 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x47, 0x77, 0x65, 0x69, 0x52, 0x07, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0x45, 0x82, 0xb5, 0x18, - 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, - 0x37, 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, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, - 0x12, 0x74, 0x0a, 0x12, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x42, 0x45, 0x82, 0xb5, - 0x18, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, - 0x76, 0x37, 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, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x52, 0x11, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x62, 0x6c, - 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, - 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, - 0x65, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x0f, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x65, 0x6e, + 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x22, 0xc1, 0x03, 0x0a, 0x07, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x34, 0x38, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, + 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x42, 0x05, 0x8a, 0xb5, 0x18, 0x01, 0x31, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, + 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, 0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x5e, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x42, 0x44, 0x82, 0xb5, 0x18, 0x40, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x47, 0x77, 0x65, 0x69, 0x52, + 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, + 0x45, 0x82, 0xb5, 0x18, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, + 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x12, 0x74, 0x0a, 0x12, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, + 0x42, 0x45, 0x82, 0xb5, 0x18, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, + 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x11, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x3b, 0x65, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2988,54 +2824,52 @@ func file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP() []byte { return file_proto_prysm_v1alpha1_gloas_proto_rawDescData } -var file_proto_prysm_v1alpha1_gloas_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_proto_prysm_v1alpha1_gloas_proto_msgTypes = make([]protoimpl.MessageInfo, 24) var file_proto_prysm_v1alpha1_gloas_proto_goTypes = []any{ - (*ExecutionPayloadBid)(nil), // 0: ethereum.eth.v1alpha1.ExecutionPayloadBid - (*SignedExecutionPayloadBid)(nil), // 1: ethereum.eth.v1alpha1.SignedExecutionPayloadBid - (*ProposerPreferences)(nil), // 2: ethereum.eth.v1alpha1.ProposerPreferences - (*SignedProposerPreferences)(nil), // 3: ethereum.eth.v1alpha1.SignedProposerPreferences - (*SubmitSignedProposerPreferencesRequest)(nil), // 4: ethereum.eth.v1alpha1.SubmitSignedProposerPreferencesRequest - (*PayloadAttestationData)(nil), // 5: ethereum.eth.v1alpha1.PayloadAttestationData - (*PayloadAttestation)(nil), // 6: ethereum.eth.v1alpha1.PayloadAttestation - (*PayloadAttestationMessage)(nil), // 7: ethereum.eth.v1alpha1.PayloadAttestationMessage - (*BeaconBlockGloas)(nil), // 8: ethereum.eth.v1alpha1.BeaconBlockGloas - (*BeaconBlockBodyGloas)(nil), // 9: ethereum.eth.v1alpha1.BeaconBlockBodyGloas - (*SignedBeaconBlockGloas)(nil), // 10: ethereum.eth.v1alpha1.SignedBeaconBlockGloas - (*BeaconStateGloas)(nil), // 11: ethereum.eth.v1alpha1.BeaconStateGloas - (*PTCs)(nil), // 12: ethereum.eth.v1alpha1.PTCs - (*BeaconBlockContentsGloas)(nil), // 13: ethereum.eth.v1alpha1.BeaconBlockContentsGloas - (*SignedExecutionPayloadEnvelopeContents)(nil), // 14: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelopeContents - (*BuilderPendingPayment)(nil), // 15: ethereum.eth.v1alpha1.BuilderPendingPayment - (*BuilderPendingWithdrawal)(nil), // 16: ethereum.eth.v1alpha1.BuilderPendingWithdrawal - (*DataColumnSidecarGloas)(nil), // 17: ethereum.eth.v1alpha1.DataColumnSidecarGloas - (*ExecutionPayloadEnvelope)(nil), // 18: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope - (*SignedExecutionPayloadEnvelope)(nil), // 19: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelope - (*BlindedExecutionPayloadEnvelope)(nil), // 20: ethereum.eth.v1alpha1.BlindedExecutionPayloadEnvelope - (*SignedBlindedExecutionPayloadEnvelope)(nil), // 21: ethereum.eth.v1alpha1.SignedBlindedExecutionPayloadEnvelope - (*WireBlindedExecutionPayloadEnvelope)(nil), // 22: ethereum.eth.v1alpha1.WireBlindedExecutionPayloadEnvelope - (*SignedWireBlindedExecutionPayloadEnvelope)(nil), // 23: ethereum.eth.v1alpha1.SignedWireBlindedExecutionPayloadEnvelope - (*GenericSignedExecutionPayloadEnvelope)(nil), // 24: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope - (*Builder)(nil), // 25: ethereum.eth.v1alpha1.Builder - (*Eth1Data)(nil), // 26: ethereum.eth.v1alpha1.Eth1Data - (*ProposerSlashing)(nil), // 27: ethereum.eth.v1alpha1.ProposerSlashing - (*AttesterSlashingElectra)(nil), // 28: ethereum.eth.v1alpha1.AttesterSlashingElectra - (*AttestationElectra)(nil), // 29: ethereum.eth.v1alpha1.AttestationElectra - (*Deposit)(nil), // 30: ethereum.eth.v1alpha1.Deposit - (*SignedVoluntaryExit)(nil), // 31: ethereum.eth.v1alpha1.SignedVoluntaryExit - (*SyncAggregate)(nil), // 32: ethereum.eth.v1alpha1.SyncAggregate - (*SignedBLSToExecutionChange)(nil), // 33: ethereum.eth.v1alpha1.SignedBLSToExecutionChange - (*v1.ExecutionRequestsGloas)(nil), // 34: ethereum.engine.v1.ExecutionRequestsGloas - (*Fork)(nil), // 35: ethereum.eth.v1alpha1.Fork - (*BeaconBlockHeader)(nil), // 36: ethereum.eth.v1alpha1.BeaconBlockHeader - (*Validator)(nil), // 37: ethereum.eth.v1alpha1.Validator - (*Checkpoint)(nil), // 38: ethereum.eth.v1alpha1.Checkpoint - (*SyncCommittee)(nil), // 39: ethereum.eth.v1alpha1.SyncCommittee - (*HistoricalSummary)(nil), // 40: ethereum.eth.v1alpha1.HistoricalSummary - (*PendingDeposit)(nil), // 41: ethereum.eth.v1alpha1.PendingDeposit - (*PendingPartialWithdrawal)(nil), // 42: ethereum.eth.v1alpha1.PendingPartialWithdrawal - (*PendingConsolidation)(nil), // 43: ethereum.eth.v1alpha1.PendingConsolidation - (*v1.Withdrawal)(nil), // 44: ethereum.engine.v1.Withdrawal - (*v1.ExecutionPayloadGloas)(nil), // 45: ethereum.engine.v1.ExecutionPayloadGloas + (*ExecutionPayloadBid)(nil), // 0: ethereum.eth.v1alpha1.ExecutionPayloadBid + (*SignedExecutionPayloadBid)(nil), // 1: ethereum.eth.v1alpha1.SignedExecutionPayloadBid + (*ProposerPreferences)(nil), // 2: ethereum.eth.v1alpha1.ProposerPreferences + (*SignedProposerPreferences)(nil), // 3: ethereum.eth.v1alpha1.SignedProposerPreferences + (*SubmitSignedProposerPreferencesRequest)(nil), // 4: ethereum.eth.v1alpha1.SubmitSignedProposerPreferencesRequest + (*PayloadAttestationData)(nil), // 5: ethereum.eth.v1alpha1.PayloadAttestationData + (*PayloadAttestation)(nil), // 6: ethereum.eth.v1alpha1.PayloadAttestation + (*PayloadAttestationMessage)(nil), // 7: ethereum.eth.v1alpha1.PayloadAttestationMessage + (*BeaconBlockGloas)(nil), // 8: ethereum.eth.v1alpha1.BeaconBlockGloas + (*BeaconBlockBodyGloas)(nil), // 9: ethereum.eth.v1alpha1.BeaconBlockBodyGloas + (*SignedBeaconBlockGloas)(nil), // 10: ethereum.eth.v1alpha1.SignedBeaconBlockGloas + (*BeaconStateGloas)(nil), // 11: ethereum.eth.v1alpha1.BeaconStateGloas + (*PTCs)(nil), // 12: ethereum.eth.v1alpha1.PTCs + (*BeaconBlockContentsGloas)(nil), // 13: ethereum.eth.v1alpha1.BeaconBlockContentsGloas + (*SignedExecutionPayloadEnvelopeContents)(nil), // 14: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelopeContents + (*BuilderPendingPayment)(nil), // 15: ethereum.eth.v1alpha1.BuilderPendingPayment + (*BuilderPendingWithdrawal)(nil), // 16: ethereum.eth.v1alpha1.BuilderPendingWithdrawal + (*DataColumnSidecarGloas)(nil), // 17: ethereum.eth.v1alpha1.DataColumnSidecarGloas + (*ExecutionPayloadEnvelope)(nil), // 18: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope + (*SignedExecutionPayloadEnvelope)(nil), // 19: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelope + (*BlindedExecutionPayloadEnvelope)(nil), // 20: ethereum.eth.v1alpha1.BlindedExecutionPayloadEnvelope + (*SignedBlindedExecutionPayloadEnvelope)(nil), // 21: ethereum.eth.v1alpha1.SignedBlindedExecutionPayloadEnvelope + (*GenericSignedExecutionPayloadEnvelope)(nil), // 22: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope + (*Builder)(nil), // 23: ethereum.eth.v1alpha1.Builder + (*Eth1Data)(nil), // 24: ethereum.eth.v1alpha1.Eth1Data + (*ProposerSlashing)(nil), // 25: ethereum.eth.v1alpha1.ProposerSlashing + (*AttesterSlashingElectra)(nil), // 26: ethereum.eth.v1alpha1.AttesterSlashingElectra + (*AttestationElectra)(nil), // 27: ethereum.eth.v1alpha1.AttestationElectra + (*Deposit)(nil), // 28: ethereum.eth.v1alpha1.Deposit + (*SignedVoluntaryExit)(nil), // 29: ethereum.eth.v1alpha1.SignedVoluntaryExit + (*SyncAggregate)(nil), // 30: ethereum.eth.v1alpha1.SyncAggregate + (*SignedBLSToExecutionChange)(nil), // 31: ethereum.eth.v1alpha1.SignedBLSToExecutionChange + (*v1.ExecutionRequestsGloas)(nil), // 32: ethereum.engine.v1.ExecutionRequestsGloas + (*Fork)(nil), // 33: ethereum.eth.v1alpha1.Fork + (*BeaconBlockHeader)(nil), // 34: ethereum.eth.v1alpha1.BeaconBlockHeader + (*Validator)(nil), // 35: ethereum.eth.v1alpha1.Validator + (*Checkpoint)(nil), // 36: ethereum.eth.v1alpha1.Checkpoint + (*SyncCommittee)(nil), // 37: ethereum.eth.v1alpha1.SyncCommittee + (*HistoricalSummary)(nil), // 38: ethereum.eth.v1alpha1.HistoricalSummary + (*PendingDeposit)(nil), // 39: ethereum.eth.v1alpha1.PendingDeposit + (*PendingPartialWithdrawal)(nil), // 40: ethereum.eth.v1alpha1.PendingPartialWithdrawal + (*PendingConsolidation)(nil), // 41: ethereum.eth.v1alpha1.PendingConsolidation + (*v1.Withdrawal)(nil), // 42: ethereum.engine.v1.Withdrawal + (*v1.ExecutionPayloadGloas)(nil), // 43: ethereum.engine.v1.ExecutionPayloadGloas } var file_proto_prysm_v1alpha1_gloas_proto_depIdxs = []int32{ 0, // 0: ethereum.eth.v1alpha1.SignedExecutionPayloadBid.message:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadBid @@ -3044,56 +2878,54 @@ var file_proto_prysm_v1alpha1_gloas_proto_depIdxs = []int32{ 5, // 3: ethereum.eth.v1alpha1.PayloadAttestation.data:type_name -> ethereum.eth.v1alpha1.PayloadAttestationData 5, // 4: ethereum.eth.v1alpha1.PayloadAttestationMessage.data:type_name -> ethereum.eth.v1alpha1.PayloadAttestationData 9, // 5: ethereum.eth.v1alpha1.BeaconBlockGloas.body:type_name -> ethereum.eth.v1alpha1.BeaconBlockBodyGloas - 26, // 6: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data - 27, // 7: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing - 28, // 8: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashingElectra - 29, // 9: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.attestations:type_name -> ethereum.eth.v1alpha1.AttestationElectra - 30, // 10: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.deposits:type_name -> ethereum.eth.v1alpha1.Deposit - 31, // 11: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit - 32, // 12: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.sync_aggregate:type_name -> ethereum.eth.v1alpha1.SyncAggregate - 33, // 13: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.bls_to_execution_changes:type_name -> ethereum.eth.v1alpha1.SignedBLSToExecutionChange + 24, // 6: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data + 25, // 7: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing + 26, // 8: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashingElectra + 27, // 9: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.attestations:type_name -> ethereum.eth.v1alpha1.AttestationElectra + 28, // 10: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.deposits:type_name -> ethereum.eth.v1alpha1.Deposit + 29, // 11: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit + 30, // 12: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.sync_aggregate:type_name -> ethereum.eth.v1alpha1.SyncAggregate + 31, // 13: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.bls_to_execution_changes:type_name -> ethereum.eth.v1alpha1.SignedBLSToExecutionChange 1, // 14: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.signed_execution_payload_bid:type_name -> ethereum.eth.v1alpha1.SignedExecutionPayloadBid 6, // 15: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.payload_attestations:type_name -> ethereum.eth.v1alpha1.PayloadAttestation - 34, // 16: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.parent_execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas + 32, // 16: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.parent_execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas 8, // 17: ethereum.eth.v1alpha1.SignedBeaconBlockGloas.block:type_name -> ethereum.eth.v1alpha1.BeaconBlockGloas - 35, // 18: ethereum.eth.v1alpha1.BeaconStateGloas.fork:type_name -> ethereum.eth.v1alpha1.Fork - 36, // 19: ethereum.eth.v1alpha1.BeaconStateGloas.latest_block_header:type_name -> ethereum.eth.v1alpha1.BeaconBlockHeader - 26, // 20: ethereum.eth.v1alpha1.BeaconStateGloas.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data - 26, // 21: ethereum.eth.v1alpha1.BeaconStateGloas.eth1_data_votes:type_name -> ethereum.eth.v1alpha1.Eth1Data - 37, // 22: ethereum.eth.v1alpha1.BeaconStateGloas.validators:type_name -> ethereum.eth.v1alpha1.Validator - 38, // 23: ethereum.eth.v1alpha1.BeaconStateGloas.previous_justified_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint - 38, // 24: ethereum.eth.v1alpha1.BeaconStateGloas.current_justified_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint - 38, // 25: ethereum.eth.v1alpha1.BeaconStateGloas.finalized_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint - 39, // 26: ethereum.eth.v1alpha1.BeaconStateGloas.current_sync_committee:type_name -> ethereum.eth.v1alpha1.SyncCommittee - 39, // 27: ethereum.eth.v1alpha1.BeaconStateGloas.next_sync_committee:type_name -> ethereum.eth.v1alpha1.SyncCommittee - 40, // 28: ethereum.eth.v1alpha1.BeaconStateGloas.historical_summaries:type_name -> ethereum.eth.v1alpha1.HistoricalSummary - 41, // 29: ethereum.eth.v1alpha1.BeaconStateGloas.pending_deposits:type_name -> ethereum.eth.v1alpha1.PendingDeposit - 42, // 30: ethereum.eth.v1alpha1.BeaconStateGloas.pending_partial_withdrawals:type_name -> ethereum.eth.v1alpha1.PendingPartialWithdrawal - 43, // 31: ethereum.eth.v1alpha1.BeaconStateGloas.pending_consolidations:type_name -> ethereum.eth.v1alpha1.PendingConsolidation - 25, // 32: ethereum.eth.v1alpha1.BeaconStateGloas.builders:type_name -> ethereum.eth.v1alpha1.Builder + 33, // 18: ethereum.eth.v1alpha1.BeaconStateGloas.fork:type_name -> ethereum.eth.v1alpha1.Fork + 34, // 19: ethereum.eth.v1alpha1.BeaconStateGloas.latest_block_header:type_name -> ethereum.eth.v1alpha1.BeaconBlockHeader + 24, // 20: ethereum.eth.v1alpha1.BeaconStateGloas.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data + 24, // 21: ethereum.eth.v1alpha1.BeaconStateGloas.eth1_data_votes:type_name -> ethereum.eth.v1alpha1.Eth1Data + 35, // 22: ethereum.eth.v1alpha1.BeaconStateGloas.validators:type_name -> ethereum.eth.v1alpha1.Validator + 36, // 23: ethereum.eth.v1alpha1.BeaconStateGloas.previous_justified_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint + 36, // 24: ethereum.eth.v1alpha1.BeaconStateGloas.current_justified_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint + 36, // 25: ethereum.eth.v1alpha1.BeaconStateGloas.finalized_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint + 37, // 26: ethereum.eth.v1alpha1.BeaconStateGloas.current_sync_committee:type_name -> ethereum.eth.v1alpha1.SyncCommittee + 37, // 27: ethereum.eth.v1alpha1.BeaconStateGloas.next_sync_committee:type_name -> ethereum.eth.v1alpha1.SyncCommittee + 38, // 28: ethereum.eth.v1alpha1.BeaconStateGloas.historical_summaries:type_name -> ethereum.eth.v1alpha1.HistoricalSummary + 39, // 29: ethereum.eth.v1alpha1.BeaconStateGloas.pending_deposits:type_name -> ethereum.eth.v1alpha1.PendingDeposit + 40, // 30: ethereum.eth.v1alpha1.BeaconStateGloas.pending_partial_withdrawals:type_name -> ethereum.eth.v1alpha1.PendingPartialWithdrawal + 41, // 31: ethereum.eth.v1alpha1.BeaconStateGloas.pending_consolidations:type_name -> ethereum.eth.v1alpha1.PendingConsolidation + 23, // 32: ethereum.eth.v1alpha1.BeaconStateGloas.builders:type_name -> ethereum.eth.v1alpha1.Builder 15, // 33: ethereum.eth.v1alpha1.BeaconStateGloas.builder_pending_payments:type_name -> ethereum.eth.v1alpha1.BuilderPendingPayment 16, // 34: ethereum.eth.v1alpha1.BeaconStateGloas.builder_pending_withdrawals:type_name -> ethereum.eth.v1alpha1.BuilderPendingWithdrawal 0, // 35: ethereum.eth.v1alpha1.BeaconStateGloas.latest_execution_payload_bid:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadBid - 44, // 36: ethereum.eth.v1alpha1.BeaconStateGloas.payload_expected_withdrawals:type_name -> ethereum.engine.v1.Withdrawal + 42, // 36: ethereum.eth.v1alpha1.BeaconStateGloas.payload_expected_withdrawals:type_name -> ethereum.engine.v1.Withdrawal 12, // 37: ethereum.eth.v1alpha1.BeaconStateGloas.ptc_window:type_name -> ethereum.eth.v1alpha1.PTCs 8, // 38: ethereum.eth.v1alpha1.BeaconBlockContentsGloas.block:type_name -> ethereum.eth.v1alpha1.BeaconBlockGloas 18, // 39: ethereum.eth.v1alpha1.BeaconBlockContentsGloas.execution_payload_envelope:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadEnvelope 19, // 40: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelopeContents.signed_execution_payload_envelope:type_name -> ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelope 16, // 41: ethereum.eth.v1alpha1.BuilderPendingPayment.withdrawal:type_name -> ethereum.eth.v1alpha1.BuilderPendingWithdrawal - 45, // 42: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope.payload:type_name -> ethereum.engine.v1.ExecutionPayloadGloas - 34, // 43: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope.execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas + 43, // 42: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope.payload:type_name -> ethereum.engine.v1.ExecutionPayloadGloas + 32, // 43: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope.execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas 18, // 44: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelope.message:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadEnvelope - 34, // 45: ethereum.eth.v1alpha1.BlindedExecutionPayloadEnvelope.execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas + 32, // 45: ethereum.eth.v1alpha1.BlindedExecutionPayloadEnvelope.execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas 20, // 46: ethereum.eth.v1alpha1.SignedBlindedExecutionPayloadEnvelope.message:type_name -> ethereum.eth.v1alpha1.BlindedExecutionPayloadEnvelope - 34, // 47: ethereum.eth.v1alpha1.WireBlindedExecutionPayloadEnvelope.execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas - 22, // 48: ethereum.eth.v1alpha1.SignedWireBlindedExecutionPayloadEnvelope.message:type_name -> ethereum.eth.v1alpha1.WireBlindedExecutionPayloadEnvelope - 14, // 49: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope.contents:type_name -> ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelopeContents - 23, // 50: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope.blinded:type_name -> ethereum.eth.v1alpha1.SignedWireBlindedExecutionPayloadEnvelope - 51, // [51:51] is the sub-list for method output_type - 51, // [51:51] is the sub-list for method input_type - 51, // [51:51] is the sub-list for extension type_name - 51, // [51:51] is the sub-list for extension extendee - 0, // [0:51] is the sub-list for field type_name + 14, // 47: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope.contents:type_name -> ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelopeContents + 19, // 48: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope.signed_envelope:type_name -> ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelope + 49, // [49:49] is the sub-list for method output_type + 49, // [49:49] is the sub-list for method input_type + 49, // [49:49] is the sub-list for extension type_name + 49, // [49:49] is the sub-list for extension extendee + 0, // [0:49] is the sub-list for field type_name } func init() { file_proto_prysm_v1alpha1_gloas_proto_init() } @@ -3105,9 +2937,9 @@ func file_proto_prysm_v1alpha1_gloas_proto_init() { file_proto_prysm_v1alpha1_withdrawals_proto_init() file_proto_prysm_v1alpha1_beacon_core_types_proto_init() file_proto_prysm_v1alpha1_eip_7251_proto_init() - file_proto_prysm_v1alpha1_gloas_proto_msgTypes[24].OneofWrappers = []any{ + file_proto_prysm_v1alpha1_gloas_proto_msgTypes[22].OneofWrappers = []any{ (*GenericSignedExecutionPayloadEnvelope_Contents)(nil), - (*GenericSignedExecutionPayloadEnvelope_Blinded)(nil), + (*GenericSignedExecutionPayloadEnvelope_SignedEnvelope)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -3115,7 +2947,7 @@ func file_proto_prysm_v1alpha1_gloas_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_prysm_v1alpha1_gloas_proto_rawDesc, NumEnums: 0, - NumMessages: 26, + NumMessages: 24, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/prysm/v1alpha1/gloas.minimal.ssz.go b/proto/prysm/v1alpha1/gloas.minimal.ssz.go index 121da4fcd65b..fa5c4f2c75d3 100644 --- a/proto/prysm/v1alpha1/gloas.minimal.ssz.go +++ b/proto/prysm/v1alpha1/gloas.minimal.ssz.go @@ -4695,273 +4695,6 @@ func (s *SignedBlindedExecutionPayloadEnvelope) HashTreeRootWith(hh *ssz.Hasher) return } -// MarshalSSZ ssz marshals the WireBlindedExecutionPayloadEnvelope object -func (w *WireBlindedExecutionPayloadEnvelope) MarshalSSZ() ([]byte, error) { - return ssz.MarshalSSZ(w) -} - -// MarshalSSZTo ssz marshals the WireBlindedExecutionPayloadEnvelope object to a target array -func (w *WireBlindedExecutionPayloadEnvelope) MarshalSSZTo(buf []byte) (dst []byte, err error) { - dst = buf - offset := int(108) - - // Field (0) 'PayloadRoot' - if size := len(w.PayloadRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.PayloadRoot", size, 32) - return - } - dst = append(dst, w.PayloadRoot...) - - // Offset (1) 'ExecutionRequests' - dst = ssz.WriteOffset(dst, offset) - if w.ExecutionRequests == nil { - w.ExecutionRequests = new(v1.ExecutionRequestsGloas) - } - offset += w.ExecutionRequests.SizeSSZ() - - // Field (2) 'BuilderIndex' - dst = ssz.MarshalUint(dst, w.BuilderIndex) - - // Field (3) 'BeaconBlockRoot' - if size := len(w.BeaconBlockRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.BeaconBlockRoot", size, 32) - return - } - dst = append(dst, w.BeaconBlockRoot...) - - // Field (4) 'ParentBeaconBlockRoot' - if size := len(w.ParentBeaconBlockRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.ParentBeaconBlockRoot", size, 32) - return - } - dst = append(dst, w.ParentBeaconBlockRoot...) - - // Field (1) 'ExecutionRequests' - if dst, err = w.ExecutionRequests.MarshalSSZTo(dst); err != nil { - return - } - - return -} - -// UnmarshalSSZ ssz unmarshals the WireBlindedExecutionPayloadEnvelope object -func (w *WireBlindedExecutionPayloadEnvelope) UnmarshalSSZ(buf []byte) error { - var err error - size := uint64(len(buf)) - if size < 108 { - return ssz.ErrSize - } - - tail := buf - var o1 uint64 - - // Field (0) 'PayloadRoot' - if cap(w.PayloadRoot) == 0 { - w.PayloadRoot = make([]byte, 0, len(buf[0:32])) - } - w.PayloadRoot = append(w.PayloadRoot, buf[0:32]...) - - // Offset (1) 'ExecutionRequests' - if o1 = ssz.ReadOffset(buf[32:36]); o1 > size { - return ssz.ErrOffset - } - - if o1 != 108 { - return ssz.ErrInvalidVariableOffset - } - - // Field (2) 'BuilderIndex' - w.BuilderIndex = ssz.UnmarshallUint[github_com_OffchainLabs_prysm_v7_consensus_types_primitives.BuilderIndex](buf[36:44]) - - // Field (3) 'BeaconBlockRoot' - if cap(w.BeaconBlockRoot) == 0 { - w.BeaconBlockRoot = make([]byte, 0, len(buf[44:76])) - } - w.BeaconBlockRoot = append(w.BeaconBlockRoot, buf[44:76]...) - - // Field (4) 'ParentBeaconBlockRoot' - if cap(w.ParentBeaconBlockRoot) == 0 { - w.ParentBeaconBlockRoot = make([]byte, 0, len(buf[76:108])) - } - w.ParentBeaconBlockRoot = append(w.ParentBeaconBlockRoot, buf[76:108]...) - - // Field (1) 'ExecutionRequests' - { - buf = tail[o1:] - if w.ExecutionRequests == nil { - w.ExecutionRequests = new(v1.ExecutionRequestsGloas) - } - if err = w.ExecutionRequests.UnmarshalSSZ(buf); err != nil { - return err - } - } - return err -} - -// SizeSSZ returns the ssz encoded size in bytes for the WireBlindedExecutionPayloadEnvelope object -func (w *WireBlindedExecutionPayloadEnvelope) SizeSSZ() (size int) { - size = 108 - - // Field (1) 'ExecutionRequests' - if w.ExecutionRequests == nil { - w.ExecutionRequests = new(v1.ExecutionRequestsGloas) - } - size += w.ExecutionRequests.SizeSSZ() - - return -} - -// HashTreeRoot ssz hashes the WireBlindedExecutionPayloadEnvelope object -func (w *WireBlindedExecutionPayloadEnvelope) HashTreeRoot() ([32]byte, error) { - return ssz.HashWithDefaultHasher(w) -} - -// HashTreeRootWith ssz hashes the WireBlindedExecutionPayloadEnvelope object with a hasher -func (w *WireBlindedExecutionPayloadEnvelope) HashTreeRootWith(hh *ssz.Hasher) (err error) { - indx := hh.Index() - - // Field (0) 'PayloadRoot' - if size := len(w.PayloadRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.PayloadRoot", size, 32) - return - } - hh.PutBytes(w.PayloadRoot) - - // Field (1) 'ExecutionRequests' - if err = w.ExecutionRequests.HashTreeRootWith(hh); err != nil { - return - } - - // Field (2) 'BuilderIndex' - ssz.PutUint(hh, w.BuilderIndex) - - // Field (3) 'BeaconBlockRoot' - if size := len(w.BeaconBlockRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.BeaconBlockRoot", size, 32) - return - } - hh.PutBytes(w.BeaconBlockRoot) - - // Field (4) 'ParentBeaconBlockRoot' - if size := len(w.ParentBeaconBlockRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.ParentBeaconBlockRoot", size, 32) - return - } - hh.PutBytes(w.ParentBeaconBlockRoot) - - hh.Merkleize(indx) - return -} - -// MarshalSSZ ssz marshals the SignedWireBlindedExecutionPayloadEnvelope object -func (s *SignedWireBlindedExecutionPayloadEnvelope) MarshalSSZ() ([]byte, error) { - return ssz.MarshalSSZ(s) -} - -// MarshalSSZTo ssz marshals the SignedWireBlindedExecutionPayloadEnvelope object to a target array -func (s *SignedWireBlindedExecutionPayloadEnvelope) MarshalSSZTo(buf []byte) (dst []byte, err error) { - dst = buf - offset := int(100) - - // Offset (0) 'Message' - dst = ssz.WriteOffset(dst, offset) - if s.Message == nil { - s.Message = new(WireBlindedExecutionPayloadEnvelope) - } - offset += s.Message.SizeSSZ() - - // Field (1) 'Signature' - if size := len(s.Signature); size != 96 { - err = ssz.ErrBytesLengthFn("--.Signature", size, 96) - return - } - dst = append(dst, s.Signature...) - - // Field (0) 'Message' - if dst, err = s.Message.MarshalSSZTo(dst); err != nil { - return - } - - return -} - -// UnmarshalSSZ ssz unmarshals the SignedWireBlindedExecutionPayloadEnvelope object -func (s *SignedWireBlindedExecutionPayloadEnvelope) UnmarshalSSZ(buf []byte) error { - var err error - size := uint64(len(buf)) - if size < 100 { - return ssz.ErrSize - } - - tail := buf - var o0 uint64 - - // Offset (0) 'Message' - if o0 = ssz.ReadOffset(buf[0:4]); o0 > size { - return ssz.ErrOffset - } - - if o0 != 100 { - return ssz.ErrInvalidVariableOffset - } - - // Field (1) 'Signature' - if cap(s.Signature) == 0 { - s.Signature = make([]byte, 0, len(buf[4:100])) - } - s.Signature = append(s.Signature, buf[4:100]...) - - // Field (0) 'Message' - { - buf = tail[o0:] - if s.Message == nil { - s.Message = new(WireBlindedExecutionPayloadEnvelope) - } - if err = s.Message.UnmarshalSSZ(buf); err != nil { - return err - } - } - return err -} - -// SizeSSZ returns the ssz encoded size in bytes for the SignedWireBlindedExecutionPayloadEnvelope object -func (s *SignedWireBlindedExecutionPayloadEnvelope) SizeSSZ() (size int) { - size = 100 - - // Field (0) 'Message' - if s.Message == nil { - s.Message = new(WireBlindedExecutionPayloadEnvelope) - } - size += s.Message.SizeSSZ() - - return -} - -// HashTreeRoot ssz hashes the SignedWireBlindedExecutionPayloadEnvelope object -func (s *SignedWireBlindedExecutionPayloadEnvelope) HashTreeRoot() ([32]byte, error) { - return ssz.HashWithDefaultHasher(s) -} - -// HashTreeRootWith ssz hashes the SignedWireBlindedExecutionPayloadEnvelope object with a hasher -func (s *SignedWireBlindedExecutionPayloadEnvelope) HashTreeRootWith(hh *ssz.Hasher) (err error) { - indx := hh.Index() - - // Field (0) 'Message' - if err = s.Message.HashTreeRootWith(hh); err != nil { - return - } - - // Field (1) 'Signature' - if size := len(s.Signature); size != 96 { - err = ssz.ErrBytesLengthFn("--.Signature", size, 96) - return - } - hh.PutBytes(s.Signature) - - hh.Merkleize(indx) - return -} - // MarshalSSZ ssz marshals the Builder object func (b *Builder) MarshalSSZ() ([]byte, error) { return ssz.MarshalSSZ(b) diff --git a/proto/prysm/v1alpha1/gloas.pb.go b/proto/prysm/v1alpha1/gloas.pb.go index a97e6a434f74..cfff28ea79d1 100755 --- a/proto/prysm/v1alpha1/gloas.pb.go +++ b/proto/prysm/v1alpha1/gloas.pb.go @@ -1883,140 +1883,12 @@ func (x *SignedBlindedExecutionPayloadEnvelope) GetSignature() []byte { return nil } -type WireBlindedExecutionPayloadEnvelope struct { - state protoimpl.MessageState `protogen:"open.v1"` - PayloadRoot []byte `protobuf:"bytes,1,opt,name=payload_root,json=payloadRoot,proto3" json:"payload_root,omitempty" ssz-size:"32"` - ExecutionRequests *v1.ExecutionRequestsGloas `protobuf:"bytes,2,opt,name=execution_requests,json=executionRequests,proto3" json:"execution_requests,omitempty"` - BuilderIndex github_com_OffchainLabs_prysm_v7_consensus_types_primitives.BuilderIndex `protobuf:"varint,3,opt,name=builder_index,json=builderIndex,proto3" json:"builder_index,omitempty" cast-type:"github.com/OffchainLabs/prysm/v7/consensus-types/primitives.BuilderIndex"` - BeaconBlockRoot []byte `protobuf:"bytes,4,opt,name=beacon_block_root,json=beaconBlockRoot,proto3" json:"beacon_block_root,omitempty" ssz-size:"32"` - ParentBeaconBlockRoot []byte `protobuf:"bytes,5,opt,name=parent_beacon_block_root,json=parentBeaconBlockRoot,proto3" json:"parent_beacon_block_root,omitempty" ssz-size:"32"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *WireBlindedExecutionPayloadEnvelope) Reset() { - *x = WireBlindedExecutionPayloadEnvelope{} - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *WireBlindedExecutionPayloadEnvelope) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WireBlindedExecutionPayloadEnvelope) ProtoMessage() {} - -func (x *WireBlindedExecutionPayloadEnvelope) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[22] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WireBlindedExecutionPayloadEnvelope.ProtoReflect.Descriptor instead. -func (*WireBlindedExecutionPayloadEnvelope) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{22} -} - -func (x *WireBlindedExecutionPayloadEnvelope) GetPayloadRoot() []byte { - if x != nil { - return x.PayloadRoot - } - return nil -} - -func (x *WireBlindedExecutionPayloadEnvelope) GetExecutionRequests() *v1.ExecutionRequestsGloas { - if x != nil { - return x.ExecutionRequests - } - return nil -} - -func (x *WireBlindedExecutionPayloadEnvelope) GetBuilderIndex() github_com_OffchainLabs_prysm_v7_consensus_types_primitives.BuilderIndex { - if x != nil { - return x.BuilderIndex - } - return github_com_OffchainLabs_prysm_v7_consensus_types_primitives.BuilderIndex(0) -} - -func (x *WireBlindedExecutionPayloadEnvelope) GetBeaconBlockRoot() []byte { - if x != nil { - return x.BeaconBlockRoot - } - return nil -} - -func (x *WireBlindedExecutionPayloadEnvelope) GetParentBeaconBlockRoot() []byte { - if x != nil { - return x.ParentBeaconBlockRoot - } - return nil -} - -type SignedWireBlindedExecutionPayloadEnvelope struct { - state protoimpl.MessageState `protogen:"open.v1"` - Message *WireBlindedExecutionPayloadEnvelope `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty" ssz-size:"96"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *SignedWireBlindedExecutionPayloadEnvelope) Reset() { - *x = SignedWireBlindedExecutionPayloadEnvelope{} - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SignedWireBlindedExecutionPayloadEnvelope) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignedWireBlindedExecutionPayloadEnvelope) ProtoMessage() {} - -func (x *SignedWireBlindedExecutionPayloadEnvelope) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[23] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SignedWireBlindedExecutionPayloadEnvelope.ProtoReflect.Descriptor instead. -func (*SignedWireBlindedExecutionPayloadEnvelope) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{23} -} - -func (x *SignedWireBlindedExecutionPayloadEnvelope) GetMessage() *WireBlindedExecutionPayloadEnvelope { - if x != nil { - return x.Message - } - return nil -} - -func (x *SignedWireBlindedExecutionPayloadEnvelope) GetSignature() []byte { - if x != nil { - return x.Signature - } - return nil -} - type GenericSignedExecutionPayloadEnvelope struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Envelope: // // *GenericSignedExecutionPayloadEnvelope_Contents - // *GenericSignedExecutionPayloadEnvelope_Blinded + // *GenericSignedExecutionPayloadEnvelope_SignedEnvelope Envelope isGenericSignedExecutionPayloadEnvelope_Envelope `protobuf_oneof:"envelope"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -2024,7 +1896,7 @@ type GenericSignedExecutionPayloadEnvelope struct { func (x *GenericSignedExecutionPayloadEnvelope) Reset() { *x = GenericSignedExecutionPayloadEnvelope{} - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[24] + mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2036,7 +1908,7 @@ func (x *GenericSignedExecutionPayloadEnvelope) String() string { func (*GenericSignedExecutionPayloadEnvelope) ProtoMessage() {} func (x *GenericSignedExecutionPayloadEnvelope) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[24] + mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2049,7 +1921,7 @@ func (x *GenericSignedExecutionPayloadEnvelope) ProtoReflect() protoreflect.Mess // Deprecated: Use GenericSignedExecutionPayloadEnvelope.ProtoReflect.Descriptor instead. func (*GenericSignedExecutionPayloadEnvelope) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{24} + return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{22} } func (x *GenericSignedExecutionPayloadEnvelope) GetEnvelope() isGenericSignedExecutionPayloadEnvelope_Envelope { @@ -2068,10 +1940,10 @@ func (x *GenericSignedExecutionPayloadEnvelope) GetContents() *SignedExecutionPa return nil } -func (x *GenericSignedExecutionPayloadEnvelope) GetBlinded() *SignedWireBlindedExecutionPayloadEnvelope { +func (x *GenericSignedExecutionPayloadEnvelope) GetSignedEnvelope() *SignedExecutionPayloadEnvelope { if x != nil { - if x, ok := x.Envelope.(*GenericSignedExecutionPayloadEnvelope_Blinded); ok { - return x.Blinded + if x, ok := x.Envelope.(*GenericSignedExecutionPayloadEnvelope_SignedEnvelope); ok { + return x.SignedEnvelope } } return nil @@ -2085,14 +1957,14 @@ type GenericSignedExecutionPayloadEnvelope_Contents struct { Contents *SignedExecutionPayloadEnvelopeContents `protobuf:"bytes,1,opt,name=contents,proto3,oneof"` } -type GenericSignedExecutionPayloadEnvelope_Blinded struct { - Blinded *SignedWireBlindedExecutionPayloadEnvelope `protobuf:"bytes,2,opt,name=blinded,proto3,oneof"` +type GenericSignedExecutionPayloadEnvelope_SignedEnvelope struct { + SignedEnvelope *SignedExecutionPayloadEnvelope `protobuf:"bytes,2,opt,name=signed_envelope,json=signedEnvelope,proto3,oneof"` } func (*GenericSignedExecutionPayloadEnvelope_Contents) isGenericSignedExecutionPayloadEnvelope_Envelope() { } -func (*GenericSignedExecutionPayloadEnvelope_Blinded) isGenericSignedExecutionPayloadEnvelope_Envelope() { +func (*GenericSignedExecutionPayloadEnvelope_SignedEnvelope) isGenericSignedExecutionPayloadEnvelope_Envelope() { } type Builder struct { @@ -2109,7 +1981,7 @@ type Builder struct { func (x *Builder) Reset() { *x = Builder{} - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[25] + mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2121,7 +1993,7 @@ func (x *Builder) String() string { func (*Builder) ProtoMessage() {} func (x *Builder) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[25] + mi := &file_proto_prysm_v1alpha1_gloas_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2134,7 +2006,7 @@ func (x *Builder) ProtoReflect() protoreflect.Message { // Deprecated: Use Builder.ProtoReflect.Descriptor instead. func (*Builder) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{25} + return file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP(), []int{23} } func (x *Builder) GetPubkey() []byte { @@ -2891,43 +2763,7 @@ var file_proto_prysm_v1alpha1_gloas_proto_rawDesc = []byte{ 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 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, 0x22, 0x93, - 0x03, 0x0a, 0x23, 0x57, 0x69, 0x72, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, - 0x18, 0x02, 0x33, 0x32, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x6f, 0x6f, - 0x74, 0x12, 0x59, 0x0a, 0x12, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x47, 0x6c, 0x6f, 0x61, 0x73, 0x52, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x71, 0x0a, 0x0d, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x42, 0x4c, 0x82, 0xb5, 0x18, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, - 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x52, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x32, 0x0a, 0x11, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, - 0x33, 0x32, 0x52, 0x0f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, - 0x6f, 0x6f, 0x74, 0x12, 0x3f, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x15, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x6f, 0x6f, 0x74, 0x22, 0xa7, 0x01, 0x0a, 0x29, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x57, - 0x69, 0x72, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, - 0x70, 0x65, 0x12, 0x54, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x72, 0x65, - 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 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, 0x22, 0xee, + 0x02, 0x39, 0x36, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xf2, 0x01, 0x0a, 0x25, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x5b, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, @@ -2936,46 +2772,46 @@ var file_proto_prysm_v1alpha1_gloas_proto_rawDesc = []byte{ 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5c, 0x0a, 0x07, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x57, 0x69, 0x72, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x48, 0x00, 0x52, 0x07, 0x62, 0x6c, 0x69, 0x6e, - 0x64, 0x65, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x22, - 0xc1, 0x03, 0x0a, 0x07, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x06, 0x70, - 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, - 0x02, 0x34, 0x38, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x05, 0x8a, 0xb5, - 0x18, 0x01, 0x31, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x11, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x32, 0x30, 0x52, - 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x5e, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x42, 0x44, 0x82, 0xb5, 0x18, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, - 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x47, 0x77, 0x65, 0x69, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x12, 0x6a, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0x45, 0x82, 0xb5, 0x18, 0x41, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, - 0x0c, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x74, 0x0a, - 0x12, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x70, - 0x6f, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x42, 0x45, 0x82, 0xb5, 0x18, 0x41, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x45, 0x70, 0x6f, 0x63, 0x68, - 0x52, 0x11, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, - 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, - 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x65, 0x74, 0x68, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x0f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, + 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, + 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, + 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, + 0x6f, 0x70, 0x65, 0x22, 0xc1, 0x03, 0x0a, 0x07, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, + 0x1e, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, + 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x34, 0x38, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, + 0x1f, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x42, 0x05, 0x8a, 0xb5, 0x18, 0x01, 0x31, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x33, 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, + 0x02, 0x32, 0x30, 0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x5e, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x42, 0x44, 0x82, 0xb5, 0x18, 0x40, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, + 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x47, 0x77, 0x65, 0x69, 0x52, 0x07, 0x62, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0x45, 0x82, 0xb5, + 0x18, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, + 0x76, 0x37, 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, 0x45, 0x70, + 0x6f, 0x63, 0x68, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x45, 0x70, 0x6f, 0x63, + 0x68, 0x12, 0x74, 0x0a, 0x12, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x42, 0x45, 0x82, + 0xb5, 0x18, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, + 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, + 0x2f, 0x76, 0x37, 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, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x52, 0x11, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x62, + 0x6c, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, + 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x3b, 0x65, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2990,54 +2826,52 @@ func file_proto_prysm_v1alpha1_gloas_proto_rawDescGZIP() []byte { return file_proto_prysm_v1alpha1_gloas_proto_rawDescData } -var file_proto_prysm_v1alpha1_gloas_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_proto_prysm_v1alpha1_gloas_proto_msgTypes = make([]protoimpl.MessageInfo, 24) var file_proto_prysm_v1alpha1_gloas_proto_goTypes = []any{ - (*ExecutionPayloadBid)(nil), // 0: ethereum.eth.v1alpha1.ExecutionPayloadBid - (*SignedExecutionPayloadBid)(nil), // 1: ethereum.eth.v1alpha1.SignedExecutionPayloadBid - (*ProposerPreferences)(nil), // 2: ethereum.eth.v1alpha1.ProposerPreferences - (*SignedProposerPreferences)(nil), // 3: ethereum.eth.v1alpha1.SignedProposerPreferences - (*SubmitSignedProposerPreferencesRequest)(nil), // 4: ethereum.eth.v1alpha1.SubmitSignedProposerPreferencesRequest - (*PayloadAttestationData)(nil), // 5: ethereum.eth.v1alpha1.PayloadAttestationData - (*PayloadAttestation)(nil), // 6: ethereum.eth.v1alpha1.PayloadAttestation - (*PayloadAttestationMessage)(nil), // 7: ethereum.eth.v1alpha1.PayloadAttestationMessage - (*BeaconBlockGloas)(nil), // 8: ethereum.eth.v1alpha1.BeaconBlockGloas - (*BeaconBlockBodyGloas)(nil), // 9: ethereum.eth.v1alpha1.BeaconBlockBodyGloas - (*SignedBeaconBlockGloas)(nil), // 10: ethereum.eth.v1alpha1.SignedBeaconBlockGloas - (*BeaconStateGloas)(nil), // 11: ethereum.eth.v1alpha1.BeaconStateGloas - (*PTCs)(nil), // 12: ethereum.eth.v1alpha1.PTCs - (*BeaconBlockContentsGloas)(nil), // 13: ethereum.eth.v1alpha1.BeaconBlockContentsGloas - (*SignedExecutionPayloadEnvelopeContents)(nil), // 14: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelopeContents - (*BuilderPendingPayment)(nil), // 15: ethereum.eth.v1alpha1.BuilderPendingPayment - (*BuilderPendingWithdrawal)(nil), // 16: ethereum.eth.v1alpha1.BuilderPendingWithdrawal - (*DataColumnSidecarGloas)(nil), // 17: ethereum.eth.v1alpha1.DataColumnSidecarGloas - (*ExecutionPayloadEnvelope)(nil), // 18: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope - (*SignedExecutionPayloadEnvelope)(nil), // 19: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelope - (*BlindedExecutionPayloadEnvelope)(nil), // 20: ethereum.eth.v1alpha1.BlindedExecutionPayloadEnvelope - (*SignedBlindedExecutionPayloadEnvelope)(nil), // 21: ethereum.eth.v1alpha1.SignedBlindedExecutionPayloadEnvelope - (*WireBlindedExecutionPayloadEnvelope)(nil), // 22: ethereum.eth.v1alpha1.WireBlindedExecutionPayloadEnvelope - (*SignedWireBlindedExecutionPayloadEnvelope)(nil), // 23: ethereum.eth.v1alpha1.SignedWireBlindedExecutionPayloadEnvelope - (*GenericSignedExecutionPayloadEnvelope)(nil), // 24: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope - (*Builder)(nil), // 25: ethereum.eth.v1alpha1.Builder - (*Eth1Data)(nil), // 26: ethereum.eth.v1alpha1.Eth1Data - (*ProposerSlashing)(nil), // 27: ethereum.eth.v1alpha1.ProposerSlashing - (*AttesterSlashingElectra)(nil), // 28: ethereum.eth.v1alpha1.AttesterSlashingElectra - (*AttestationElectra)(nil), // 29: ethereum.eth.v1alpha1.AttestationElectra - (*Deposit)(nil), // 30: ethereum.eth.v1alpha1.Deposit - (*SignedVoluntaryExit)(nil), // 31: ethereum.eth.v1alpha1.SignedVoluntaryExit - (*SyncAggregate)(nil), // 32: ethereum.eth.v1alpha1.SyncAggregate - (*SignedBLSToExecutionChange)(nil), // 33: ethereum.eth.v1alpha1.SignedBLSToExecutionChange - (*v1.ExecutionRequestsGloas)(nil), // 34: ethereum.engine.v1.ExecutionRequestsGloas - (*Fork)(nil), // 35: ethereum.eth.v1alpha1.Fork - (*BeaconBlockHeader)(nil), // 36: ethereum.eth.v1alpha1.BeaconBlockHeader - (*Validator)(nil), // 37: ethereum.eth.v1alpha1.Validator - (*Checkpoint)(nil), // 38: ethereum.eth.v1alpha1.Checkpoint - (*SyncCommittee)(nil), // 39: ethereum.eth.v1alpha1.SyncCommittee - (*HistoricalSummary)(nil), // 40: ethereum.eth.v1alpha1.HistoricalSummary - (*PendingDeposit)(nil), // 41: ethereum.eth.v1alpha1.PendingDeposit - (*PendingPartialWithdrawal)(nil), // 42: ethereum.eth.v1alpha1.PendingPartialWithdrawal - (*PendingConsolidation)(nil), // 43: ethereum.eth.v1alpha1.PendingConsolidation - (*v1.Withdrawal)(nil), // 44: ethereum.engine.v1.Withdrawal - (*v1.ExecutionPayloadGloas)(nil), // 45: ethereum.engine.v1.ExecutionPayloadGloas + (*ExecutionPayloadBid)(nil), // 0: ethereum.eth.v1alpha1.ExecutionPayloadBid + (*SignedExecutionPayloadBid)(nil), // 1: ethereum.eth.v1alpha1.SignedExecutionPayloadBid + (*ProposerPreferences)(nil), // 2: ethereum.eth.v1alpha1.ProposerPreferences + (*SignedProposerPreferences)(nil), // 3: ethereum.eth.v1alpha1.SignedProposerPreferences + (*SubmitSignedProposerPreferencesRequest)(nil), // 4: ethereum.eth.v1alpha1.SubmitSignedProposerPreferencesRequest + (*PayloadAttestationData)(nil), // 5: ethereum.eth.v1alpha1.PayloadAttestationData + (*PayloadAttestation)(nil), // 6: ethereum.eth.v1alpha1.PayloadAttestation + (*PayloadAttestationMessage)(nil), // 7: ethereum.eth.v1alpha1.PayloadAttestationMessage + (*BeaconBlockGloas)(nil), // 8: ethereum.eth.v1alpha1.BeaconBlockGloas + (*BeaconBlockBodyGloas)(nil), // 9: ethereum.eth.v1alpha1.BeaconBlockBodyGloas + (*SignedBeaconBlockGloas)(nil), // 10: ethereum.eth.v1alpha1.SignedBeaconBlockGloas + (*BeaconStateGloas)(nil), // 11: ethereum.eth.v1alpha1.BeaconStateGloas + (*PTCs)(nil), // 12: ethereum.eth.v1alpha1.PTCs + (*BeaconBlockContentsGloas)(nil), // 13: ethereum.eth.v1alpha1.BeaconBlockContentsGloas + (*SignedExecutionPayloadEnvelopeContents)(nil), // 14: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelopeContents + (*BuilderPendingPayment)(nil), // 15: ethereum.eth.v1alpha1.BuilderPendingPayment + (*BuilderPendingWithdrawal)(nil), // 16: ethereum.eth.v1alpha1.BuilderPendingWithdrawal + (*DataColumnSidecarGloas)(nil), // 17: ethereum.eth.v1alpha1.DataColumnSidecarGloas + (*ExecutionPayloadEnvelope)(nil), // 18: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope + (*SignedExecutionPayloadEnvelope)(nil), // 19: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelope + (*BlindedExecutionPayloadEnvelope)(nil), // 20: ethereum.eth.v1alpha1.BlindedExecutionPayloadEnvelope + (*SignedBlindedExecutionPayloadEnvelope)(nil), // 21: ethereum.eth.v1alpha1.SignedBlindedExecutionPayloadEnvelope + (*GenericSignedExecutionPayloadEnvelope)(nil), // 22: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope + (*Builder)(nil), // 23: ethereum.eth.v1alpha1.Builder + (*Eth1Data)(nil), // 24: ethereum.eth.v1alpha1.Eth1Data + (*ProposerSlashing)(nil), // 25: ethereum.eth.v1alpha1.ProposerSlashing + (*AttesterSlashingElectra)(nil), // 26: ethereum.eth.v1alpha1.AttesterSlashingElectra + (*AttestationElectra)(nil), // 27: ethereum.eth.v1alpha1.AttestationElectra + (*Deposit)(nil), // 28: ethereum.eth.v1alpha1.Deposit + (*SignedVoluntaryExit)(nil), // 29: ethereum.eth.v1alpha1.SignedVoluntaryExit + (*SyncAggregate)(nil), // 30: ethereum.eth.v1alpha1.SyncAggregate + (*SignedBLSToExecutionChange)(nil), // 31: ethereum.eth.v1alpha1.SignedBLSToExecutionChange + (*v1.ExecutionRequestsGloas)(nil), // 32: ethereum.engine.v1.ExecutionRequestsGloas + (*Fork)(nil), // 33: ethereum.eth.v1alpha1.Fork + (*BeaconBlockHeader)(nil), // 34: ethereum.eth.v1alpha1.BeaconBlockHeader + (*Validator)(nil), // 35: ethereum.eth.v1alpha1.Validator + (*Checkpoint)(nil), // 36: ethereum.eth.v1alpha1.Checkpoint + (*SyncCommittee)(nil), // 37: ethereum.eth.v1alpha1.SyncCommittee + (*HistoricalSummary)(nil), // 38: ethereum.eth.v1alpha1.HistoricalSummary + (*PendingDeposit)(nil), // 39: ethereum.eth.v1alpha1.PendingDeposit + (*PendingPartialWithdrawal)(nil), // 40: ethereum.eth.v1alpha1.PendingPartialWithdrawal + (*PendingConsolidation)(nil), // 41: ethereum.eth.v1alpha1.PendingConsolidation + (*v1.Withdrawal)(nil), // 42: ethereum.engine.v1.Withdrawal + (*v1.ExecutionPayloadGloas)(nil), // 43: ethereum.engine.v1.ExecutionPayloadGloas } var file_proto_prysm_v1alpha1_gloas_proto_depIdxs = []int32{ 0, // 0: ethereum.eth.v1alpha1.SignedExecutionPayloadBid.message:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadBid @@ -3046,56 +2880,54 @@ var file_proto_prysm_v1alpha1_gloas_proto_depIdxs = []int32{ 5, // 3: ethereum.eth.v1alpha1.PayloadAttestation.data:type_name -> ethereum.eth.v1alpha1.PayloadAttestationData 5, // 4: ethereum.eth.v1alpha1.PayloadAttestationMessage.data:type_name -> ethereum.eth.v1alpha1.PayloadAttestationData 9, // 5: ethereum.eth.v1alpha1.BeaconBlockGloas.body:type_name -> ethereum.eth.v1alpha1.BeaconBlockBodyGloas - 26, // 6: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data - 27, // 7: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing - 28, // 8: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashingElectra - 29, // 9: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.attestations:type_name -> ethereum.eth.v1alpha1.AttestationElectra - 30, // 10: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.deposits:type_name -> ethereum.eth.v1alpha1.Deposit - 31, // 11: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit - 32, // 12: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.sync_aggregate:type_name -> ethereum.eth.v1alpha1.SyncAggregate - 33, // 13: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.bls_to_execution_changes:type_name -> ethereum.eth.v1alpha1.SignedBLSToExecutionChange + 24, // 6: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data + 25, // 7: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.proposer_slashings:type_name -> ethereum.eth.v1alpha1.ProposerSlashing + 26, // 8: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.attester_slashings:type_name -> ethereum.eth.v1alpha1.AttesterSlashingElectra + 27, // 9: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.attestations:type_name -> ethereum.eth.v1alpha1.AttestationElectra + 28, // 10: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.deposits:type_name -> ethereum.eth.v1alpha1.Deposit + 29, // 11: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.voluntary_exits:type_name -> ethereum.eth.v1alpha1.SignedVoluntaryExit + 30, // 12: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.sync_aggregate:type_name -> ethereum.eth.v1alpha1.SyncAggregate + 31, // 13: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.bls_to_execution_changes:type_name -> ethereum.eth.v1alpha1.SignedBLSToExecutionChange 1, // 14: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.signed_execution_payload_bid:type_name -> ethereum.eth.v1alpha1.SignedExecutionPayloadBid 6, // 15: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.payload_attestations:type_name -> ethereum.eth.v1alpha1.PayloadAttestation - 34, // 16: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.parent_execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas + 32, // 16: ethereum.eth.v1alpha1.BeaconBlockBodyGloas.parent_execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas 8, // 17: ethereum.eth.v1alpha1.SignedBeaconBlockGloas.block:type_name -> ethereum.eth.v1alpha1.BeaconBlockGloas - 35, // 18: ethereum.eth.v1alpha1.BeaconStateGloas.fork:type_name -> ethereum.eth.v1alpha1.Fork - 36, // 19: ethereum.eth.v1alpha1.BeaconStateGloas.latest_block_header:type_name -> ethereum.eth.v1alpha1.BeaconBlockHeader - 26, // 20: ethereum.eth.v1alpha1.BeaconStateGloas.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data - 26, // 21: ethereum.eth.v1alpha1.BeaconStateGloas.eth1_data_votes:type_name -> ethereum.eth.v1alpha1.Eth1Data - 37, // 22: ethereum.eth.v1alpha1.BeaconStateGloas.validators:type_name -> ethereum.eth.v1alpha1.Validator - 38, // 23: ethereum.eth.v1alpha1.BeaconStateGloas.previous_justified_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint - 38, // 24: ethereum.eth.v1alpha1.BeaconStateGloas.current_justified_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint - 38, // 25: ethereum.eth.v1alpha1.BeaconStateGloas.finalized_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint - 39, // 26: ethereum.eth.v1alpha1.BeaconStateGloas.current_sync_committee:type_name -> ethereum.eth.v1alpha1.SyncCommittee - 39, // 27: ethereum.eth.v1alpha1.BeaconStateGloas.next_sync_committee:type_name -> ethereum.eth.v1alpha1.SyncCommittee - 40, // 28: ethereum.eth.v1alpha1.BeaconStateGloas.historical_summaries:type_name -> ethereum.eth.v1alpha1.HistoricalSummary - 41, // 29: ethereum.eth.v1alpha1.BeaconStateGloas.pending_deposits:type_name -> ethereum.eth.v1alpha1.PendingDeposit - 42, // 30: ethereum.eth.v1alpha1.BeaconStateGloas.pending_partial_withdrawals:type_name -> ethereum.eth.v1alpha1.PendingPartialWithdrawal - 43, // 31: ethereum.eth.v1alpha1.BeaconStateGloas.pending_consolidations:type_name -> ethereum.eth.v1alpha1.PendingConsolidation - 25, // 32: ethereum.eth.v1alpha1.BeaconStateGloas.builders:type_name -> ethereum.eth.v1alpha1.Builder + 33, // 18: ethereum.eth.v1alpha1.BeaconStateGloas.fork:type_name -> ethereum.eth.v1alpha1.Fork + 34, // 19: ethereum.eth.v1alpha1.BeaconStateGloas.latest_block_header:type_name -> ethereum.eth.v1alpha1.BeaconBlockHeader + 24, // 20: ethereum.eth.v1alpha1.BeaconStateGloas.eth1_data:type_name -> ethereum.eth.v1alpha1.Eth1Data + 24, // 21: ethereum.eth.v1alpha1.BeaconStateGloas.eth1_data_votes:type_name -> ethereum.eth.v1alpha1.Eth1Data + 35, // 22: ethereum.eth.v1alpha1.BeaconStateGloas.validators:type_name -> ethereum.eth.v1alpha1.Validator + 36, // 23: ethereum.eth.v1alpha1.BeaconStateGloas.previous_justified_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint + 36, // 24: ethereum.eth.v1alpha1.BeaconStateGloas.current_justified_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint + 36, // 25: ethereum.eth.v1alpha1.BeaconStateGloas.finalized_checkpoint:type_name -> ethereum.eth.v1alpha1.Checkpoint + 37, // 26: ethereum.eth.v1alpha1.BeaconStateGloas.current_sync_committee:type_name -> ethereum.eth.v1alpha1.SyncCommittee + 37, // 27: ethereum.eth.v1alpha1.BeaconStateGloas.next_sync_committee:type_name -> ethereum.eth.v1alpha1.SyncCommittee + 38, // 28: ethereum.eth.v1alpha1.BeaconStateGloas.historical_summaries:type_name -> ethereum.eth.v1alpha1.HistoricalSummary + 39, // 29: ethereum.eth.v1alpha1.BeaconStateGloas.pending_deposits:type_name -> ethereum.eth.v1alpha1.PendingDeposit + 40, // 30: ethereum.eth.v1alpha1.BeaconStateGloas.pending_partial_withdrawals:type_name -> ethereum.eth.v1alpha1.PendingPartialWithdrawal + 41, // 31: ethereum.eth.v1alpha1.BeaconStateGloas.pending_consolidations:type_name -> ethereum.eth.v1alpha1.PendingConsolidation + 23, // 32: ethereum.eth.v1alpha1.BeaconStateGloas.builders:type_name -> ethereum.eth.v1alpha1.Builder 15, // 33: ethereum.eth.v1alpha1.BeaconStateGloas.builder_pending_payments:type_name -> ethereum.eth.v1alpha1.BuilderPendingPayment 16, // 34: ethereum.eth.v1alpha1.BeaconStateGloas.builder_pending_withdrawals:type_name -> ethereum.eth.v1alpha1.BuilderPendingWithdrawal 0, // 35: ethereum.eth.v1alpha1.BeaconStateGloas.latest_execution_payload_bid:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadBid - 44, // 36: ethereum.eth.v1alpha1.BeaconStateGloas.payload_expected_withdrawals:type_name -> ethereum.engine.v1.Withdrawal + 42, // 36: ethereum.eth.v1alpha1.BeaconStateGloas.payload_expected_withdrawals:type_name -> ethereum.engine.v1.Withdrawal 12, // 37: ethereum.eth.v1alpha1.BeaconStateGloas.ptc_window:type_name -> ethereum.eth.v1alpha1.PTCs 8, // 38: ethereum.eth.v1alpha1.BeaconBlockContentsGloas.block:type_name -> ethereum.eth.v1alpha1.BeaconBlockGloas 18, // 39: ethereum.eth.v1alpha1.BeaconBlockContentsGloas.execution_payload_envelope:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadEnvelope 19, // 40: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelopeContents.signed_execution_payload_envelope:type_name -> ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelope 16, // 41: ethereum.eth.v1alpha1.BuilderPendingPayment.withdrawal:type_name -> ethereum.eth.v1alpha1.BuilderPendingWithdrawal - 45, // 42: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope.payload:type_name -> ethereum.engine.v1.ExecutionPayloadGloas - 34, // 43: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope.execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas + 43, // 42: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope.payload:type_name -> ethereum.engine.v1.ExecutionPayloadGloas + 32, // 43: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope.execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas 18, // 44: ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelope.message:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadEnvelope - 34, // 45: ethereum.eth.v1alpha1.BlindedExecutionPayloadEnvelope.execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas + 32, // 45: ethereum.eth.v1alpha1.BlindedExecutionPayloadEnvelope.execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas 20, // 46: ethereum.eth.v1alpha1.SignedBlindedExecutionPayloadEnvelope.message:type_name -> ethereum.eth.v1alpha1.BlindedExecutionPayloadEnvelope - 34, // 47: ethereum.eth.v1alpha1.WireBlindedExecutionPayloadEnvelope.execution_requests:type_name -> ethereum.engine.v1.ExecutionRequestsGloas - 22, // 48: ethereum.eth.v1alpha1.SignedWireBlindedExecutionPayloadEnvelope.message:type_name -> ethereum.eth.v1alpha1.WireBlindedExecutionPayloadEnvelope - 14, // 49: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope.contents:type_name -> ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelopeContents - 23, // 50: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope.blinded:type_name -> ethereum.eth.v1alpha1.SignedWireBlindedExecutionPayloadEnvelope - 51, // [51:51] is the sub-list for method output_type - 51, // [51:51] is the sub-list for method input_type - 51, // [51:51] is the sub-list for extension type_name - 51, // [51:51] is the sub-list for extension extendee - 0, // [0:51] is the sub-list for field type_name + 14, // 47: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope.contents:type_name -> ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelopeContents + 19, // 48: ethereum.eth.v1alpha1.GenericSignedExecutionPayloadEnvelope.signed_envelope:type_name -> ethereum.eth.v1alpha1.SignedExecutionPayloadEnvelope + 49, // [49:49] is the sub-list for method output_type + 49, // [49:49] is the sub-list for method input_type + 49, // [49:49] is the sub-list for extension type_name + 49, // [49:49] is the sub-list for extension extendee + 0, // [0:49] is the sub-list for field type_name } func init() { file_proto_prysm_v1alpha1_gloas_proto_init() } @@ -3107,9 +2939,9 @@ func file_proto_prysm_v1alpha1_gloas_proto_init() { file_proto_prysm_v1alpha1_withdrawals_proto_init() file_proto_prysm_v1alpha1_beacon_core_types_proto_init() file_proto_prysm_v1alpha1_eip_7251_proto_init() - file_proto_prysm_v1alpha1_gloas_proto_msgTypes[24].OneofWrappers = []any{ + file_proto_prysm_v1alpha1_gloas_proto_msgTypes[22].OneofWrappers = []any{ (*GenericSignedExecutionPayloadEnvelope_Contents)(nil), - (*GenericSignedExecutionPayloadEnvelope_Blinded)(nil), + (*GenericSignedExecutionPayloadEnvelope_SignedEnvelope)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -3117,7 +2949,7 @@ func file_proto_prysm_v1alpha1_gloas_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_prysm_v1alpha1_gloas_proto_rawDesc, NumEnums: 0, - NumMessages: 26, + NumMessages: 24, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/prysm/v1alpha1/gloas.proto b/proto/prysm/v1alpha1/gloas.proto index 695d5dac0e32..48ebdeb1c9ac 100644 --- a/proto/prysm/v1alpha1/gloas.proto +++ b/proto/prysm/v1alpha1/gloas.proto @@ -560,31 +560,12 @@ message SignedBlindedExecutionPayloadEnvelope { bytes signature = 2 [ (ethereum.eth.ext.ssz_size) = "96" ]; } -// WireBlindedExecutionPayloadEnvelope is the beacon-APIs #580 wire form: payload replaced by -// payload_root so HTR matches the full envelope. Distinct from the storage-form BlindedExecutionPayloadEnvelope above. -message WireBlindedExecutionPayloadEnvelope { - bytes payload_root = 1 [ (ethereum.eth.ext.ssz_size) = "32" ]; - ethereum.engine.v1.ExecutionRequestsGloas execution_requests = 2; - uint64 builder_index = 3 [ (ethereum.eth.ext.cast_type) = - "github.com/OffchainLabs/prysm/v7/" - "consensus-types/primitives.BuilderIndex" ]; - bytes beacon_block_root = 4 [ (ethereum.eth.ext.ssz_size) = "32" ]; - bytes parent_beacon_block_root = 5 [ (ethereum.eth.ext.ssz_size) = "32" ]; -} - -message SignedWireBlindedExecutionPayloadEnvelope { - WireBlindedExecutionPayloadEnvelope message = 1; - bytes signature = 2 [ (ethereum.eth.ext.ssz_size) = "96" ]; -} - -// GenericSignedExecutionPayloadEnvelope carries one of the two publish forms: the stateless -// contents (full envelope + blobs + proofs) or the stateful blinded envelope (payload_root, the BN -// reconstructs the full payload from its cache). One publish RPC accepts both, mirroring -// GenericSignedBeaconBlock. +// GenericSignedExecutionPayloadEnvelope carries either publish form: stateless contents (envelope +// + blobs + proofs) or the stateful bare envelope (BN attaches cached blob data). message GenericSignedExecutionPayloadEnvelope { oneof envelope { SignedExecutionPayloadEnvelopeContents contents = 1; - SignedWireBlindedExecutionPayloadEnvelope blinded = 2; + SignedExecutionPayloadEnvelope signed_envelope = 2; } } diff --git a/proto/prysm/v1alpha1/gloas.ssz.go b/proto/prysm/v1alpha1/gloas.ssz.go index bba6878703b8..28a70a26d52c 100644 --- a/proto/prysm/v1alpha1/gloas.ssz.go +++ b/proto/prysm/v1alpha1/gloas.ssz.go @@ -4695,273 +4695,6 @@ func (s *SignedBlindedExecutionPayloadEnvelope) HashTreeRootWith(hh *ssz.Hasher) return } -// MarshalSSZ ssz marshals the WireBlindedExecutionPayloadEnvelope object -func (w *WireBlindedExecutionPayloadEnvelope) MarshalSSZ() ([]byte, error) { - return ssz.MarshalSSZ(w) -} - -// MarshalSSZTo ssz marshals the WireBlindedExecutionPayloadEnvelope object to a target array -func (w *WireBlindedExecutionPayloadEnvelope) MarshalSSZTo(buf []byte) (dst []byte, err error) { - dst = buf - offset := int(108) - - // Field (0) 'PayloadRoot' - if size := len(w.PayloadRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.PayloadRoot", size, 32) - return - } - dst = append(dst, w.PayloadRoot...) - - // Offset (1) 'ExecutionRequests' - dst = ssz.WriteOffset(dst, offset) - if w.ExecutionRequests == nil { - w.ExecutionRequests = new(v1.ExecutionRequestsGloas) - } - offset += w.ExecutionRequests.SizeSSZ() - - // Field (2) 'BuilderIndex' - dst = ssz.MarshalUint(dst, w.BuilderIndex) - - // Field (3) 'BeaconBlockRoot' - if size := len(w.BeaconBlockRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.BeaconBlockRoot", size, 32) - return - } - dst = append(dst, w.BeaconBlockRoot...) - - // Field (4) 'ParentBeaconBlockRoot' - if size := len(w.ParentBeaconBlockRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.ParentBeaconBlockRoot", size, 32) - return - } - dst = append(dst, w.ParentBeaconBlockRoot...) - - // Field (1) 'ExecutionRequests' - if dst, err = w.ExecutionRequests.MarshalSSZTo(dst); err != nil { - return - } - - return -} - -// UnmarshalSSZ ssz unmarshals the WireBlindedExecutionPayloadEnvelope object -func (w *WireBlindedExecutionPayloadEnvelope) UnmarshalSSZ(buf []byte) error { - var err error - size := uint64(len(buf)) - if size < 108 { - return ssz.ErrSize - } - - tail := buf - var o1 uint64 - - // Field (0) 'PayloadRoot' - if cap(w.PayloadRoot) == 0 { - w.PayloadRoot = make([]byte, 0, len(buf[0:32])) - } - w.PayloadRoot = append(w.PayloadRoot, buf[0:32]...) - - // Offset (1) 'ExecutionRequests' - if o1 = ssz.ReadOffset(buf[32:36]); o1 > size { - return ssz.ErrOffset - } - - if o1 != 108 { - return ssz.ErrInvalidVariableOffset - } - - // Field (2) 'BuilderIndex' - w.BuilderIndex = ssz.UnmarshallUint[github_com_OffchainLabs_prysm_v7_consensus_types_primitives.BuilderIndex](buf[36:44]) - - // Field (3) 'BeaconBlockRoot' - if cap(w.BeaconBlockRoot) == 0 { - w.BeaconBlockRoot = make([]byte, 0, len(buf[44:76])) - } - w.BeaconBlockRoot = append(w.BeaconBlockRoot, buf[44:76]...) - - // Field (4) 'ParentBeaconBlockRoot' - if cap(w.ParentBeaconBlockRoot) == 0 { - w.ParentBeaconBlockRoot = make([]byte, 0, len(buf[76:108])) - } - w.ParentBeaconBlockRoot = append(w.ParentBeaconBlockRoot, buf[76:108]...) - - // Field (1) 'ExecutionRequests' - { - buf = tail[o1:] - if w.ExecutionRequests == nil { - w.ExecutionRequests = new(v1.ExecutionRequestsGloas) - } - if err = w.ExecutionRequests.UnmarshalSSZ(buf); err != nil { - return err - } - } - return err -} - -// SizeSSZ returns the ssz encoded size in bytes for the WireBlindedExecutionPayloadEnvelope object -func (w *WireBlindedExecutionPayloadEnvelope) SizeSSZ() (size int) { - size = 108 - - // Field (1) 'ExecutionRequests' - if w.ExecutionRequests == nil { - w.ExecutionRequests = new(v1.ExecutionRequestsGloas) - } - size += w.ExecutionRequests.SizeSSZ() - - return -} - -// HashTreeRoot ssz hashes the WireBlindedExecutionPayloadEnvelope object -func (w *WireBlindedExecutionPayloadEnvelope) HashTreeRoot() ([32]byte, error) { - return ssz.HashWithDefaultHasher(w) -} - -// HashTreeRootWith ssz hashes the WireBlindedExecutionPayloadEnvelope object with a hasher -func (w *WireBlindedExecutionPayloadEnvelope) HashTreeRootWith(hh *ssz.Hasher) (err error) { - indx := hh.Index() - - // Field (0) 'PayloadRoot' - if size := len(w.PayloadRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.PayloadRoot", size, 32) - return - } - hh.PutBytes(w.PayloadRoot) - - // Field (1) 'ExecutionRequests' - if err = w.ExecutionRequests.HashTreeRootWith(hh); err != nil { - return - } - - // Field (2) 'BuilderIndex' - ssz.PutUint(hh, w.BuilderIndex) - - // Field (3) 'BeaconBlockRoot' - if size := len(w.BeaconBlockRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.BeaconBlockRoot", size, 32) - return - } - hh.PutBytes(w.BeaconBlockRoot) - - // Field (4) 'ParentBeaconBlockRoot' - if size := len(w.ParentBeaconBlockRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.ParentBeaconBlockRoot", size, 32) - return - } - hh.PutBytes(w.ParentBeaconBlockRoot) - - hh.Merkleize(indx) - return -} - -// MarshalSSZ ssz marshals the SignedWireBlindedExecutionPayloadEnvelope object -func (s *SignedWireBlindedExecutionPayloadEnvelope) MarshalSSZ() ([]byte, error) { - return ssz.MarshalSSZ(s) -} - -// MarshalSSZTo ssz marshals the SignedWireBlindedExecutionPayloadEnvelope object to a target array -func (s *SignedWireBlindedExecutionPayloadEnvelope) MarshalSSZTo(buf []byte) (dst []byte, err error) { - dst = buf - offset := int(100) - - // Offset (0) 'Message' - dst = ssz.WriteOffset(dst, offset) - if s.Message == nil { - s.Message = new(WireBlindedExecutionPayloadEnvelope) - } - offset += s.Message.SizeSSZ() - - // Field (1) 'Signature' - if size := len(s.Signature); size != 96 { - err = ssz.ErrBytesLengthFn("--.Signature", size, 96) - return - } - dst = append(dst, s.Signature...) - - // Field (0) 'Message' - if dst, err = s.Message.MarshalSSZTo(dst); err != nil { - return - } - - return -} - -// UnmarshalSSZ ssz unmarshals the SignedWireBlindedExecutionPayloadEnvelope object -func (s *SignedWireBlindedExecutionPayloadEnvelope) UnmarshalSSZ(buf []byte) error { - var err error - size := uint64(len(buf)) - if size < 100 { - return ssz.ErrSize - } - - tail := buf - var o0 uint64 - - // Offset (0) 'Message' - if o0 = ssz.ReadOffset(buf[0:4]); o0 > size { - return ssz.ErrOffset - } - - if o0 != 100 { - return ssz.ErrInvalidVariableOffset - } - - // Field (1) 'Signature' - if cap(s.Signature) == 0 { - s.Signature = make([]byte, 0, len(buf[4:100])) - } - s.Signature = append(s.Signature, buf[4:100]...) - - // Field (0) 'Message' - { - buf = tail[o0:] - if s.Message == nil { - s.Message = new(WireBlindedExecutionPayloadEnvelope) - } - if err = s.Message.UnmarshalSSZ(buf); err != nil { - return err - } - } - return err -} - -// SizeSSZ returns the ssz encoded size in bytes for the SignedWireBlindedExecutionPayloadEnvelope object -func (s *SignedWireBlindedExecutionPayloadEnvelope) SizeSSZ() (size int) { - size = 100 - - // Field (0) 'Message' - if s.Message == nil { - s.Message = new(WireBlindedExecutionPayloadEnvelope) - } - size += s.Message.SizeSSZ() - - return -} - -// HashTreeRoot ssz hashes the SignedWireBlindedExecutionPayloadEnvelope object -func (s *SignedWireBlindedExecutionPayloadEnvelope) HashTreeRoot() ([32]byte, error) { - return ssz.HashWithDefaultHasher(s) -} - -// HashTreeRootWith ssz hashes the SignedWireBlindedExecutionPayloadEnvelope object with a hasher -func (s *SignedWireBlindedExecutionPayloadEnvelope) HashTreeRootWith(hh *ssz.Hasher) (err error) { - indx := hh.Index() - - // Field (0) 'Message' - if err = s.Message.HashTreeRootWith(hh); err != nil { - return - } - - // Field (1) 'Signature' - if size := len(s.Signature); size != 96 { - err = ssz.ErrBytesLengthFn("--.Signature", size, 96) - return - } - hh.PutBytes(s.Signature) - - hh.Merkleize(indx) - return -} - // MarshalSSZ ssz marshals the Builder object func (b *Builder) MarshalSSZ() ([]byte, error) { return ssz.MarshalSSZ(b) diff --git a/proto/prysm/v1alpha1/gloas_test.go b/proto/prysm/v1alpha1/gloas_test.go index f8d01e767eae..3c97ae55cc90 100644 --- a/proto/prysm/v1alpha1/gloas_test.go +++ b/proto/prysm/v1alpha1/gloas_test.go @@ -1,69 +1,12 @@ package eth import ( - "bytes" "reflect" "testing" "github.com/OffchainLabs/prysm/v7/consensus-types/primitives" - enginev1 "github.com/OffchainLabs/prysm/v7/proto/engine/v1" - "github.com/OffchainLabs/prysm/v7/testing/require" ) -// HTR(blinded) must equal HTR(full) so the validator signature stays valid against either form. -func TestWireBlindedHTRMatchesFull(t *testing.T) { - full := &ExecutionPayloadEnvelope{ - Payload: &enginev1.ExecutionPayloadGloas{ - ParentHash: bytes.Repeat([]byte{0x01}, 32), - FeeRecipient: bytes.Repeat([]byte{0x02}, 20), - StateRoot: bytes.Repeat([]byte{0x03}, 32), - ReceiptsRoot: bytes.Repeat([]byte{0x04}, 32), - LogsBloom: bytes.Repeat([]byte{0x05}, 256), - PrevRandao: bytes.Repeat([]byte{0x06}, 32), - BaseFeePerGas: bytes.Repeat([]byte{0x07}, 32), - BlockHash: bytes.Repeat([]byte{0x08}, 32), - Transactions: [][]byte{[]byte("tx1"), []byte("tx2")}, - Withdrawals: []*enginev1.Withdrawal{}, - SlotNumber: primitives.Slot(100), - }, - ExecutionRequests: &enginev1.ExecutionRequestsGloas{}, - BuilderIndex: primitives.BuilderIndex(42), - BeaconBlockRoot: bytes.Repeat([]byte{0x09}, 32), - ParentBeaconBlockRoot: bytes.Repeat([]byte{0x0a}, 32), - } - - blinded, err := full.WireBlinded() - require.NoError(t, err) - fullHTR, err := full.HashTreeRoot() - require.NoError(t, err) - blindedHTR, err := blinded.HashTreeRoot() - require.NoError(t, err) - require.Equal(t, fullHTR, blindedHTR) - - // SSZ roundtrip. - enc, err := blinded.MarshalSSZ() - require.NoError(t, err) - decoded := &WireBlindedExecutionPayloadEnvelope{} - require.NoError(t, decoded.UnmarshalSSZ(enc)) - rtHTR, err := decoded.HashTreeRoot() - require.NoError(t, err) - require.Equal(t, fullHTR, rtHTR) - - // Signed wrapper SSZ roundtrip. - signedBlinded, err := (&SignedExecutionPayloadEnvelope{ - Message: full, - Signature: bytes.Repeat([]byte{0x0b}, 96), - }).WireBlinded() - require.NoError(t, err) - signedEnc, err := signedBlinded.MarshalSSZ() - require.NoError(t, err) - decodedSigned := &SignedWireBlindedExecutionPayloadEnvelope{} - require.NoError(t, decodedSigned.UnmarshalSSZ(signedEnc)) - rtBlindedHTR, err := decodedSigned.Message.HashTreeRoot() - require.NoError(t, err) - require.Equal(t, fullHTR, rtBlindedHTR) -} - func TestExecutionPayloadBid_Copy(t *testing.T) { tests := []struct { name string diff --git a/proto/prysm/v1alpha1/validator.pb.go b/proto/prysm/v1alpha1/validator.pb.go index 437226815789..3e3501516746 100755 --- a/proto/prysm/v1alpha1/validator.pb.go +++ b/proto/prysm/v1alpha1/validator.pb.go @@ -3462,8 +3462,8 @@ func (x *ExecutionPayloadEnvelopeRequest) GetSlot() github_com_OffchainLabs_prys // Deprecated: Marked as deprecated in proto/prysm/v1alpha1/validator.proto. type ExecutionPayloadEnvelopeResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Blinded *WireBlindedExecutionPayloadEnvelope `protobuf:"bytes,1,opt,name=blinded,proto3" json:"blinded,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Envelope *ExecutionPayloadEnvelope `protobuf:"bytes,1,opt,name=envelope,proto3" json:"envelope,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3498,9 +3498,9 @@ func (*ExecutionPayloadEnvelopeResponse) Descriptor() ([]byte, []int) { return file_proto_prysm_v1alpha1_validator_proto_rawDescGZIP(), []int{59} } -func (x *ExecutionPayloadEnvelopeResponse) GetBlinded() *WireBlindedExecutionPayloadEnvelope { +func (x *ExecutionPayloadEnvelopeResponse) GetEnvelope() *ExecutionPayloadEnvelope { if x != nil { - return x.Blinded + return x.Envelope } return nil } @@ -4917,506 +4917,505 @@ var file_proto_prysm_v1alpha1_validator_proto_rawDesc = []byte{ 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x7c, 0x0a, 0x20, 0x45, 0x78, 0x65, 0x63, + 0x73, 0x6c, 0x6f, 0x74, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x73, 0x0a, 0x20, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x07, - 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x72, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x65, - 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x07, 0x62, 0x6c, 0x69, 0x6e, 0x64, - 0x65, 0x64, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x7d, 0x0a, 0x1d, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x44, 0x82, 0xb5, 0x18, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, - 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 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, 0x3a, 0x02, 0x18, 0x01, 0x2a, 0x9a, 0x01, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x00, 0x12, 0x0d, 0x0a, - 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, - 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, - 0x49, 0x56, 0x45, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x58, 0x49, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x05, - 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x58, 0x49, 0x54, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, - 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, - 0x54, 0x49, 0x41, 0x4c, 0x4c, 0x59, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, - 0x10, 0x08, 0x32, 0xf3, 0x39, 0x0a, 0x13, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, - 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x83, 0x01, 0x0a, 0x09, 0x47, - 0x65, 0x74, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, + 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x08, + 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, - 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x88, 0x02, 0x01, - 0x12, 0x89, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x56, 0x32, - 0x12, 0x24, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, - 0x75, 0x74, 0x69, 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x56, 0x32, 0x88, 0x02, 0x01, 0x12, 0xa4, 0x01, 0x0a, - 0x11, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, - 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, + 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x7d, 0x0a, + 0x1d, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, + 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x44, 0x82, 0xb5, + 0x18, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, + 0x76, 0x37, 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, 0x3a, 0x02, 0x18, 0x01, 0x2a, 0x9a, 0x01, 0x0a, + 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, + 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, + 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, + 0x45, 0x58, 0x49, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x4c, 0x41, + 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x58, 0x49, 0x54, 0x45, + 0x44, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x07, + 0x12, 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x54, 0x49, 0x41, 0x4c, 0x4c, 0x59, 0x5f, 0x44, 0x45, + 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x08, 0x32, 0xf3, 0x39, 0x0a, 0x13, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x83, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x12, + 0x24, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x75, + 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x75, + 0x74, 0x69, 0x65, 0x73, 0x88, 0x02, 0x01, 0x12, 0x89, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, + 0x75, 0x74, 0x69, 0x65, 0x73, 0x56, 0x32, 0x12, 0x24, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, + 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x56, 0x32, + 0x88, 0x02, 0x01, 0x12, 0xa4, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, + 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, + 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x61, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x88, 0x02, 0x01, 0x12, 0xa6, 0x01, 0x0a, 0x13, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, + 0x56, 0x32, 0x12, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, + 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, - 0x88, 0x02, 0x01, 0x12, 0xa6, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x56, 0x32, 0x12, 0x2c, 0x2e, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x74, 0x68, 0x65, + 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, + 0x88, 0x02, 0x01, 0x12, 0xb9, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x12, 0x31, + 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x65, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, + 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x73, 0x79, + 0x6e, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x88, 0x02, 0x01, 0x12, + 0x90, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x54, 0x43, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x27, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x54, 0x43, 0x44, 0x75, 0x74, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, - 0x12, 0x27, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, - 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x88, 0x02, 0x01, 0x12, 0xb9, 0x01, 0x0a, - 0x16, 0x47, 0x65, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, - 0x65, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x31, 0x2e, 0x50, 0x54, 0x43, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x65, 0x74, + 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x74, 0x63, 0x88, + 0x02, 0x01, 0x12, 0x84, 0x01, 0x0a, 0x0a, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x24, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x44, 0x75, 0x74, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, - 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, + 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, - 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x65, 0x88, 0x02, 0x01, 0x12, 0x90, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, - 0x50, 0x54, 0x43, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x54, 0x43, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x54, 0x43, 0x44, 0x75, - 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x75, - 0x74, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x74, 0x63, 0x88, 0x02, 0x01, 0x12, 0x84, 0x01, 0x0a, 0x0a, - 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x24, 0x2e, 0x65, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, - 0x1e, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x88, - 0x02, 0x01, 0x12, 0x8e, 0x01, 0x0a, 0x11, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x29, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x88, 0x02, - 0x01, 0x30, 0x01, 0x12, 0xb2, 0x01, 0x0a, 0x11, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0x97, 0x01, 0x0a, 0x0e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2c, 0x2e, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x12, 0x1d, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x88, - 0x02, 0x01, 0x12, 0x9b, 0x01, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, - 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, - 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x88, 0x02, 0x01, - 0x12, 0xb5, 0x01, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x2e, 0x65, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x88, 0x02, 0x01, 0x12, 0x8e, 0x01, 0x0a, 0x11, 0x57, 0x61, + 0x69, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x29, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x65, 0x74, 0x68, + 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0xb2, 0x01, 0x0a, 0x11, 0x57, + 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x31, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, + 0x29, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, + 0x97, 0x01, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, + 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2d, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x02, 0x01, 0x12, 0x9b, 0x01, 0x0a, 0x0f, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x2e, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x88, 0x02, 0x01, 0x12, 0xb5, 0x01, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x70, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x65, 0x73, 0x88, 0x02, 0x01, 0x12, 0x8a, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x23, 0x2e, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x29, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x28, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x88, 0x02, 0x01, 0x12, 0x9a, 0x01, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2f, 0x2e, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x26, 0x2e, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, - 0x22, 0x1d, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x32, 0x2f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x88, - 0x02, 0x01, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x42, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 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, 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, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x34, 0x3a, 0x01, 0x2a, 0x22, 0x2f, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x72, - 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x65, 0x72, 0x88, 0x02, 0x01, 0x12, 0xc2, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, - 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x50, 0x75, - 0x62, 0x4b, 0x65, 0x79, 0x12, 0x32, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, - 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, - 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x50, 0x75, 0x62, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x50, - 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x3a, 0x01, 0x2a, 0x22, 0x30, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x2f, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x5f, - 0x62, 0x79, 0x5f, 0x70, 0x75, 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x88, 0x02, 0x01, 0x12, 0x9b, 0x01, - 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, - 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x02, 0x01, 0x12, 0x92, 0x01, 0x0a, 0x12, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a, 0x01, 0x2a, 0x22, 0x23, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x2f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x02, 0x01, - 0x12, 0xa7, 0x01, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x12, 0x28, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x65, 0x74, 0x68, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x65, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x88, 0x02, 0x01, 0x12, 0xb5, 0x01, 0x0a, 0x1d, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x30, 0x2e, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x3a, 0x01, 0x2a, 0x22, 0x21, 0x2f, 0x65, - 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x88, - 0x02, 0x01, 0x12, 0xcb, 0x01, 0x0a, 0x24, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x41, 0x67, 0x67, - 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x12, 0x30, 0x2e, 0x65, 0x74, + 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x88, 0x02, 0x01, 0x12, + 0x8a, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x12, 0x23, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, + 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x65, 0x74, 0x68, + 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x88, 0x02, 0x01, 0x12, 0x9a, 0x01, 0x0a, + 0x12, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x12, 0x2f, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x26, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, + 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x88, 0x02, 0x01, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x50, 0x72, + 0x65, 0x70, 0x61, 0x72, 0x65, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 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, 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, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x3a, 0x01, 0x2a, 0x22, 0x2f, 0x2f, 0x65, 0x74, + 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x62, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x88, 0x02, 0x01, 0x12, + 0xc2, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, + 0x65, 0x6e, 0x74, 0x42, 0x79, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x32, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, - 0x01, 0x2a, 0x22, 0x29, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x88, 0x02, 0x01, - 0x12, 0xc1, 0x01, 0x0a, 0x23, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, + 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, + 0x42, 0x79, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, + 0x69, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x3a, 0x01, 0x2a, 0x22, + 0x30, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, + 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x70, 0x75, 0x62, 0x5f, 0x6b, 0x65, + 0x79, 0x88, 0x02, 0x01, 0x12, 0x9b, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x65, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x2e, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x65, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x65, 0x74, 0x68, + 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, + 0x02, 0x01, 0x12, 0x92, 0x01, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x65, 0x74, 0x68, 0x65, + 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x3a, 0x01, 0x2a, 0x22, 0x21, - 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x88, 0x02, 0x01, 0x12, 0xd7, 0x01, 0x0a, 0x2a, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x45, 0x6c, 0x65, 0x63, - 0x74, 0x72, 0x61, 0x12, 0x3a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a, 0x01, 0x2a, 0x22, + 0x23, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x02, 0x01, 0x12, 0xa7, 0x01, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6c, + 0x65, 0x63, 0x74, 0x72, 0x61, 0x12, 0x28, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, + 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, + 0x2a, 0x22, 0x2b, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x88, 0x02, + 0x01, 0x12, 0xb5, 0x01, 0x0a, 0x1d, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x41, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x12, 0x30, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, + 0x3a, 0x01, 0x2a, 0x22, 0x21, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x88, 0x02, 0x01, 0x12, 0xcb, 0x01, 0x0a, 0x24, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x45, 0x6c, 0x65, 0x63, 0x74, + 0x72, 0x61, 0x12, 0x30, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, + 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, + 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x22, 0x29, 0x2f, 0x65, 0x74, 0x68, 0x2f, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x72, 0x61, 0x88, 0x02, 0x01, 0x12, 0xc1, 0x01, 0x0a, 0x23, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, + 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, - 0x22, 0x29, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x5f, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x88, 0x02, 0x01, 0x12, 0x91, - 0x01, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x45, 0x78, 0x69, 0x74, 0x12, 0x2a, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x6f, 0x6c, - 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x1a, 0x2a, 0x2e, 0x65, 0x74, 0x68, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, + 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, + 0x6e, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x26, 0x3a, 0x01, 0x2a, 0x22, 0x21, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x88, 0x02, 0x01, 0x12, 0xd7, 0x01, 0x0a, 0x2a, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x12, 0x3a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, - 0x2a, 0x22, 0x1c, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x65, 0x78, 0x69, 0x74, 0x88, - 0x02, 0x01, 0x12, 0xa4, 0x01, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x22, 0x29, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x72, 0x61, 0x88, 0x02, 0x01, 0x12, 0x91, 0x01, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x65, 0x45, 0x78, 0x69, 0x74, 0x12, 0x2a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x65, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, + 0x74, 0x1a, 0x2a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x65, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x2f, 0x65, 0x78, 0x69, 0x74, 0x88, 0x02, 0x01, 0x12, 0xa4, 0x01, 0x0a, 0x19, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, + 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x37, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, - 0x12, 0x37, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 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, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x22, 0x28, 0x2f, 0x65, - 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2f, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x88, 0x02, 0x01, 0x12, 0x9d, 0x01, 0x0a, 0x11, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x44, 0x6f, 0x70, 0x70, 0x65, 0x6c, 0x47, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x12, - 0x2a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x6f, 0x70, 0x70, 0x65, 0x6c, 0x47, 0x61, - 0x6e, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x6f, 0x70, 0x70, 0x65, 0x6c, 0x47, 0x61, 0x6e, 0x67, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, - 0x12, 0x24, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x6f, 0x70, 0x70, 0x65, 0x6c, - 0x67, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x88, 0x02, 0x01, 0x12, 0xa2, 0x01, 0x0a, 0x17, 0x47, 0x65, - 0x74, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x33, 0x2e, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x65, 0x74, 0x68, - 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x88, 0x02, 0x01, 0x12, 0x8c, - 0x01, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x2b, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 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, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, + 0x3a, 0x01, 0x2a, 0x22, 0x28, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x88, 0x02, 0x01, + 0x12, 0x9d, 0x01, 0x0a, 0x11, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x6f, 0x70, 0x70, 0x65, 0x6c, + 0x47, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, + 0x6f, 0x70, 0x70, 0x65, 0x6c, 0x47, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, + 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x6f, 0x70, 0x70, 0x65, + 0x6c, 0x47, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x2f, 0x64, 0x6f, 0x70, 0x70, 0x65, 0x6c, 0x67, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x88, 0x02, 0x01, + 0x12, 0xa2, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, - 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 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, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x79, - 0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x02, 0x01, 0x12, 0xb7, 0x01, - 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x74, 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x75, 0x62, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, - 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x79, 0x6e, - 0x63, 0x5f, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x88, 0x02, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 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, 0x37, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x31, 0x12, 0x2f, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x5f, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, + 0x6f, 0x74, 0x88, 0x02, 0x01, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2b, 0x2e, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 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, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x65, 0x74, + 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x88, 0x02, 0x01, 0x12, 0xb7, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x79, 0x6e, 0x63, + 0x53, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x75, + 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x79, 0x6e, 0x63, 0x53, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x02, 0x01, 0x12, 0xc7, + 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 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, + 0x37, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 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, 0x30, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 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, 0x30, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 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, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x3a, 0x01, 0x2a, 0x22, 0x2e, - 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x88, 0x02, - 0x01, 0x12, 0xb2, 0x01, 0x0a, 0x20, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, - 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x31, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 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, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x3a, 0x01, 0x2a, 0x22, 0x35, 0x2f, 0x65, + 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x33, 0x3a, 0x01, 0x2a, 0x22, 0x2e, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, + 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x88, 0x02, 0x01, 0x12, 0xb2, 0x01, 0x0a, 0x20, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x31, 0x2e, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 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, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, + 0x3a, 0x01, 0x2a, 0x22, 0x35, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x69, 0x67, + 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x88, 0x02, 0x01, 0x12, 0x9e, 0x01, + 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x12, 0x29, 0x2e, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x6c, 0x6f, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, - 0x6f, 0x6f, 0x66, 0x88, 0x02, 0x01, 0x12, 0x9e, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x12, 0x29, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x73, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0xa1, + 0x01, 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x41, + 0x6c, 0x74, 0x61, 0x69, 0x72, 0x12, 0x2a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x6c, 0x6f, - 0x74, 0x73, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x41, 0x6c, 0x74, 0x61, 0x69, 0x72, 0x12, 0x2a, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, - 0x25, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2f, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x1c, - 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, 0x12, 0x35, 0x2e, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 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, - 0x73, 0x56, 0x31, 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, 0x32, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x02, 0x01, 0x12, - 0xb1, 0x01, 0x0a, 0x17, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, 0x35, 0x2e, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 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, 0x47, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x3e, 0x3a, 0x01, 0x2a, 0x22, 0x39, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x88, 0x02, 0x01, + 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x1c, 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, 0x12, 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 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, 0x73, 0x56, 0x31, 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, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, + 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x88, 0x02, 0x01, 0x12, 0xb1, 0x01, 0x0a, 0x17, 0x41, 0x73, 0x73, 0x69, 0x67, + 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x53, 0x75, 0x62, 0x6e, + 0x65, 0x74, 0x12, 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, + 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, + 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x53, 0x75, 0x62, 0x6e, + 0x65, 0x74, 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, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x3a, 0x01, 0x2a, 0x22, 0x39, 0x2f, 0x65, + 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x61, 0x73, 0x73, + 0x69, 0x67, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x6f, + 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x88, 0x02, 0x01, 0x12, 0xef, 0x01, 0x0a, 0x1f, 0x41, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x67, 0x41, 0x6e, 0x64, 0x41, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x12, 0x3d, + 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x64, 0x53, 0x69, 0x67, 0x41, 0x6e, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x69, 0x67, 0x41, 0x6e, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x42, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x12, 0x42, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, - 0x88, 0x02, 0x01, 0x12, 0xef, 0x01, 0x0a, 0x1f, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x64, 0x53, 0x69, 0x67, 0x41, 0x6e, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x12, 0x3d, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x73, 0x69, 0x67, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x88, 0x02, 0x01, 0x12, 0xd4, 0x01, 0x0a, + 0x1b, 0x47, 0x65, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x36, 0x2e, 0x65, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, + 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, + 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, 0x39, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x2f, 0x7b, 0x73, 0x6c, 0x6f, 0x74, 0x7d, + 0x88, 0x02, 0x01, 0x12, 0xb9, 0x01, 0x0a, 0x1f, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, + 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x3c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x67, 0x41, 0x6e, 0x64, - 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x67, 0x41, 0x6e, 0x64, 0x41, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x12, 0x42, - 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x61, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x67, 0x5f, 0x61, 0x6e, - 0x64, 0x5f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, - 0x74, 0x73, 0x88, 0x02, 0x01, 0x12, 0xd4, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x45, 0x78, 0x65, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, - 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, - 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, 0x39, - 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, - 0x70, 0x65, 0x2f, 0x7b, 0x73, 0x6c, 0x6f, 0x74, 0x7d, 0x88, 0x02, 0x01, 0x12, 0xb9, 0x01, 0x0a, - 0x1f, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x12, 0x3c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 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, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x01, - 0x2a, 0x22, 0x32, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x65, 0x6e, 0x76, - 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x88, 0x02, 0x01, 0x12, 0xc1, 0x01, 0x0a, 0x16, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x74, 0x68, 0x65, + 0x65, 0x6c, 0x6f, 0x70, 0x65, 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, 0x40, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x01, 0x2a, 0x22, 0x32, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x5f, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x88, 0x02, 0x01, 0x12, + 0xc1, 0x01, 0x0a, 0x16, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x65, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2d, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, + 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x7b, 0x73, 0x6c, 0x6f, 0x74, 0x7d, + 0x88, 0x02, 0x01, 0x12, 0x9f, 0x01, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x30, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 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, 0x39, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x70, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x88, 0x02, 0x01, 0x12, 0xb4, 0x01, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x3d, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, - 0x12, 0x37, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x2f, 0x7b, 0x73, 0x6c, 0x6f, 0x74, 0x7d, 0x88, 0x02, 0x01, 0x12, 0x9f, 0x01, 0x0a, - 0x18, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x2e, 0x65, 0x74, 0x68, 0x65, + 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 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, 0x31, 0x3a, 0x01, 0x2a, 0x22, 0x2c, 0x2f, 0x65, 0x74, + 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x88, 0x02, 0x01, 0x12, 0xa5, 0x01, 0x0a, + 0x18, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x50, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 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, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, - 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, - 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x02, 0x01, 0x12, 0xb4, - 0x01, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x12, 0x3d, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x50, + 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 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, - 0x31, 0x3a, 0x01, 0x2a, 0x22, 0x2c, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x88, 0x02, 0x01, 0x12, 0xa5, 0x01, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x12, 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x88, 0x02, 0x01, 0x12, 0xa8, 0x01, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x69, 0x64, 0x12, 0x30, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x69, 0x64, 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, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, + 0x74, 0x79, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x70, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x88, 0x02, 0x01, 0x12, 0xa8, 0x01, - 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x69, - 0x64, 0x12, 0x30, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x42, 0x69, 0x64, 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, 0x3b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x62, 0x69, 0x64, 0x88, 0x02, 0x01, 0x42, 0x92, 0x01, 0x0a, 0x19, 0x6f, 0x72, 0x67, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, - 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x37, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, - 0x65, 0x74, 0x68, 0xaa, 0x02, 0x0f, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, - 0x74, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x15, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, - 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x69, 0x64, 0x88, 0x02, 0x01, 0x42, + 0x92, 0x01, 0x0a, 0x19, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0e, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, + 0x37, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x65, 0x74, 0x68, 0xaa, 0x02, 0x0f, 0x45, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x15, 0x45, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5516,7 +5515,7 @@ var file_proto_prysm_v1alpha1_validator_proto_goTypes = []any{ (*SignedAggregateAttestationAndProof)(nil), // 79: ethereum.eth.v1alpha1.SignedAggregateAttestationAndProof (*SignedAggregateAttestationAndProofElectra)(nil), // 80: ethereum.eth.v1alpha1.SignedAggregateAttestationAndProofElectra (*SyncCommitteeMessage)(nil), // 81: ethereum.eth.v1alpha1.SyncCommitteeMessage - (*WireBlindedExecutionPayloadEnvelope)(nil), // 82: ethereum.eth.v1alpha1.WireBlindedExecutionPayloadEnvelope + (*ExecutionPayloadEnvelope)(nil), // 82: ethereum.eth.v1alpha1.ExecutionPayloadEnvelope (*emptypb.Empty)(nil), // 83: google.protobuf.Empty (*GenericSignedBeaconBlock)(nil), // 84: ethereum.eth.v1alpha1.GenericSignedBeaconBlock (*Attestation)(nil), // 85: ethereum.eth.v1alpha1.Attestation @@ -5564,7 +5563,7 @@ var file_proto_prysm_v1alpha1_validator_proto_depIdxs = []int32{ 52, // 26: ethereum.eth.v1alpha1.ProposerDutiesResponse.duties:type_name -> ethereum.eth.v1alpha1.ProposerDutyV2 55, // 27: ethereum.eth.v1alpha1.SyncCommitteeDutiesResponse.duties:type_name -> ethereum.eth.v1alpha1.SyncCommitteeDuty 58, // 28: ethereum.eth.v1alpha1.PTCDutiesResponse.duties:type_name -> ethereum.eth.v1alpha1.PTCDuty - 82, // 29: ethereum.eth.v1alpha1.ExecutionPayloadEnvelopeResponse.blinded:type_name -> ethereum.eth.v1alpha1.WireBlindedExecutionPayloadEnvelope + 82, // 29: ethereum.eth.v1alpha1.ExecutionPayloadEnvelopeResponse.envelope:type_name -> ethereum.eth.v1alpha1.ExecutionPayloadEnvelope 16, // 30: ethereum.eth.v1alpha1.ValidatorActivationResponse.Status.status:type_name -> ethereum.eth.v1alpha1.ValidatorStatusResponse 0, // 31: ethereum.eth.v1alpha1.DutiesResponse.Duty.status:type_name -> ethereum.eth.v1alpha1.ValidatorStatus 0, // 32: ethereum.eth.v1alpha1.DutiesV2Response.Duty.status:type_name -> ethereum.eth.v1alpha1.ValidatorStatus diff --git a/proto/prysm/v1alpha1/validator.proto b/proto/prysm/v1alpha1/validator.proto index c3a22978c67f..353c490a6a3f 100644 --- a/proto/prysm/v1alpha1/validator.proto +++ b/proto/prysm/v1alpha1/validator.proto @@ -1513,13 +1513,12 @@ message ExecutionPayloadEnvelopeRequest { } // ExecutionPayloadEnvelopeResponse is the response containing the cached -// execution payload envelope in blinded wire form (payload_root). The signer -// validates over the blinded HTR, which equals the full envelope's HTR. +// execution payload envelope for the validator to sign and publish. message ExecutionPayloadEnvelopeResponse { option deprecated = true; - // The blinded execution payload envelope for the requested slot. - WireBlindedExecutionPayloadEnvelope blinded = 1; + // The execution payload envelope for the requested slot. + ExecutionPayloadEnvelope envelope = 1; } // PayloadAttestationDataRequest is the request for retrieving payload diff --git a/testing/validator-mock/validator_client_mock.go b/testing/validator-mock/validator_client_mock.go index 365009aa04a7..eb2b55a62280 100644 --- a/testing/validator-mock/validator_client_mock.go +++ b/testing/validator-mock/validator_client_mock.go @@ -223,13 +223,12 @@ func (mr *MockValidatorClientMockRecorder) FeeRecipientByPubKey(ctx, in any) *go } // GetExecutionPayloadEnvelope mocks base method. -func (m *MockValidatorClient) GetExecutionPayloadEnvelope(ctx context.Context, slot primitives.Slot, beaconBlockRoot [32]byte) (*eth.ExecutionPayloadEnvelope, *eth.WireBlindedExecutionPayloadEnvelope, error) { +func (m *MockValidatorClient) GetExecutionPayloadEnvelope(ctx context.Context, slot primitives.Slot, beaconBlockRoot [32]byte) (*eth.ExecutionPayloadEnvelope, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetExecutionPayloadEnvelope", ctx, slot, beaconBlockRoot) ret0, _ := ret[0].(*eth.ExecutionPayloadEnvelope) - ret1, _ := ret[1].(*eth.WireBlindedExecutionPayloadEnvelope) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 + ret1, _ := ret[1].(error) + return ret0, ret1 } // GetExecutionPayloadEnvelope indicates an expected call of GetExecutionPayloadEnvelope. @@ -387,21 +386,6 @@ func (mr *MockValidatorClientMockRecorder) ProposerDuties(ctx, epoch any) *gomoc return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProposerDuties", reflect.TypeOf((*MockValidatorClient)(nil).ProposerDuties), ctx, epoch) } -// PublishBlindedExecutionPayloadEnvelope mocks base method. -func (m *MockValidatorClient) PublishBlindedExecutionPayloadEnvelope(ctx context.Context, in *eth.SignedWireBlindedExecutionPayloadEnvelope) (*empty.Empty, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "PublishBlindedExecutionPayloadEnvelope", ctx, in) - ret0, _ := ret[0].(*empty.Empty) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// PublishBlindedExecutionPayloadEnvelope indicates an expected call of PublishBlindedExecutionPayloadEnvelope. -func (mr *MockValidatorClientMockRecorder) PublishBlindedExecutionPayloadEnvelope(ctx, in any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PublishBlindedExecutionPayloadEnvelope", reflect.TypeOf((*MockValidatorClient)(nil).PublishBlindedExecutionPayloadEnvelope), ctx, in) -} - // PublishExecutionPayloadEnvelope mocks base method. func (m *MockValidatorClient) PublishExecutionPayloadEnvelope(ctx context.Context, in *eth.SignedExecutionPayloadEnvelope) (*empty.Empty, error) { m.ctrl.T.Helper() diff --git a/validator/client/beacon-api/beacon_api_validator_client.go b/validator/client/beacon-api/beacon_api_validator_client.go index c31c5a076a19..7dd79c557e76 100644 --- a/validator/client/beacon-api/beacon_api_validator_client.go +++ b/validator/client/beacon-api/beacon_api_validator_client.go @@ -428,13 +428,6 @@ func wrapInMetrics[Resp any](action string, f func() (Resp, error)) (Resp, error return resp, err } -func wrapInMetrics2[R1, R2 any](action string, f func() (R1, R2, error)) (R1, R2, error) { - now := time.Now() - r1, r2, err := f() - recordMetrics(action, now, err) - return r1, r2, err -} - func recordMetrics(action string, start time.Time, err error) { httpActionCount.WithLabelValues(action).Inc() if err == nil { @@ -463,11 +456,11 @@ func (c *beaconApiValidatorClient) ConnectionGeneration() uint64 { // Gloas Fork Methods -func (c *beaconApiValidatorClient) GetExecutionPayloadEnvelope(ctx context.Context, slot primitives.Slot, beaconBlockRoot [32]byte) (*ethpb.ExecutionPayloadEnvelope, *ethpb.WireBlindedExecutionPayloadEnvelope, error) { +func (c *beaconApiValidatorClient) GetExecutionPayloadEnvelope(ctx context.Context, slot primitives.Slot, beaconBlockRoot [32]byte) (*ethpb.ExecutionPayloadEnvelope, error) { ctx, span := trace.StartSpan(ctx, "beacon-api.GetExecutionPayloadEnvelope") defer span.End() - return wrapInMetrics2("GetExecutionPayloadEnvelope", func() (*ethpb.ExecutionPayloadEnvelope, *ethpb.WireBlindedExecutionPayloadEnvelope, error) { + return wrapInMetrics[*ethpb.ExecutionPayloadEnvelope]("GetExecutionPayloadEnvelope", func() (*ethpb.ExecutionPayloadEnvelope, error) { return c.getExecutionPayloadEnvelope(ctx, slot, beaconBlockRoot) }) } @@ -481,15 +474,6 @@ func (c *beaconApiValidatorClient) PublishExecutionPayloadEnvelope(ctx context.C }) } -func (c *beaconApiValidatorClient) PublishBlindedExecutionPayloadEnvelope(ctx context.Context, in *ethpb.SignedWireBlindedExecutionPayloadEnvelope) (*empty.Empty, error) { - ctx, span := trace.StartSpan(ctx, "beacon-api.PublishBlindedExecutionPayloadEnvelope") - defer span.End() - - return wrapInMetrics[*empty.Empty]("PublishBlindedExecutionPayloadEnvelope", func() (*empty.Empty, error) { - return c.publishBlindedExecutionPayloadEnvelope(ctx, in) - }) -} - func (c *beaconApiValidatorClient) PayloadAttestationData(ctx context.Context, slot primitives.Slot) (*ethpb.PayloadAttestationData, error) { ctx, span := trace.StartSpan(ctx, "beacon-api.PayloadAttestationData") defer span.End() diff --git a/validator/client/beacon-api/execution_payload_envelope.go b/validator/client/beacon-api/execution_payload_envelope.go index f2f051944a4f..a8e71398ca14 100644 --- a/validator/client/beacon-api/execution_payload_envelope.go +++ b/validator/client/beacon-api/execution_payload_envelope.go @@ -21,51 +21,48 @@ import ( "github.com/pkg/errors" ) -// getExecutionPayloadEnvelope returns the envelope to sign for self-build. Stateless mode has the -// full envelope cached locally (from the v4 block fetch); stateful mode fetches the spec-wire -// blinded form from the BN, which exposes only the blinded envelope (beacon-APIs #580). Exactly one -// of the returned values is non-nil. +// getExecutionPayloadEnvelope returns the envelope to sign for self-build: the locally cached one +// from the v4 block fetch (stateless) if present, otherwise fetched from the BN (stateful). func (c *beaconApiValidatorClient) getExecutionPayloadEnvelope( ctx context.Context, slot primitives.Slot, beaconBlockRoot [32]byte, -) (*ethpb.ExecutionPayloadEnvelope, *ethpb.WireBlindedExecutionPayloadEnvelope, error) { +) (*ethpb.ExecutionPayloadEnvelope, error) { if envelope, _, _ := c.envelopeCache.Peek(slot); envelope != nil { if bytesutil.ToBytes32(envelope.BeaconBlockRoot) != beaconBlockRoot { - return nil, nil, errors.New("cached execution payload envelope beacon_block_root does not match requested block") + return nil, errors.New("cached execution payload envelope beacon_block_root does not match requested block") } - return envelope, nil, nil + return envelope, nil } endpoint := fmt.Sprintf("/eth/v1/validator/execution_payload_envelopes/%d/%s", slot, hexutil.Encode(beaconBlockRoot[:])) body, header, err := c.handler.GetSSZ(ctx, endpoint) if err != nil { - return nil, nil, errors.Wrap(err, "could not get blinded execution payload envelope") + return nil, errors.Wrap(err, "could not get execution payload envelope") } if strings.Contains(header.Get("Content-Type"), api.OctetStreamMediaType) { - blinded := ðpb.WireBlindedExecutionPayloadEnvelope{} - if err := blinded.UnmarshalSSZ(body); err != nil { - return nil, nil, errors.Wrap(err, "could not unmarshal blinded envelope SSZ") + envelope := ðpb.ExecutionPayloadEnvelope{} + if err := envelope.UnmarshalSSZ(body); err != nil { + return nil, errors.Wrap(err, "could not unmarshal envelope SSZ") } - return nil, blinded, nil + return envelope, nil } - var resp structs.GetValidatorBlindedExecutionPayloadEnvelopeResponse + var resp structs.GetValidatorExecutionPayloadEnvelopeResponse if err := json.Unmarshal(body, &resp); err != nil { - return nil, nil, errors.Wrap(err, "could not decode blinded envelope JSON") + return nil, errors.Wrap(err, "could not decode envelope JSON") } if resp.Data == nil { - return nil, nil, errors.New("blinded execution payload envelope data is nil") + return nil, errors.New("execution payload envelope data is nil") } - blinded, err := resp.Data.ToConsensus() + envelope, err := resp.Data.ToConsensus() if err != nil { - return nil, nil, errors.Wrap(err, "could not convert blinded envelope") + return nil, errors.Wrap(err, "could not convert envelope") } - return nil, blinded, nil + return envelope, nil } -// publishExecutionPayloadEnvelope publishes the full envelope plus cached blobs/proofs as -// SignedExecutionPayloadEnvelopeContents (stateless flow). Stateful self-build uses -// publishBlindedExecutionPayloadEnvelope instead. +// publishExecutionPayloadEnvelope posts contents (stateless) when blobs/proofs are cached locally, +// otherwise the bare signed envelope (stateful; the BN attaches its cached blobs and proofs). func (c *beaconApiValidatorClient) publishExecutionPayloadEnvelope( ctx context.Context, envelope *ethpb.SignedExecutionPayloadEnvelope, @@ -78,8 +75,23 @@ func (c *beaconApiValidatorClient) publishExecutionPayloadEnvelope( slot := primitives.Slot(envelope.Message.Payload.SlotNumber) cachedEnv, blobs, kzgProofs := c.envelopeCache.Take(slot) if cachedEnv == nil { - return nil, errors.Errorf("stateless publish: envelope cache miss for slot %d", slot) + ssz, err := envelope.MarshalSSZ() + if err != nil { + return nil, errors.Wrap(err, "could not marshal envelope SSZ") + } + jsonFn := func() ([]byte, error) { + j, jerr := structs.SignedExecutionPayloadEnvelopeFromConsensus(envelope) + if jerr != nil { + return nil, jerr + } + return json.Marshal(j) + } + if err := c.postEnvelope(ctx, endpoint, envelopeHeaders(false), ssz, jsonFn); err != nil { + return nil, errors.Wrap(err, "could not publish execution payload envelope") + } + return &empty.Empty{}, nil } + contents := ðpb.SignedExecutionPayloadEnvelopeContents{ SignedExecutionPayloadEnvelope: envelope, KzgProofs: kzgProofs, @@ -96,47 +108,16 @@ func (c *beaconApiValidatorClient) publishExecutionPayloadEnvelope( } return json.Marshal(j) } - if err := c.postEnvelope(ctx, endpoint, envelopeHeaders(false), ssz, jsonFn); err != nil { - return nil, errors.Wrap(err, "could not publish execution payload envelope contents") - } - return &empty.Empty{}, nil -} - -// publishBlindedExecutionPayloadEnvelope publishes the signed blinded envelope (stateful flow); the -// BN reconstructs the full envelope from its cache. Signature is valid by HTR equivalence. -func (c *beaconApiValidatorClient) publishBlindedExecutionPayloadEnvelope( - ctx context.Context, - signed *ethpb.SignedWireBlindedExecutionPayloadEnvelope, -) (*empty.Empty, error) { - const endpoint = "/eth/v1/beacon/execution_payload_envelopes" - if signed == nil || signed.Message == nil { - return nil, errors.New("nil signed blinded envelope") - } - ssz, err := signed.MarshalSSZ() - if err != nil { - return nil, errors.Wrap(err, "could not marshal blinded envelope SSZ") - } - jsonFn := func() ([]byte, error) { - msg, jerr := structs.BlindedExecutionPayloadEnvelopeFromConsensus(signed.Message) - if jerr != nil { - return nil, jerr - } - j := &structs.SignedBlindedExecutionPayloadEnvelope{ - Message: msg, - Signature: hexutil.Encode(signed.Signature), - } - return json.Marshal(j) - } if err := c.postEnvelope(ctx, endpoint, envelopeHeaders(true), ssz, jsonFn); err != nil { - return nil, errors.Wrap(err, "could not publish blinded execution payload envelope") + return nil, errors.Wrap(err, "could not publish execution payload envelope contents") } return &empty.Empty{}, nil } -func envelopeHeaders(blinded bool) map[string]string { +func envelopeHeaders(blobDataIncluded bool) map[string]string { return map[string]string{ - api.VersionHeader: version.String(version.Gloas), - api.ExecutionPayloadBlindedHeader: strconv.FormatBool(blinded), + api.VersionHeader: version.String(version.Gloas), + api.BlobDataIncludedHeader: strconv.FormatBool(blobDataIncluded), } } diff --git a/validator/client/beacon-api/execution_payload_envelope_test.go b/validator/client/beacon-api/execution_payload_envelope_test.go index 566a832a994d..23a55ed0e5d6 100644 --- a/validator/client/beacon-api/execution_payload_envelope_test.go +++ b/validator/client/beacon-api/execution_payload_envelope_test.go @@ -60,10 +60,9 @@ func TestGetExecutionPayloadEnvelope_CachedHit(t *testing.T) { } client.envelopeCache.Add(100, envelope, nil, nil) - full, blinded, err := client.getExecutionPayloadEnvelope(t.Context(), 100, bytesutil.ToBytes32(envelope.BeaconBlockRoot)) + full, err := client.getExecutionPayloadEnvelope(t.Context(), 100, bytesutil.ToBytes32(envelope.BeaconBlockRoot)) require.NoError(t, err) require.NotNil(t, full) - require.IsNil(t, blinded) assert.Equal(t, primitives.BuilderIndex(42), full.BuilderIndex) // Peek must leave the entry in the cache so the publish path can read blob data. @@ -86,21 +85,18 @@ func TestGetExecutionPayloadEnvelope_CachedRootMismatch(t *testing.T) { } client.envelopeCache.Add(100, envelope, nil, nil) - full, blinded, err := client.getExecutionPayloadEnvelope(t.Context(), 100, [32]byte{}) + full, err := client.getExecutionPayloadEnvelope(t.Context(), 100, [32]byte{}) require.ErrorContains(t, "does not match requested block", err) require.IsNil(t, full) - require.IsNil(t, blinded) } -// Stateful: on a local cache miss the VC fetches the blinded envelope from the BN. -func TestGetExecutionPayloadEnvelope_StatefulFetchesBlinded(t *testing.T) { +// Stateful: on a local cache miss the VC fetches the full envelope from the BN. +func TestGetExecutionPayloadEnvelope_StatefulFetchesEnvelope(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() envelope := testProtoEnvelope() - blinded, err := envelope.WireBlinded() - require.NoError(t, err) - body, err := blinded.MarshalSSZ() + body, err := envelope.MarshalSSZ() require.NoError(t, err) root := bytesutil.ToBytes32(envelope.BeaconBlockRoot) @@ -114,27 +110,25 @@ func TestGetExecutionPayloadEnvelope_StatefulFetchesBlinded(t *testing.T) { ).Return(body, respHeader, nil) client := &beaconApiValidatorClient{handler: handler, envelopeCache: cache.NewExecutionPayloadEnvelopeCache()} - full, gotBlinded, err := client.getExecutionPayloadEnvelope(t.Context(), 100, root) + full, err := client.getExecutionPayloadEnvelope(t.Context(), 100, root) require.NoError(t, err) - require.IsNil(t, full) - require.NotNil(t, gotBlinded) - assert.Equal(t, primitives.BuilderIndex(42), gotBlinded.BuilderIndex) + require.NotNil(t, full) + assert.Equal(t, primitives.BuilderIndex(42), full.BuilderIndex) } -// Stateful publish sends the blinded envelope with Eth-Execution-Payload-Blinded: true. -func TestPublishBlindedExecutionPayloadEnvelope(t *testing.T) { +// Stateful publish (local cache miss) sends the bare signed envelope with +// Eth-Blob-Data-Included: false. +func TestPublishExecutionPayloadEnvelope_StatefulSendsBareEnvelope(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() signed := ðpb.SignedExecutionPayloadEnvelope{Message: testProtoEnvelope(), Signature: bytesutil.PadTo([]byte("sig"), 96)} - signedBlinded, err := signed.WireBlinded() - require.NoError(t, err) - expectedBody, err := signedBlinded.MarshalSSZ() + expectedBody, err := signed.MarshalSSZ() require.NoError(t, err) expectedHeaders := map[string]string{ - api.VersionHeader: version.String(version.Gloas), - api.ExecutionPayloadBlindedHeader: "true", + api.VersionHeader: version.String(version.Gloas), + api.BlobDataIncludedHeader: "false", } handler := mock.NewMockHandler(ctrl) handler.EXPECT().PostSSZ( @@ -144,30 +138,25 @@ func TestPublishBlindedExecutionPayloadEnvelope(t *testing.T) { bytes.NewBuffer(expectedBody), ).Return(nil, nil, nil) - client := &beaconApiValidatorClient{handler: handler} - resp, err := client.publishBlindedExecutionPayloadEnvelope(t.Context(), signedBlinded) + client := &beaconApiValidatorClient{handler: handler, envelopeCache: cache.NewExecutionPayloadEnvelopeCache()} + resp, err := client.publishExecutionPayloadEnvelope(t.Context(), signed) require.NoError(t, err) require.NotNil(t, resp) } -func TestPublishBlindedExecutionPayloadEnvelope_JSONFallbackOn406(t *testing.T) { +func TestPublishExecutionPayloadEnvelope_StatefulJSONFallbackOn406(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() signed := ðpb.SignedExecutionPayloadEnvelope{Message: testProtoEnvelope(), Signature: bytesutil.PadTo([]byte("sig"), 96)} - signedBlinded, err := signed.WireBlinded() + msg, err := structs.SignedExecutionPayloadEnvelopeFromConsensus(signed) require.NoError(t, err) - msg, err := structs.BlindedExecutionPayloadEnvelopeFromConsensus(signedBlinded.Message) - require.NoError(t, err) - expectedJSON, err := json.Marshal(&structs.SignedBlindedExecutionPayloadEnvelope{ - Message: msg, - Signature: hexutil.Encode(signedBlinded.Signature), - }) + expectedJSON, err := json.Marshal(msg) require.NoError(t, err) expectedHeaders := map[string]string{ - api.VersionHeader: version.String(version.Gloas), - api.ExecutionPayloadBlindedHeader: "true", + api.VersionHeader: version.String(version.Gloas), + api.BlobDataIncludedHeader: "false", } handler := mock.NewMockHandler(ctrl) handler.EXPECT().PostSSZ( @@ -181,8 +170,8 @@ func TestPublishBlindedExecutionPayloadEnvelope_JSONFallbackOn406(t *testing.T) nil, ).Return(nil) - client := &beaconApiValidatorClient{handler: handler} - resp, err := client.publishBlindedExecutionPayloadEnvelope(t.Context(), signedBlinded) + client := &beaconApiValidatorClient{handler: handler, envelopeCache: cache.NewExecutionPayloadEnvelopeCache()} + resp, err := client.publishExecutionPayloadEnvelope(t.Context(), signed) require.NoError(t, err) require.NotNil(t, resp) } @@ -207,8 +196,8 @@ func TestPublishExecutionPayloadEnvelope_StatelessSendsContents(t *testing.T) { require.NoError(t, err) expectedHeaders := map[string]string{ - api.VersionHeader: version.String(version.Gloas), - api.ExecutionPayloadBlindedHeader: "false", + api.VersionHeader: version.String(version.Gloas), + api.BlobDataIncludedHeader: "true", } handler := mock.NewMockHandler(ctrl) handler.EXPECT().PostSSZ( @@ -234,26 +223,6 @@ func TestPublishExecutionPayloadEnvelope_StatelessSendsContents(t *testing.T) { assert.Equal(t, (*ethpb.ExecutionPayloadEnvelope)(nil), cached) } -func TestPublishExecutionPayloadEnvelope_StatelessCacheMissErrors(t *testing.T) { - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - signed := ðpb.SignedExecutionPayloadEnvelope{ - Message: testProtoEnvelope(), - Signature: bytesutil.PadTo([]byte("sig"), 96), - } - - // No PostSSZ/Post expectation — must error before any HTTP call. - handler := mock.NewMockHandler(ctrl) - client := &beaconApiValidatorClient{ - handler: handler, - envelopeCache: cache.NewExecutionPayloadEnvelopeCache(), - } - - _, err := client.publishExecutionPayloadEnvelope(t.Context(), signed) - assert.ErrorContains(t, "stateless publish: envelope cache miss", err) -} - func TestPublishExecutionPayloadEnvelope_Error(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() diff --git a/validator/client/grpc-api/grpc_validator_client.go b/validator/client/grpc-api/grpc_validator_client.go index e558c137b9fd..928e61e545a0 100644 --- a/validator/client/grpc-api/grpc_validator_client.go +++ b/validator/client/grpc-api/grpc_validator_client.go @@ -500,62 +500,57 @@ func (c *grpcValidatorClient) ConnectionGeneration() uint64 { return provider.ConnectionCounter() } -// Gloas Fork Methods -// -// Mirrors the REST split: stateless self-build publishes the full envelope + blobs as the contents -// arm; stateful self-build fetches the blinded envelope (the BN keeps the full payload) and -// publishes the blinded arm, which the BN reconstructs from its cache. -func (c *grpcValidatorClient) GetExecutionPayloadEnvelope(ctx context.Context, slot primitives.Slot, beaconBlockRoot [32]byte) (*ethpb.ExecutionPayloadEnvelope, *ethpb.WireBlindedExecutionPayloadEnvelope, error) { +// Gloas fork methods mirror the REST split: stateless self-build publishes the contents arm +// (envelope + blobs); stateful publishes the bare signed_envelope arm (BN attaches cached blob data). +func (c *grpcValidatorClient) GetExecutionPayloadEnvelope(ctx context.Context, slot primitives.Slot, beaconBlockRoot [32]byte) (*ethpb.ExecutionPayloadEnvelope, error) { // Stateless: the full envelope + blobs were cached during block production. if envelope, _, _ := c.envelopeCache.Peek(slot); envelope != nil { if bytesutil.ToBytes32(envelope.BeaconBlockRoot) != beaconBlockRoot { - return nil, nil, errors.New("cached execution payload envelope beacon_block_root does not match requested block") + return nil, errors.New("cached execution payload envelope beacon_block_root does not match requested block") } - return envelope, nil, nil + return envelope, nil } - // Stateful: the BN returns the blinded envelope and reconstructs the full payload on publish. + // Stateful: the BN returns the full envelope and attaches blobs/proofs on publish. req := ðpb.ExecutionPayloadEnvelopeRequest{ Slot: slot, } resp, err := c.getClient().GetExecutionPayloadEnvelope(ctx, req) if err != nil { - return nil, nil, errors.Wrap( + return nil, errors.Wrap( client.ErrConnectionIssue, errors.Wrap(err, "GetExecutionPayloadEnvelope").Error(), ) } + if resp.Envelope == nil { + return nil, errors.New("beacon node returned nil execution payload envelope") + } // Mirror the REST handler's root check (the gRPC request carries only the slot): the returned // envelope must be for the block we are proposing before the VC signs and publishes it. - if resp.Blinded == nil || bytesutil.ToBytes32(resp.Blinded.BeaconBlockRoot) != beaconBlockRoot { - return nil, nil, errors.New("blinded execution payload envelope beacon_block_root does not match requested block") + if bytesutil.ToBytes32(resp.Envelope.BeaconBlockRoot) != beaconBlockRoot { + return nil, errors.New("execution payload envelope beacon_block_root does not match requested block") } - return nil, resp.Blinded, nil + return resp.Envelope, nil } -// PublishExecutionPayloadEnvelope publishes the stateless contents arm: the full signed envelope -// plus the blobs/proofs cached during block production. +// PublishExecutionPayloadEnvelope publishes the contents arm when blobs/proofs were cached during +// block production, and the bare signed_envelope arm otherwise (BN attaches cached blob data). func (c *grpcValidatorClient) PublishExecutionPayloadEnvelope(ctx context.Context, in *ethpb.SignedExecutionPayloadEnvelope) (*empty.Empty, error) { + var cachedEnv *ethpb.ExecutionPayloadEnvelope var blobs, kzgProofs [][]byte if in.GetMessage().GetPayload() != nil { - _, blobs, kzgProofs = c.envelopeCache.Take(primitives.Slot(in.Message.Payload.SlotNumber)) + cachedEnv, blobs, kzgProofs = c.envelopeCache.Take(primitives.Slot(in.Message.Payload.SlotNumber)) } - generic := ðpb.GenericSignedExecutionPayloadEnvelope{ - Envelope: ðpb.GenericSignedExecutionPayloadEnvelope_Contents{ + generic := ðpb.GenericSignedExecutionPayloadEnvelope{} + if cachedEnv == nil { + generic.Envelope = ðpb.GenericSignedExecutionPayloadEnvelope_SignedEnvelope{SignedEnvelope: in} + } else { + generic.Envelope = ðpb.GenericSignedExecutionPayloadEnvelope_Contents{ Contents: ðpb.SignedExecutionPayloadEnvelopeContents{ SignedExecutionPayloadEnvelope: in, KzgProofs: kzgProofs, Blobs: blobs, }, - }, - } - return c.getClient().PublishExecutionPayloadEnvelope(ctx, generic) -} - -// PublishBlindedExecutionPayloadEnvelope publishes the stateful blinded arm; the BN reconstructs the -// full envelope and data column sidecars from its own cache. -func (c *grpcValidatorClient) PublishBlindedExecutionPayloadEnvelope(ctx context.Context, in *ethpb.SignedWireBlindedExecutionPayloadEnvelope) (*empty.Empty, error) { - generic := ðpb.GenericSignedExecutionPayloadEnvelope{ - Envelope: ðpb.GenericSignedExecutionPayloadEnvelope_Blinded{Blinded: in}, + } } return c.getClient().PublishExecutionPayloadEnvelope(ctx, generic) } diff --git a/validator/client/grpc-api/grpc_validator_client_test.go b/validator/client/grpc-api/grpc_validator_client_test.go index a8095231d1c0..6f9fa9a4a6b1 100644 --- a/validator/client/grpc-api/grpc_validator_client_test.go +++ b/validator/client/grpc-api/grpc_validator_client_test.go @@ -447,12 +447,10 @@ func TestGetExecutionPayloadEnvelope(t *testing.T) { } tests := []struct { - name string - root [32]byte - prepare func(vc *grpcValidatorClient, client *mock2.MockBeaconNodeValidatorClient) - wantErr string - wantFull bool - wantBlinded bool + name string + root [32]byte + prepare func(vc *grpcValidatorClient, client *mock2.MockBeaconNodeValidatorClient) + wantErr string }{ { name: "cache hit returns full envelope", @@ -461,7 +459,6 @@ func TestGetExecutionPayloadEnvelope(t *testing.T) { prepare: func(vc *grpcValidatorClient, _ *mock2.MockBeaconNodeValidatorClient) { vc.envelopeCache.Add(slot, cachedEnvelope, nil, nil) }, - wantFull: true, }, { name: "cache hit with mismatched root errors", @@ -472,22 +469,21 @@ func TestGetExecutionPayloadEnvelope(t *testing.T) { wantErr: "cached execution payload envelope beacon_block_root does not match", }, { - name: "cache miss returns blinded envelope", + name: "cache miss fetches envelope from the beacon node", root: matchingRoot, prepare: func(_ *grpcValidatorClient, client *mock2.MockBeaconNodeValidatorClient) { client.EXPECT().GetExecutionPayloadEnvelope(gomock.Any(), ð.ExecutionPayloadEnvelopeRequest{Slot: slot}).Return( - ð.ExecutionPayloadEnvelopeResponse{Blinded: ð.WireBlindedExecutionPayloadEnvelope{BeaconBlockRoot: matchingRoot[:]}}, nil) + ð.ExecutionPayloadEnvelopeResponse{Envelope: cachedEnvelope}, nil) }, - wantBlinded: true, }, { - name: "cache miss with mismatched blinded root errors", + name: "cache miss with mismatched root errors", root: requestedRoot, prepare: func(_ *grpcValidatorClient, client *mock2.MockBeaconNodeValidatorClient) { client.EXPECT().GetExecutionPayloadEnvelope(gomock.Any(), gomock.Any()).Return( - ð.ExecutionPayloadEnvelopeResponse{Blinded: ð.WireBlindedExecutionPayloadEnvelope{BeaconBlockRoot: matchingRoot[:]}}, nil) + ð.ExecutionPayloadEnvelopeResponse{Envelope: cachedEnvelope}, nil) }, - wantErr: "blinded execution payload envelope beacon_block_root does not match", + wantErr: "execution payload envelope beacon_block_root does not match", }, } @@ -499,26 +495,59 @@ func TestGetExecutionPayloadEnvelope(t *testing.T) { vc := newTestGrpcValidatorClient(t, client, true) tt.prepare(vc, client) - full, blinded, err := vc.GetExecutionPayloadEnvelope(t.Context(), slot, tt.root) + envelope, err := vc.GetExecutionPayloadEnvelope(t.Context(), slot, tt.root) if tt.wantErr != "" { require.ErrorContains(t, tt.wantErr, err) return } require.NoError(t, err) - if tt.wantFull { - require.Equal(t, cachedEnvelope, full) - } else { - require.IsNil(t, full) - } - if tt.wantBlinded { - require.NotNil(t, blinded) - } else { - require.IsNil(t, blinded) - } + require.Equal(t, cachedEnvelope, envelope) }) } } +// PublishExecutionPayloadEnvelope must pick the generic arm from the local cache state: +// contents when blobs/proofs were cached, bare signed_envelope otherwise. +func TestPublishExecutionPayloadEnvelope_ArmSelection(t *testing.T) { + slot := primitives.Slot(9) + signed := ð.SignedExecutionPayloadEnvelope{ + Message: ð.ExecutionPayloadEnvelope{ + Payload: &enginev1.ExecutionPayloadGloas{SlotNumber: slot}, + }, + } + + t.Run("cache hit publishes contents", func(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + client := mock2.NewMockBeaconNodeValidatorClient(ctrl) + client.EXPECT().PublishExecutionPayloadEnvelope(gomock.Any(), gomock.Any()).DoAndReturn( + func(_ context.Context, in *eth.GenericSignedExecutionPayloadEnvelope, _ ...grpc.CallOption) (*emptypb.Empty, error) { + require.NotNil(t, in.GetContents()) + require.Equal(t, 1, len(in.GetContents().Blobs)) + return &emptypb.Empty{}, nil + }) + vc := newTestGrpcValidatorClient(t, client, true) + vc.envelopeCache.Add(slot, signed.Message, [][]byte{{1}}, [][]byte{{2}}) + _, err := vc.PublishExecutionPayloadEnvelope(t.Context(), signed) + require.NoError(t, err) + }) + + t.Run("cache miss publishes bare signed envelope", func(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + client := mock2.NewMockBeaconNodeValidatorClient(ctrl) + client.EXPECT().PublishExecutionPayloadEnvelope(gomock.Any(), gomock.Any()).DoAndReturn( + func(_ context.Context, in *eth.GenericSignedExecutionPayloadEnvelope, _ ...grpc.CallOption) (*emptypb.Empty, error) { + require.IsNil(t, in.GetContents()) + require.NotNil(t, in.GetSignedEnvelope()) + return &emptypb.Empty{}, nil + }) + vc := newTestGrpcValidatorClient(t, client, false) + _, err := vc.PublishExecutionPayloadEnvelope(t.Context(), signed) + require.NoError(t, err) + }) +} + func TestGrpcValidatorClient_ConnectionGeneration(t *testing.T) { conn, err := validatorHelpers.NewNodeConnection( validatorHelpers.WithGRPCProvider(&grpcutil.MockGrpcProvider{MockHosts: []string{"mock:4000"}, ConnCounter: 7}), diff --git a/validator/client/iface/validator_client.go b/validator/client/iface/validator_client.go index 031634c0931f..bd4775fbc009 100644 --- a/validator/client/iface/validator_client.go +++ b/validator/client/iface/validator_client.go @@ -167,9 +167,8 @@ type ValidatorClient interface { Host() string EnsureReady(ctx context.Context) bool ConnectionGeneration() uint64 - GetExecutionPayloadEnvelope(ctx context.Context, slot primitives.Slot, beaconBlockRoot [32]byte) (*ethpb.ExecutionPayloadEnvelope, *ethpb.WireBlindedExecutionPayloadEnvelope, error) + GetExecutionPayloadEnvelope(ctx context.Context, slot primitives.Slot, beaconBlockRoot [32]byte) (*ethpb.ExecutionPayloadEnvelope, error) PublishExecutionPayloadEnvelope(ctx context.Context, in *ethpb.SignedExecutionPayloadEnvelope) (*empty.Empty, error) - PublishBlindedExecutionPayloadEnvelope(ctx context.Context, in *ethpb.SignedWireBlindedExecutionPayloadEnvelope) (*empty.Empty, error) PayloadAttestationData(ctx context.Context, slot primitives.Slot) (*ethpb.PayloadAttestationData, error) SubmitPayloadAttestation(ctx context.Context, in *ethpb.PayloadAttestationMessage) (*empty.Empty, error) } diff --git a/validator/client/propose_gloas.go b/validator/client/propose_gloas.go index 03ff51884c53..2ee42601b139 100644 --- a/validator/client/propose_gloas.go +++ b/validator/client/propose_gloas.go @@ -90,24 +90,13 @@ func (v *validator) proposeSelfBuildEnvelope( return errors.Wrap(err, "could not compute beacon block root") } - full, blinded, err := v.validatorClient.GetExecutionPayloadEnvelope(ctx, slot, blockRoot) + envelope, err := v.validatorClient.GetExecutionPayloadEnvelope(ctx, slot, blockRoot) if err != nil { validatorSelfBuildEnvelopeSubmissionTotal.WithLabelValues("failed").Inc() return errors.Wrap(err, "failed to get execution payload envelope for self-build") } - // Stateful self-build (REST or gRPC) returns only the blinded envelope — the BN reconstructs the - // full payload from its cache. Stateless self-build returns the full envelope. - if full == nil { - if err := v.publishSelfBuildBlinded(ctx, pubKey, slot, blinded); err != nil { - validatorSelfBuildEnvelopeSubmissionTotal.WithLabelValues("failed").Inc() - return err - } - validatorSelfBuildEnvelopeSubmissionTotal.WithLabelValues("success").Inc() - return nil - } - - signedEnvelope, err := v.signExecutionPayloadEnvelope(ctx, pubKey, slot, full) + signedEnvelope, err := v.signExecutionPayloadEnvelope(ctx, pubKey, slot, envelope) if err != nil { validatorSelfBuildEnvelopeSubmissionTotal.WithLabelValues("failed").Inc() return errors.Wrap(err, "could not sign execution payload envelope") @@ -121,43 +110,3 @@ func (v *validator) proposeSelfBuildEnvelope( return nil } - -// publishSelfBuildBlinded signs the blinded envelope (HTR matches the full envelope, so the -// signature is valid against either) and publishes it. Signing is local-keymanager only — -// web3signer blinded-envelope signing is not yet supported. -func (v *validator) publishSelfBuildBlinded( - ctx context.Context, - pubKey [fieldparams.BLSPubkeyLength]byte, - slot primitives.Slot, - blinded *ethpb.WireBlindedExecutionPayloadEnvelope, -) error { - if blinded == nil { - return errors.New("nil blinded execution payload envelope") - } - epoch := slots.ToEpoch(slot) - domain, err := v.domainData(ctx, epoch, params.BeaconConfig().DomainBeaconBuilder[:]) - if err != nil { - return errors.Wrap(err, "could not get domain data") - } - if domain == nil { - return errors.New("nil domain data") - } - signingRoot, err := signing.ComputeSigningRoot(blinded, domain.SignatureDomain) - if err != nil { - return errors.Wrap(err, "could not compute signing root") - } - sig, err := v.km.Sign(ctx, &validatorpb.SignRequest{ - PublicKey: pubKey[:], - SigningRoot: signingRoot[:], - SignatureDomain: domain.SignatureDomain, - SigningSlot: slot, - }) - if err != nil { - return errors.Wrap(err, "could not sign blinded execution payload envelope") - } - signed := ðpb.SignedWireBlindedExecutionPayloadEnvelope{Message: blinded, Signature: sig.Marshal()} - if _, err := v.validatorClient.PublishBlindedExecutionPayloadEnvelope(ctx, signed); err != nil { - return errors.Wrap(err, "failed to publish blinded execution payload envelope") - } - return nil -} diff --git a/validator/client/propose_gloas_test.go b/validator/client/propose_gloas_test.go index 53812a743ee6..4ed538b7011d 100644 --- a/validator/client/propose_gloas_test.go +++ b/validator/client/propose_gloas_test.go @@ -72,7 +72,7 @@ func TestProposeSelfBuildEnvelope(t *testing.T) { m.validatorClient.EXPECT(). GetExecutionPayloadEnvelope(gomock.Any(), slot, gomock.Any()). - Return(expectedEnvelope, nil, nil) + Return(expectedEnvelope, nil) builderDomain := make([]byte, 32) copy(builderDomain, params.BeaconConfig().DomainBeaconBuilder[:]) @@ -93,41 +93,6 @@ func TestProposeSelfBuildEnvelope(t *testing.T) { require.NoError(t, err) } -// Stateful self-build: the client returns the blinded envelope (full is nil), so the VC signs the -// blinded root and publishes it via PublishBlindedExecutionPayloadEnvelope. -func TestProposeSelfBuildEnvelope_Blinded(t *testing.T) { - validator, m, validatorKey, finish := setup(t, false) - defer finish() - - slot := primitives.Slot(100) - builderIndex := params.BeaconConfig().BuilderIndexSelfBuild - - blinded, err := testExecutionPayloadEnvelope(slot, builderIndex).WireBlinded() - require.NoError(t, err) - - m.validatorClient.EXPECT(). - GetExecutionPayloadEnvelope(gomock.Any(), slot, gomock.Any()). - Return(nil, blinded, nil) - - builderDomain := make([]byte, 32) - copy(builderDomain, params.BeaconConfig().DomainBeaconBuilder[:]) - m.validatorClient.EXPECT(). - DomainData(gomock.Any(), gomock.Any()). - Return(ðpb.DomainResponse{SignatureDomain: builderDomain}, nil) - - m.validatorClient.EXPECT(). - PublishBlindedExecutionPayloadEnvelope(gomock.Any(), gomock.AssignableToTypeOf(ðpb.SignedWireBlindedExecutionPayloadEnvelope{})). - Return(&emptypb.Empty{}, nil) - - signedBlock := signedGloasBlock(t, slot, builderIndex) - - var pubKey [fieldparams.BLSPubkeyLength]byte - copy(pubKey[:], validatorKey.PublicKey().Marshal()) - - err = validator.proposeSelfBuildEnvelope(t.Context(), slot, pubKey, signedBlock) - require.NoError(t, err) -} - func TestProposeSelfBuildEnvelope_MissingBid(t *testing.T) { validator, _, _, finish := setup(t, false) defer finish() @@ -153,7 +118,7 @@ func TestProposeSelfBuildEnvelope_ClientError(t *testing.T) { m.validatorClient.EXPECT(). GetExecutionPayloadEnvelope(gomock.Any(), gomock.Any(), gomock.Any()). - Return(nil, nil, errors.New("connection refused")) + Return(nil, errors.New("connection refused")) signedBlock := signedGloasBlock(t, 1, params.BeaconConfig().BuilderIndexSelfBuild) @@ -328,7 +293,7 @@ func TestProposeBlock_Gloas_EnvelopeAfterBlock(t *testing.T) { getEnvelopeCall := m.validatorClient.EXPECT(). GetExecutionPayloadEnvelope(gomock.Any(), primitives.Slot(1), gomock.Any()). - Return(envelope, nil, nil). + Return(envelope, nil). After(proposeCall) // DomainData for envelope signing.