mirror of
https://github.com/QuilibriumNetwork/ceremonyclient.git
synced 2026-02-21 10:27:26 +08:00
* blossomsub: Remove unused mutex * blossomsub: Add RPC queue * blossomsub: Use RPC queue * blossomsub: Add IDONTWANT control message to protos * blossomsub: Add IDONTWANT tracing support * blossomsub: Add pre-validation * blossomsub: Add IDONTWANT feature flag * blossomsub: Add IDONTWANT parameters * blossomsub: Add IDONTWANT observability * blossomsub: Send IDONTWANT control messages * blossomsub: Handle IDONTWANT control messages * blossomsub: Clear maps efficiently * blossomsub: Increase IDONTWANT parameter defaults * blossomsub: Do not send IDONTWANT to original sender * blossomsub: Add IDONTWANT unit tests
57 lines
1.7 KiB
Go
57 lines
1.7 KiB
Go
package blossomsub
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/libp2p/go-libp2p/core/protocol"
|
|
)
|
|
|
|
// BlossomSubFeatureTest is a feature test function; it takes a feature and a protocol ID and
|
|
// should return true if the feature is supported by the protocol
|
|
type BlossomSubFeatureTest = func(BlossomSubFeature, protocol.ID) bool
|
|
|
|
// BlossomSubFeature is a feature discriminant enum
|
|
type BlossomSubFeature int
|
|
|
|
const (
|
|
// Protocol supports basic BlossomSub Mesh -- BlossomSub-v2 compatible
|
|
BlossomSubFeatureMesh = iota
|
|
// Protocol supports Peer eXchange on prune -- BlossomSub-v2 compatible
|
|
BlossomSubFeaturePX
|
|
// Protocol supports IDONTWANT -- BlossomSub-v2.1 compatible
|
|
BlossomSubFeatureIdontwant
|
|
)
|
|
|
|
// BlossomSubDefaultProtocols is the default BlossomSub router protocol list
|
|
var BlossomSubDefaultProtocols = []protocol.ID{BlossomSubID_v21, BlossomSubID_v2}
|
|
|
|
// BlossomSubDefaultFeatures is the feature test function for the default BlossomSub protocols
|
|
func BlossomSubDefaultFeatures(feat BlossomSubFeature, proto protocol.ID) bool {
|
|
switch feat {
|
|
case BlossomSubFeatureMesh:
|
|
return proto == BlossomSubID_v21 || proto == BlossomSubID_v2
|
|
case BlossomSubFeaturePX:
|
|
return proto == BlossomSubID_v21 || proto == BlossomSubID_v2
|
|
case BlossomSubFeatureIdontwant:
|
|
return proto == BlossomSubID_v21
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// WithBlossomSubProtocols is a BlossomSub router option that configures a custom protocol list
|
|
// and feature test function
|
|
func WithBlossomSubProtocols(protos []protocol.ID, feature BlossomSubFeatureTest) Option {
|
|
return func(ps *PubSub) error {
|
|
gs, ok := ps.rt.(*BlossomSubRouter)
|
|
if !ok {
|
|
return fmt.Errorf("pubsub router is not BlossomSub")
|
|
}
|
|
|
|
gs.protos = protos
|
|
gs.feature = feature
|
|
|
|
return nil
|
|
}
|
|
}
|