Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Networking] GossipSub Spam Mitigation- Dynamic Decay Speed #4891

Merged
merged 57 commits into from
Nov 29, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
b8b378b
update initial spam record decay
kc1116 Oct 26, 2023
a454e9e
add test for new decay adjustment
kc1116 Oct 27, 2023
d291107
add validation flag to ensure InitDecayUpperBound is greater than In…
kc1116 Oct 27, 2023
95a7daf
Update registry_test.go
kc1116 Oct 27, 2023
89f5e4f
Update config/config_test.go
kc1116 Nov 6, 2023
acf5a2b
Update network/p2p/scoring/registry_test.go
kc1116 Nov 6, 2023
9b167db
Update network/p2p/scoring/scoring_test.go
kc1116 Nov 6, 2023
d27a7ef
Update network/p2p/p2pbuilder/gossipsub/gossipSubBuilder.go
kc1116 Nov 6, 2023
3515c95
Update network/p2p/p2pbuilder/libp2pNodeBuilder.go
kc1116 Nov 6, 2023
ad725a1
Update network/p2p/p2pbuilder/libp2pNodeBuilder.go
kc1116 Nov 6, 2023
e8b04b1
Update network/p2p/test/fixtures.go
kc1116 Nov 6, 2023
5d1dfbe
use camel case
kc1116 Nov 6, 2023
96a9976
Merge branch 'khalil/6662-peer-id-specific-decay' of github.com:onflo…
kc1116 Nov 6, 2023
4eac1ba
Merge branch 'master' of github.com:onflow/flow-go into khalil/6662-p…
kc1116 Nov 6, 2023
8b90530
use secure random
kc1116 Nov 6, 2023
d21749f
Update registry.go
kc1116 Nov 6, 2023
a8cb8f3
Merge branch 'master' into khalil/6662-peer-id-specific-decay
kc1116 Nov 6, 2023
268f384
Update network/p2p/scoring/registry.go
kc1116 Nov 13, 2023
d8bf4b5
Update network/p2p/scoring/registry.go
kc1116 Nov 13, 2023
4892ccc
revert changes to init spam record func
kc1116 Nov 13, 2023
4971ee6
Merge branch 'khalil/6662-peer-id-specific-decay' of github.com:onflo…
kc1116 Nov 13, 2023
5b9394e
use config instead of params
kc1116 Nov 14, 2023
5c7bf31
combine both decay pre-processing funcs into a single func
kc1116 Nov 14, 2023
6434b88
update remote
kc1116 Nov 20, 2023
fae328f
update scoring registry replace can adjust decay with decay adjust in…
kc1116 Nov 21, 2023
e282d6c
Merge branch 'master' of github.com:onflow/flow-go into khalil/6662-p…
kc1116 Nov 21, 2023
1cf963a
fix lint
kc1116 Nov 21, 2023
66b9644
update godoc
kc1116 Nov 21, 2023
071b072
update godoc
kc1116 Nov 21, 2023
fe69da7
Merge branch 'khalil/6662-peer-id-specific-decay' of github.com:onflo…
kc1116 Nov 21, 2023
f75f01d
simplify node builder arguments
kc1116 Nov 29, 2023
2cb6c1d
Update config/default-config.yml
kc1116 Nov 29, 2023
a8d5bd0
Update config/default-config.yml
kc1116 Nov 29, 2023
8973fac
Update config/default-config.yml
kc1116 Nov 29, 2023
df0d214
Merge branch 'khalil/6662-peer-id-specific-decay' of github.com:onflo…
kc1116 Nov 29, 2023
ec804cf
update flags
kc1116 Nov 29, 2023
1e7374f
Update config/default-config.yml
kc1116 Nov 29, 2023
2865935
Update config/default-config.yml
kc1116 Nov 29, 2023
ba1cc07
Update config/default-config.yml
kc1116 Nov 29, 2023
e07c3e0
Update follower/follower_builder.go
kc1116 Nov 29, 2023
5c2cce3
update flag descriptions
kc1116 Nov 29, 2023
349aaf2
Update network/p2p/cache.go
kc1116 Nov 29, 2023
7b08807
remove gt=-100, validator
kc1116 Nov 29, 2023
8816679
remove custom validator
kc1116 Nov 29, 2023
b72cbce
Update network/p2p/scoring/decay_test.go
kc1116 Nov 29, 2023
70ae578
Update network/p2p/scoring/decay_test.go
kc1116 Nov 29, 2023
689eb47
Update network/p2p/scoring/decay_test.go
kc1116 Nov 29, 2023
9ee6388
Update network/p2p/scoring/decay_test.go
kc1116 Nov 29, 2023
28ec6c4
Update network/p2p/test/fixtures.go
kc1116 Nov 29, 2023
9ae267f
rename MinimumSpamPenaltyDecaySpeed -> MinimumSpamPenaltyDecayFactor …
kc1116 Nov 29, 2023
640ef41
check peer application specific scores upon initialization
kc1116 Nov 29, 2023
8885c1c
ensure peer score decay can be reduced again after recovering
kc1116 Nov 29, 2023
33fc0c4
Merge branch 'khalil/6662-peer-id-specific-decay' of github.com:onflo…
kc1116 Nov 29, 2023
eafd434
improve tests check decay value on each callback iteration
kc1116 Nov 29, 2023
1998a1b
Merge branch 'master' into khalil/6662-peer-id-specific-decay
kc1116 Nov 29, 2023
dffc321
fix lint
kc1116 Nov 29, 2023
fb346e0
Merge branch 'master' of github.com:onflow/flow-go into khalil/6662-p…
kc1116 Nov 29, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions cmd/access/node_builder/access_node_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -1544,15 +1544,17 @@ func (builder *FlowAccessNodeBuilder) initPublicLibp2pNode(networkKey crypto.Pri
}
meshTracer := tracer.NewGossipSubMeshTracer(meshTracerCfg)

