Crates.io | mainline |
lib.rs | mainline |
version | 4.1.0 |
source | src |
created_at | 2023-09-27 06:08:02.272576 |
updated_at | 2024-11-29 15:19:01.875972 |
description | Simple, robust, BitTorrent's Mainline DHT implementation |
homepage | https://github.com/pubky/mainline |
repository | https://github.com/pubky/mainline |
max_upload_size | |
id | 984305 |
size | 368,042 |
Simple, robust, BitTorrent's Mainline DHT implementation.
This library is focused on being the best and simplest Rust client for Mainline, especially focused on reliable and fast time-to-first-response.
It should work as a routing / storing node as well, and has been running in production for many months without an issue. However if you are running your separate (read: small) DHT, or otherwise facing unusual DoS attack, you should consider implementing rate limiting.
Check the Examples.
Running as a client, means you can store and query for values on the DHT, but not accept any incoming requests.
use mainline::Dht;
let dht = Dht::client(); // or `Dht::default();`
Supported BEPs:
This implementation also includes measures against Vertical Sybil Attacks.
Running as a server is the same as a client, but you also respond to incoming requests and serve as a routing and storing node, supporting the general routing of the DHT, and contributing to the storage capacity of the DHT.
use mainline::Dht;
let dht = Dht::server(); // or `Dht::builder::server().build();` for more control.
Supported BEPs:
The default server implementation has no rate-limiting, you can run your own custom server and apply your custom rate-limiting. However, that limit/block will only apply after parsing incoming messages, and it won't affect handling incoming responses.
This implementation was possible thanks to Webtorrent's Bittorrent-dht as a reference, and Rustydht-lib that saved me a lot of time, especially at the serialization and deserialization of Bencode messages.