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);
}
Aggregations