Datamesh is a secure, decentralized data storage layer built in Rust using the libp2p protocol. It enables users to register, upload, download, and manage files with strong privacy guarantees. Users authenticate using ed25519 cryptographic keys, ensuring secure access to their data. It uses a peer-to-peer network to store and share data, ensuring privacy and security. The platform is built using Rust and leverages the Tokio runtime for asynchronous operations. It supports user registration, file uploads , and secure downloads with signature verification. The Protocol uses ed25519 for public key cryptography to ensure the integrity and authenticity of data transfers. This Protocol uses libp2p for peer-to-peer networking, allowing nodes to communicate and share data efficiently. The Protocols uses in this project are GossipSub for message propagation and Request-Response for direct communication. kademlia is used for distributed hash table (DHT) functionality, enabling efficient data retrieval and storage across the network.
A command-line interface (CLI) tool written in Rust, provides an intuitive way to interact with the Datamesh protocol. It allows users to register, upload, and download files securely. The client uses ed25519 for public key cryptography to ensure the integrity and authenticity of data transfers. It interacts with the DataMesh server via HTTP requests, sending and receiving data in JSON format. The client supports user registration, file uploads, and downloads, handling cryptographic signatures for secure operations.
Watch a quick demo of the Datamesh Client in action:
Click the image above to view the demo video.
- Secure Authentication: Users register and authenticate using ed25519 key pairs for robust cryptographic security.
- Private File Storage: Upload and download files, ensuring data privacy (Currently integrating the Security).
- Decentralized Architecture: Leverages libp2p for peer-to-peer networking, enabling resilient and distributed data storage.
- CLI Tool: The Datamesh Client offers a simple, powerful interface to interact with the protocol.
- Rust (stable, version 1.65 or higher) and Cargo
libp2pdependencies (automatically managed via Cargo)- A compatible operating system (Windows, macOS, or Linux)
Install Rust and Cargo using rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/envClone the repository and build the CLI tool:
git clone https://github.com/kr1s0147/datamesh.git
cd datamesh
cargo build --bin datamesh --release The compiled binary will be available at ./target/release/datamesh.
For the datamesh-client
git clone https://github.com/kr1s0147/datamesh.git
cd datamesh
cargo build --bin datamesh-client --release The compiled binary will be available at ./target/release/datamesh-client.
Generate an ed25519 key pair and register with the Datamesh network:
./datamesh-client register --private_Key <privatekey> --URL <RPC_URL>Upload a file to the Datamesh storage layer:
./datamesh-client upload --file <path-to-file> --private_key <private-key> --URL <RPC_URL>The file is encrypted using your ed25519 key and stored across the libp2p network.
Retrieve a file from the Datamesh network:
./datamesh-client download --file-id <file-id> --private_Key <private-key> --output <path-to-save> --URL <RPC_URL>The file is decrypted using your private key and saved to the specified location.
- ed25519 Keys: Datamesh uses ed25519 for signing and verifying transactions, ensuring secure authentication and data integrity.
- libp2p Networking: Utilizes libp2p’s peer-to-peer protocols for secure, decentralized communication.
- Key Management: Store your private key securely. Loss of the private key will result in permanent loss of access to your files.
- Protocol: Built in Rust using the libp2p framework for peer-to-peer communication.
- Cryptography: Leverages
ed25519-dalekfor key generation and signing. - Storage: Files are sharded and distributed across the libp2p network with encryption.
You can run nodes at your local network , you can span different port numbers for the different addresses. Steps:
./datamesh Enter Node Number:./datamesh Enter Boot address:Leave 3 option with NA , if it is bootnode(firstnode)
For questions or support, reach out to me at:
- Email: [email protected]
