mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2024-12-22 03:30:37 +00:00
[caplin] topic strings (#9000)
This commit is contained in:
parent
510d62ab8a
commit
78bb3cdca8
@ -68,51 +68,6 @@ func (r *beaconResponse) withVersion(version clparams.StateVersion) (out *beacon
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
//// In case of it being a json we need to also expose finalization, version, etc...
|
|
||||||
//type beaconHandlerFn func(r *http.Request) *beaconResponse
|
|
||||||
//
|
|
||||||
//func beaconHandlerWrapper(fn beaconHandlerFn, supportSSZ bool) func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
// return func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
// accept := r.Header.Get("Accept")
|
|
||||||
// isSSZ := !strings.Contains(accept, "application/json") && strings.Contains(accept, "application/stream-octect")
|
|
||||||
// start := time.Now()
|
|
||||||
// defer func() {
|
|
||||||
// log.Debug("[Beacon API] finished", "method", r.Method, "path", r.URL.Path, "duration", time.Since(start))
|
|
||||||
// }()
|
|
||||||
//
|
|
||||||
// resp := fn(r)
|
|
||||||
// if resp.internalError != nil {
|
|
||||||
// http.Error(w, resp.internalError.Error(), http.StatusInternalServerError)
|
|
||||||
// log.Debug("[Beacon API] failed", "method", r.Method, "err", resp.internalError.Error(), "ssz", isSSZ)
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if resp.apiError != nil {
|
|
||||||
// http.Error(w, resp.apiError.err.Error(), resp.apiError.code)
|
|
||||||
// log.Debug("[Beacon API] failed", "method", r.Method, "err", resp.apiError.err.Error(), "ssz", isSSZ)
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if isSSZ && supportSSZ {
|
|
||||||
// data := resp.Data
|
|
||||||
// // SSZ encoding
|
|
||||||
// encoded, err := data.(ssz.Marshaler).EncodeSSZ(nil)
|
|
||||||
// if err != nil {
|
|
||||||
// http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
||||||
// log.Debug("[Beacon API] failed", "method", r.Method, "err", err, "accepted", accept)
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// w.Header().Set("Content-Type", "application/octet-stream")
|
|
||||||
// w.Write(encoded)
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// w.Header().Set("Content-Type", "application/json")
|
|
||||||
// if err := json.NewEncoder(w).Encode(resp); err != nil {
|
|
||||||
// log.Warn("[Beacon API] failed", "method", r.Method, "err", err, "ssz", isSSZ)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
type chainTag int
|
type chainTag int
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
25
cl/gossip/gossip.go
Normal file
25
cl/gossip/gossip.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package gossip
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
TopicNameBeaconBlock = "beacon_block"
|
||||||
|
TopicNameBeaconAggregateAndProof = "beacon_aggregate_and_proof"
|
||||||
|
TopicNameVoluntaryExit = "voluntary_exit"
|
||||||
|
TopicNameProposerSlashing = "proposer_slashing"
|
||||||
|
TopicNameAttesterSlashing = "attester_slashing"
|
||||||
|
TopicNameBlsToExecutionChange = "bls_to_execution_change"
|
||||||
|
|
||||||
|
TopicNamePrefixBlobSidecar = "blob_sidecar_"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TopicNameBlobSidecar(d int) string {
|
||||||
|
return TopicNamePrefixBlobSidecar + strconv.Itoa(d)
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsTopicBlobSidecar(d string) bool {
|
||||||
|
return strings.Contains(d, TopicNamePrefixBlobSidecar)
|
||||||
|
}
|
@ -3,10 +3,12 @@ package network
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/ledgerwatch/erigon-lib/common"
|
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/ledgerwatch/erigon-lib/common"
|
||||||
|
|
||||||
"github.com/ledgerwatch/erigon/cl/freezer"
|
"github.com/ledgerwatch/erigon/cl/freezer"
|
||||||
|
"github.com/ledgerwatch/erigon/cl/gossip"
|
||||||
"github.com/ledgerwatch/erigon/cl/phase1/forkchoice"
|
"github.com/ledgerwatch/erigon/cl/phase1/forkchoice"
|
||||||
"github.com/ledgerwatch/erigon/cl/sentinel/peers"
|
"github.com/ledgerwatch/erigon/cl/sentinel/peers"
|
||||||
|
|
||||||
@ -96,8 +98,8 @@ func (g *GossipManager) onRecv(ctx context.Context, data *sentinel.GossipData, l
|
|||||||
// If the deserialization fails, an error is logged and the loop returns to the next iteration.
|
// If the deserialization fails, an error is logged and the loop returns to the next iteration.
|
||||||
// If the deserialization is successful, the object is set to the deserialized value and the loop returns to the next iteration.
|
// If the deserialization is successful, the object is set to the deserialized value and the loop returns to the next iteration.
|
||||||
var object ssz.Unmarshaler
|
var object ssz.Unmarshaler
|
||||||
switch data.Type {
|
switch data.Name {
|
||||||
case sentinel.GossipType_BeaconBlockGossipType:
|
case gossip.TopicNameBeaconBlock:
|
||||||
object = cltypes.NewSignedBeaconBlock(g.beaconConfig)
|
object = cltypes.NewSignedBeaconBlock(g.beaconConfig)
|
||||||
if err := object.DecodeSSZ(common.CopyBytes(data.Data), int(version)); err != nil {
|
if err := object.DecodeSSZ(common.CopyBytes(data.Data), int(version)); err != nil {
|
||||||
g.sentinel.BanPeer(ctx, data.Peer)
|
g.sentinel.BanPeer(ctx, data.Peer)
|
||||||
@ -142,19 +144,19 @@ func (g *GossipManager) onRecv(ctx context.Context, data *sentinel.GossipData, l
|
|||||||
}
|
}
|
||||||
g.mu.RUnlock()
|
g.mu.RUnlock()
|
||||||
|
|
||||||
case sentinel.GossipType_VoluntaryExitGossipType:
|
case gossip.TopicNameVoluntaryExit:
|
||||||
if err := operationsContract[*cltypes.SignedVoluntaryExit](ctx, g, l, data, int(version), "voluntary exit", g.forkChoice.OnVoluntaryExit); err != nil {
|
if err := operationsContract[*cltypes.SignedVoluntaryExit](ctx, g, l, data, int(version), "voluntary exit", g.forkChoice.OnVoluntaryExit); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
case sentinel.GossipType_ProposerSlashingGossipType:
|
case gossip.TopicNameProposerSlashing:
|
||||||
if err := operationsContract[*cltypes.ProposerSlashing](ctx, g, l, data, int(version), "proposer slashing", g.forkChoice.OnProposerSlashing); err != nil {
|
if err := operationsContract[*cltypes.ProposerSlashing](ctx, g, l, data, int(version), "proposer slashing", g.forkChoice.OnProposerSlashing); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
case sentinel.GossipType_AttesterSlashingGossipType:
|
case gossip.TopicNameAttesterSlashing:
|
||||||
if err := operationsContract[*cltypes.AttesterSlashing](ctx, g, l, data, int(version), "attester slashing", g.forkChoice.OnAttesterSlashing); err != nil {
|
if err := operationsContract[*cltypes.AttesterSlashing](ctx, g, l, data, int(version), "attester slashing", g.forkChoice.OnAttesterSlashing); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
case sentinel.GossipType_BlsToExecutionChangeGossipType:
|
case gossip.TopicNameBlsToExecutionChange:
|
||||||
if err := operationsContract[*cltypes.SignedBLSToExecutionChange](ctx, g, l, data, int(version), "bls to execution change", g.forkChoice.OnBlsToExecutionChange); err != nil {
|
if err := operationsContract[*cltypes.SignedBLSToExecutionChange](ctx, g, l, data, int(version), "bls to execution change", g.forkChoice.OnBlsToExecutionChange); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -186,7 +186,7 @@ func (b *BeaconRpcP2P) PropagateBlock(block *cltypes.SignedBeaconBlock) error {
|
|||||||
}
|
}
|
||||||
_, err = b.sentinel.PublishGossip(b.ctx, &sentinel.GossipData{
|
_, err = b.sentinel.PublishGossip(b.ctx, &sentinel.GossipData{
|
||||||
Data: encoded,
|
Data: encoded,
|
||||||
Type: sentinel.GossipType_BeaconBlockGossipType,
|
Name: "beacon_block",
|
||||||
})
|
})
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
|
|
||||||
"github.com/ledgerwatch/erigon-lib/common"
|
"github.com/ledgerwatch/erigon-lib/common"
|
||||||
"github.com/ledgerwatch/erigon/cl/fork"
|
"github.com/ledgerwatch/erigon/cl/fork"
|
||||||
|
"github.com/ledgerwatch/erigon/cl/gossip"
|
||||||
"github.com/ledgerwatch/log/v3"
|
"github.com/ledgerwatch/log/v3"
|
||||||
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
||||||
"github.com/libp2p/go-libp2p/core/peer"
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
@ -36,50 +37,38 @@ var (
|
|||||||
|
|
||||||
const SSZSnappyCodec = "ssz_snappy"
|
const SSZSnappyCodec = "ssz_snappy"
|
||||||
|
|
||||||
type TopicName string
|
|
||||||
|
|
||||||
const (
|
|
||||||
BeaconBlockTopic TopicName = "beacon_block"
|
|
||||||
BeaconAggregateAndProofTopic TopicName = "beacon_aggregate_and_proof"
|
|
||||||
VoluntaryExitTopic TopicName = "voluntary_exit"
|
|
||||||
ProposerSlashingTopic TopicName = "proposer_slashing"
|
|
||||||
AttesterSlashingTopic TopicName = "attester_slashing"
|
|
||||||
BlsToExecutionChangeTopic TopicName = "bls_to_execution_change"
|
|
||||||
BlobSidecarTopic TopicName = "blob_sidecar_%d" // This topic needs an index
|
|
||||||
)
|
|
||||||
|
|
||||||
type GossipTopic struct {
|
type GossipTopic struct {
|
||||||
Name TopicName
|
Name string
|
||||||
CodecStr string
|
CodecStr string
|
||||||
}
|
}
|
||||||
|
|
||||||
var BeaconBlockSsz = GossipTopic{
|
var BeaconBlockSsz = GossipTopic{
|
||||||
Name: BeaconBlockTopic,
|
Name: gossip.TopicNameBeaconBlock,
|
||||||
CodecStr: SSZSnappyCodec,
|
CodecStr: SSZSnappyCodec,
|
||||||
}
|
}
|
||||||
|
|
||||||
var BeaconAggregateAndProofSsz = GossipTopic{
|
var BeaconAggregateAndProofSsz = GossipTopic{
|
||||||
Name: BeaconAggregateAndProofTopic,
|
Name: gossip.TopicNameBeaconAggregateAndProof,
|
||||||
CodecStr: SSZSnappyCodec,
|
CodecStr: SSZSnappyCodec,
|
||||||
}
|
}
|
||||||
|
|
||||||
var VoluntaryExitSsz = GossipTopic{
|
var VoluntaryExitSsz = GossipTopic{
|
||||||
Name: VoluntaryExitTopic,
|
Name: gossip.TopicNameVoluntaryExit,
|
||||||
CodecStr: SSZSnappyCodec,
|
CodecStr: SSZSnappyCodec,
|
||||||
}
|
}
|
||||||
|
|
||||||
var ProposerSlashingSsz = GossipTopic{
|
var ProposerSlashingSsz = GossipTopic{
|
||||||
Name: ProposerSlashingTopic,
|
Name: gossip.TopicNameProposerSlashing,
|
||||||
CodecStr: SSZSnappyCodec,
|
CodecStr: SSZSnappyCodec,
|
||||||
}
|
}
|
||||||
|
|
||||||
var AttesterSlashingSsz = GossipTopic{
|
var AttesterSlashingSsz = GossipTopic{
|
||||||
Name: AttesterSlashingTopic,
|
Name: gossip.TopicNameAttesterSlashing,
|
||||||
CodecStr: SSZSnappyCodec,
|
CodecStr: SSZSnappyCodec,
|
||||||
}
|
}
|
||||||
|
|
||||||
var BlsToExecutionChangeSsz = GossipTopic{
|
var BlsToExecutionChangeSsz = GossipTopic{
|
||||||
Name: BlsToExecutionChangeTopic,
|
Name: gossip.TopicNameBlsToExecutionChange,
|
||||||
CodecStr: SSZSnappyCodec,
|
CodecStr: SSZSnappyCodec,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,7 +94,7 @@ func NewGossipManager(
|
|||||||
func GossipSidecarTopics(maxBlobs uint64) (ret []GossipTopic) {
|
func GossipSidecarTopics(maxBlobs uint64) (ret []GossipTopic) {
|
||||||
for i := uint64(0); i < maxBlobs; i++ {
|
for i := uint64(0); i < maxBlobs; i++ {
|
||||||
ret = append(ret, GossipTopic{
|
ret = append(ret, GossipTopic{
|
||||||
Name: TopicName(fmt.Sprintf(string(BlobSidecarTopic), i)),
|
Name: gossip.TopicNameBlobSidecar(int(i)),
|
||||||
CodecStr: SSZSnappyCodec,
|
CodecStr: SSZSnappyCodec,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -204,7 +193,7 @@ func (s *Sentinel) SubscribeGossip(topic GossipTopic, opts ...pubsub.TopicOpt) (
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to join topic %s, err=%w", path, err)
|
return nil, fmt.Errorf("failed to join topic %s, err=%w", path, err)
|
||||||
}
|
}
|
||||||
topicScoreParams := s.topicScoreParams(string(topic.Name))
|
topicScoreParams := s.topicScoreParams(topic.Name)
|
||||||
if topicScoreParams != nil {
|
if topicScoreParams != nil {
|
||||||
sub.topic.SetScoreParams(topicScoreParams)
|
sub.topic.SetScoreParams(topicScoreParams)
|
||||||
}
|
}
|
||||||
@ -225,7 +214,7 @@ func (s *Sentinel) Unsubscribe(topic GossipTopic, opts ...pubsub.TopicOpt) (err
|
|||||||
|
|
||||||
func (s *Sentinel) topicScoreParams(topic string) *pubsub.TopicScoreParams {
|
func (s *Sentinel) topicScoreParams(topic string) *pubsub.TopicScoreParams {
|
||||||
switch {
|
switch {
|
||||||
case strings.Contains(topic, string(BeaconBlockTopic)):
|
case strings.Contains(topic, gossip.TopicNameBeaconBlock):
|
||||||
return s.defaultBlockTopicParams()
|
return s.defaultBlockTopicParams()
|
||||||
/*case strings.Contains(topic, GossipAggregateAndProofMessage):
|
/*case strings.Contains(topic, GossipAggregateAndProofMessage):
|
||||||
return defaultAggregateTopicParams(activeValidators), nil
|
return defaultAggregateTopicParams(activeValidators), nil
|
||||||
@ -334,14 +323,14 @@ func (s *GossipSubscription) Close() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type GossipMessage struct {
|
type GossipMessage struct {
|
||||||
From peer.ID
|
From peer.ID
|
||||||
Topic TopicName
|
TopicName string
|
||||||
Data []byte
|
Data []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is a helper to begin running the gossip subscription.
|
// this is a helper to begin running the gossip subscription.
|
||||||
// function should not be used outside of the constructor for gossip subscription
|
// function should not be used outside of the constructor for gossip subscription
|
||||||
func (s *GossipSubscription) run(ctx context.Context, sub *pubsub.Subscription, topic string) {
|
func (s *GossipSubscription) run(ctx context.Context, sub *pubsub.Subscription, topicName string) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
log.Error("[Sentinel Gossip] Message Handler Crashed", "err", r)
|
log.Error("[Sentinel Gossip] Message Handler Crashed", "err", r)
|
||||||
@ -359,16 +348,16 @@ func (s *GossipSubscription) run(ctx context.Context, sub *pubsub.Subscription,
|
|||||||
if errors.Is(err, context.Canceled) {
|
if errors.Is(err, context.Canceled) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Warn("[Sentinel] fail to decode gossip packet", "err", err, "topic", topic)
|
log.Warn("[Sentinel] fail to decode gossip packet", "err", err, "topicName", topicName)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if msg.GetFrom() == s.host {
|
if msg.GetFrom() == s.host {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
s.ch <- &GossipMessage{
|
s.ch <- &GossipMessage{
|
||||||
From: msg.GetFrom(),
|
From: msg.GetFrom(),
|
||||||
Topic: TopicName(topic),
|
TopicName: topicName,
|
||||||
Data: common.Copy(msg.Data),
|
Data: common.Copy(msg.Data),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ func TestSentinelGossipOnHardFork(t *testing.T) {
|
|||||||
|
|
||||||
ans := <-ch
|
ans := <-ch
|
||||||
require.Equal(t, ans.Data, msg)
|
require.Equal(t, ans.Data, msg)
|
||||||
previousTopic = string(ans.Topic)
|
previousTopic = ans.TopicName
|
||||||
|
|
||||||
bcfg.AltairForkEpoch = clparams.MainnetBeaconConfig.AltairForkEpoch
|
bcfg.AltairForkEpoch = clparams.MainnetBeaconConfig.AltairForkEpoch
|
||||||
bcfg.InitializeForkSchedule()
|
bcfg.InitializeForkSchedule()
|
||||||
@ -94,12 +94,12 @@ func TestSentinelGossipOnHardFork(t *testing.T) {
|
|||||||
msg = []byte("hello1")
|
msg = []byte("hello1")
|
||||||
go func() {
|
go func() {
|
||||||
// delay to make sure that the connection is established
|
// delay to make sure that the connection is established
|
||||||
sub1 = sentinel1.subManager.GetMatchingSubscription(string(BeaconBlockSsz.Name))
|
sub1 = sentinel1.subManager.GetMatchingSubscription(BeaconBlockSsz.Name)
|
||||||
sub1.Publish(msg)
|
sub1.Publish(msg)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
ans = <-ch
|
ans = <-ch
|
||||||
require.Equal(t, ans.Data, msg)
|
require.Equal(t, ans.Data, msg)
|
||||||
require.NotEqual(t, previousTopic, ans.Topic)
|
require.NotEqual(t, previousTopic, ans.TopicName)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel"
|
"github.com/ledgerwatch/erigon/cl/gossip"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -12,10 +12,9 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type gossipObject struct {
|
type gossipObject struct {
|
||||||
data []byte // gossip data
|
data []byte // gossip data
|
||||||
t sentinel.GossipType // determine which gossip message we are notifying of
|
t string // determine which gossip message we are notifying of
|
||||||
pid string // pid is the peer id of the sender
|
pid string // pid is the peer id of the sender
|
||||||
blobIndex *uint32 // index of the blob
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type gossipNotifier struct {
|
type gossipNotifier struct {
|
||||||
@ -30,7 +29,7 @@ func newGossipNotifier() *gossipNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *gossipNotifier) notify(t sentinel.GossipType, data []byte, pid string) {
|
func (g *gossipNotifier) notify(t string, data []byte, pid string) {
|
||||||
g.mu.Lock()
|
g.mu.Lock()
|
||||||
defer g.mu.Unlock()
|
defer g.mu.Unlock()
|
||||||
|
|
||||||
@ -43,18 +42,15 @@ func (g *gossipNotifier) notify(t sentinel.GossipType, data []byte, pid string)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *gossipNotifier) notifyBlob(t sentinel.GossipType, data []byte, pid string, blobIndex int) {
|
func (g *gossipNotifier) notifyBlob(data []byte, pid string, blobIndex int) {
|
||||||
g.mu.Lock()
|
g.mu.Lock()
|
||||||
defer g.mu.Unlock()
|
defer g.mu.Unlock()
|
||||||
|
|
||||||
index := new(uint32)
|
|
||||||
*index = uint32(blobIndex)
|
|
||||||
for _, ch := range g.notifiers {
|
for _, ch := range g.notifiers {
|
||||||
ch <- gossipObject{
|
ch <- gossipObject{
|
||||||
data: data,
|
data: data,
|
||||||
t: t,
|
t: gossip.TopicNameBlobSidecar(blobIndex),
|
||||||
pid: pid,
|
pid: pid,
|
||||||
blobIndex: index,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@ package service
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -13,6 +12,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ledgerwatch/erigon-lib/diagnostics"
|
"github.com/ledgerwatch/erigon-lib/diagnostics"
|
||||||
|
"github.com/ledgerwatch/erigon/cl/gossip"
|
||||||
"github.com/ledgerwatch/erigon/cl/sentinel"
|
"github.com/ledgerwatch/erigon/cl/sentinel"
|
||||||
"github.com/ledgerwatch/erigon/cl/sentinel/httpreqresp"
|
"github.com/ledgerwatch/erigon/cl/sentinel/httpreqresp"
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ func NewSentinelServer(ctx context.Context, sentinel *sentinel.Sentinel, logger
|
|||||||
// extractBlobSideCarIndex takes a topic and extract the blob sidecar
|
// extractBlobSideCarIndex takes a topic and extract the blob sidecar
|
||||||
func extractBlobSideCarIndex(topic string) int {
|
func extractBlobSideCarIndex(topic string) int {
|
||||||
// compute the index prefixless
|
// compute the index prefixless
|
||||||
startIndex := strings.Index(topic, string(sentinel.BlobSidecarTopic)) + len(sentinel.BlobSidecarTopic)
|
startIndex := strings.Index(topic, gossip.TopicNamePrefixBlobSidecar) + len(gossip.TopicNamePrefixBlobSidecar)
|
||||||
endIndex := strings.Index(topic[:startIndex], "/")
|
endIndex := strings.Index(topic[:startIndex], "/")
|
||||||
blobIndex, err := strconv.Atoi(topic[startIndex:endIndex])
|
blobIndex, err := strconv.Atoi(topic[startIndex:endIndex])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -77,28 +77,30 @@ func (s *SentinelServer) PublishGossip(_ context.Context, msg *sentinelrpc.Gossi
|
|||||||
// Snappify payload before sending it to gossip
|
// Snappify payload before sending it to gossip
|
||||||
compressedData := utils.CompressSnappy(msg.Data)
|
compressedData := utils.CompressSnappy(msg.Data)
|
||||||
|
|
||||||
s.trackPeerStatistics(msg.GetPeer().Pid, false, msg.Type.String(), "unknown", len(compressedData))
|
s.trackPeerStatistics(msg.GetPeer().Pid, false, msg.Name, "unknown", len(compressedData))
|
||||||
|
|
||||||
var subscription *sentinel.GossipSubscription
|
var subscription *sentinel.GossipSubscription
|
||||||
|
|
||||||
switch msg.Type {
|
// TODO: this is still wrong... we should build a subscription here to match exactly, meaning that downstream consumers should be
|
||||||
case sentinelrpc.GossipType_BeaconBlockGossipType:
|
// in charge of keeping track of fork id.
|
||||||
subscription = manager.GetMatchingSubscription(string(sentinel.BeaconBlockTopic))
|
switch msg.Name {
|
||||||
case sentinelrpc.GossipType_AggregateAndProofGossipType:
|
case gossip.TopicNameBeaconBlock:
|
||||||
subscription = manager.GetMatchingSubscription(string(sentinel.BeaconAggregateAndProofTopic))
|
subscription = manager.GetMatchingSubscription(msg.Name)
|
||||||
case sentinelrpc.GossipType_VoluntaryExitGossipType:
|
case gossip.TopicNameBeaconAggregateAndProof:
|
||||||
subscription = manager.GetMatchingSubscription(string(sentinel.VoluntaryExitTopic))
|
subscription = manager.GetMatchingSubscription(msg.Name)
|
||||||
case sentinelrpc.GossipType_ProposerSlashingGossipType:
|
case gossip.TopicNameVoluntaryExit:
|
||||||
subscription = manager.GetMatchingSubscription(string(sentinel.ProposerSlashingTopic))
|
subscription = manager.GetMatchingSubscription(msg.Name)
|
||||||
case sentinelrpc.GossipType_AttesterSlashingGossipType:
|
case gossip.TopicNameProposerSlashing:
|
||||||
subscription = manager.GetMatchingSubscription(string(sentinel.AttesterSlashingTopic))
|
subscription = manager.GetMatchingSubscription(msg.Name)
|
||||||
case sentinelrpc.GossipType_BlobSidecarType:
|
case gossip.TopicNameAttesterSlashing:
|
||||||
if msg.BlobIndex == nil {
|
subscription = manager.GetMatchingSubscription(msg.Name)
|
||||||
return &sentinelrpc.EmptyMessage{}, errors.New("cannot publish sidecar blob with no index")
|
|
||||||
}
|
|
||||||
subscription = manager.GetMatchingSubscription(fmt.Sprintf(string(sentinel.BlobSidecarTopic), *msg.BlobIndex))
|
|
||||||
default:
|
default:
|
||||||
return &sentinelrpc.EmptyMessage{}, nil
|
switch {
|
||||||
|
case gossip.IsTopicBlobSidecar(msg.Name):
|
||||||
|
subscription = manager.GetMatchingSubscription(msg.Name)
|
||||||
|
default:
|
||||||
|
return &sentinelrpc.EmptyMessage{}, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if subscription == nil {
|
if subscription == nil {
|
||||||
return &sentinelrpc.EmptyMessage{}, nil
|
return &sentinelrpc.EmptyMessage{}, nil
|
||||||
@ -122,11 +124,10 @@ func (s *SentinelServer) SubscribeGossip(_ *sentinelrpc.EmptyMessage, stream sen
|
|||||||
case packet := <-ch:
|
case packet := <-ch:
|
||||||
if err := stream.Send(&sentinelrpc.GossipData{
|
if err := stream.Send(&sentinelrpc.GossipData{
|
||||||
Data: packet.data,
|
Data: packet.data,
|
||||||
Type: packet.t,
|
Name: packet.t,
|
||||||
Peer: &sentinelrpc.Peer{
|
Peer: &sentinelrpc.Peer{
|
||||||
Pid: packet.pid,
|
Pid: packet.pid,
|
||||||
},
|
},
|
||||||
BlobIndex: packet.blobIndex,
|
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
s.logger.Warn("[Sentinel] Could not relay gossip packet", "reason", err)
|
s.logger.Warn("[Sentinel] Could not relay gossip packet", "reason", err)
|
||||||
}
|
}
|
||||||
@ -274,10 +275,10 @@ func (s *SentinelServer) ListenToGossip() {
|
|||||||
|
|
||||||
func (s *SentinelServer) handleGossipPacket(pkt *sentinel.GossipMessage) error {
|
func (s *SentinelServer) handleGossipPacket(pkt *sentinel.GossipMessage) error {
|
||||||
var err error
|
var err error
|
||||||
s.logger.Trace("[Sentinel Gossip] Received Packet", "topic", pkt.Topic)
|
s.logger.Trace("[Sentinel Gossip] Received Packet", "topic", pkt.TopicName)
|
||||||
|
|
||||||
data := pkt.Data
|
data := pkt.Data
|
||||||
topic := string(pkt.Topic)
|
topic := pkt.TopicName
|
||||||
// If we use snappy codec then decompress it accordingly.
|
// If we use snappy codec then decompress it accordingly.
|
||||||
if strings.Contains(topic, sentinel.SSZSnappyCodec) {
|
if strings.Contains(topic, sentinel.SSZSnappyCodec) {
|
||||||
data, err = utils.DecompressSnappy(data)
|
data, err = utils.DecompressSnappy(data)
|
||||||
@ -294,21 +295,21 @@ func (s *SentinelServer) handleGossipPacket(pkt *sentinel.GossipMessage) error {
|
|||||||
s.trackPeerStatistics(string(textPid), true, msgType, msgCap, len(data))
|
s.trackPeerStatistics(string(textPid), true, msgType, msgCap, len(data))
|
||||||
|
|
||||||
// Check to which gossip it belongs to.
|
// Check to which gossip it belongs to.
|
||||||
if strings.Contains(topic, string(sentinel.BeaconBlockTopic)) {
|
if strings.Contains(topic, string(gossip.TopicNameBeaconBlock)) {
|
||||||
s.gossipNotifier.notify(sentinelrpc.GossipType_BeaconBlockGossipType, data, string(textPid))
|
s.gossipNotifier.notify(gossip.TopicNameBeaconBlock, data, string(textPid))
|
||||||
} else if strings.Contains(topic, string(sentinel.BeaconAggregateAndProofTopic)) {
|
} else if strings.Contains(topic, string(gossip.TopicNameBeaconAggregateAndProof)) {
|
||||||
s.gossipNotifier.notify(sentinelrpc.GossipType_AggregateAndProofGossipType, data, string(textPid))
|
s.gossipNotifier.notify(gossip.TopicNameBeaconAggregateAndProof, data, string(textPid))
|
||||||
} else if strings.Contains(topic, string(sentinel.VoluntaryExitTopic)) {
|
} else if strings.Contains(topic, string(gossip.TopicNameVoluntaryExit)) {
|
||||||
s.gossipNotifier.notify(sentinelrpc.GossipType_VoluntaryExitGossipType, data, string(textPid))
|
s.gossipNotifier.notify(gossip.TopicNameVoluntaryExit, data, string(textPid))
|
||||||
} else if strings.Contains(topic, string(sentinel.ProposerSlashingTopic)) {
|
} else if strings.Contains(topic, string(gossip.TopicNameProposerSlashing)) {
|
||||||
s.gossipNotifier.notify(sentinelrpc.GossipType_ProposerSlashingGossipType, data, string(textPid))
|
s.gossipNotifier.notify(gossip.TopicNameProposerSlashing, data, string(textPid))
|
||||||
} else if strings.Contains(topic, string(sentinel.AttesterSlashingTopic)) {
|
} else if strings.Contains(topic, string(gossip.TopicNameAttesterSlashing)) {
|
||||||
s.gossipNotifier.notify(sentinelrpc.GossipType_AttesterSlashingGossipType, data, string(textPid))
|
s.gossipNotifier.notify(gossip.TopicNameAttesterSlashing, data, string(textPid))
|
||||||
} else if strings.Contains(topic, string(sentinel.BlsToExecutionChangeTopic)) {
|
} else if strings.Contains(topic, string(gossip.TopicNameBlsToExecutionChange)) {
|
||||||
s.gossipNotifier.notify(sentinelrpc.GossipType_BlsToExecutionChangeGossipType, data, string(textPid))
|
s.gossipNotifier.notify(gossip.TopicNameBlsToExecutionChange, data, string(textPid))
|
||||||
} else if strings.Contains(topic, string(sentinel.BlobSidecarTopic)) {
|
} else if gossip.IsTopicBlobSidecar(topic) {
|
||||||
// extract the index
|
// extract the index
|
||||||
s.gossipNotifier.notifyBlob(sentinelrpc.GossipType_BlobSidecarType, data, string(textPid), extractBlobSideCarIndex(topic))
|
s.gossipNotifier.notifyBlob(data, string(textPid), extractBlobSideCarIndex(topic))
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ const (
|
|||||||
//
|
//
|
||||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
|
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
|
||||||
type DownloaderClient interface {
|
type DownloaderClient interface {
|
||||||
// Erigon "download once" - means restart/upgrade will not download files (and will be fast)
|
// Erigon "download once" - means restart/upgrade/downgrade will not download files (and will be fast)
|
||||||
// After "download once" - Erigon will produce and seed new files
|
// After "download once" - Erigon will produce and seed new files
|
||||||
// Downloader will able: seed new files (already existing on FS), download uncomplete parts of existing files (if Verify found some bad parts)
|
// Downloader will able: seed new files (already existing on FS), download uncomplete parts of existing files (if Verify found some bad parts)
|
||||||
ProhibitNewDownloads(ctx context.Context, in *ProhibitNewDownloadsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
ProhibitNewDownloads(ctx context.Context, in *ProhibitNewDownloadsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||||
@ -101,7 +101,7 @@ func (c *downloaderClient) Stats(ctx context.Context, in *StatsRequest, opts ...
|
|||||||
// All implementations must embed UnimplementedDownloaderServer
|
// All implementations must embed UnimplementedDownloaderServer
|
||||||
// for forward compatibility
|
// for forward compatibility
|
||||||
type DownloaderServer interface {
|
type DownloaderServer interface {
|
||||||
// Erigon "download once" - means restart/upgrade will not download files (and will be fast)
|
// Erigon "download once" - means restart/upgrade/downgrade will not download files (and will be fast)
|
||||||
// After "download once" - Erigon will produce and seed new files
|
// After "download once" - Erigon will produce and seed new files
|
||||||
// Downloader will able: seed new files (already existing on FS), download uncomplete parts of existing files (if Verify found some bad parts)
|
// Downloader will able: seed new files (already existing on FS), download uncomplete parts of existing files (if Verify found some bad parts)
|
||||||
ProhibitNewDownloads(context.Context, *ProhibitNewDownloadsRequest) (*emptypb.Empty, error)
|
ProhibitNewDownloads(context.Context, *ProhibitNewDownloadsRequest) (*emptypb.Empty, error)
|
||||||
|
@ -21,68 +21,6 @@ const (
|
|||||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||||
)
|
)
|
||||||
|
|
||||||
type GossipType int32
|
|
||||||
|
|
||||||
const (
|
|
||||||
// Global gossip topics.
|
|
||||||
GossipType_BeaconBlockGossipType GossipType = 0
|
|
||||||
GossipType_AggregateAndProofGossipType GossipType = 1
|
|
||||||
GossipType_VoluntaryExitGossipType GossipType = 2
|
|
||||||
GossipType_ProposerSlashingGossipType GossipType = 3
|
|
||||||
GossipType_AttesterSlashingGossipType GossipType = 4
|
|
||||||
GossipType_BlobSidecarType GossipType = 5
|
|
||||||
GossipType_BlsToExecutionChangeGossipType GossipType = 6
|
|
||||||
)
|
|
||||||
|
|
||||||
// Enum value maps for GossipType.
|
|
||||||
var (
|
|
||||||
GossipType_name = map[int32]string{
|
|
||||||
0: "BeaconBlockGossipType",
|
|
||||||
1: "AggregateAndProofGossipType",
|
|
||||||
2: "VoluntaryExitGossipType",
|
|
||||||
3: "ProposerSlashingGossipType",
|
|
||||||
4: "AttesterSlashingGossipType",
|
|
||||||
5: "BlobSidecarType",
|
|
||||||
6: "BlsToExecutionChangeGossipType",
|
|
||||||
}
|
|
||||||
GossipType_value = map[string]int32{
|
|
||||||
"BeaconBlockGossipType": 0,
|
|
||||||
"AggregateAndProofGossipType": 1,
|
|
||||||
"VoluntaryExitGossipType": 2,
|
|
||||||
"ProposerSlashingGossipType": 3,
|
|
||||||
"AttesterSlashingGossipType": 4,
|
|
||||||
"BlobSidecarType": 5,
|
|
||||||
"BlsToExecutionChangeGossipType": 6,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func (x GossipType) Enum() *GossipType {
|
|
||||||
p := new(GossipType)
|
|
||||||
*p = x
|
|
||||||
return p
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x GossipType) String() string {
|
|
||||||
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (GossipType) Descriptor() protoreflect.EnumDescriptor {
|
|
||||||
return file_p2psentinel_sentinel_proto_enumTypes[0].Descriptor()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (GossipType) Type() protoreflect.EnumType {
|
|
||||||
return &file_p2psentinel_sentinel_proto_enumTypes[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x GossipType) Number() protoreflect.EnumNumber {
|
|
||||||
return protoreflect.EnumNumber(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deprecated: Use GossipType.Descriptor instead.
|
|
||||||
func (GossipType) EnumDescriptor() ([]byte, []int) {
|
|
||||||
return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
type EmptyMessage struct {
|
type EmptyMessage struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@ -173,10 +111,9 @@ type GossipData struct {
|
|||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // SSZ encoded data
|
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // SSZ encoded data
|
||||||
Type GossipType `protobuf:"varint,2,opt,name=type,proto3,enum=sentinel.GossipType" json:"type,omitempty"`
|
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
|
||||||
Peer *Peer `protobuf:"bytes,3,opt,name=peer,proto3,oneof" json:"peer,omitempty"`
|
Peer *Peer `protobuf:"bytes,3,opt,name=peer,proto3,oneof" json:"peer,omitempty"`
|
||||||
BlobIndex *uint32 `protobuf:"varint,4,opt,name=blob_index,json=blobIndex,proto3,oneof" json:"blob_index,omitempty"` // Blob identifier for EIP4844
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GossipData) Reset() {
|
func (x *GossipData) Reset() {
|
||||||
@ -218,11 +155,11 @@ func (x *GossipData) GetData() []byte {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GossipData) GetType() GossipType {
|
func (x *GossipData) GetName() string {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.Type
|
return x.Name
|
||||||
}
|
}
|
||||||
return GossipType_BeaconBlockGossipType
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GossipData) GetPeer() *Peer {
|
func (x *GossipData) GetPeer() *Peer {
|
||||||
@ -232,13 +169,6 @@ func (x *GossipData) GetPeer() *Peer {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GossipData) GetBlobIndex() uint32 {
|
|
||||||
if x != nil && x.BlobIndex != nil {
|
|
||||||
return *x.BlobIndex
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
type Status struct {
|
type Status struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@ -492,92 +422,73 @@ var file_p2psentinel_sentinel_proto_rawDesc = []byte{
|
|||||||
0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0e, 0x0a, 0x0c, 0x45, 0x6d, 0x70,
|
0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0e, 0x0a, 0x0c, 0x45, 0x6d, 0x70,
|
||||||
0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x18, 0x0a, 0x04, 0x50, 0x65, 0x65,
|
0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x18, 0x0a, 0x04, 0x50, 0x65, 0x65,
|
||||||
0x72, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
|
0x72, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
|
||||||
0x70, 0x69, 0x64, 0x22, 0xaf, 0x01, 0x0a, 0x0a, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x44, 0x61,
|
0x70, 0x69, 0x64, 0x22, 0x66, 0x0a, 0x0a, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x44, 0x61, 0x74,
|
||||||
0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
|
0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52,
|
||||||
0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02,
|
0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
|
||||||
0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e,
|
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x70, 0x65, 0x65,
|
||||||
0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65,
|
0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e,
|
||||||
0x12, 0x27, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e,
|
0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x88,
|
||||||
0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x48, 0x00,
|
0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x22, 0xcd, 0x01, 0x0a, 0x06,
|
||||||
0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x62, 0x6c, 0x6f,
|
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x64,
|
||||||
0x62, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x01, 0x52,
|
0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x66, 0x6f, 0x72,
|
||||||
0x09, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a,
|
0x6b, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c,
|
||||||
0x05, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f,
|
0x69, 0x7a, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||||
0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xcd, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0d, 0x66, 0x69,
|
||||||
0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18,
|
0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x66,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x67, 0x65, 0x73,
|
0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03,
|
||||||
0x74, 0x12, 0x32, 0x0a, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x72,
|
0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45,
|
||||||
0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65,
|
0x70, 0x6f, 0x63, 0x68, 0x12, 0x28, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x72, 0x6f, 0x6f,
|
||||||
0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0d, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65,
|
0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e,
|
||||||
0x64, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a,
|
0x48, 0x32, 0x35, 0x36, 0x52, 0x08, 0x68, 0x65, 0x61, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1b,
|
||||||
0x65, 0x64, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e,
|
0x0a, 0x09, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
|
||||||
0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x28,
|
0x04, 0x52, 0x08, 0x68, 0x65, 0x61, 0x64, 0x53, 0x6c, 0x6f, 0x74, 0x22, 0x23, 0x0a, 0x09, 0x50,
|
||||||
0x0a, 0x09, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
|
0x65, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75,
|
||||||
0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x08,
|
0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74,
|
||||||
0x68, 0x65, 0x61, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x64,
|
0x22, 0x37, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12,
|
||||||
0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x68, 0x65, 0x61,
|
0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64,
|
||||||
0x64, 0x53, 0x6c, 0x6f, 0x74, 0x22, 0x23, 0x0a, 0x09, 0x50, 0x65, 0x65, 0x72, 0x43, 0x6f, 0x75,
|
0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01,
|
||||||
0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
|
0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22, 0x5c, 0x0a, 0x0c, 0x52, 0x65, 0x73,
|
||||||
0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x37, 0x0a, 0x0b, 0x52, 0x65,
|
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74,
|
||||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74,
|
|
||||||
0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a,
|
0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a,
|
||||||
0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f,
|
0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, 0x72,
|
||||||
0x70, 0x69, 0x63, 0x22, 0x5c, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44,
|
0x72, 0x6f, 0x72, 0x12, 0x22, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||||
0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28,
|
0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65,
|
||||||
0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
|
0x72, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x32, 0x90, 0x04, 0x0a, 0x08, 0x53, 0x65, 0x6e, 0x74,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x22, 0x0a,
|
0x69, 0x6e, 0x65, 0x6c, 0x12, 0x41, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62,
|
||||||
0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65,
|
0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x12, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e,
|
||||||
0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x04, 0x70, 0x65, 0x65,
|
0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a,
|
||||||
0x72, 0x2a, 0xde, 0x01, 0x0a, 0x0a, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65,
|
0x14, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x6f, 0x73, 0x73, 0x69,
|
||||||
0x12, 0x19, 0x0a, 0x15, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x47,
|
0x70, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x3c, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x52,
|
||||||
0x6f, 0x73, 0x73, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x41,
|
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65,
|
||||||
0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66,
|
0x6c, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x16, 0x2e,
|
||||||
0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17,
|
0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x47, 0x6f, 0x73,
|
0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x35, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74,
|
||||||
0x73, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65, 0x10, 0x02, 0x12, 0x1e, 0x0a, 0x1a, 0x50, 0x72, 0x6f,
|
0x75, 0x73, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x53, 0x74,
|
||||||
0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x47, 0x6f, 0x73,
|
0x61, 0x74, 0x75, 0x73, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e,
|
||||||
0x73, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x74, 0x74,
|
0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x08,
|
||||||
0x65, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x47, 0x6f, 0x73,
|
0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69,
|
||||||
0x73, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x6c, 0x6f,
|
0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
|
||||||
0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x54, 0x79, 0x70, 0x65, 0x10, 0x05, 0x12, 0x22,
|
0x1a, 0x13, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72,
|
||||||
0x0a, 0x1e, 0x42, 0x6c, 0x73, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
|
0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x42, 0x61, 0x6e, 0x50, 0x65, 0x65, 0x72,
|
||||||
0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65,
|
|
||||||
0x10, 0x06, 0x32, 0x90, 0x04, 0x0a, 0x08, 0x53, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x12,
|
|
||||||
0x41, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x47, 0x6f, 0x73, 0x73,
|
|
||||||
0x69, 0x70, 0x12, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d,
|
|
||||||
0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x6e,
|
|
||||||
0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x44, 0x61, 0x74, 0x61,
|
|
||||||
0x30, 0x01, 0x12, 0x3c, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
|
||||||
0x74, 0x12, 0x15, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x71,
|
|
||||||
0x75, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69,
|
|
||||||
0x6e, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61,
|
|
||||||
0x12, 0x35, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x2e,
|
|
||||||
0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a,
|
|
||||||
0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
|
|
||||||
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x65,
|
|
||||||
0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45,
|
|
||||||
0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x13, 0x2e, 0x73, 0x65,
|
|
||||||
0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74,
|
|
||||||
0x12, 0x31, 0x0a, 0x07, 0x42, 0x61, 0x6e, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x73, 0x65,
|
|
||||||
0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x1a, 0x16, 0x2e, 0x73, 0x65,
|
|
||||||
0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73,
|
|
||||||
0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x50, 0x65, 0x65, 0x72,
|
|
||||||
0x12, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72,
|
0x12, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72,
|
||||||
0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74,
|
0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74,
|
||||||
0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x0c, 0x50, 0x65, 0x6e, 0x61,
|
0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x55, 0x6e, 0x62, 0x61,
|
||||||
0x6c, 0x69, 0x7a, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69,
|
0x6e, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c,
|
||||||
0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69,
|
0x2e, 0x50, 0x65, 0x65, 0x72, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c,
|
||||||
0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
|
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a,
|
||||||
0x12, 0x34, 0x0a, 0x0a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0e,
|
0x0c, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0e, 0x2e,
|
||||||
0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x1a, 0x16,
|
0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x1a, 0x16, 0x2e,
|
||||||
0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d,
|
|
||||||
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73,
|
|
||||||
0x68, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e,
|
|
||||||
0x65, 0x6c, 0x2e, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x16, 0x2e,
|
|
||||||
0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65,
|
0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65,
|
||||||
0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x15, 0x5a, 0x13, 0x2e, 0x2f, 0x73, 0x65, 0x6e, 0x74, 0x69,
|
0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50,
|
||||||
0x6e, 0x65, 0x6c, 0x3b, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x62, 0x06, 0x70, 0x72,
|
0x65, 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50,
|
||||||
0x6f, 0x74, 0x6f, 0x33,
|
0x65, 0x65, 0x72, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45,
|
||||||
|
0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0d, 0x50,
|
||||||
|
0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x12, 0x14, 0x2e, 0x73,
|
||||||
|
0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x44, 0x61,
|
||||||
|
0x74, 0x61, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d,
|
||||||
|
0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x15, 0x5a, 0x13, 0x2e, 0x2f,
|
||||||
|
0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x3b, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65,
|
||||||
|
0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -592,48 +503,45 @@ func file_p2psentinel_sentinel_proto_rawDescGZIP() []byte {
|
|||||||
return file_p2psentinel_sentinel_proto_rawDescData
|
return file_p2psentinel_sentinel_proto_rawDescData
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_p2psentinel_sentinel_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
|
||||||
var file_p2psentinel_sentinel_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
|
var file_p2psentinel_sentinel_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
|
||||||
var file_p2psentinel_sentinel_proto_goTypes = []interface{}{
|
var file_p2psentinel_sentinel_proto_goTypes = []interface{}{
|
||||||
(GossipType)(0), // 0: sentinel.GossipType
|
(*EmptyMessage)(nil), // 0: sentinel.EmptyMessage
|
||||||
(*EmptyMessage)(nil), // 1: sentinel.EmptyMessage
|
(*Peer)(nil), // 1: sentinel.Peer
|
||||||
(*Peer)(nil), // 2: sentinel.Peer
|
(*GossipData)(nil), // 2: sentinel.GossipData
|
||||||
(*GossipData)(nil), // 3: sentinel.GossipData
|
(*Status)(nil), // 3: sentinel.Status
|
||||||
(*Status)(nil), // 4: sentinel.Status
|
(*PeerCount)(nil), // 4: sentinel.PeerCount
|
||||||
(*PeerCount)(nil), // 5: sentinel.PeerCount
|
(*RequestData)(nil), // 5: sentinel.RequestData
|
||||||
(*RequestData)(nil), // 6: sentinel.RequestData
|
(*ResponseData)(nil), // 6: sentinel.ResponseData
|
||||||
(*ResponseData)(nil), // 7: sentinel.ResponseData
|
(*types.H256)(nil), // 7: types.H256
|
||||||
(*types.H256)(nil), // 8: types.H256
|
|
||||||
}
|
}
|
||||||
var file_p2psentinel_sentinel_proto_depIdxs = []int32{
|
var file_p2psentinel_sentinel_proto_depIdxs = []int32{
|
||||||
0, // 0: sentinel.GossipData.type:type_name -> sentinel.GossipType
|
1, // 0: sentinel.GossipData.peer:type_name -> sentinel.Peer
|
||||||
2, // 1: sentinel.GossipData.peer:type_name -> sentinel.Peer
|
7, // 1: sentinel.Status.finalized_root:type_name -> types.H256
|
||||||
8, // 2: sentinel.Status.finalized_root:type_name -> types.H256
|
7, // 2: sentinel.Status.head_root:type_name -> types.H256
|
||||||
8, // 3: sentinel.Status.head_root:type_name -> types.H256
|
1, // 3: sentinel.ResponseData.peer:type_name -> sentinel.Peer
|
||||||
2, // 4: sentinel.ResponseData.peer:type_name -> sentinel.Peer
|
0, // 4: sentinel.Sentinel.SubscribeGossip:input_type -> sentinel.EmptyMessage
|
||||||
1, // 5: sentinel.Sentinel.SubscribeGossip:input_type -> sentinel.EmptyMessage
|
5, // 5: sentinel.Sentinel.SendRequest:input_type -> sentinel.RequestData
|
||||||
6, // 6: sentinel.Sentinel.SendRequest:input_type -> sentinel.RequestData
|
3, // 6: sentinel.Sentinel.SetStatus:input_type -> sentinel.Status
|
||||||
4, // 7: sentinel.Sentinel.SetStatus:input_type -> sentinel.Status
|
0, // 7: sentinel.Sentinel.GetPeers:input_type -> sentinel.EmptyMessage
|
||||||
1, // 8: sentinel.Sentinel.GetPeers:input_type -> sentinel.EmptyMessage
|
1, // 8: sentinel.Sentinel.BanPeer:input_type -> sentinel.Peer
|
||||||
2, // 9: sentinel.Sentinel.BanPeer:input_type -> sentinel.Peer
|
1, // 9: sentinel.Sentinel.UnbanPeer:input_type -> sentinel.Peer
|
||||||
2, // 10: sentinel.Sentinel.UnbanPeer:input_type -> sentinel.Peer
|
1, // 10: sentinel.Sentinel.PenalizePeer:input_type -> sentinel.Peer
|
||||||
2, // 11: sentinel.Sentinel.PenalizePeer:input_type -> sentinel.Peer
|
1, // 11: sentinel.Sentinel.RewardPeer:input_type -> sentinel.Peer
|
||||||
2, // 12: sentinel.Sentinel.RewardPeer:input_type -> sentinel.Peer
|
2, // 12: sentinel.Sentinel.PublishGossip:input_type -> sentinel.GossipData
|
||||||
3, // 13: sentinel.Sentinel.PublishGossip:input_type -> sentinel.GossipData
|
2, // 13: sentinel.Sentinel.SubscribeGossip:output_type -> sentinel.GossipData
|
||||||
3, // 14: sentinel.Sentinel.SubscribeGossip:output_type -> sentinel.GossipData
|
6, // 14: sentinel.Sentinel.SendRequest:output_type -> sentinel.ResponseData
|
||||||
7, // 15: sentinel.Sentinel.SendRequest:output_type -> sentinel.ResponseData
|
0, // 15: sentinel.Sentinel.SetStatus:output_type -> sentinel.EmptyMessage
|
||||||
1, // 16: sentinel.Sentinel.SetStatus:output_type -> sentinel.EmptyMessage
|
4, // 16: sentinel.Sentinel.GetPeers:output_type -> sentinel.PeerCount
|
||||||
5, // 17: sentinel.Sentinel.GetPeers:output_type -> sentinel.PeerCount
|
0, // 17: sentinel.Sentinel.BanPeer:output_type -> sentinel.EmptyMessage
|
||||||
1, // 18: sentinel.Sentinel.BanPeer:output_type -> sentinel.EmptyMessage
|
0, // 18: sentinel.Sentinel.UnbanPeer:output_type -> sentinel.EmptyMessage
|
||||||
1, // 19: sentinel.Sentinel.UnbanPeer:output_type -> sentinel.EmptyMessage
|
0, // 19: sentinel.Sentinel.PenalizePeer:output_type -> sentinel.EmptyMessage
|
||||||
1, // 20: sentinel.Sentinel.PenalizePeer:output_type -> sentinel.EmptyMessage
|
0, // 20: sentinel.Sentinel.RewardPeer:output_type -> sentinel.EmptyMessage
|
||||||
1, // 21: sentinel.Sentinel.RewardPeer:output_type -> sentinel.EmptyMessage
|
0, // 21: sentinel.Sentinel.PublishGossip:output_type -> sentinel.EmptyMessage
|
||||||
1, // 22: sentinel.Sentinel.PublishGossip:output_type -> sentinel.EmptyMessage
|
13, // [13:22] is the sub-list for method output_type
|
||||||
14, // [14:23] is the sub-list for method output_type
|
4, // [4:13] is the sub-list for method input_type
|
||||||
5, // [5:14] is the sub-list for method input_type
|
4, // [4:4] is the sub-list for extension type_name
|
||||||
5, // [5:5] is the sub-list for extension type_name
|
4, // [4:4] is the sub-list for extension extendee
|
||||||
5, // [5:5] is the sub-list for extension extendee
|
0, // [0:4] is the sub-list for field type_name
|
||||||
0, // [0:5] is the sub-list for field type_name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_p2psentinel_sentinel_proto_init() }
|
func init() { file_p2psentinel_sentinel_proto_init() }
|
||||||
@ -733,14 +641,13 @@ func file_p2psentinel_sentinel_proto_init() {
|
|||||||
File: protoimpl.DescBuilder{
|
File: protoimpl.DescBuilder{
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_p2psentinel_sentinel_proto_rawDesc,
|
RawDescriptor: file_p2psentinel_sentinel_proto_rawDesc,
|
||||||
NumEnums: 1,
|
NumEnums: 0,
|
||||||
NumMessages: 7,
|
NumMessages: 7,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 1,
|
NumServices: 1,
|
||||||
},
|
},
|
||||||
GoTypes: file_p2psentinel_sentinel_proto_goTypes,
|
GoTypes: file_p2psentinel_sentinel_proto_goTypes,
|
||||||
DependencyIndexes: file_p2psentinel_sentinel_proto_depIdxs,
|
DependencyIndexes: file_p2psentinel_sentinel_proto_depIdxs,
|
||||||
EnumInfos: file_p2psentinel_sentinel_proto_enumTypes,
|
|
||||||
MessageInfos: file_p2psentinel_sentinel_proto_msgTypes,
|
MessageInfos: file_p2psentinel_sentinel_proto_msgTypes,
|
||||||
}.Build()
|
}.Build()
|
||||||
File_p2psentinel_sentinel_proto = out.File
|
File_p2psentinel_sentinel_proto = out.File
|
||||||
|
2
go.mod
2
go.mod
@ -5,7 +5,6 @@ go 1.20
|
|||||||
require (
|
require (
|
||||||
github.com/erigontech/mdbx-go v0.27.21
|
github.com/erigontech/mdbx-go v0.27.21
|
||||||
github.com/erigontech/silkworm-go v0.10.0
|
github.com/erigontech/silkworm-go v0.10.0
|
||||||
github.com/ledgerwatch/erigon-lib v1.0.0
|
|
||||||
github.com/ledgerwatch/log/v3 v3.9.0
|
github.com/ledgerwatch/log/v3 v3.9.0
|
||||||
github.com/ledgerwatch/secp256k1 v1.0.0
|
github.com/ledgerwatch/secp256k1 v1.0.0
|
||||||
)
|
)
|
||||||
@ -58,6 +57,7 @@ require (
|
|||||||
github.com/json-iterator/go v1.1.12
|
github.com/json-iterator/go v1.1.12
|
||||||
github.com/julienschmidt/httprouter v1.3.0
|
github.com/julienschmidt/httprouter v1.3.0
|
||||||
github.com/klauspost/compress v1.17.3
|
github.com/klauspost/compress v1.17.3
|
||||||
|
github.com/ledgerwatch/erigon-lib v1.0.0
|
||||||
github.com/libp2p/go-libp2p v0.31.0
|
github.com/libp2p/go-libp2p v0.31.0
|
||||||
github.com/libp2p/go-libp2p-mplex v0.9.0
|
github.com/libp2p/go-libp2p-mplex v0.9.0
|
||||||
github.com/libp2p/go-libp2p-pubsub v0.9.3
|
github.com/libp2p/go-libp2p-pubsub v0.9.3
|
||||||
|
Loading…
Reference in New Issue
Block a user