Search in sources :

Example 1 with STRICT_FIELDS_VALIDATOR

use of tech.pegasys.teku.networking.p2p.libp2p.gossip.LibP2PGossipNetwork.STRICT_FIELDS_VALIDATOR in project teku by ConsenSys.

the class LibP2PGossipNetworkBuilder method createGossip.

protected Gossip createGossip(GossipConfig gossipConfig, boolean gossipLogsEnabled, PreparedGossipMessageFactory defaultMessageFactory, GossipTopicFilter gossipTopicFilter, GossipTopicHandlers topicHandlers) {
    final GossipParams gossipParams = LibP2PParamsFactory.createGossipParams(gossipConfig);
    final GossipScoreParams scoreParams = LibP2PParamsFactory.createGossipScoreParams(gossipConfig.getScoringConfig());
    final TopicSubscriptionFilter subscriptionFilter = new MaxCountTopicSubscriptionFilter(MAX_SUBSCIPTIONS_PER_MESSAGE, MAX_SUBSCRIBED_TOPICS, gossipTopicFilter::isRelevantTopic);
    GossipRouter router = new GossipRouter(gossipParams, scoreParams, PubsubProtocol.Gossip_V_1_1, subscriptionFilter) {

        final SeenCache<Optional<ValidationResult>> seenCache = new TTLSeenCache<>(new FastIdSeenCache<>(msg -> Bytes.wrap(Hash.sha256(msg.getProtobufMessage().getData().toByteArray()))), gossipParams.getSeenTTL(), getCurTimeMillis());

        @NotNull
        @Override
        protected SeenCache<Optional<ValidationResult>> getSeenMessages() {
            return seenCache;
        }
    };
    router.setMessageFactory(msg -> {
        Preconditions.checkArgument(msg.getTopicIDsCount() == 1, "Unexpected number of topics for a single message: " + msg.getTopicIDsCount());
        String topic = msg.getTopicIDs(0);
        Bytes payload = Bytes.wrap(msg.getData().toByteArray());
        PreparedGossipMessage preparedMessage = topicHandlers.getHandlerForTopic(topic).map(handler -> handler.prepareMessage(payload)).orElse(defaultMessageFactory.create(topic, payload));
        return new PreparedPubsubMessage(msg, preparedMessage);
    });
    router.setMessageValidator(STRICT_FIELDS_VALIDATOR);
    if (gossipLogsEnabled) {
        if (debugGossipHandler != null) {
            throw new IllegalStateException("Adding more than 1 gossip debug handlers is not implemented yet");
        }
        debugGossipHandler = new LoggingHandler("wire.gossip", LogLevel.DEBUG);
    }
    PubsubApi pubsubApi = PubsubApiKt.createPubsubApi(router);
    return new Gossip(router, pubsubApi, debugGossipHandler);
}
Also used : MAX_SUBSCIPTIONS_PER_MESSAGE(tech.pegasys.teku.networking.p2p.libp2p.config.LibP2PParamsFactory.MAX_SUBSCIPTIONS_PER_MESSAGE) PubsubApi(io.libp2p.core.pubsub.PubsubApi) LoggingHandler(io.netty.handler.logging.LoggingHandler) GossipConfig(tech.pegasys.teku.networking.p2p.gossip.config.GossipConfig) NULL_SEQNO_GENERATOR(tech.pegasys.teku.networking.p2p.libp2p.gossip.LibP2PGossipNetwork.NULL_SEQNO_GENERATOR) GossipParams(io.libp2p.pubsub.gossip.GossipParams) GossipScoreParams(io.libp2p.pubsub.gossip.GossipScoreParams) Bytes(org.apache.tuweni.bytes.Bytes) SeenCache(io.libp2p.pubsub.SeenCache) STRICT_FIELDS_VALIDATOR(tech.pegasys.teku.networking.p2p.libp2p.gossip.LibP2PGossipNetwork.STRICT_FIELDS_VALIDATOR) MaxCountTopicSubscriptionFilter(io.libp2p.pubsub.MaxCountTopicSubscriptionFilter) Gossip(io.libp2p.pubsub.gossip.Gossip) PreparedGossipMessageFactory(tech.pegasys.teku.networking.p2p.gossip.PreparedGossipMessageFactory) LibP2PParamsFactory(tech.pegasys.teku.networking.p2p.libp2p.config.LibP2PParamsFactory) TTLSeenCache(io.libp2p.pubsub.TTLSeenCache) FastIdSeenCache(io.libp2p.pubsub.FastIdSeenCache) TopicSubscriptionFilter(io.libp2p.pubsub.TopicSubscriptionFilter) ValidationResult(io.libp2p.core.pubsub.ValidationResult) PubsubPublisherApi(io.libp2p.core.pubsub.PubsubPublisherApi) PubsubProtocol(io.libp2p.pubsub.PubsubProtocol) Hash(tech.pegasys.teku.infrastructure.crypto.Hash) LogLevel(io.netty.handler.logging.LogLevel) GossipRouter(io.libp2p.pubsub.gossip.GossipRouter) PreparedGossipMessage(tech.pegasys.teku.networking.p2p.gossip.PreparedGossipMessage) Optional(java.util.Optional) Preconditions(com.google.common.base.Preconditions) ChannelHandler(io.netty.channel.ChannelHandler) PubsubApiKt(io.libp2p.core.pubsub.PubsubApiKt) MetricsSystem(org.hyperledger.besu.plugin.services.MetricsSystem) NotNull(org.jetbrains.annotations.NotNull) GossipScoreParams(io.libp2p.pubsub.gossip.GossipScoreParams) LoggingHandler(io.netty.handler.logging.LoggingHandler) Optional(java.util.Optional) PreparedGossipMessage(tech.pegasys.teku.networking.p2p.gossip.PreparedGossipMessage) GossipRouter(io.libp2p.pubsub.gossip.GossipRouter) MaxCountTopicSubscriptionFilter(io.libp2p.pubsub.MaxCountTopicSubscriptionFilter) SeenCache(io.libp2p.pubsub.SeenCache) TTLSeenCache(io.libp2p.pubsub.TTLSeenCache) FastIdSeenCache(io.libp2p.pubsub.FastIdSeenCache) FastIdSeenCache(io.libp2p.pubsub.FastIdSeenCache) MaxCountTopicSubscriptionFilter(io.libp2p.pubsub.MaxCountTopicSubscriptionFilter) TopicSubscriptionFilter(io.libp2p.pubsub.TopicSubscriptionFilter) ValidationResult(io.libp2p.core.pubsub.ValidationResult) Bytes(org.apache.tuweni.bytes.Bytes) Gossip(io.libp2p.pubsub.gossip.Gossip) GossipParams(io.libp2p.pubsub.gossip.GossipParams) PubsubApi(io.libp2p.core.pubsub.PubsubApi)