libp2pNode, err := p2pbuilder.NewNodeBuilder(builder.Logger, &p2pconfig.MetricsConfig{
HeroCacheFactory: builder.HeroCacheMetricsFactory(),
Metrics: networkMetrics,
},
libp2pNode, err := p2pbuilder.NewNodeBuilder(builder.Logger,
&p2pconfig.MetricsConfig{
HeroCacheFactory: builder.HeroCacheMetricsFactory(),
Metrics: networkMetrics,
},
network.PublicNetwork,
bindAddress,
networkKey,
builder.SporkID,
builder.IdentityProvider,
builder.FlowConfig.NetworkConfig.GossipSubConfig.GossipSubScoringRegistryConfig,
&builder.FlowConfig.NetworkConfig.ResourceManagerConfig,
&builder.FlowConfig.NetworkConfig.GossipSubConfig.GossipSubRPCInspectorsConfig,
&p2pconfig.PeerManagerConfig{
Expand Down
7 changes: 3 additions & 4 deletions cmd/observer/node_builder/observer_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -708,8 +708,7 @@ func (builder *ObserverServiceBuilder) initPublicLibp2pNode(networkKey crypto.Pr
}
meshTracer := tracer.NewGossipSubMeshTracer(meshTracerCfg)

node, err := p2pbuilder.NewNodeBuilder(
builder.Logger,
node, err := p2pbuilder.NewNodeBuilder(builder.Logger,
&p2pconfig.MetricsConfig{
HeroCacheFactory: builder.HeroCacheMetricsFactory(),
Metrics: builder.Metrics.Network,
Expand All @@ -719,10 +718,10 @@ func (builder *ObserverServiceBuilder) initPublicLibp2pNode(networkKey crypto.Pr
networkKey,
builder.SporkID,
builder.IdentityProvider,
builder.FlowConfig.NetworkConfig.GossipSubConfig.GossipSubScoringRegistryConfig,
&builder.FlowConfig.NetworkConfig.ResourceManagerConfig,
&builder.FlowConfig.NetworkConfig.GossipSubConfig.GossipSubRPCInspectorsConfig,
p2pconfig.PeerManagerDisableConfig(), // disable peer manager for observer node.
&p2p.DisallowListCacheConfig{
p2pconfig.PeerManagerDisableConfig(), &p2p.DisallowListCacheConfig{
MaxSize: builder.FlowConfig.NetworkConfig.DisallowListNotificationCacheSize,
Metrics: metrics.DisallowListCacheMetricsFactory(builder.HeroCacheMetricsFactory(), network.PublicNetwork),
},
Expand Down
11 changes: 11 additions & 0 deletions config/default-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,17 @@ network-config:
gossipsub-rpc-metrics-inspector-workers: 1
# The size of the queue used by worker pool for the control message metrics inspector
gossipsub-rpc-metrics-inspector-cache-size: 100
# The lower bound on the decay value for a spam record when initialized.
# A random value in a range of InitDecayLowerBound and InitDecayUpperBound is used when initializing the decay
# of a spam record.
gossipsub-scoring-registry-init-decay-lowerbound: .5
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
gossipsub-scoring-registry-init-decay-lowerbound: .5
gossipsub-scoring-registry-init-decay-lower-bound: .5

# The upper bound on the decay value for a spam record when initialized.
gossipsub-scoring-registry-init-decay-upperbound: .7
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
gossipsub-scoring-registry-init-decay-upperbound: .7
gossipsub-scoring-registry-init-decay-upper-bound: .7

# The threshold for which when the negative penalty is below this value the decay threshold will be increased by some amount. This will
# lead to malicious nodes having longer decays while honest nodes will have faster decays.
gossipsub-scoring-registry-increase-decay-threshold: -99
# The amount the decay will be increased when the negative penalty score falls below the IncreaseDecayThreshold.
gossipsub-scoring-registry-decay-threshold-incrementer: .01
# Application layer spam prevention
alsp-spam-record-cache-size: 10e3
alsp-spam-report-queue-size: 10e4
Expand Down
9 changes: 4 additions & 5 deletions follower/follower_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -586,20 +586,19 @@ func (builder *FollowerServiceBuilder) initPublicLibp2pNode(networkKey crypto.Pr
}
meshTracer := tracer.NewGossipSubMeshTracer(meshTracerCfg)

node, err := p2pbuilder.NewNodeBuilder(
builder.Logger,
node, err := p2pbuilder.NewNodeBuilder(builder.Logger,
&p2pconfig.MetricsConfig{
HeroCacheFactory: builder.HeroCacheMetricsFactory(),
Metrics: builder.Metrics.Network,
},
network.PublicNetwork,
builder.BaseConfig.BindAddr,
networkKey,
builder.SporkID,
networkKey, builder.SporkID,
kc1116 marked this conversation as resolved.
Show resolved Hide resolved
builder.IdentityProvider,
builder.FlowConfig.NetworkConfig.GossipSubConfig.GossipSubScoringRegistryConfig,
&builder.FlowConfig.NetworkConfig.ResourceManagerConfig,
&builder.FlowConfig.NetworkConfig.GossipSubConfig.GossipSubRPCInspectorsConfig,
p2pconfig.PeerManagerDisableConfig(), // disable peer manager for follower
p2pconfig.PeerManagerDisableConfig(),
&p2p.DisallowListCacheConfig{
MaxSize: builder.FlowConfig.NetworkConfig.DisallowListNotificationCacheSize,
Metrics: metrics.DisallowListCacheMetricsFactory(builder.HeroCacheMetricsFactory(), network.PublicNetwork),
Expand Down
1 change: 1 addition & 0 deletions network/internal/p2pfixtures/fixtures.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ func CreateNode(t *testing.T, networkKey crypto.PrivateKey, sporkID flow.Identif
networkKey,
sporkID,
idProvider,
defaultFlowConfig.NetworkConfig.GossipSubConfig.GossipSubScoringRegistryConfig,
&defaultFlowConfig.NetworkConfig.ResourceManagerConfig,
&defaultFlowConfig.NetworkConfig.GossipSubRPCInspectorsConfig,
p2pconfig.PeerManagerDisableConfig(),
Expand Down
15 changes: 15 additions & 0 deletions network/netconf/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ const (
metricsInspectorNumberOfWorkers = "gossipsub-rpc-metrics-inspector-workers"
metricsInspectorCacheSize = "gossipsub-rpc-metrics-inspector-cache-size"

// gossipsub scoring registry
scoringRegistryInitDecayLowerbound = "gossipsub-scoring-registry-init-decay-lowerbound"
scoringRegistryInitDecayUpperbound = "gossipsub-scoring-registry-init-decay-upperbound"
scoringRegistryIncreaseDecayThreshold = "gossipsub-scoring-registry-increase-decay-threshold"
scoringRegistryDecayThresholdIncrementer = "gossipsub-scoring-registry-decay-threshold-incrementer"

alspDisabled = "alsp-disable-penalty"
alspSpamRecordCacheSize = "alsp-spam-record-cache-size"
alspSpamRecordQueueSize = "alsp-spam-report-queue-size"
Expand Down Expand Up @@ -138,6 +144,10 @@ func AllFlagNames() []string {
controlMessageMaxSampleSize,
iwantDuplicateMsgIDThreshold,
iwantCacheMissCheckSize,
scoringRegistryInitDecayLowerbound,
scoringRegistryInitDecayUpperbound,
scoringRegistryIncreaseDecayThreshold,
scoringRegistryDecayThresholdIncrementer,
}
}

Expand Down Expand Up @@ -216,6 +226,11 @@ func InitializeNetworkFlags(flags *pflag.FlagSet, config *Config) {
flags.Float64(iwantCacheMissThreshold, config.GossipSubConfig.GossipSubRPCInspectorsConfig.GossipSubRPCValidationInspectorConfigs.IWantRPCInspectionConfig.CacheMissThreshold, "max number of iwants to sample when performing validation")
flags.Int(iwantCacheMissCheckSize, config.GossipSubConfig.GossipSubRPCInspectorsConfig.GossipSubRPCValidationInspectorConfigs.IWantRPCInspectionConfig.CacheMissCheckSize, "the iWants size at which message id cache misses will be checked")
flags.Float64(iwantDuplicateMsgIDThreshold, config.GossipSubConfig.GossipSubRPCInspectorsConfig.GossipSubRPCValidationInspectorConfigs.IWantRPCInspectionConfig.DuplicateMsgIDThreshold, "max allowed duplicate message IDs in a single iWant control message")

flags.Float64(scoringRegistryInitDecayLowerbound, config.GossipSubConfig.GossipSubScoringRegistryConfig.InitDecayLowerBound, "the lower bound on the decay value for a spam record when initialized")
flags.Float64(scoringRegistryInitDecayUpperbound, config.GossipSubConfig.GossipSubScoringRegistryConfig.InitDecayUpperBound, "the upper bound on the decay value for a spam record when initialized")
flags.Float64(scoringRegistryIncreaseDecayThreshold, config.GossipSubConfig.GossipSubScoringRegistryConfig.IncreaseDecayThreshold, "the threshold for which when the negative penalty is below this value the decay threshold will be increased by some amount")
flags.Float64(scoringRegistryDecayThresholdIncrementer, config.GossipSubConfig.GossipSubScoringRegistryConfig.DecayThresholdIncrementer, "the amount the decay will be increased when the negative penalty score falls below the IncreaseDecayThreshold")
}

// SetAliases this func sets an aliases for each CLI flag defined for network config overrides to it's corresponding
Expand Down
16 changes: 5 additions & 11 deletions network/p2p/p2pbuilder/gossipsub/gossipSubBuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ type Builder struct {
subscriptionFilter pubsub.SubscriptionFilter
gossipSubFactory p2p.GossipSubFactoryFunc
gossipSubConfigFunc p2p.GossipSubAdapterConfigFunc
gossipSubPeerScoring bool // whether to enable gossipsub peer scoring
gossipSubPeerScoring bool // whether to enable gossipsub peer scoring
scoringRegistryConfig p2pconf.GossipSubScoringRegistryConfig
gossipSubScoreTracerInterval time.Duration // the interval at which the gossipsub score tracer logs the peer scores.
// gossipSubTracer is a callback interface that is called by the gossipsub implementation upon
// certain events. Currently, we use it to log and observe the local mesh of the node.
Expand Down Expand Up @@ -177,15 +178,7 @@ func (g *Builder) OverrideDefaultRpcInspectorSuiteFactory(factory p2p.GossipSubR
// Returns:
// - a new gossipsub builder.
// Note: the builder is not thread-safe. It should only be used in the main thread.
func NewGossipSubBuilder(
logger zerolog.Logger,
metricsCfg *p2pconfig.MetricsConfig,
networkType network.NetworkingType,
sporkId flow.Identifier,
idProvider module.IdentityProvider,
rpcInspectorConfig *p2pconf.GossipSubRPCInspectorsConfig,
rpcTracker p2p.RpcControlTracking,
) *Builder {
func NewGossipSubBuilder(logger zerolog.Logger, metricsCfg *p2pconfig.MetricsConfig, networkType network.NetworkingType, sporkId flow.Identifier, idProvider module.IdentityProvider, scoringRegistryConfig p2pconf.GossipSubScoringRegistryConfig, rpcInspectorConfig *p2pconf.GossipSubRPCInspectorsConfig, rpcTracker p2p.RpcControlTracking) *Builder {
kc1116 marked this conversation as resolved.
Show resolved Hide resolved
lg := logger.With().
Str("component", "gossipsub").
Str("network-type", networkType.String()).
Expand All @@ -199,6 +192,7 @@ func NewGossipSubBuilder(
idProvider: idProvider,
gossipSubFactory: defaultGossipSubFactory(),
gossipSubConfigFunc: defaultGossipSubAdapterConfig(),
scoringRegistryConfig: scoringRegistryConfig,
scoreOptionConfig: scoring.NewScoreOptionConfig(lg, idProvider),
rpcInspectorConfig: rpcInspectorConfig,
rpcInspectorSuiteFactory: defaultInspectorSuite(rpcTracker),
Expand Down Expand Up @@ -327,7 +321,7 @@ func (g *Builder) Build(ctx irrecoverable.SignalerContext) (p2p.PubSubAdapter, e
var scoreTracer p2p.PeerScoreTracer
if g.gossipSubPeerScoring {
g.scoreOptionConfig.SetRegisterNotificationConsumerFunc(inspectorSuite.AddInvalidControlMessageConsumer)
scoreOpt = scoring.NewScoreOption(g.scoreOptionConfig)
scoreOpt = scoring.NewScoreOption(g.scoringRegistryConfig, g.scoreOptionConfig)
gossipSubConfigs.WithScoreOption(scoreOpt)

if g.gossipSubScoreTracerInterval > 0 {
Expand Down
31 changes: 3 additions & 28 deletions network/p2p/p2pbuilder/libp2pNodeBuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,21 +75,7 @@ type LibP2PNodeBuilder struct {
networkingType flownet.NetworkingType // whether the node is running in private (staked) or public (unstaked) network
}

func NewNodeBuilder(
logger zerolog.Logger,
metricsConfig *p2pconfig.MetricsConfig,
networkingType flownet.NetworkingType,
address string,
networkKey fcrypto.PrivateKey,
sporkId flow.Identifier,
idProvider module.IdentityProvider,
rCfg *p2pconf.ResourceManagerConfig,
rpcInspectorCfg *p2pconf.GossipSubRPCInspectorsConfig,
peerManagerConfig *p2pconfig.PeerManagerConfig,
disallowListCacheCfg *p2p.DisallowListCacheConfig,
rpcTracker p2p.RpcControlTracking,
unicastConfig *p2pconfig.UnicastConfig,
) *LibP2PNodeBuilder {
func NewNodeBuilder(logger zerolog.Logger, metricsConfig *p2pconfig.MetricsConfig, networkingType flownet.NetworkingType, address string, networkKey fcrypto.PrivateKey, sporkId flow.Identifier, idProvider module.IdentityProvider, scoringRegistryConfig p2pconf.GossipSubScoringRegistryConfig, rCfg *p2pconf.ResourceManagerConfig, rpcInspectorCfg *p2pconf.GossipSubRPCInspectorsConfig, peerManagerConfig *p2pconfig.PeerManagerConfig, disallowListCacheCfg *p2p.DisallowListCacheConfig, rpcTracker p2p.RpcControlTracking, unicastConfig *p2pconfig.UnicastConfig) *LibP2PNodeBuilder {
kc1116 marked this conversation as resolved.
Show resolved Hide resolved
return &LibP2PNodeBuilder{
logger: logger,
sporkId: sporkId,
Expand All @@ -105,6 +91,7 @@ func NewNodeBuilder(
networkingType,
sporkId,
idProvider,
scoringRegistryConfig,
rpcInspectorCfg,
rpcTracker),
peerManagerConfig: peerManagerConfig,
Expand Down Expand Up @@ -477,19 +464,7 @@ func DefaultNodeBuilder(
}
meshTracer := tracer.NewGossipSubMeshTracer(meshTracerCfg)

builder := NewNodeBuilder(logger,
metricsCfg,
networkingType,
address,
flowKey,
sporkId,
idProvider,
rCfg,
rpcInspectorCfg,
peerManagerCfg,
disallowListCacheCfg,
meshTracer,
uniCfg).
builder := NewNodeBuilder(logger, metricsCfg, networkingType, address, flowKey, sporkId, idProvider, gossipCfg.GossipSubScoringRegistryConfig, rCfg, rpcInspectorCfg, peerManagerCfg, disallowListCacheCfg, meshTracer, uniCfg).
kc1116 marked this conversation as resolved.
Show resolved Hide resolved
SetBasicResolver(resolver).
SetConnectionManager(connManager).
SetConnectionGater(connGater).
Expand Down
18 changes: 18 additions & 0 deletions network/p2p/p2pconf/gossipsub.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,28 @@ type GossipSubConfig struct {
// GossipSubTracerConfig is the configuration for the gossipsub tracer. GossipSub tracer is used to trace the local mesh events and peer scores.
GossipSubTracerConfig `mapstructure:",squash"`

// GossipSubScoringRegistryConfig is the configuration for the GossipSub score registry.
GossipSubScoringRegistryConfig `mapstructure:",squash"`

// PeerScoring is whether to enable GossipSub peer scoring.
PeerScoring bool `mapstructure:"gossipsub-peer-scoring-enabled"`
}

// GossipSubScoringRegistryConfig is the configuration for the GossipSub score registry.
type GossipSubScoringRegistryConfig struct {
// InitDecayLowerBound is the lower bound on the decay value for a spam record when initialized.
// A random value in a range of InitDecayLowerBound and InitDecayUpperBound is used when initializing the decay
// of a spam record.
InitDecayLowerBound float64 `validate:"gt=0" mapstructure:"gossipsub-scoring-registry-init-decay-lowerbound"`
// InitDecayUpperBound is the upper bound on the decay value for a spam record when initialized.
InitDecayUpperBound float64 `validate:"lt=1" mapstructure:"gossipsub-scoring-registry-init-decay-upperbound"`
// IncreaseDecayThreshold is the threshold for which when the negative penalty is below this value the decay threshold will be increased by some amount. This will
// lead to malicious nodes having longer decays while honest nodes will have faster decays.
IncreaseDecayThreshold float64 `validate:"gt=0" mapstructure:"gossipsub-scoring-registry-increase-decay-threshold"`
// DecayThresholdIncrementer is the amount the decay will be increased when the negative penalty score falls below the IncreaseDecayThreshold.
DecayThresholdIncrementer float64 `validate:"gt=-100,lt=0" mapstructure:"gossipsub-scoring-registry-decay-threshold-incrementer"`
}

// GossipSubTracerConfig is the config for the gossipsub tracer. GossipSub tracer is used to trace the local mesh events and peer scores.
type GossipSubTracerConfig struct {
// LocalMeshLogInterval is the interval at which the local mesh is logged.
Expand Down
Loading