From e8625cd89d730f80222ed6b64b44f9b515e4bf7f Mon Sep 17 00:00:00 2001 From: Manu NALEPA Date: Mon, 23 Jun 2025 16:47:02 +0200 Subject: [PATCH] Peerdas various (#15423) * Topic mapping: Groupe `const` and `var`. Cosmetic change, no functional change. * `TopicFromMessage`: Do not assume anymore that all Fulu specific topics are V3 only. * Proto: Remove unused `DataColumnIdentifier` and add new `StatusV2`. `DataColumnIdentifier` was removed in the spec here: https://github.com/ethereum/consensus-specs/pull/4284. Eventually, we stopped using it in Prysm, but never removed the corresponding proto message. The new `StatusV2` is introduced in the spec here: https://github.com/ethereum/consensus-specs/pull/4374 * `readChunkedDataColumnSideCar` ==> `readChunkedDataColumnSidecar`. * `rpc_send_request.go`: Reorganize file (no function change). * `readChunkedDataColumnSidecar`: Add `validationFunctions` parameter and add tests. --- beacon-chain/p2p/rpc_topic_mappings.go | 243 ++++++----- beacon-chain/p2p/rpc_topic_mappings_test.go | 59 +-- .../rpc_data_column_sidecars_by_range_test.go | 2 +- .../rpc_data_column_sidecars_by_root_test.go | 2 +- beacon-chain/sync/rpc_send_request.go | 34 +- beacon-chain/sync/rpc_send_request_test.go | 206 +++++++++ changelog/manu-peerdas-variou.md | 9 + proto/prysm/v1alpha1/BUILD.bazel | 12 +- proto/prysm/v1alpha1/data_columns.pb.go | 125 ++---- proto/prysm/v1alpha1/data_columns.proto | 5 - proto/prysm/v1alpha1/fulu.ssz.go | 200 ++++++--- proto/prysm/v1alpha1/p2p_messages.pb.go | 409 ++++++++++++------ proto/prysm/v1alpha1/p2p_messages.proto | 18 + 13 files changed, 843 insertions(+), 481 deletions(-) create mode 100644 changelog/manu-peerdas-variou.md diff --git a/beacon-chain/p2p/rpc_topic_mappings.go b/beacon-chain/p2p/rpc_topic_mappings.go index 632419f894..e08238d8a3 100644 --- a/beacon-chain/p2p/rpc_topic_mappings.go +++ b/beacon-chain/p2p/rpc_topic_mappings.go @@ -22,50 +22,52 @@ const ( SchemaVersionV3 = "/3" ) -// Specifies the protocol prefix for all our Req/Resp topics. -const protocolPrefix = "/eth2/beacon_chain/req" +const ( + // Specifies the protocol prefix for all our Req/Resp topics. + protocolPrefix = "/eth2/beacon_chain/req" -// StatusMessageName specifies the name for the status message topic. -const StatusMessageName = "/status" + // StatusMessageName specifies the name for the status message topic. + StatusMessageName = "/status" -// GoodbyeMessageName specifies the name for the goodbye message topic. -const GoodbyeMessageName = "/goodbye" + // GoodbyeMessageName specifies the name for the goodbye message topic. + GoodbyeMessageName = "/goodbye" -// BeaconBlocksByRangeMessageName specifies the name for the beacon blocks by range message topic. -const BeaconBlocksByRangeMessageName = "/beacon_blocks_by_range" + // BeaconBlocksByRangeMessageName specifies the name for the beacon blocks by range message topic. + BeaconBlocksByRangeMessageName = "/beacon_blocks_by_range" -// BeaconBlocksByRootsMessageName specifies the name for the beacon blocks by root message topic. -const BeaconBlocksByRootsMessageName = "/beacon_blocks_by_root" + // BeaconBlocksByRootsMessageName specifies the name for the beacon blocks by root message topic. + BeaconBlocksByRootsMessageName = "/beacon_blocks_by_root" -// PingMessageName Specifies the name for the ping message topic. -const PingMessageName = "/ping" + // PingMessageName Specifies the name for the ping message topic. + PingMessageName = "/ping" -// MetadataMessageName specifies the name for the metadata message topic. -const MetadataMessageName = "/metadata" + // MetadataMessageName specifies the name for the metadata message topic. + MetadataMessageName = "/metadata" -// BlobSidecarsByRangeName is the name for the BlobSidecarsByRange v1 message topic. -const BlobSidecarsByRangeName = "/blob_sidecars_by_range" + // BlobSidecarsByRangeName is the name for the BlobSidecarsByRange v1 message topic. + BlobSidecarsByRangeName = "/blob_sidecars_by_range" -// BlobSidecarsByRootName is the name for the BlobSidecarsByRoot v1 message topic. -const BlobSidecarsByRootName = "/blob_sidecars_by_root" + // BlobSidecarsByRootName is the name for the BlobSidecarsByRoot v1 message topic. + BlobSidecarsByRootName = "/blob_sidecars_by_root" -// LightClientBootstrapName is the name for the LightClientBootstrap message topic, -const LightClientBootstrapName = "/light_client_bootstrap" + // LightClientBootstrapName is the name for the LightClientBootstrap message topic, + LightClientBootstrapName = "/light_client_bootstrap" -// LightClientUpdatesByRangeName is the name for the LightClientUpdatesByRange topic. -const LightClientUpdatesByRangeName = "/light_client_updates_by_range" + // LightClientUpdatesByRangeName is the name for the LightClientUpdatesByRange topic. + LightClientUpdatesByRangeName = "/light_client_updates_by_range" -// LightClientFinalityUpdateName is the name for the LightClientFinalityUpdate topic. -const LightClientFinalityUpdateName = "/light_client_finality_update" + // LightClientFinalityUpdateName is the name for the LightClientFinalityUpdate topic. + LightClientFinalityUpdateName = "/light_client_finality_update" -// LightClientOptimisticUpdateName is the name for the LightClientOptimisticUpdate topic. -const LightClientOptimisticUpdateName = "/light_client_optimistic_update" + // LightClientOptimisticUpdateName is the name for the LightClientOptimisticUpdate topic. + LightClientOptimisticUpdateName = "/light_client_optimistic_update" -// DataColumnSidecarsByRootName is the name for the DataColumnSidecarsByRoot v1 message topic. -const DataColumnSidecarsByRootName = "/data_column_sidecars_by_root" + // DataColumnSidecarsByRootName is the name for the DataColumnSidecarsByRoot v1 message topic. + DataColumnSidecarsByRootName = "/data_column_sidecars_by_root" -// DataColumnSidecarsByRangeName is the name for the DataColumnSidecarsByRange v1 message topic. -const DataColumnSidecarsByRangeName = "/data_column_sidecars_by_range" + // DataColumnSidecarsByRangeName is the name for the DataColumnSidecarsByRange v1 message topic. + DataColumnSidecarsByRangeName = "/data_column_sidecars_by_range" +) const ( // V1 RPC Topics @@ -124,94 +126,103 @@ const ( ) // RPCTopicMappings map the base message type to the rpc request. -var RPCTopicMappings = map[string]interface{}{ - // RPC Status Message - RPCStatusTopicV1: new(pb.Status), - // RPC Goodbye Message - RPCGoodByeTopicV1: new(primitives.SSZUint64), - // RPC Block By Range Message - RPCBlocksByRangeTopicV1: new(pb.BeaconBlocksByRangeRequest), - RPCBlocksByRangeTopicV2: new(pb.BeaconBlocksByRangeRequest), - // RPC Block By Root Message - RPCBlocksByRootTopicV1: new(p2ptypes.BeaconBlockByRootsReq), - RPCBlocksByRootTopicV2: new(p2ptypes.BeaconBlockByRootsReq), - // RPC Ping Message - RPCPingTopicV1: new(primitives.SSZUint64), - // RPC Metadata Message - RPCMetaDataTopicV1: new(interface{}), - RPCMetaDataTopicV2: new(interface{}), - RPCMetaDataTopicV3: new(interface{}), - // BlobSidecarsByRange v1 Message - RPCBlobSidecarsByRangeTopicV1: new(pb.BlobSidecarsByRangeRequest), - // BlobSidecarsByRoot v1 Message - RPCBlobSidecarsByRootTopicV1: new(p2ptypes.BlobSidecarsByRootReq), +var ( + RPCTopicMappings = map[string]interface{}{ + // RPC Status Message + RPCStatusTopicV1: new(pb.Status), - // Light client - RPCLightClientBootstrapTopicV1: new([fieldparams.RootLength]byte), - RPCLightClientUpdatesByRangeTopicV1: new(pb.LightClientUpdatesByRangeRequest), - RPCLightClientFinalityUpdateTopicV1: new(interface{}), - RPCLightClientOptimisticUpdateTopicV1: new(interface{}), + // RPC Goodbye Message + RPCGoodByeTopicV1: new(primitives.SSZUint64), - // DataColumnSidecarsByRange v1 Message - RPCDataColumnSidecarsByRangeTopicV1: new(pb.DataColumnSidecarsByRangeRequest), - // DataColumnSidecarsByRoot v1 Message - RPCDataColumnSidecarsByRootTopicV1: new(p2ptypes.DataColumnsByRootIdentifiers), -} + // RPC Block By Range Message + RPCBlocksByRangeTopicV1: new(pb.BeaconBlocksByRangeRequest), + RPCBlocksByRangeTopicV2: new(pb.BeaconBlocksByRangeRequest), -// Maps all registered protocol prefixes. -var protocolMapping = map[string]bool{ - protocolPrefix: true, -} + // RPC Block By Root Message + RPCBlocksByRootTopicV1: new(p2ptypes.BeaconBlockByRootsReq), + RPCBlocksByRootTopicV2: new(p2ptypes.BeaconBlockByRootsReq), -// Maps all the protocol message names for the different rpc -// topics. -var messageMapping = map[string]bool{ - StatusMessageName: true, - GoodbyeMessageName: true, - BeaconBlocksByRangeMessageName: true, - BeaconBlocksByRootsMessageName: true, - PingMessageName: true, - MetadataMessageName: true, - BlobSidecarsByRangeName: true, - BlobSidecarsByRootName: true, - LightClientBootstrapName: true, - LightClientUpdatesByRangeName: true, - LightClientFinalityUpdateName: true, - LightClientOptimisticUpdateName: true, - DataColumnSidecarsByRootName: true, - DataColumnSidecarsByRangeName: true, -} + // RPC Ping Message + RPCPingTopicV1: new(primitives.SSZUint64), -// Maps all the RPC messages which are to updated in altair. -var altairMapping = map[string]bool{ - BeaconBlocksByRangeMessageName: true, - BeaconBlocksByRootsMessageName: true, - MetadataMessageName: true, -} + // RPC Metadata Message + RPCMetaDataTopicV1: new(interface{}), + RPCMetaDataTopicV2: new(interface{}), + RPCMetaDataTopicV3: new(interface{}), -// Maps all the RPC messages which are to updated in fulu. -var fuluMapping = map[string]bool{ - MetadataMessageName: true, -} + // BlobSidecarsByRange v1 Message + RPCBlobSidecarsByRangeTopicV1: new(pb.BlobSidecarsByRangeRequest), -var versionMapping = map[string]bool{ - SchemaVersionV1: true, - SchemaVersionV2: true, - SchemaVersionV3: true, -} + // BlobSidecarsByRoot v1 Message + RPCBlobSidecarsByRootTopicV1: new(p2ptypes.BlobSidecarsByRootReq), -// OmitContextBytesV1 keeps track of which RPC methods do not write context bytes in their v1 incarnations. -// Phase0 did not have the notion of context bytes, which prefix wire-encoded values with a [4]byte identifier -// to convey the schema for the receiver to use. These RPCs had a version bump to V2 when the context byte encoding -// was introduced. For other RPC methods, context bytes are always required. -var OmitContextBytesV1 = map[string]bool{ - StatusMessageName: true, - GoodbyeMessageName: true, - BeaconBlocksByRangeMessageName: true, - BeaconBlocksByRootsMessageName: true, - PingMessageName: true, - MetadataMessageName: true, -} + // Light client + RPCLightClientBootstrapTopicV1: new([fieldparams.RootLength]byte), + RPCLightClientUpdatesByRangeTopicV1: new(pb.LightClientUpdatesByRangeRequest), + RPCLightClientFinalityUpdateTopicV1: new(interface{}), + RPCLightClientOptimisticUpdateTopicV1: new(interface{}), + + // DataColumnSidecarsByRange v1 Message + RPCDataColumnSidecarsByRangeTopicV1: new(pb.DataColumnSidecarsByRangeRequest), + + // DataColumnSidecarsByRoot v1 Message + RPCDataColumnSidecarsByRootTopicV1: new(p2ptypes.DataColumnsByRootIdentifiers), + } + + // Maps all registered protocol prefixes. + protocolMapping = map[string]bool{ + protocolPrefix: true, + } + + // Maps all the protocol message names for the different rpc topics. + messageMapping = map[string]bool{ + StatusMessageName: true, + GoodbyeMessageName: true, + BeaconBlocksByRangeMessageName: true, + BeaconBlocksByRootsMessageName: true, + PingMessageName: true, + MetadataMessageName: true, + BlobSidecarsByRangeName: true, + BlobSidecarsByRootName: true, + LightClientBootstrapName: true, + LightClientUpdatesByRangeName: true, + LightClientFinalityUpdateName: true, + LightClientOptimisticUpdateName: true, + DataColumnSidecarsByRootName: true, + DataColumnSidecarsByRangeName: true, + } + + // Maps all the RPC messages which are to updated in altair. + altairMapping = map[string]string{ + BeaconBlocksByRangeMessageName: SchemaVersionV2, + BeaconBlocksByRootsMessageName: SchemaVersionV2, + MetadataMessageName: SchemaVersionV2, + } + + // Maps all the RPC messages which are to updated in fulu. + fuluMapping = map[string]string{ + MetadataMessageName: SchemaVersionV3, + } + + versionMapping = map[string]bool{ + SchemaVersionV1: true, + SchemaVersionV2: true, + SchemaVersionV3: true, + } + + // OmitContextBytesV1 keeps track of which RPC methods do not write context bytes in their v1 incarnations. + // Phase0 did not have the notion of context bytes, which prefix wire-encoded values with a [4]byte identifier + // to convey the schema for the receiver to use. These RPCs had a version bump to V2 when the context byte encoding + // was introduced. For other RPC methods, context bytes are always required. + OmitContextBytesV1 = map[string]bool{ + StatusMessageName: true, + GoodbyeMessageName: true, + BeaconBlocksByRangeMessageName: true, + BeaconBlocksByRootsMessageName: true, + PingMessageName: true, + MetadataMessageName: true, + } +) // VerifyTopicMapping verifies that the topic and its accompanying // message type is correct. @@ -333,13 +344,17 @@ func TopicFromMessage(msg string, epoch primitives.Epoch) (string, error) { beaconConfig := params.BeaconConfig() // Check if the message is to be updated in fulu. - if epoch >= beaconConfig.FuluForkEpoch && fuluMapping[msg] { - return protocolPrefix + msg + SchemaVersionV3, nil + if epoch >= beaconConfig.FuluForkEpoch { + if version, ok := fuluMapping[msg]; ok { + return protocolPrefix + msg + version, nil + } } // Check if the message is to be updated in altair. - if epoch >= beaconConfig.AltairForkEpoch && altairMapping[msg] { - return protocolPrefix + msg + SchemaVersionV2, nil + if epoch >= beaconConfig.AltairForkEpoch { + if version, ok := altairMapping[msg]; ok { + return protocolPrefix + msg + version, nil + } } return protocolPrefix + msg + SchemaVersionV1, nil diff --git a/beacon-chain/p2p/rpc_topic_mappings_test.go b/beacon-chain/p2p/rpc_topic_mappings_test.go index c5c16107bc..b9fa9e2655 100644 --- a/beacon-chain/p2p/rpc_topic_mappings_test.go +++ b/beacon-chain/p2p/rpc_topic_mappings_test.go @@ -119,50 +119,31 @@ func TestTopicFromMessage_CorrectType(t *testing.T) { }) t.Run("after altair fork but before fulu fork", func(t *testing.T) { - for m := range messageMapping { - topic, err := TopicFromMessage(m, altairForkEpoch) - require.NoError(t, err) + // Not modified in altair fork. + topic, err := TopicFromMessage(GoodbyeMessageName, altairForkEpoch) + require.NoError(t, err) + require.Equal(t, "/eth2/beacon_chain/req/goodbye/1", topic) - if altairMapping[m] { - require.Equal(t, true, strings.Contains(topic, SchemaVersionV2)) - _, _, version, err := TopicDeconstructor(topic) - require.NoError(t, err) - require.Equal(t, SchemaVersionV2, version) - continue - } - - require.Equal(t, true, strings.Contains(topic, SchemaVersionV1)) - _, _, version, err := TopicDeconstructor(topic) - require.NoError(t, err) - require.Equal(t, SchemaVersionV1, version) - } + // Modified in altair fork. + topic, err = TopicFromMessage(MetadataMessageName, altairForkEpoch) + require.NoError(t, err) + require.Equal(t, "/eth2/beacon_chain/req/metadata/2", topic) }) t.Run("after fulu fork", func(t *testing.T) { - for m := range messageMapping { - topic, err := TopicFromMessage(m, fuluForkEpoch) - require.NoError(t, err) + // Not modified in any fork. + topic, err := TopicFromMessage(GoodbyeMessageName, fuluForkEpoch) + require.NoError(t, err) + require.Equal(t, "/eth2/beacon_chain/req/goodbye/1", topic) - if fuluMapping[m] { - require.Equal(t, true, strings.Contains(topic, SchemaVersionV3)) - _, _, version, err := TopicDeconstructor(topic) - require.NoError(t, err) - require.Equal(t, SchemaVersionV3, version) - continue - } + // Modified in altair fork. + topic, err = TopicFromMessage(BeaconBlocksByRangeMessageName, fuluForkEpoch) + require.NoError(t, err) + require.Equal(t, "/eth2/beacon_chain/req/beacon_blocks_by_range/2", topic) - if altairMapping[m] { - require.Equal(t, true, strings.Contains(topic, SchemaVersionV2)) - _, _, version, err := TopicDeconstructor(topic) - require.NoError(t, err) - require.Equal(t, SchemaVersionV2, version) - continue - } - - require.Equal(t, true, strings.Contains(topic, SchemaVersionV1)) - _, _, version, err := TopicDeconstructor(topic) - require.NoError(t, err) - require.Equal(t, SchemaVersionV1, version) - } + // Modified both in altair and fulu fork. + topic, err = TopicFromMessage(MetadataMessageName, fuluForkEpoch) + require.NoError(t, err) + require.Equal(t, "/eth2/beacon_chain/req/metadata/3", topic) }) } diff --git a/beacon-chain/sync/rpc_data_column_sidecars_by_range_test.go b/beacon-chain/sync/rpc_data_column_sidecars_by_range_test.go index ca224f3493..261b8a12ab 100644 --- a/beacon-chain/sync/rpc_data_column_sidecars_by_range_test.go +++ b/beacon-chain/sync/rpc_data_column_sidecars_by_range_test.go @@ -169,7 +169,7 @@ func TestDataColumnSidecarsByRangeRPCHandler(t *testing.T) { sidecars := make([]*blocks.RODataColumn, 0, 5) for i := uint64(0); ; /* no stop condition */ i++ { - sidecar, err := readChunkedDataColumnSideCar(stream, remoteP2P, ctxMap) + sidecar, err := readChunkedDataColumnSidecar(stream, remoteP2P, ctxMap) if errors.Is(err, io.EOF) { // End of stream. break diff --git a/beacon-chain/sync/rpc_data_column_sidecars_by_root_test.go b/beacon-chain/sync/rpc_data_column_sidecars_by_root_test.go index 6d37ad2b36..79f115b227 100644 --- a/beacon-chain/sync/rpc_data_column_sidecars_by_root_test.go +++ b/beacon-chain/sync/rpc_data_column_sidecars_by_root_test.go @@ -139,7 +139,7 @@ func TestDataColumnSidecarsByRootRPCHandler(t *testing.T) { sidecars := make([]*blocks.RODataColumn, 0, 5) for i := uint64(0); ; /* no stop condition */ i++ { - sidecar, err := readChunkedDataColumnSideCar(stream, remoteP2P, ctxMap) + sidecar, err := readChunkedDataColumnSidecar(stream, remoteP2P, ctxMap) if errors.Is(err, io.EOF) { // End of stream. break diff --git a/beacon-chain/sync/rpc_send_request.go b/beacon-chain/sync/rpc_send_request.go index d7a7e82b53..3d9bddd1fa 100644 --- a/beacon-chain/sync/rpc_send_request.go +++ b/beacon-chain/sync/rpc_send_request.go @@ -42,6 +42,10 @@ var ( errDataColumnChunkedReadFailure = errors.New("failed to read stream of chunk-encoded data columns") ) +// ------ +// Blocks +// ------ + // BeaconBlockProcessor defines a block processing function, which allows to start utilizing // blocks even before all blocks are ready. type BeaconBlockProcessor func(block interfaces.ReadOnlySignedBeaconBlock) error @@ -155,6 +159,14 @@ func SendBeaconBlocksByRootRequest( return blocks, nil } +// ------------- +// Blob sidecars +// ------------- + +// BlobResponseValidation represents a function that can validate aspects of a single unmarshaled blob sidecar +// that was received from a peer in response to an rpc request. +type BlobResponseValidation func(blocks.ROBlob) error + func SendBlobsByRangeRequest(ctx context.Context, tor blockchain.TemporalOracle, p2pApi p2p.SenderEncoder, pid peer.ID, ctxMap ContextByteVersions, req *ethpb.BlobSidecarsByRangeRequest, bvs ...BlobResponseValidation) ([]blocks.ROBlob, error) { topic, err := p2p.TopicFromMessage(p2p.BlobSidecarsByRangeName, slots.ToEpoch(tor.CurrentSlot())) if err != nil { @@ -216,10 +228,6 @@ func SendBlobSidecarByRoot( return readChunkEncodedBlobs(stream, p2pApi.Encoding(), ctxMap, blobValidatorFromRootReq(req), max) } -// BlobResponseValidation represents a function that can validate aspects of a single unmarshaled blob -// that was received from a peer in response to an rpc request. -type BlobResponseValidation func(blocks.ROBlob) error - func composeBlobValidations(vf ...BlobResponseValidation) BlobResponseValidation { return func(blob blocks.ROBlob) error { for i := range vf { @@ -385,10 +393,19 @@ func readChunkedBlobSidecar(stream network.Stream, encoding encoder.NetworkEncod return rob, nil } -func readChunkedDataColumnSideCar( +// -------------------- +// Data column sidecars +// -------------------- + +// DataColumnResponseValidation represents a function that can validate aspects of a single unmarshaled data column sidecar +// that was received from a peer in response to an rpc request. +type DataColumnResponseValidation func(column blocks.RODataColumn) error + +func readChunkedDataColumnSidecar( stream network.Stream, p2pApi p2p.P2P, ctxMap ContextByteVersions, + validationFunctions ...DataColumnResponseValidation, ) (*blocks.RODataColumn, error) { // Read the status code from the stream. statusCode, errMessage, err := ReadStatusCode(stream, p2pApi.Encoding()) @@ -432,5 +449,12 @@ func readChunkedDataColumnSideCar( return nil, errors.Wrap(err, "new read only data column") } + // Run validation functions. + for _, validationFunction := range validationFunctions { + if err := validationFunction(roDataColumn); err != nil { + return nil, errors.Wrap(err, "validation function") + } + } + return &roDataColumn, nil } diff --git a/beacon-chain/sync/rpc_send_request_test.go b/beacon-chain/sync/rpc_send_request_test.go index d28d094bd0..d8261aadb4 100644 --- a/beacon-chain/sync/rpc_send_request_test.go +++ b/beacon-chain/sync/rpc_send_request_test.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "sync" "testing" "time" @@ -20,6 +21,7 @@ import ( "github.com/OffchainLabs/prysm/v6/consensus-types/primitives" "github.com/OffchainLabs/prysm/v6/encoding/bytesutil" ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1" + "github.com/OffchainLabs/prysm/v6/runtime/version" "github.com/OffchainLabs/prysm/v6/testing/assert" "github.com/OffchainLabs/prysm/v6/testing/require" "github.com/OffchainLabs/prysm/v6/testing/util" @@ -882,3 +884,207 @@ func TestSendBlobsByRangeRequest(t *testing.T) { func TestErrInvalidFetchedDataDistinction(t *testing.T) { require.Equal(t, false, errors.Is(ErrInvalidFetchedData, verification.ErrBlobInvalid)) } + +func TestReadChunkedDataColumnSidecar(t *testing.T) { + t.Run("non nil status code", func(t *testing.T) { + const reason = "a dummy reason" + + p1, p2 := p2ptest.NewTestP2P(t), p2ptest.NewTestP2P(t) + + var wg sync.WaitGroup + wg.Add(1) + p2.SetStreamHandler(p2p.RPCDataColumnSidecarsByRootTopicV1, func(stream network.Stream) { + defer wg.Done() + + _, err := readChunkedDataColumnSidecar(stream, p2, nil) + require.ErrorContains(t, reason, err) + }) + + p1.Connect(p2) + + stream, err := p1.BHost.NewStream(t.Context(), p2.PeerID(), p2p.RPCDataColumnSidecarsByRootTopicV1) + require.NoError(t, err) + + writeErrorResponseToStream(responseCodeInvalidRequest, reason, stream, p1) + + if util.WaitTimeout(&wg, time.Second) { + t.Fatal("Did not receive stream within 1 sec") + } + }) + + t.Run("unrecognized fork digest", func(t *testing.T) { + p1, p2 := p2ptest.NewTestP2P(t), p2ptest.NewTestP2P(t) + + var wg sync.WaitGroup + wg.Add(1) + p2.SetStreamHandler(p2p.RPCDataColumnSidecarsByRootTopicV1, func(stream network.Stream) { + defer wg.Done() + + _, err := readChunkedDataColumnSidecar(stream, p2, ContextByteVersions{}) + require.ErrorContains(t, "unrecognized fork digest", err) + }) + + p1.Connect(p2) + + stream, err := p1.BHost.NewStream(t.Context(), p2.PeerID(), p2p.RPCDataColumnSidecarsByRootTopicV1) + require.NoError(t, err) + + _, err = stream.Write([]byte{responseCodeSuccess}) + require.NoError(t, err) + + err = writeContextToStream([]byte{42, 42, 42, 42}, stream) + require.NoError(t, err) + + if util.WaitTimeout(&wg, time.Second) { + t.Fatal("Did not receive stream within 1 sec") + } + }) + + t.Run("before fulu", func(t *testing.T) { + p1, p2 := p2ptest.NewTestP2P(t), p2ptest.NewTestP2P(t) + + var wg sync.WaitGroup + wg.Add(1) + p2.SetStreamHandler(p2p.RPCDataColumnSidecarsByRootTopicV1, func(stream network.Stream) { + defer wg.Done() + + _, err := readChunkedDataColumnSidecar(stream, p2, ContextByteVersions{[4]byte{1, 2, 3, 4}: version.Phase0}) + require.ErrorContains(t, "unexpected context bytes", err) + }) + + p1.Connect(p2) + + stream, err := p1.BHost.NewStream(t.Context(), p2.PeerID(), p2p.RPCDataColumnSidecarsByRootTopicV1) + require.NoError(t, err) + + _, err = stream.Write([]byte{responseCodeSuccess}) + require.NoError(t, err) + + err = writeContextToStream([]byte{1, 2, 3, 4}, stream) + require.NoError(t, err) + + if util.WaitTimeout(&wg, time.Second) { + t.Fatal("Did not receive stream within 1 sec") + } + }) + + t.Run("one validation failed", func(t *testing.T) { + const reason = "a dummy reason" + + p1, p2 := p2ptest.NewTestP2P(t), p2ptest.NewTestP2P(t) + + var wg sync.WaitGroup + wg.Add(1) + p2.SetStreamHandler(p2p.RPCDataColumnSidecarsByRootTopicV1, func(stream network.Stream) { + defer wg.Done() + + validationOne := func(column blocks.RODataColumn) error { + return nil + } + + validationTwo := func(column blocks.RODataColumn) error { + return errors.New(reason) + } + + _, err := readChunkedDataColumnSidecar( + stream, + p2, + ContextByteVersions{[4]byte{1, 2, 3, 4}: version.Fulu}, + validationOne, // OK + validationTwo, // Fail + ) + + require.ErrorContains(t, reason, err) + }) + + p1.Connect(p2) + + stream, err := p1.BHost.NewStream(t.Context(), p2.PeerID(), p2p.RPCDataColumnSidecarsByRootTopicV1) + require.NoError(t, err) + + const count = 4 + kzgCommitmentsInclusionProof := make([][]byte, 0, count) + for range count { + kzgCommitmentsInclusionProof = append(kzgCommitmentsInclusionProof, make([]byte, 32)) + } + + // Success response code. + _, err = stream.Write([]byte{responseCodeSuccess}) + require.NoError(t, err) + + // Fork digest. + err = writeContextToStream([]byte{1, 2, 3, 4}, stream) + require.NoError(t, err) + + // Sidecar. + _, err = p1.Encoding().EncodeWithMaxLength(stream, ðpb.DataColumnSidecar{ + SignedBlockHeader: ðpb.SignedBeaconBlockHeader{ + Header: ðpb.BeaconBlockHeader{ + ParentRoot: make([]byte, fieldparams.RootLength), + StateRoot: make([]byte, fieldparams.RootLength), + BodyRoot: make([]byte, fieldparams.RootLength), + }, + Signature: make([]byte, fieldparams.BLSSignatureLength), + }, + KzgCommitmentsInclusionProof: kzgCommitmentsInclusionProof, + }) + require.NoError(t, err) + + if util.WaitTimeout(&wg, time.Minute) { + t.Fatal("Did not receive stream within 1 sec") + } + }) + + t.Run("nominal", func(t *testing.T) { + p1, p2 := p2ptest.NewTestP2P(t), p2ptest.NewTestP2P(t) + + const count = 4 + kzgCommitmentsInclusionProof := make([][]byte, 0, count) + for range count { + kzgCommitmentsInclusionProof = append(kzgCommitmentsInclusionProof, make([]byte, 32)) + } + + expected := ðpb.DataColumnSidecar{ + SignedBlockHeader: ðpb.SignedBeaconBlockHeader{ + Header: ðpb.BeaconBlockHeader{ + ParentRoot: make([]byte, fieldparams.RootLength), + StateRoot: make([]byte, fieldparams.RootLength), + BodyRoot: make([]byte, fieldparams.RootLength), + }, + Signature: make([]byte, fieldparams.BLSSignatureLength), + }, + KzgCommitmentsInclusionProof: kzgCommitmentsInclusionProof, + } + + var wg sync.WaitGroup + wg.Add(1) + p2.SetStreamHandler(p2p.RPCDataColumnSidecarsByRootTopicV1, func(stream network.Stream) { + defer wg.Done() + + actual, err := readChunkedDataColumnSidecar(stream, p2, ContextByteVersions{[4]byte{1, 2, 3, 4}: version.Fulu}) + require.NoError(t, err) + require.DeepSSZEqual(t, expected, actual.DataColumnSidecar) + }) + + p1.Connect(p2) + + stream, err := p1.BHost.NewStream(t.Context(), p2.PeerID(), p2p.RPCDataColumnSidecarsByRootTopicV1) + require.NoError(t, err) + + // Success response code. + _, err = stream.Write([]byte{responseCodeSuccess}) + require.NoError(t, err) + + // Fork digest. + err = writeContextToStream([]byte{1, 2, 3, 4}, stream) + require.NoError(t, err) + + // Sidecar. + _, err = p1.Encoding().EncodeWithMaxLength(stream, expected) + require.NoError(t, err) + + if util.WaitTimeout(&wg, time.Minute) { + t.Fatal("Did not receive stream within 1 sec") + } + }) +} diff --git a/changelog/manu-peerdas-variou.md b/changelog/manu-peerdas-variou.md new file mode 100644 index 0000000000..fa50d01c52 --- /dev/null +++ b/changelog/manu-peerdas-variou.md @@ -0,0 +1,9 @@ +### Changed +- In `TopicFromMessage`: Do not assume anymore that all Fulu specific topic are V3 only. +- `readChunkedDataColumnSidecar`: Add `validationFunctions` parameter and add tests. + +### Added +- New `StatusV2` proto message. + +### Removed +- Unused `DataColumnIdentifier` proto message. diff --git a/proto/prysm/v1alpha1/BUILD.bazel b/proto/prysm/v1alpha1/BUILD.bazel index 65ed1056ff..cba5829b38 100644 --- a/proto/prysm/v1alpha1/BUILD.bazel +++ b/proto/prysm/v1alpha1/BUILD.bazel @@ -2,14 +2,13 @@ # Common ############################################################################## -load("@rules_proto//proto:defs.bzl", "proto_library") - ############################################################################## # Go ############################################################################## # gazelle:ignore load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") +load("@rules_proto//proto:defs.bzl", "proto_library") load("//proto:ssz_proto_library.bzl", "ssz_proto_files") load("//tools:ssz.bzl", "SSZ_DEPS", "ssz_gen_marshal") @@ -189,6 +188,7 @@ ssz_fulu_objs = [ "DataColumnIdentifier", "DataColumnsByRootIdentifier", "DataColumnSidecar", + "StatusV2", "SignedBeaconBlockContentsFulu", "SignedBeaconBlockFulu", "SignedBlindedBeaconBlockFulu", @@ -359,15 +359,17 @@ go_library( importpath = "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1", visibility = ["//visibility:public"], deps = SSZ_DEPS + [ + "//consensus-types/primitives:go_default_library", "//encoding/bytesutil:go_default_library", "//math:go_default_library", "//proto/engine/v1:go_default_library", "//proto/eth/ext:go_default_library", "//runtime/version:go_default_library", - "//consensus-types/primitives:go_default_library", - "@com_github_pkg_errors//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_pkg_errors//:go_default_library", "@com_github_prysmaticlabs_go_bitfield//:go_default_library", # keep + "@com_github_sirupsen_logrus//:go_default_library", + "@com_github_sirupsen_logrus//hooks/test:go_default_library", "@googleapis//google/api:annotations_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", "@io_bazel_rules_go//proto/wkt:empty_go_proto", @@ -382,8 +384,6 @@ go_library( "@org_golang_google_protobuf//runtime/protoimpl:go_default_library", "@org_golang_google_protobuf//types/descriptorpb:go_default_library", "@org_golang_google_protobuf//types/known/emptypb:go_default_library", - "@com_github_sirupsen_logrus//:go_default_library", - "@com_github_sirupsen_logrus//hooks/test:go_default_library", ], ) diff --git a/proto/prysm/v1alpha1/data_columns.pb.go b/proto/prysm/v1alpha1/data_columns.pb.go index 20d4e9f249..bcd9ac9315 100755 --- a/proto/prysm/v1alpha1/data_columns.pb.go +++ b/proto/prysm/v1alpha1/data_columns.pb.go @@ -109,61 +109,6 @@ func (x *DataColumnSidecar) GetKzgCommitmentsInclusionProof() [][]byte { return nil } -type DataColumnIdentifier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BlockRoot []byte `protobuf:"bytes,1,opt,name=block_root,json=blockRoot,proto3" json:"block_root,omitempty" ssz-size:"32"` - Index uint64 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"` -} - -func (x *DataColumnIdentifier) Reset() { - *x = DataColumnIdentifier{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_data_columns_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DataColumnIdentifier) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DataColumnIdentifier) ProtoMessage() {} - -func (x *DataColumnIdentifier) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_data_columns_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DataColumnIdentifier.ProtoReflect.Descriptor instead. -func (*DataColumnIdentifier) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_data_columns_proto_rawDescGZIP(), []int{1} -} - -func (x *DataColumnIdentifier) GetBlockRoot() []byte { - if x != nil { - return x.BlockRoot - } - return nil -} - -func (x *DataColumnIdentifier) GetIndex() uint64 { - if x != nil { - return x.Index - } - return 0 -} - type DataColumnsByRootIdentifier struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -176,7 +121,7 @@ type DataColumnsByRootIdentifier struct { func (x *DataColumnsByRootIdentifier) Reset() { *x = DataColumnsByRootIdentifier{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_data_columns_proto_msgTypes[2] + mi := &file_proto_prysm_v1alpha1_data_columns_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -189,7 +134,7 @@ func (x *DataColumnsByRootIdentifier) String() string { func (*DataColumnsByRootIdentifier) ProtoMessage() {} func (x *DataColumnsByRootIdentifier) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_data_columns_proto_msgTypes[2] + mi := &file_proto_prysm_v1alpha1_data_columns_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -202,7 +147,7 @@ func (x *DataColumnsByRootIdentifier) ProtoReflect() protoreflect.Message { // Deprecated: Use DataColumnsByRootIdentifier.ProtoReflect.Descriptor instead. func (*DataColumnsByRootIdentifier) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_data_columns_proto_rawDescGZIP(), []int{2} + return file_proto_prysm_v1alpha1_data_columns_proto_rawDescGZIP(), []int{1} } func (x *DataColumnsByRootIdentifier) GetBlockRoot() []byte { @@ -253,29 +198,24 @@ var file_proto_prysm_v1alpha1_data_columns_proto_rawDesc = []byte{ 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0c, 0x42, 0x08, 0x8a, 0xb5, 0x18, 0x04, 0x34, 0x2c, 0x33, 0x32, 0x52, 0x1c, 0x6b, 0x7a, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x53, 0x0a, 0x14, 0x44, - 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, - 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x22, 0x67, 0x0a, 0x1b, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x42, - 0x79, 0x52, 0x6f, 0x6f, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, - 0x25, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x09, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x21, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x42, 0x07, 0x92, 0xb5, 0x18, 0x03, 0x31, 0x32, 0x38, - 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x42, 0x9a, 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, 0x10, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x73, 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, 0x36, 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, 0x15, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 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, + 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x67, 0x0a, 0x1b, 0x44, + 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x42, 0x79, 0x52, 0x6f, 0x6f, 0x74, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0a, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, + 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, + 0x74, 0x12, 0x21, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x04, 0x42, 0x07, 0x92, 0xb5, 0x18, 0x03, 0x31, 0x32, 0x38, 0x52, 0x07, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x42, 0x9a, 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, 0x10, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 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, 0x36, 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, 0x15, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x74, 0x68, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 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 ( @@ -290,15 +230,14 @@ func file_proto_prysm_v1alpha1_data_columns_proto_rawDescGZIP() []byte { return file_proto_prysm_v1alpha1_data_columns_proto_rawDescData } -var file_proto_prysm_v1alpha1_data_columns_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_proto_prysm_v1alpha1_data_columns_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_proto_prysm_v1alpha1_data_columns_proto_goTypes = []interface{}{ (*DataColumnSidecar)(nil), // 0: ethereum.eth.v1alpha1.DataColumnSidecar - (*DataColumnIdentifier)(nil), // 1: ethereum.eth.v1alpha1.DataColumnIdentifier - (*DataColumnsByRootIdentifier)(nil), // 2: ethereum.eth.v1alpha1.DataColumnsByRootIdentifier - (*SignedBeaconBlockHeader)(nil), // 3: ethereum.eth.v1alpha1.SignedBeaconBlockHeader + (*DataColumnsByRootIdentifier)(nil), // 1: ethereum.eth.v1alpha1.DataColumnsByRootIdentifier + (*SignedBeaconBlockHeader)(nil), // 2: ethereum.eth.v1alpha1.SignedBeaconBlockHeader } var file_proto_prysm_v1alpha1_data_columns_proto_depIdxs = []int32{ - 3, // 0: ethereum.eth.v1alpha1.DataColumnSidecar.signed_block_header:type_name -> ethereum.eth.v1alpha1.SignedBeaconBlockHeader + 2, // 0: ethereum.eth.v1alpha1.DataColumnSidecar.signed_block_header:type_name -> ethereum.eth.v1alpha1.SignedBeaconBlockHeader 1, // [1:1] is the sub-list for method output_type 1, // [1:1] is the sub-list for method input_type 1, // [1:1] is the sub-list for extension type_name @@ -326,18 +265,6 @@ func file_proto_prysm_v1alpha1_data_columns_proto_init() { } } file_proto_prysm_v1alpha1_data_columns_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataColumnIdentifier); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_prysm_v1alpha1_data_columns_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DataColumnsByRootIdentifier); i { case 0: return &v.state @@ -356,7 +283,7 @@ func file_proto_prysm_v1alpha1_data_columns_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_prysm_v1alpha1_data_columns_proto_rawDesc, NumEnums: 0, - NumMessages: 3, + NumMessages: 2, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/prysm/v1alpha1/data_columns.proto b/proto/prysm/v1alpha1/data_columns.proto index fd8fc4db04..5bc2e45714 100644 --- a/proto/prysm/v1alpha1/data_columns.proto +++ b/proto/prysm/v1alpha1/data_columns.proto @@ -45,11 +45,6 @@ message DataColumnSidecar { "kzg_commitments_inclusion_proof_depth.size,32" ]; } -message DataColumnIdentifier { - bytes block_root = 1 [ (ethereum.eth.ext.ssz_size) = "32" ]; - uint64 index = 2; -} - message DataColumnsByRootIdentifier { bytes block_root = 1 [ (ethereum.eth.ext.ssz_size) = "32" ]; repeated uint64 columns = 2 [ (ethereum.eth.ext.ssz_max) = "128" ]; diff --git a/proto/prysm/v1alpha1/fulu.ssz.go b/proto/prysm/v1alpha1/fulu.ssz.go index 94e59cbcad..5a496931f1 100644 --- a/proto/prysm/v1alpha1/fulu.ssz.go +++ b/proto/prysm/v1alpha1/fulu.ssz.go @@ -2246,77 +2246,6 @@ func (d *DataColumnSidecar) HashTreeRootWith(hh *ssz.Hasher) (err error) { return } -// MarshalSSZ ssz marshals the DataColumnIdentifier object -func (d *DataColumnIdentifier) MarshalSSZ() ([]byte, error) { - return ssz.MarshalSSZ(d) -} - -// MarshalSSZTo ssz marshals the DataColumnIdentifier object to a target array -func (d *DataColumnIdentifier) MarshalSSZTo(buf []byte) (dst []byte, err error) { - dst = buf - - // Field (0) 'BlockRoot' - if size := len(d.BlockRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.BlockRoot", size, 32) - return - } - dst = append(dst, d.BlockRoot...) - - // Field (1) 'Index' - dst = ssz.MarshalUint64(dst, d.Index) - - return -} - -// UnmarshalSSZ ssz unmarshals the DataColumnIdentifier object -func (d *DataColumnIdentifier) UnmarshalSSZ(buf []byte) error { - var err error - size := uint64(len(buf)) - if size != 40 { - return ssz.ErrSize - } - - // Field (0) 'BlockRoot' - if cap(d.BlockRoot) == 0 { - d.BlockRoot = make([]byte, 0, len(buf[0:32])) - } - d.BlockRoot = append(d.BlockRoot, buf[0:32]...) - - // Field (1) 'Index' - d.Index = ssz.UnmarshallUint64(buf[32:40]) - - return err -} - -// SizeSSZ returns the ssz encoded size in bytes for the DataColumnIdentifier object -func (d *DataColumnIdentifier) SizeSSZ() (size int) { - size = 40 - return -} - -// HashTreeRoot ssz hashes the DataColumnIdentifier object -func (d *DataColumnIdentifier) HashTreeRoot() ([32]byte, error) { - return ssz.HashWithDefaultHasher(d) -} - -// HashTreeRootWith ssz hashes the DataColumnIdentifier object with a hasher -func (d *DataColumnIdentifier) HashTreeRootWith(hh *ssz.Hasher) (err error) { - indx := hh.Index() - - // Field (0) 'BlockRoot' - if size := len(d.BlockRoot); size != 32 { - err = ssz.ErrBytesLengthFn("--.BlockRoot", size, 32) - return - } - hh.PutBytes(d.BlockRoot) - - // Field (1) 'Index' - hh.PutUint64(d.Index) - - hh.Merkleize(indx) - return -} - // MarshalSSZ ssz marshals the DataColumnsByRootIdentifier object func (d *DataColumnsByRootIdentifier) MarshalSSZ() ([]byte, error) { return ssz.MarshalSSZ(d) @@ -2436,3 +2365,132 @@ func (d *DataColumnsByRootIdentifier) HashTreeRootWith(hh *ssz.Hasher) (err erro hh.Merkleize(indx) return } + +// MarshalSSZ ssz marshals the StatusV2 object +func (s *StatusV2) MarshalSSZ() ([]byte, error) { + return ssz.MarshalSSZ(s) +} + +// MarshalSSZTo ssz marshals the StatusV2 object to a target array +func (s *StatusV2) MarshalSSZTo(buf []byte) (dst []byte, err error) { + dst = buf + + // Field (0) 'ForkDigest' + if size := len(s.ForkDigest); size != 4 { + err = ssz.ErrBytesLengthFn("--.ForkDigest", size, 4) + return + } + dst = append(dst, s.ForkDigest...) + + // Field (1) 'FinalizedRoot' + if size := len(s.FinalizedRoot); size != 32 { + err = ssz.ErrBytesLengthFn("--.FinalizedRoot", size, 32) + return + } + dst = append(dst, s.FinalizedRoot...) + + // Field (2) 'FinalizedEpoch' + dst = ssz.MarshalUint64(dst, uint64(s.FinalizedEpoch)) + + // Field (3) 'HeadRoot' + if size := len(s.HeadRoot); size != 32 { + err = ssz.ErrBytesLengthFn("--.HeadRoot", size, 32) + return + } + dst = append(dst, s.HeadRoot...) + + // Field (4) 'HeadSlot' + dst = ssz.MarshalUint64(dst, uint64(s.HeadSlot)) + + // Field (5) 'EarliestAvailableSlot' + dst = ssz.MarshalUint64(dst, uint64(s.EarliestAvailableSlot)) + + return +} + +// UnmarshalSSZ ssz unmarshals the StatusV2 object +func (s *StatusV2) UnmarshalSSZ(buf []byte) error { + var err error + size := uint64(len(buf)) + if size != 92 { + return ssz.ErrSize + } + + // Field (0) 'ForkDigest' + if cap(s.ForkDigest) == 0 { + s.ForkDigest = make([]byte, 0, len(buf[0:4])) + } + s.ForkDigest = append(s.ForkDigest, buf[0:4]...) + + // Field (1) 'FinalizedRoot' + if cap(s.FinalizedRoot) == 0 { + s.FinalizedRoot = make([]byte, 0, len(buf[4:36])) + } + s.FinalizedRoot = append(s.FinalizedRoot, buf[4:36]...) + + // Field (2) 'FinalizedEpoch' + s.FinalizedEpoch = github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Epoch(ssz.UnmarshallUint64(buf[36:44])) + + // Field (3) 'HeadRoot' + if cap(s.HeadRoot) == 0 { + s.HeadRoot = make([]byte, 0, len(buf[44:76])) + } + s.HeadRoot = append(s.HeadRoot, buf[44:76]...) + + // Field (4) 'HeadSlot' + s.HeadSlot = github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot(ssz.UnmarshallUint64(buf[76:84])) + + // Field (5) 'EarliestAvailableSlot' + s.EarliestAvailableSlot = github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot(ssz.UnmarshallUint64(buf[84:92])) + + return err +} + +// SizeSSZ returns the ssz encoded size in bytes for the StatusV2 object +func (s *StatusV2) SizeSSZ() (size int) { + size = 92 + return +} + +// HashTreeRoot ssz hashes the StatusV2 object +func (s *StatusV2) HashTreeRoot() ([32]byte, error) { + return ssz.HashWithDefaultHasher(s) +} + +// HashTreeRootWith ssz hashes the StatusV2 object with a hasher +func (s *StatusV2) HashTreeRootWith(hh *ssz.Hasher) (err error) { + indx := hh.Index() + + // Field (0) 'ForkDigest' + if size := len(s.ForkDigest); size != 4 { + err = ssz.ErrBytesLengthFn("--.ForkDigest", size, 4) + return + } + hh.PutBytes(s.ForkDigest) + + // Field (1) 'FinalizedRoot' + if size := len(s.FinalizedRoot); size != 32 { + err = ssz.ErrBytesLengthFn("--.FinalizedRoot", size, 32) + return + } + hh.PutBytes(s.FinalizedRoot) + + // Field (2) 'FinalizedEpoch' + hh.PutUint64(uint64(s.FinalizedEpoch)) + + // Field (3) 'HeadRoot' + if size := len(s.HeadRoot); size != 32 { + err = ssz.ErrBytesLengthFn("--.HeadRoot", size, 32) + return + } + hh.PutBytes(s.HeadRoot) + + // Field (4) 'HeadSlot' + hh.PutUint64(uint64(s.HeadSlot)) + + // Field (5) 'EarliestAvailableSlot' + hh.PutUint64(uint64(s.EarliestAvailableSlot)) + + hh.Merkleize(indx) + return +} diff --git a/proto/prysm/v1alpha1/p2p_messages.pb.go b/proto/prysm/v1alpha1/p2p_messages.pb.go index 2dd04b0d3d..559e9a7d17 100755 --- a/proto/prysm/v1alpha1/p2p_messages.pb.go +++ b/proto/prysm/v1alpha1/p2p_messages.pb.go @@ -104,6 +104,93 @@ func (x *Status) GetHeadSlot() github_com_OffchainLabs_prysm_v6_consensus_types_ return github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot(0) } +type StatusV2 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ForkDigest []byte `protobuf:"bytes,1,opt,name=fork_digest,json=forkDigest,proto3" json:"fork_digest,omitempty" ssz-size:"4"` + FinalizedRoot []byte `protobuf:"bytes,2,opt,name=finalized_root,json=finalizedRoot,proto3" json:"finalized_root,omitempty" ssz-size:"32"` + FinalizedEpoch github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Epoch `protobuf:"varint,3,opt,name=finalized_epoch,json=finalizedEpoch,proto3" json:"finalized_epoch,omitempty" cast-type:"github.com/OffchainLabs/prysm/v6/consensus-types/primitives.Epoch"` + HeadRoot []byte `protobuf:"bytes,4,opt,name=head_root,json=headRoot,proto3" json:"head_root,omitempty" ssz-size:"32"` + HeadSlot github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot `protobuf:"varint,5,opt,name=head_slot,json=headSlot,proto3" json:"head_slot,omitempty" cast-type:"github.com/OffchainLabs/prysm/v6/consensus-types/primitives.Slot"` + EarliestAvailableSlot github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot `protobuf:"varint,6,opt,name=earliest_available_slot,json=earliestAvailableSlot,proto3" json:"earliest_available_slot,omitempty" cast-type:"github.com/OffchainLabs/prysm/v6/consensus-types/primitives.Slot"` +} + +func (x *StatusV2) Reset() { + *x = StatusV2{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatusV2) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusV2) ProtoMessage() {} + +func (x *StatusV2) ProtoReflect() protoreflect.Message { + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusV2.ProtoReflect.Descriptor instead. +func (*StatusV2) Descriptor() ([]byte, []int) { + return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{1} +} + +func (x *StatusV2) GetForkDigest() []byte { + if x != nil { + return x.ForkDigest + } + return nil +} + +func (x *StatusV2) GetFinalizedRoot() []byte { + if x != nil { + return x.FinalizedRoot + } + return nil +} + +func (x *StatusV2) GetFinalizedEpoch() github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Epoch { + if x != nil { + return x.FinalizedEpoch + } + return github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Epoch(0) +} + +func (x *StatusV2) GetHeadRoot() []byte { + if x != nil { + return x.HeadRoot + } + return nil +} + +func (x *StatusV2) GetHeadSlot() github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot { + if x != nil { + return x.HeadSlot + } + return github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot(0) +} + +func (x *StatusV2) GetEarliestAvailableSlot() github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot { + if x != nil { + return x.EarliestAvailableSlot + } + return github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot(0) +} + type BeaconBlocksByRangeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -117,7 +204,7 @@ type BeaconBlocksByRangeRequest struct { func (x *BeaconBlocksByRangeRequest) Reset() { *x = BeaconBlocksByRangeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[1] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -130,7 +217,7 @@ func (x *BeaconBlocksByRangeRequest) String() string { func (*BeaconBlocksByRangeRequest) ProtoMessage() {} func (x *BeaconBlocksByRangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[1] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -143,7 +230,7 @@ func (x *BeaconBlocksByRangeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BeaconBlocksByRangeRequest.ProtoReflect.Descriptor instead. func (*BeaconBlocksByRangeRequest) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{1} + return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{2} } func (x *BeaconBlocksByRangeRequest) GetStartSlot() github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot { @@ -180,7 +267,7 @@ type ENRForkID struct { func (x *ENRForkID) Reset() { *x = ENRForkID{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[2] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -193,7 +280,7 @@ func (x *ENRForkID) String() string { func (*ENRForkID) ProtoMessage() {} func (x *ENRForkID) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[2] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -206,7 +293,7 @@ func (x *ENRForkID) ProtoReflect() protoreflect.Message { // Deprecated: Use ENRForkID.ProtoReflect.Descriptor instead. func (*ENRForkID) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{2} + return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{3} } func (x *ENRForkID) GetCurrentForkDigest() []byte { @@ -242,7 +329,7 @@ type MetaDataV0 struct { func (x *MetaDataV0) Reset() { *x = MetaDataV0{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[3] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -255,7 +342,7 @@ func (x *MetaDataV0) String() string { func (*MetaDataV0) ProtoMessage() {} func (x *MetaDataV0) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[3] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -268,7 +355,7 @@ func (x *MetaDataV0) ProtoReflect() protoreflect.Message { // Deprecated: Use MetaDataV0.ProtoReflect.Descriptor instead. func (*MetaDataV0) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{3} + return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{4} } func (x *MetaDataV0) GetSeqNumber() uint64 { @@ -298,7 +385,7 @@ type MetaDataV1 struct { func (x *MetaDataV1) Reset() { *x = MetaDataV1{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[4] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -311,7 +398,7 @@ func (x *MetaDataV1) String() string { func (*MetaDataV1) ProtoMessage() {} func (x *MetaDataV1) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[4] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -324,7 +411,7 @@ func (x *MetaDataV1) ProtoReflect() protoreflect.Message { // Deprecated: Use MetaDataV1.ProtoReflect.Descriptor instead. func (*MetaDataV1) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{4} + return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{5} } func (x *MetaDataV1) GetSeqNumber() uint64 { @@ -362,7 +449,7 @@ type MetaDataV2 struct { func (x *MetaDataV2) Reset() { *x = MetaDataV2{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[5] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -375,7 +462,7 @@ func (x *MetaDataV2) String() string { func (*MetaDataV2) ProtoMessage() {} func (x *MetaDataV2) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[5] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -388,7 +475,7 @@ func (x *MetaDataV2) ProtoReflect() protoreflect.Message { // Deprecated: Use MetaDataV2.ProtoReflect.Descriptor instead. func (*MetaDataV2) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{5} + return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{6} } func (x *MetaDataV2) GetSeqNumber() uint64 { @@ -431,7 +518,7 @@ type BlobSidecarsByRangeRequest struct { func (x *BlobSidecarsByRangeRequest) Reset() { *x = BlobSidecarsByRangeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[6] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -444,7 +531,7 @@ func (x *BlobSidecarsByRangeRequest) String() string { func (*BlobSidecarsByRangeRequest) ProtoMessage() {} func (x *BlobSidecarsByRangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[6] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -457,7 +544,7 @@ func (x *BlobSidecarsByRangeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BlobSidecarsByRangeRequest.ProtoReflect.Descriptor instead. func (*BlobSidecarsByRangeRequest) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{6} + return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{7} } func (x *BlobSidecarsByRangeRequest) GetStartSlot() github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot { @@ -487,7 +574,7 @@ type DataColumnSidecarsByRangeRequest struct { func (x *DataColumnSidecarsByRangeRequest) Reset() { *x = DataColumnSidecarsByRangeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[7] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -500,7 +587,7 @@ func (x *DataColumnSidecarsByRangeRequest) String() string { func (*DataColumnSidecarsByRangeRequest) ProtoMessage() {} func (x *DataColumnSidecarsByRangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[7] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -513,7 +600,7 @@ func (x *DataColumnSidecarsByRangeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DataColumnSidecarsByRangeRequest.ProtoReflect.Descriptor instead. func (*DataColumnSidecarsByRangeRequest) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{7} + return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{8} } func (x *DataColumnSidecarsByRangeRequest) GetStartSlot() github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot { @@ -549,7 +636,7 @@ type LightClientUpdatesByRangeRequest struct { func (x *LightClientUpdatesByRangeRequest) Reset() { *x = LightClientUpdatesByRangeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[8] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -562,7 +649,7 @@ func (x *LightClientUpdatesByRangeRequest) String() string { func (*LightClientUpdatesByRangeRequest) ProtoMessage() {} func (x *LightClientUpdatesByRangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[8] + mi := &file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -575,7 +662,7 @@ func (x *LightClientUpdatesByRangeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LightClientUpdatesByRangeRequest.ProtoReflect.Descriptor instead. func (*LightClientUpdatesByRangeRequest) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{8} + return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP(), []int{9} } func (x *LightClientUpdatesByRangeRequest) GetStartPeriod() uint64 { @@ -624,109 +711,138 @@ var file_proto_prysm_v1alpha1_p2p_messages_proto_rawDesc = []byte{ 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x36, 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, - 0x08, 0x68, 0x65, 0x61, 0x64, 0x53, 0x6c, 0x6f, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x1a, 0x42, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x42, 0x79, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x63, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 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, 0x36, 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, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x22, 0xe4, 0x01, 0x0a, 0x09, 0x45, 0x4e, 0x52, 0x46, - 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x42, 0x05, 0x8a, 0xb5, 0x18, 0x01, 0x34, 0x52, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x46, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x11, - 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x05, 0x8a, 0xb5, 0x18, 0x01, 0x34, 0x52, 0x0f, - 0x6e, 0x65, 0x78, 0x74, 0x46, 0x6f, 0x72, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x6d, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x18, 0x03, 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, 0x36, 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, - 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x46, 0x6f, 0x72, 0x6b, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x80, - 0x01, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x56, 0x30, 0x12, 0x1d, 0x0a, - 0x0a, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x07, - 0x61, 0x74, 0x74, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x39, 0x82, - 0xb5, 0x18, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, - 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x67, 0x6f, 0x2d, 0x62, - 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x42, 0x69, 0x74, 0x76, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x36, 0x34, 0x8a, 0xb5, 0x18, 0x01, 0x38, 0x52, 0x07, 0x61, 0x74, 0x74, 0x6e, 0x65, 0x74, - 0x73, 0x22, 0xd6, 0x01, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x56, 0x31, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x53, 0x0a, 0x07, 0x61, 0x74, 0x74, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x39, 0x82, 0xb5, 0x18, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x08, 0x68, 0x65, 0x61, 0x64, 0x53, 0x6c, 0x6f, 0x74, 0x22, 0xd7, 0x03, 0x0a, 0x08, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x56, 0x32, 0x12, 0x26, 0x0a, 0x0b, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x05, 0x8a, 0xb5, 0x18, + 0x01, 0x34, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x2d, + 0x0a, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x6f, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x0d, + 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x6e, 0x0a, + 0x0f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x03, 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, 0x36, 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, 0x0e, 0x66, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x23, 0x0a, + 0x09, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, + 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x08, 0x68, 0x65, 0x61, 0x64, 0x52, 0x6f, + 0x6f, 0x74, 0x12, 0x61, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, + 0x05, 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, 0x36, 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, 0x08, 0x68, 0x65, 0x61, + 0x64, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x7c, 0x0a, 0x17, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, + 0x74, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x6c, 0x6f, 0x74, + 0x18, 0x06, 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, 0x36, 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, 0x15, 0x65, 0x61, + 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, + 0x6c, 0x6f, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x1a, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x42, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x63, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 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, 0x36, 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, 0x09, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x74, 0x65, + 0x70, 0x22, 0xe4, 0x01, 0x0a, 0x09, 0x45, 0x4e, 0x52, 0x46, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, + 0x35, 0x0a, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x05, 0x8a, 0xb5, + 0x18, 0x01, 0x34, 0x52, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x6f, 0x72, 0x6b, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x11, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x66, + 0x6f, 0x72, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x05, 0x8a, 0xb5, 0x18, 0x01, 0x34, 0x52, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x46, 0x6f, + 0x72, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6d, 0x0a, 0x0f, 0x6e, 0x65, 0x78, + 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 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, 0x36, 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, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x46, + 0x6f, 0x72, 0x6b, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x80, 0x01, 0x0a, 0x0a, 0x4d, 0x65, 0x74, + 0x61, 0x44, 0x61, 0x74, 0x61, 0x56, 0x30, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x71, 0x5f, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x65, 0x71, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x07, 0x61, 0x74, 0x74, 0x6e, 0x65, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x39, 0x82, 0xb5, 0x18, 0x30, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, + 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x67, 0x6f, 0x2d, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x42, 0x69, 0x74, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x36, 0x34, 0x8a, 0xb5, 0x18, + 0x01, 0x38, 0x52, 0x07, 0x61, 0x74, 0x74, 0x6e, 0x65, 0x74, 0x73, 0x22, 0xd6, 0x01, 0x0a, 0x0a, + 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x56, 0x31, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, + 0x71, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x07, 0x61, 0x74, 0x74, + 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x39, 0x82, 0xb5, 0x18, 0x30, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, + 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x67, 0x6f, 0x2d, 0x62, 0x69, 0x74, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x42, 0x69, 0x74, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x36, 0x34, + 0x8a, 0xb5, 0x18, 0x01, 0x38, 0x52, 0x07, 0x61, 0x74, 0x74, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x54, + 0x0a, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x42, 0x38, 0x82, 0xb5, 0x18, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x67, 0x6f, 0x2d, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x42, 0x69, 0x74, 0x76, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x36, 0x34, 0x8a, 0xb5, 0x18, 0x01, 0x38, 0x52, 0x07, 0x61, 0x74, 0x74, - 0x6e, 0x65, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x6e, 0x65, 0x74, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x38, 0x82, 0xb5, 0x18, 0x2f, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, - 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x67, 0x6f, 0x2d, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x42, 0x69, 0x74, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x34, 0x8a, 0xb5, 0x18, 0x01, 0x31, - 0x52, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x6e, 0x65, 0x74, 0x73, 0x22, 0x86, 0x02, 0x0a, 0x0a, 0x4d, - 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x56, 0x32, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x71, - 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, - 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x07, 0x61, 0x74, 0x74, 0x6e, - 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x39, 0x82, 0xb5, 0x18, 0x30, 0x67, + 0x63, 0x74, 0x6f, 0x72, 0x34, 0x8a, 0xb5, 0x18, 0x01, 0x31, 0x52, 0x08, 0x73, 0x79, 0x6e, 0x63, + 0x6e, 0x65, 0x74, 0x73, 0x22, 0x86, 0x02, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, + 0x61, 0x56, 0x32, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x53, 0x0a, 0x07, 0x61, 0x74, 0x74, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x42, 0x39, 0x82, 0xb5, 0x18, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, + 0x73, 0x2f, 0x67, 0x6f, 0x2d, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x42, 0x69, + 0x74, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x36, 0x34, 0x8a, 0xb5, 0x18, 0x01, 0x38, 0x52, 0x07, + 0x61, 0x74, 0x74, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x6e, + 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x38, 0x82, 0xb5, 0x18, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x67, 0x6f, 0x2d, 0x62, 0x69, 0x74, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x2e, 0x42, 0x69, 0x74, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x36, 0x34, 0x8a, - 0xb5, 0x18, 0x01, 0x38, 0x52, 0x07, 0x61, 0x74, 0x74, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x54, 0x0a, - 0x08, 0x73, 0x79, 0x6e, 0x63, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x38, 0x82, 0xb5, 0x18, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x67, 0x6f, - 0x2d, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x42, 0x69, 0x74, 0x76, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x34, 0x8a, 0xb5, 0x18, 0x01, 0x31, 0x52, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x6e, - 0x65, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x64, 0x79, 0x5f, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x64, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x1a, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, - 0x63, 0x61, 0x72, 0x73, 0x42, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x63, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 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, 0x36, 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, 0x09, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xc0, 0x01, - 0x0a, 0x20, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x69, 0x64, 0x65, - 0x63, 0x61, 0x72, 0x73, 0x42, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x63, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 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, 0x36, 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, 0x09, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, - 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x04, 0x42, 0x07, - 0x92, 0xb5, 0x18, 0x03, 0x31, 0x32, 0x38, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x22, 0x5b, 0x0a, 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x65, - 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x9a, 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, 0x10, 0x50, 0x32, 0x50, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 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, - 0x36, 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, 0x15, 0x45, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 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, + 0x65, 0x6c, 0x64, 0x2e, 0x42, 0x69, 0x74, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x34, 0x8a, 0xb5, + 0x18, 0x01, 0x31, 0x52, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x2e, 0x0a, + 0x13, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x64, 0x79, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x63, 0x75, 0x73, 0x74, + 0x6f, 0x64, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x97, 0x01, + 0x0a, 0x1a, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x42, 0x79, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x63, 0x0a, 0x0a, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 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, 0x36, 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, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x6c, 0x6f, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xc0, 0x01, 0x0a, 0x20, 0x44, 0x61, 0x74, 0x61, + 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x42, 0x79, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x63, 0x0a, 0x0a, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 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, 0x36, 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, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x6c, 0x6f, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x04, 0x42, 0x07, 0x92, 0xb5, 0x18, 0x03, 0x31, 0x32, + 0x38, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x5b, 0x0a, 0x20, 0x4c, 0x69, + 0x67, 0x68, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, + 0x42, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x9a, 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, 0x10, 0x50, 0x32, 0x50, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 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, 0x36, 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, 0x15, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, + 0x45, 0x74, 0x68, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 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 ( @@ -741,17 +857,18 @@ func file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescGZIP() []byte { return file_proto_prysm_v1alpha1_p2p_messages_proto_rawDescData } -var file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 10) var file_proto_prysm_v1alpha1_p2p_messages_proto_goTypes = []interface{}{ (*Status)(nil), // 0: ethereum.eth.v1alpha1.Status - (*BeaconBlocksByRangeRequest)(nil), // 1: ethereum.eth.v1alpha1.BeaconBlocksByRangeRequest - (*ENRForkID)(nil), // 2: ethereum.eth.v1alpha1.ENRForkID - (*MetaDataV0)(nil), // 3: ethereum.eth.v1alpha1.MetaDataV0 - (*MetaDataV1)(nil), // 4: ethereum.eth.v1alpha1.MetaDataV1 - (*MetaDataV2)(nil), // 5: ethereum.eth.v1alpha1.MetaDataV2 - (*BlobSidecarsByRangeRequest)(nil), // 6: ethereum.eth.v1alpha1.BlobSidecarsByRangeRequest - (*DataColumnSidecarsByRangeRequest)(nil), // 7: ethereum.eth.v1alpha1.DataColumnSidecarsByRangeRequest - (*LightClientUpdatesByRangeRequest)(nil), // 8: ethereum.eth.v1alpha1.LightClientUpdatesByRangeRequest + (*StatusV2)(nil), // 1: ethereum.eth.v1alpha1.StatusV2 + (*BeaconBlocksByRangeRequest)(nil), // 2: ethereum.eth.v1alpha1.BeaconBlocksByRangeRequest + (*ENRForkID)(nil), // 3: ethereum.eth.v1alpha1.ENRForkID + (*MetaDataV0)(nil), // 4: ethereum.eth.v1alpha1.MetaDataV0 + (*MetaDataV1)(nil), // 5: ethereum.eth.v1alpha1.MetaDataV1 + (*MetaDataV2)(nil), // 6: ethereum.eth.v1alpha1.MetaDataV2 + (*BlobSidecarsByRangeRequest)(nil), // 7: ethereum.eth.v1alpha1.BlobSidecarsByRangeRequest + (*DataColumnSidecarsByRangeRequest)(nil), // 8: ethereum.eth.v1alpha1.DataColumnSidecarsByRangeRequest + (*LightClientUpdatesByRangeRequest)(nil), // 9: ethereum.eth.v1alpha1.LightClientUpdatesByRangeRequest } var file_proto_prysm_v1alpha1_p2p_messages_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type @@ -780,7 +897,7 @@ func file_proto_prysm_v1alpha1_p2p_messages_proto_init() { } } file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BeaconBlocksByRangeRequest); i { + switch v := v.(*StatusV2); i { case 0: return &v.state case 1: @@ -792,7 +909,7 @@ func file_proto_prysm_v1alpha1_p2p_messages_proto_init() { } } file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ENRForkID); i { + switch v := v.(*BeaconBlocksByRangeRequest); i { case 0: return &v.state case 1: @@ -804,7 +921,7 @@ func file_proto_prysm_v1alpha1_p2p_messages_proto_init() { } } file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MetaDataV0); i { + switch v := v.(*ENRForkID); i { case 0: return &v.state case 1: @@ -816,7 +933,7 @@ func file_proto_prysm_v1alpha1_p2p_messages_proto_init() { } } file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MetaDataV1); i { + switch v := v.(*MetaDataV0); i { case 0: return &v.state case 1: @@ -828,7 +945,7 @@ func file_proto_prysm_v1alpha1_p2p_messages_proto_init() { } } file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MetaDataV2); i { + switch v := v.(*MetaDataV1); i { case 0: return &v.state case 1: @@ -840,7 +957,7 @@ func file_proto_prysm_v1alpha1_p2p_messages_proto_init() { } } file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlobSidecarsByRangeRequest); i { + switch v := v.(*MetaDataV2); i { case 0: return &v.state case 1: @@ -852,7 +969,7 @@ func file_proto_prysm_v1alpha1_p2p_messages_proto_init() { } } file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataColumnSidecarsByRangeRequest); i { + switch v := v.(*BlobSidecarsByRangeRequest); i { case 0: return &v.state case 1: @@ -864,6 +981,18 @@ func file_proto_prysm_v1alpha1_p2p_messages_proto_init() { } } file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataColumnSidecarsByRangeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_prysm_v1alpha1_p2p_messages_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LightClientUpdatesByRangeRequest); i { case 0: return &v.state @@ -882,7 +1011,7 @@ func file_proto_prysm_v1alpha1_p2p_messages_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_prysm_v1alpha1_p2p_messages_proto_rawDesc, NumEnums: 0, - NumMessages: 9, + NumMessages: 10, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/prysm/v1alpha1/p2p_messages.proto b/proto/prysm/v1alpha1/p2p_messages.proto index 9ac0a0fff0..7fbe1428b9 100644 --- a/proto/prysm/v1alpha1/p2p_messages.proto +++ b/proto/prysm/v1alpha1/p2p_messages.proto @@ -26,6 +26,24 @@ message Status { ]; } +message StatusV2 { + bytes fork_digest = 1 [(ethereum.eth.ext.ssz_size) = "4"]; + bytes finalized_root = 2 [(ethereum.eth.ext.ssz_size) = "32"]; + uint64 finalized_epoch = 3 [ + (ethereum.eth.ext.cast_type) = + "github.com/OffchainLabs/prysm/v6/consensus-types/primitives.Epoch" + ]; + bytes head_root = 4 [(ethereum.eth.ext.ssz_size) = "32"]; + uint64 head_slot = 5 [ + (ethereum.eth.ext.cast_type) = + "github.com/OffchainLabs/prysm/v6/consensus-types/primitives.Slot" + ]; + uint64 earliest_available_slot = 6 [ + (ethereum.eth.ext.cast_type) = + "github.com/OffchainLabs/prysm/v6/consensus-types/primitives.Slot" + ]; +} + message BeaconBlocksByRangeRequest { uint64 start_slot = 1 [ (ethereum.eth.ext.cast_type) =