High-performance P2P Swarm implementation in C/Python with Signed RPC and IPC
Project description
KadePy
High-Performance Kademlia DHT Implementation for Python
KadePy is a robust and efficient Distributed Hash Table (DHT) library implementing the Kademlia protocol. It combines a high-performance C extension core for network handling and routing with a user-friendly Python wrapper.
Features
- High Performance: Core logic (UDP reactor, routing table, storage, protocol) implemented in C for minimal overhead and maximum throughput.
- Cross-Platform: Fully compatible with Windows, Linux, and macOS.
- Secure:
- Uses ChaCha20 for optional packet encryption.
- Implements secure random number generation (
BCryptGenRandomon Windows,/dev/urandomon POSIX).
- Concurrency: Thread-safe architecture with a dedicated network reactor thread, releasing the GIL whenever possible.
- Easy to Use: Simple Python API for creating nodes, storing values, and finding peers.
Installation
From Source
git clone https://github.com/ON00dev/KadePy.git
cd KadePy
pip install .
Requirements
- Python 3.10+
- C Compiler (GCC/Clang on Linux/macOS, MSVC on Windows)
Quick Start
Basic Node
from kadepy import Swarm
import time
# Create a node on a random port
node = Swarm()
print(f"Node started on port {node.port}")
# Create another node to bootstrap
bootstrap_node = Swarm(port=8000)
print("Bootstrap node on port 8000")
# Bootstrap the first node
node.bootstrap("127.0.0.1", 8000)
# Announce a topic (hash)
topic_hash = b'\x00' * 32 # 32-byte hash
node.announce(topic_hash, node.port)
# Find peers for the topic
peers = node.get_peers(topic_hash)
print("Found peers:", peers)
# Keep alive
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("Stopping...")
IPC Bridge & Node.js Integration
KadePy includes an IPC bridge (kadepy.ipc) that allows external processes to interact with the DHT via standard input/output (stdio) using JSON-RPC 2.0. This is useful for integrating KadePy with applications written in other languages like Node.js.
Starting the IPC Bridge
You can run the IPC bridge directly:
python -m kadepy.ipc
It listens for JSON-RPC requests on stdin and emits JSON-RPC responses/events on stdout.
Node.js Client Example
An example Node.js client is provided in examples/node_client.js. It spawns the Python process and communicates via pipes.
const { spawn } = require('child_process');
const child = spawn('python', ['-m', 'kadepy.ipc']);
// Send a Ping request
const req = {
jsonrpc: "2.0",
method: "ping",
params: { ip: "127.0.0.1", port: 8000 },
id: 1
};
child.stdin.write(JSON.stringify(req) + "\n");
// Listen for responses
child.stdout.on('data', (data) => {
console.log("Received:", data.toString());
});
Supported methods: ping, find_node, announce, get_peers, start.
Architecture
KadePy follows a hybrid architecture:
-
C Extension (
_core):- UDP Reactor: Handles non-blocking socket I/O using
select(or platform specific polling). - Protocol: Implements Kademlia message serialization/deserialization.
- Routing: Manages K-Buckets and node lookups.
- Storage: In-memory key-value storage with expiration.
- Crypto: ChaCha20 encryption and secure RNG.
- UDP Reactor: Handles non-blocking socket I/O using
-
Python Wrapper (
Swarm):- Provides a high-level API.
- Manages the C reactor lifecycle.
- Handles bootstrapping and iterative lookups.
Contributing
Contributions are welcome! Please check out the CONTRIBUTING.md guide for details.
- Fork the project.
- Create your feature branch (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -m 'Add some AmazingFeature'). - Push to the branch (
git push origin feature/AmazingFeature). - Open a Pull Request.
License
Distributed under the MIT License. See LICENSE for more information.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kadepy-0.2.0.tar.gz.
File metadata
- Download URL: kadepy-0.2.0.tar.gz
- Upload date:
- Size: 28.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05151a1051627e26397114d9fb380e6e538c4861850c6f7581813f4c83d56cad
|
|
| MD5 |
c59f5b72dfb6d13dd8724ba755716761
|
|
| BLAKE2b-256 |
5013dd47fc69e6ccff59086c1c18ede2b5ff3680818fe851f6773daeab10390e
|
File details
Details for the file kadepy-0.2.0-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: kadepy-0.2.0-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 22.5 kB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26937e39a88daa8801819b1a7c141a50b3b0e5fa28697d9d61dbf8b33d1cf6c6
|
|
| MD5 |
928e28feaf98f9b066ba36f1d1a232aa
|
|
| BLAKE2b-256 |
4b7595a4cb6e5a82d45f2f033a430e37b7d55021bec5a0e15239d8fb407a86c0
|