peer score parameters

This commit is contained in:
vyzo 2020-03-07 15:46:41 +02:00
parent 31a279b9f0
commit a02c4136b1
1 changed files with 68 additions and 3 deletions

View File

@ -1,17 +1,82 @@
package pubsub
import (
"time"
"github.com/libp2p/go-libp2p-core/peer"
"github.com/libp2p/go-libp2p-core/protocol"
)
type peerScore struct {
}
type PeerScoreParams struct {
// Score parameters per topic.
Topics map[string]*TopicScoreParams
// P6: IP-colocation factor.
// The parameter has an associated counter which counts the number of peers with the same IP.
// If the number of peers in the same IP exceeds IPColocationFactorThreshold, then the value
// is the square of the difference, ie (PeersInSameIP - IPColocationThreshold)^2.
// If the number of peers in the same IP is less than the threshold, then the value is 0.
// The weight of the parameter MUST be negative, unless you want to disable for testing.
// Note: In order to simulate many IPs in a managable manner when testing, you can set the weight to 0
// thus disabling the IP colocation penalty.
IPColocationFactorWeight float64
IPColocationFactorThreshold int
// Application-specific peer scoring
AppSpecificScore func(p peer.ID) float64
AppSpecificWeight float64
// the decay interval for parameter counters.
DecayInterval time.Duration
// counter value below which it is considered 0.
DecayToZero float64
// time to remember counters for a disconnected peer.
RetainScore time.Duration
}
type TopicScoreParams struct {
// The weight of the topic.
TopicWeight float64
// P1: time in the mesh
// This is the time the peer has ben grafted in the mesh.
// The value of of the parameter is the time/TimeInMeshQuantum, capped by TimeInMeshCap
// The weight of the parameter MUST be positive.
TimeInMeshWeight float64
TimeInMeshQuantum time.Duration
TimeInMeshCap int
// P2: first message deliveries
// This is the number of message deliveries in the topic.
// The value of the parameter is a counter, decaying with FirstMessageDeliveriesDecay, and capped
// by FirstMessageDeliveriesCap.
// The weight of the parameter MUST be positive.
FirstMessageDeliveriesWeight, FirstMessageDeliveriesDecay float64
FirstMessageDeliveriesCap int
// P3: mesh message deliveries
// This is the number of message deliveries in the mesh, within the MeshMessageDeliveriesLatency of
// the first message delivery.
// The parameter has an associated counter, decaying with MessageMessageDeliveriesDecay.
// If the counter exceeds the threshold, its value is 0.
// If the counter is below the MeshMessageDeliveriesThreshold, the value is the square of
// the deficit, ie (MessageDeliveriesThreshold - counter)^2
// The penalty is only activated after MeshMessageDeliveriesActivation time in the mesh.
// The weight of the parameter MUST be negative.
MeshMessageDeliveriesWeight, MeshMessageDeliveriesDecay float64
MeshMessageDeliveriesThreshold int
MeshMessageDeliveriesLatency, MeshMessageDeliveriesActivation time.Duration
// P4: invalid messages
// This is the number of invalid messages in the topic.
// The value of the parameter is a counter, decaying with InvalidMessageDeliveriesDecay.
// The weight of the parameter MUST be negative.
InvalidMessageDeliveriesWeight, InvalidMessageDeliveriesDecay float64
}
type peerScore struct {
}
func newPeerScore(gs *GossipSubRouter, params *PeerScoreParams) *peerScore {