Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Implements a solution for blacklisting nodes at the UDP level.
The
UDPTransportService
class is the defaulttransport
layer used by discv5 to interact with UDP sockets.This class can be constructed with an object called
RateLimiter
. Iftransport.rateLimiter
exists,transport.handleIncomingPacket
will checkrateLimiter.allowEncodedPacket
before processing incoming packets.This PR introduces a custom
RateLimiter
which will maintain a set of blacklisted IP addresses. Whentranport.handleIncomingPacket
callsrateLimiter.allowEncodedPacket
, theRateLimiter
will check this set of blacklisted IP addresses before allowing the packet to be processed.This now allows us to blacklist peers on the UDP level.
Previously, Ultralight could add a peer to
routingTable.ignored
, which prevents us from sending new requests to peers that have been unresponsive.RateLimiter
allows us to block incoming messages from banned peers.Currently the timeout for blacklisting is set at 24 hours.