[caplin] topic strings (#9000)

This commit is contained in:
a 2023-12-30 09:55:01 -06:00 committed by GitHub
parent 510d62ab8a
commit 78bb3cdca8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 213 additions and 338 deletions

View File

@ -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
View 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)
}

View File

@ -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
} }

View File

@ -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
} }

View File

@ -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),
} }
} }
} }

View File

@ -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)
} }

View File

@ -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,
} }
} }
} }

View File

@ -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
} }

View File

@ -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)

View File

@ -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
View File

@ -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