Aggregations

Preconditions (com.google.common.base.Preconditions)1 PubsubApi (io.libp2p.core.pubsub.PubsubApi)1 PubsubApiKt (io.libp2p.core.pubsub.PubsubApiKt)1 PubsubPublisherApi (io.libp2p.core.pubsub.PubsubPublisherApi)1 ValidationResult (io.libp2p.core.pubsub.ValidationResult)1 FastIdSeenCache (io.libp2p.pubsub.FastIdSeenCache)1 MaxCountTopicSubscriptionFilter (io.libp2p.pubsub.MaxCountTopicSubscriptionFilter)1 PubsubProtocol (io.libp2p.pubsub.PubsubProtocol)1 SeenCache (io.libp2p.pubsub.SeenCache)1 TTLSeenCache (io.libp2p.pubsub.TTLSeenCache)1 TopicSubscriptionFilter (io.libp2p.pubsub.TopicSubscriptionFilter)1 Gossip (io.libp2p.pubsub.gossip.Gossip)1 GossipParams (io.libp2p.pubsub.gossip.GossipParams)1 GossipRouter (io.libp2p.pubsub.gossip.GossipRouter)1 GossipScoreParams (io.libp2p.pubsub.gossip.GossipScoreParams)1 ChannelHandler (io.netty.channel.ChannelHandler)1 LogLevel (io.netty.handler.logging.LogLevel)1 LoggingHandler (io.netty.handler.logging.LoggingHandler)1 Optional (java.util.Optional)1 Bytes (org.apache.tuweni.bytes.Bytes)1